可能重复:
UART ISR Tx Rx 架构
我现在正在使用 TI micro,它包括一个 DMA UART 驱动程序和一个支持并行任务的操作系统。UART驱动的功能包括:
- 静态无效 HalUARTInitDMA(void);
- 静态无效 HalUARTOpenDMA(halUARTCfg_t *config);
- 静态 uint16 HalUARTReadDMA(uint8 *buf, uint16 len);
- 静态 uint16 HalUARTWriteDMA(uint8 *buf, uint16 len);
- 静态无效 HalUARTPollDMA(void);
- 静态 uint16 HalUARTRxAvailDMA(void);
- 静态无效 HalUARTSuspendDMA(void);
- 静态无效 HalUARTResumeDMA(void);
我正在尝试与另一个外围设备通信,该外围设备接受以回车符终止的消息,然后以回车符响应消息。
我很好奇构建这种类型的通信状态机的最佳方法是什么。我的问题是为 UART 端口设计回调函数,使其...
- 不会挂起系统等待响应。(某种超时)
- 如果响应被读取得太快,它会将响应连接在一起
- 回车将表示消息的结束
基本理论是这样的:
//send messsage to peripheral
HalUARTWriteDMA("tx\r",4);
//wait a little bit for the device to process the message
//start reading from the peripheral
do {
//how many bytes are at the RX port?
int len = HalUARTRxAvailDMA();
//Read those bytes
HalUARTReadDMA(msg, len);
//append the rx msg to the buffer
strcat(rxbuf, msg)
//does the response contain a CR?
} while(strchr(rxbuf, 0x0D));
这个想法有几个明显的缺陷。我希望有人可以就如何进行这种类型的交流分享一些想法?
谢谢!