This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5419A:如何执行中断驱动的 UART 发送?

Guru**** 2386610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1234935/msp430f5419a-how-to-implement-interrupt-driven-uart-transmit

器件型号:MSP430F5419A

您好!

  我有一个产品、我们需要将字符串发送 到 慢串行外设(9600波特)、并且消息一次可以传输大约100个字节。 我目前有这个可工作的 TX 功能:

unsigned int i、len;
len = strlen (_ptr);
for(i=0 ; i<len ; i++)

while (!(UCA2IFG&UCTXIFG));
UCA2TXBUF =(unsigned char)_ptr[i];
}
while (UCA2STAT 和 UCBUSY);  

但是、由于波特率很慢、这会导致 CPU 花费大量的时间等待。 将其更改为中断驱动的例程或解除 CPU 负担的其他方法的最佳方式是什么?  

谢谢。

Derek

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Derek:

    TI Resource Explorer 中有一些示例代码。  

    这是一个9600时的 UART Echo: https://dev.ti.com/tirex/explore/node?node=A__AGLj99bhfJ8Z15Jhh5LvSQ__msp430ware__IOGqZri__LATEST&placeholder=true  

    还有一个更加复杂的 UART 收发器示例: https://dev.ti.com/tirex/explore/node?node=A__ACwWKW7sUJopiD6YeXP4dg__msp430ware__IOGqZri__LATEST&placeholder=true 

    这两个中断都关闭了 RX 标志、但在本例中、您可能需要修改它们以实际中断 TX 标志、从而只发送下一个字节。   

    希望这些帮助。  

    JD.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这些例子是有点无用的,真的。

    需要三件事情。 第一种是用于保存数据的数据结构。 我喜欢 FIFO 队列。 需要两个例程、一个例程用于将一个字节插入队列。 (如果队列已满、则应阻止并等待空间打开。) 以返回一个16位整数。 它在数据可用时保存数据字节、在没有 数据可用时保存-1。

    接下来是发送中断服务例程。 如果队列中有更多可用数据、获取它并将其放入 TXBUF 中。 否则清除 TXIE。

    然后是前台传输例程。 这会将数据插入到队列中、然后设置 TXIE。

    这假设您从未读取 UCAIV。 清除中断请求的方式使这项工作更加困难。