微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于CC2541 uart驱动的问题

关于CC2541 uart驱动的问题

时间:10-02 整理:3721RD 点击:

看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自动将高字节进行异或,那这种宏写法的意图是什么?

参考HalUARTInitDMA()里面的注释

/* The trick is to cfg DMA to xfer 2 bytes for every 1 byte of Rx.

* The byte after the Rx Data Buffer is the Baud Cfg Register,
* which always has a known value. So init Rx buffer to inverse of that
* known value. DMA word xfer will flip the bytes, so every valid Rx byte
* in the Rx buffer will be preceded by a DMA_PAD char equal to the
* Baud Cfg Register value.
*/
and the code:
(void)memset(dmaCfg.rxBuf, (DMA_PAD ^ 0xFF), HAL_UART_DMA_RX_MAX * sizeof(uint16));

懂了,谢谢哈

如果有帮助,请确认一下。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top