看hal里面的UART DMA驱动如下定义:
#define HAL_UART_DMA_NEW_RX_BYTE(IDX) ((uint8)DMA_PAD == HI_UINT16(dmaCfg.rxBuf[(IDX)])) #define HAL_UART_DMA_GET_RX_BYTE(IDX) (*(volatile uint8 *)(dmaCfg.rxBuf+(IDX))) #define HAL_UART_DMA_CLR_RX_BYTE(IDX) (dmaCfg.rxBuf[(IDX)] = BUILD_UINT16(0, (DMA_PAD ^ 0xFF)))
检测有没有RX到数据是通过判断rxBuf的高字节是否等于DMA_PAD,那么请问,这个高字节是DMA在接收到8bit数据后自动将高字节异或吗?
因为看到清空这个高字节时是赋值了一个DMA_PAD^0xFF。如果不是DMA自动将高字节进行异或,那这种宏写法的意图是什么?
geniusgogo:
回复 Yue TANG:
懂了,谢谢哈
Yue TANG:
回复 geniusgogo:
如果有帮助,请确认一下。