📄 nrf9052.c
字号:
uint8 nrf905_SpiReaddata(void)
{
uint8 i;
uint8 data;
for(i=0;i<8;i++);
{
DataBuf<<=1;
IO0SET=nRF905_SCK;//时序
if(nRF905_MISO)//input
DataBuf=data&0x01;
else
DataBuf=data&0x01;
IO0CLR=nRF905_SCK;
}
return DataBuf;
}
uint8 const RxBufConf[10]={0x01,0x0e,0x44,0x20,0x20,0xe7,0xe7,0xe7,0xe7,0xdf};
uint8 const RxBufConfAdd[]={0xe7,0xe7,0xe7,0xe7};
//第二个字节00:0dBm,0C:10dBm
/*const unsigned char rfconfig[10]=
{
0x01, //CH_NO[7:0]
0x0c, //7,6:no use;5:自动重发=0;4:接收灵敏度降低=0;3,2:发射功率=10dBm;1:433MHz;CH_NO[8]=0
0x44, //7:no use;6,5,4:发送地址宽度4;3:no use;2,1,0:接收地址宽度4
0x20, //7,6 no use;5-0:接收数据宽度32
0x20, //7,6 no use;5-0:发送数据宽度32
0xcc, //接收地址字节0(设备ID)
0xcc, //接收地址字节1(设备ID)
0xcc, //接收地址字节2(设备ID)
0xcc, //接收地址字节3(设备ID)
0x58 //7:CRC模式8位;6:CRC校验许可;5,4,3:011表示16MHz;2:UP_CLK_EN=0没有外部时钟;1,0:外部时钟频率
};
*/
/*-------------------------------------------------------------*/
void DelayNS(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
for(i=0; i<5000; i++);
}
/*-------------------------------------------------------------*/
void Config905(void)
{
IO0SET |= nRF905_PWR_UP; //Standby和SPI编程
IO0CLR |= nRF905_TRX_CE;
IO0CLR |= nRF905_TX_EN;//待机配置
IO0CLR=nRF905_CSN; //CSN=0 // enable Spi 片选开
nrf905_SpiWritedata(WC); // Write config command
nrf905_SpiWritedata(CH_NO_BYTE); //中心频率低8位
nrf905_SpiWritedata(0x0c); //发射+10dBm,发射频率433MHz,中心频率第9位=0
nrf905_SpiWritedata(0x44); //接收地址宽度4字节,发送地址宽度4字节
nrf905_SpiWritedata(0x20); //接收数据宽度32字节
nrf905_SpiWritedata(0x20); //发送数据宽度32字节
nrf905_SpiWritedata(0xE7); //接收有效地址第1字节
nrf905_SpiWritedata(0xE7); //接收有效地址第2字节
nrf905_SpiWritedata(0xE7); //接收有效地址第3字节
nrf905_SpiWritedata(0xE7); //接收有效地址第4字节
nrf905_SpiWritedata(0xd8); //CRC16模式使能,晶体振荡器频率16MHz;没有外部时钟
IO0SET=nRF905_CSN ; // Disable Spi ;
}
/*--------------------------测试程序----------------------------------*/
void nrf905_SpiTest(void)
{
uint16 i;
IO0CLR |= nRF905_CSN;
nrf905_SpiWritedata(RC);
for(i=0;i<10;i++)
{
RxBuf[i]= nrf905_SpiReaddata();
UART0_SendByte(RxBuf[i]);//必须是字节方式发送!!!!!!
while((U0LSR&0x20)==0);
}
IO0SET |= nRF905_CSN;
DelayNS(10);
UART0_SendStr(SEND_STRING);
}
/*-------------------------------------------------------------*/
void TxPacket(void)//senddata
{
uint8 i;
IO0SET |= nRF905_PWR_UP; //ShockBurst TX
IO0CLR |= nRF905_TRX_CE;//0/nRF905_TRX_CE 不需要为1,first because IO1 usefu
IO0SET |= nRF905_TX_EN;//l
IO0CLR=nRF905_CSN;
nrf905_SpiWritedata(WTA);
nrf905_SpiWritedata(0xE7); //发送沼行У刂返?字节
nrf905_SpiWritedata(0xE7); //发送有效地址第2字节
nrf905_SpiWritedata(0xE7); //发送有效地址第3字节
nrf905_SpiWritedata(0xE7); //发送有效地址第4字节
IO0SET=nRF905_CSN;//disable spi
DelayNS(10);
IO0CLR=nRF905_CSN;
nrf905_SpiWritedata(WTP);
for(i=0;i<SIZE;i++)
{
nrf905_SpiWritedata(TxBuf[i]);// attention TxBuf[i] should be initialize
}
IO0SET=nRF905_CSN;
IO0SET=nRF905_TRX_CE;//启动发射
DelayNS(10);
IO0CLR=nRF905_TRX_CE;
}
void Transmitter(void)
{
uint8 i;
for (i=0;i<32;i++)
TxBuf[i]=i+i;
TxPacket();
while((IO0PIN&nRF905_DR)==1)//check it is tx succeed
{ IO0SET=BEEPCON;
DelayNS(10);
IO0CLR=BEEPCON;
}
IO0SET |= nRF905_PWR_UP; //Standby和SPI编程
IO0SET |= nRF905_TRX_CE;
IO0CLR |= nRF905_TX_EN;//待机配置
}
/*----------------------main.c- ---------------------------*/
int main(void)
{
PINSEL0 = 0x00000005; // 设置I/O连接到UART0 spi0 其中spi 口状态未定。
IO0DIR = 0xfdffe3df;
/*
IO0CLR=nRF905_MOSI; //p0.6 out
IO0CLR=nRF905_CSN; //p0.8 out
IO0CLR=nRF905_MISO; //p0.5 in
IO0CLR=nRF905_SCK; //p0.4 out
IO0CLR=BEEPCON; //p0.7 beepcon 失效
IO0CLR=nRF905_DR; //p0.12 in
IO0CLR=nRF905_AM; //p0.25 in 用0.25 代替0.13
IO0CLR=nRF905_CD; //p0.10 in
IO0CLR=nRF905_uPCLK; //p0.11 in
IO0CLR=nRF905_PWR_UP; //p0.18 out
IO0CLR=nRF905_TRX_CE; //p0.19 out
IO0CLR=nRF905_TX_EN; //p0.22 out 第2 个开发板0.21 管脚失效
IO0CLR=nRF905_VDD; //p0.20 out
IO0CLR=nRF905_CHANGE; //p0.13change
IO0SET=nRF905_MOSI; //p0.6
IO0SET=nRF905_CSN; //p0.8
IO0SET=nRF905_MISO; //p0.5
IO0SET=nRF905_SCK; //p0.4
IO0SET=BEEPCON; //p0.7 beepcon 失效
IO0SET=nRF905_DR; //p0.12
IO0SET=nRF905_AM; //p0.13 用0.25 代替0.13
IO0SET=nRF905_CD; //p0.10
IO0SET=nRF905_uPCLK; //p0.11
IO0SET=nRF905_PWR_UP; //p0.18
IO0SET=nRF905_TRX_CE; //p0.19
IO0SET=nRF905_TX_EN; //p0.22 第2 个开发板0.21 管脚失效
//IO0SET=nRF905_P21; //p0.21
IO0SET=nRF905_CHANGE; //p0.13change
IO0SET=nRF905_VDD; //p0.20
*/
UART0_Ini();
DelayNS(300);
Config905();
nrf905_SpiTest();
Transmitter();
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -