- void halRfSendPacket(uint8 *txBuffer, uint8 size)
- {
- halSpiStrobe(CCxxx0_SIDLE);
- //首先执行SIDLE滤波命令强制芯片进入空闲状态,
- //wwt delayms_rf(2);
- //发送数据后延迟一会,等待数据全部发送出去
- halSpiStrobe(CCxxx0_SFTX); //清空TX FIFO缓冲区内容。
- halSpiWriteReg(CCxxx0_TXFIFO, size); //写入缓冲地址、发送的数据个数
- halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入缓冲地址、发送的数据
- //MARCSTATE_Flag=halSpiReadReg(CCxxx0_MARCSTA TE);//测试,读状态机状态
- //while(MARCSTA TE_Flag==0x01);//=0x01(IDLE模式),判断是否退出IDLE模式,附加P2IE &= ~BIT6; //_DINT();//禁止中断//P2.3禁止中断
- halSpiStrobe(CCxxx0_STX); //进入发送模式,发送数据
- //由于模式寄存器已配置,发送结束后会继续保持在接收模式下
- //发送不使用中断信号GDO0,接收使用中断信号GDO0
- while (!GDO0);// Wait for GDO0 to be set -> sync transmitted
- while (GDO0); // Wait for GDO0 to be cleared -> end of packet
- P2IFG&=~BIT6;//软件清零GDO0,发送数据不产生中断
- P2IE |= BIT6;//使能总中断_EINT(); //P2.3允许中断
- delayms_rf(2);//发送数据后延迟一会,等待数据全部发送出去
- halSpiStrobe(CCxxx0_SIDLE);//首先执行SIDLE滤波命令强制芯片进入空闲状态,//wwt halSpiStrobe(CCxxx0_SRX); //再次进入接收状态
- }
- //***************************************************************************** ************
- //函数名:uint8 halRfReceivePacket(uint8 *rxBuffer, uint8 *length)
- //输入:
- //输出:0:错误
- // 1:正确
- // 功能描述:接收数据包
- // 当需要接收数据时, 首先将CC1100配置成接收状态,
- // 一旦收到符合要求的数据, CC1100就会把收到的数据存入接收FIFO ,
- // 同时引脚GDO0 会有一个脉冲出现, 这个脉冲可以用来通知
- // MCU 有一个数据包已被CC1100 收到, MCU 就可以通过SPI口将CC1100 收到的数据取出来。
- // GDO0_____|-----|______
- //***************************************************************************** ************
- uint8 halRfReceivePacket(uint8 *rxBuffer, uint8 length)
- {
- uint8 status[2];
- uint8 packetLength = 0;
- delayms_rf(2);//发送数据后延迟一会,等待数据全部发送出去
- if((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0(先读RXBYTES状态寄存器,再&0x7F)
- {
- packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
- if (packetLength <= length) //如果帧数据长度小于等于用户设置的长度
- {
- halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
- length = packetLength; //把接收数据长度的修改为当前数据的长度
- // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
- halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);//读出CRC校验位
- //RSSI_dec1=status[0];
- halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
- halSpiStrobe(CCxxx0_SRX); //再次进入接收状态
- RF_Length=length;//wwt
- return (status[1] & CRC_OK);//如果校验成功返回接收成功
- }
- else
- {
- length = packetLength;
- halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
- halSpiStrobe(CCxxx0_SRX); //再次进入接收状态
- return 0;
- }
- }
- else
- {
- halSpiStrobe(CCxxx0_SFRX); //清洗接收缓冲区
- halSpiStrobe(CCxxx0_SRX); //再次进入接收状态
- return 0;
- }
- }
|