/*
接收到一个数据包rxq_head+1
处理了一个数据包rxq_tail+1
*/
static EsbPacket rxPackets[TXQ_LEN];
static int rxq_head = 0;
static int rxq_tail = 0;
1、初始化时,NRF_RADIO->PACKETPTR=(uint32_t)&rxPackets[rxq_head];
2、接收时,NRF_RADIO->PACKETPTR = (uint32_t)&rxPackets[rxq_head];
3、正确接收后,rxq_head = ((rxq_head+1)%RXQ_LEN);
4、判断是否发送完成时,return (rxq_head != rxq_tail);
1、取出接收的数据,pk = &rxPackets[rxq_tail];
2、无线接收数据包,取出一包后操作,rxq_tail = (rxq_tail+1)%RXQ_LEN;
转发给遥控器的数据:
/*
装载了一个数据包txq_head+1
发送了一个数据包txq_tail+1
*/
static EsbPacket txPackets[TXQ_LEN];
static int txq_head = 0;
static int txq_tail = 0;
1、判断是否还有发送的包:return ((txq_head+1)%TXQ_LEN)!=txq_tail;
2、取出发送包:pk = &txPackets[txq_head];
3、发送完一包数据后操作:txq_head = (txq_head+1)%TXQ_LEN;
1、从包尾取出一包,准备发送:NRF_RADIO->PACKETPTR = (uint32_t)&txPackets[txq_tail];
2、发送完成后操作:txq_tail = ((txq_tail+1)%TXQ_LEN);
串口中断中数据缓存机制:
1、定义一个
#define Q_LENGTH 128 /*接收缓冲区长度*/
2、在UART0_IRQHandler()中:
rxq[head++] = NRF_UART0->RXD;
3、在 取数据uartGetc()中,
c = rxq[tail++];