gpt4 book ai didi

c - UART DMA Tx/Rx 架构

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:58 24 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
UART ISR Tx Rx Architecture

我现在正在使用 TI micro,它包括一个 DMA UART 驱动程序和一个支持并行任务的操作系统。 UART 驱动程序的功能包括:

  • static void HalUARTInitDMA(void);
  • static void HalUARTOpenDMA(halUARTCfg_t *config);
  • static uint16 HalUARTReadDMA(uint8 *buf, uint16 len);
  • static uint16 HalUARTWriteDMA(uint8 *buf, uint16 len);
  • static void HalUARTPollDMA(void);
  • static uint16 HalUARTRxAvailDMA(void);
  • static void HalUARTSuspendDMA(void);
  • static void HalUARTResumeDMA(void);

我正在尝试与另一个外围设备通信,该外围设备接受以回车符终止的消息并随后以回车符响应消息。

我很好奇构建这种通信状态机的最佳方式是什么。我的问题是为 UART 端口设计回调函数,使其...

  1. 不会挂起系统等待响应。 (某种超时)
  2. 如果过早阅读响应,它将把响应连接在一起
  3. 回车表示消息结束

基本理论是这样的:

//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));

这个想法有几个明显的缺陷。我希望有人可以就如何执行此类通信分享一些想法?

谢谢!

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com