msp430与A7105实现单工通信
void A7105_Config(void);
void A7105_Cal(void);
void RxPacket(void);
void StrobeCmd(uint);
void SetCH(uint);
void WaitBit_0(uint,uint);
void SelVCOBand(uint,uint);
void initRF(void);
void Init_Clk(void);
void Init_Timer(void);
void init_IO(void);
void init_uart(void);
//================================================================
//====================================================================
//stdio.c 文件
//功能:初始化,及功能函数
//代码:
//=======================================================================
//delays,延时函数
void delays(unsigned int z)
{
unsigned int a;
for(a=0;a
//========================================================================
//指示灯
//说明,主板灯亮,从不亮
void init_zhishi(uint src)
{
P4DIR=0X04;
if(src)
P4OUT |=0X04;
else
P4OUT &=0X00;
}
//===============================================================================
//============================================================================
//uart,串口通信
void init_uart(void)
{
UCTL0=SWRST;
UTCTL0=SSEL0;
//在1MHZ下进行2400波特率通信
//波特调整
UBR00 = 0x0D;
UBR10 = 0x00;
UMCTL0 = 0x6B;
UCTL0 |=CHAR;
ME1 |=UTXE0 +URXE0;
P3SEL |=0x30;
P3DIR |=0x10;
UCTL0 &= ~SWRST; //初始化
IE1 |=URXIE0;
do
{
IFG1 &=~OFIFG;
delays(5000);
}
while(IFG1 & OFIFG !=0);
}
//=============================================================================
//I/O初始化
void init_IO(void)
{
P2DIR |=SCS |SCK | SDIO;
P2DIR &=~GPIO1;
P2DIR &=~GPIO2;
}
//=================================================================
//===================================================================
// 时钟模块晶振初始化
voidInit_Clk()
{
inti;
do
{
BCSCTL1&=~XT2OFF;//turn on XT2
IFG1&=~OFIFG;//high frequency crystal is stable
for(i=0; i < 2000; i++)
{}
}while((IFG1 & OFIFG) !=0);
//MClk=6M / 1=6M ;
//SMClk=6M / 8=750K
BCSCTL2|=SELM_2 + divM_0 + SELS + divS_3;
}
//===================================================================
//====================================================================
void Init_Timer()
{
TACTL=TBSSEL_2+MC_1+TACLR;
TACCTL0=CCIE;
TACCR0=750;
}
void init_uartRX()
{ uint i;
for(i=0;i<64;i++)
{
while(!(IFG1 & UTXIFG0));
TXBUF0 =tmpbuf[i];
while(!(IFG1 & UTXIFG0));
TXBUF0=\n;
delays(50000);
}
}
//==============================================================
//功能,Reset_RF
void A7105_Reset(void)
{
A7105_WriteReg(MODE_REG,0x00);
}
//=============================================================
//=============================================================
//功能,WriteID,并检测
void A7105_WriteID(void)
{
uint i;
uint d1,d2,d3,d4;
uint addr;
addr=IDCODE_REG;//send adress 0x60
P2OUT &=~SCS;
ByteSend(addr);
for(i=0;i<4;i++)
ByteSend(ID_Tab[i]);
P2OUT |=SCS;
//FOR CHECK
addr=IDCODE_REG |0x40;
P2OUT &=~SCS;
ByteSend(addr);
d1=ByteRead();
d2=ByteRead();
d3=ByteRead();
d4=ByteRead();
P2OUT |=SCS;
}
//==================================================================
//=================================================================
//功能,对Control Register 写入
void A7105_WriteReg(uint addr,uint dataByte)
{
uint i;
P2OUT&=~SCS;
addr |=0x00;
P2DIR |=SDIO;
for(i=0;i<8;i++)
{
if(addr & 0x80)
{
P2OUT|=SDIO;
}
else
{
P2OUT &=~SDIO;
}
P2OUT |=SCK;
_NOP();
P2OUT &=~SCK;
addr=addr<1;
}
_NOP();
for(i=0;i<8;i++)
{
if(dataByte & 0x80)
P2OUT |=SDIO;
else
P2OUT &=~SDIO;
P2OUT |=SCK;
_NOP();
P2OUT &=~SCK;
dataByte=dataByte<1;
}
P2OUT |=SCS;
}
//===================================================================
//==================================================================
uint A7105_ReadReg(uint addr)
{
uint i;
uint tmp;
P2DIR |=SDIO;
P2OUT &=~SCS;
addr |=0x40;
for(i=0;i<8;i++)
{
if(addr & 0x80)
P2OUT |=SDIO;
else
P2OUT &=~SDIO;
_NOP();
P2OUT |=SCK;
_NOP();
P2OUT &=~SCK;
addr=addr<1;
}
_NOP();
P2DIR &=~SDIO;
//FOR READ DA
for(i=0;i<8;i++)
{
if(P2OUT & 0x20 )
tmp=(tmp<1) | 0x01;
else
tmp=tmp<1;
P2OUT |=SCK;
_NOP();
P2OUT &=~SCK;
}
P2OUT |=SCS;
return tmp;
msp430A7105单工通 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)