|
unsigned char SPI_Read(void)
{
unsigned char i,temp=0;
RF4432_SCLK_0;
delay_nus(1);
for(i=0;i<8;i++)
{
temp<<=1;
RF4432_SCLK_1;
delay_nus(1);
if (RF4432_SDO) //读取最高位,保存至最末尾,通过左移位完成整个字节
temp |= 0x01;
RF4432_SCLK_0;
delay_nus(1);
}
RF4432_SCLK_0;
delay_nus(1);
return temp;
}
void SPI_Write(unsigned char txdata)
{
unsigned char i;
RF4432_SCLK_0;
delay_nus(1);
for(i=0;i<8;i++)
{
RF4432_SCLK_0;
if(0x80&txdata)
RF4432_SDI_1;
else RF4432_SDI_0;
delay_nus(1);
RF4432_SCLK_1;
delay_nus(1);
txdata<<=1;
}
RF4432_SCLK_0;
delay_nus(1);
}
//********************************************************************************//
//* 函数名: RF4432_WriteReg( ) //
//* 函数功能: RF4432寄存器写入函数 //
//********************************************************************************//
void SpiWriteRegister(unsigned char addr, unsigned char value)
{
RF4432_SEL_0;
delay_nus(1);
SPI_Write(addr|0x80); //地址最高位置1
SPI_Write(value);
RF4432_SEL_1;
delay_nus(1);
}
//********************************************************************************//
//* 函数名: RF4432_ReadReg(unsigned char addr) //
//* 函数功能: RF4432寄存器读取函数 //
//********************************************************************************//
unsigned char SpiReadRegister(unsigned char addr)
{
unsigned char value;
RF4432_SEL_0;
delay_nus(1);
SPI_Write(addr|0x7f);//地址最高位置0
value = SPI_Read();
RF4432_SEL_1;
delay_nus(1);
return value;
}
spi.h文件中需定义:
#define IO_SPI_DIR P2DIR |=BIT0+BIT1+BIT3+BIT4 //p2的0,1,3,4管脚为输出,其余为输入
#define RF_SDN_1 P2OUT |=BIT0 //p2_0口为输出模式,做为RF_SDN的控制
#define RF_SDN_0 P2OUT &=~BIT0
#define RF4432_SDI_1 P2OUT |=BIT1 //p2_1口为SPI数据输入
#define RF4432_SDI_0 P2OUT &=~BIT1
#define RF4432_SEL_1 P2OUT |=BIT4 //p2_4口为SPI片选
#define RF4432_SEL_0 P2OUT &=~BIT4
#define RF4432_SCLK_1 P2OUT |=BIT3 //p2_3口为SPI时钟输出
#define RF4432_SCLK_0 P2OUT &=~BIT3
#define RF4432_SDO (P2IN &BIT2) //p2_2口为SPI数据输出
#define RF4432_IRQ (P2IN &BIT5) //p2_5口为SI4432工作状态指示端口 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|