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;
}
}
|