Part Number:CC2538
使用DMA进行串口接收的开发时遇到了问题,希望请各位前辈专家帮忙解答。
1.查看用户手册发现,外设使用DMA时中断调用的是外设对应的中断处理函数,而外设产生的中断会被屏蔽掉(不知理解是否有误?)。
那么通常使用DMA+串口空闲中断来接收不定长数据的方式无法达成。如何在CC2538中实现不定长串口数据的接收处理呢?
2.在使用串口的同时,也有使用RF接收的需求。这种情况下如何设置RF的DMA控制及处理,没有找到例程。
3.在网上寻找资料的时候,看到有人使用STM32的HAL库代替TI给的例程来实现。这样是可行的吗?可以摆脱TI给的例程按照cortex-M3的
方式直接开发吗?
谢谢
Nick Sun:
您好,
感谢您的对TI产品的关注!为更加有效地解决您的问题,我需要多一些时间查看这个问题,稍后会为您解答。
,
Nick Sun:
您好,
可以配置 DMA 的目标地址和传输大小。代码示例中有最大 RX/TX 传输大小定义,但可以在整个分配的传输大小被填满之前从外设生成中断并为 DMA 提供服务。他们将受益于 Z-Stack (通过 UART DMA 接收的 MT API 数据大小不同)和 Foundation Firmware 中提供的示例。
在线上社区提供了示例,请参阅类似的 similar E2E thread 和 ContikiNG radio control。
如果在项目的构建中提供并引用了合适的库,这是可能的。ContikiNG 和 RIOT 也是存在这种可能性的。这最终取决于实际操作。
,
PU duan:
您好:
感谢答复。
请问,“可以在整个分配的传输大小被填满之前从外设生成中断并为 DMA 提供服务”这里的外设可以是uart的overrun中断吗?我看用户手册描述好像不行。那或者可以是定时器中断吗?
,
Nick Sun:
您好,
帮您同步工程师,得到回复给您答复。
,
Nick Sun:
您好,
CC2538 User's Guide的第10.3.1和10.3.2节提供了 DMA 支持的不同外设。中断、包括优先级和控制在第5章中有进一步的解释。其理念是应快速处理和退出中断、有时会发出一个标志来处理主事件循环期间的进一步处理、以便 MCU 不会长时间保持在 ISR 状态内。