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.

[参考译文] CCS/MSP430F5438A:UART TX 中断

Guru**** 2589245 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/890352/ccs-msp430f5438a-uart-tx-interrupt

器件型号:MSP430F5438A

工具/软件:Code Composer Studio

尊敬的团队

我的客户希望使用 UART TX 中断。 以下是他的代码

void UART_Transmit _IT (UART_HandleTypeDef * huart、uint8_t * pData、uint16_t size)
{

huart->txbuf = pData;
huart->txlen =大小;


USCI_A_UART_enableInterrupt (huart->baseAddress、USCI_A_UART_Transmit _interrupt);

}


void TX_IT_Callback (UART_HandleTypeDef * huart)
{

if (huart->txlen =0U){

USCI_A_UART_transmitData (huart->baseAddress、* huart->txbuf);

/*禁用 UART 发送数据寄存器空中断*/
USCI_A_UART_DisableInterrupt (hart->baseAddress、USCI_A_UART_Transmit _interrupt);

}
其他
{
USCI_A_UART_transmitData (huart->baseAddress、* huart->txbuf++);
huart->txlen-;
}

} 

在此逻辑中、中断输入9次、只能发送一次、以后不会输入中断。 

如果将其更改为下面的代码、这是正常的、但他使用了一个485芯片、他希望完全发送它、然后生成一个中断。 

此时、该引脚将切换为接收。 请帮助获取方法。

if (huart->txlen == 1U)
{

USCI_A_UART_transmitData (huart->baseAddress、* huart->txbuf);

/*禁用 UART 发送数据寄存器空中断*/
USCI_A_UART_DisableInterrupt (hart->baseAddress、USCI_A_UART_Transmit _interrupt);

huart->txlen --;


} 




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

    您好 Susan、

    我不太理解您的意思。 在下面的代码中,当 huart->txlen =0时,huart->txbuf 超出缓冲器数组的边界。  

        if(huart->txlen == 0U)    {
          
          USCI_A_UART_transmitData(huart->baseAddress,*huart->txbuf);     
      
          /* Disable the UART Transmit Data Register Empty Interrupt */
          USCI_A_UART_disableInterrupt(huart->baseAddress, USCI_A_UART_TRANSMIT_INTERRUPT );
        }
    第二个代码是正确的、但客户希望在发送的最后一个字节中实现什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不知道使用 TXIFG 来检测 USCI 何时空闲的技巧。 (eUSCI 具有 TXCPTIFG、但 F5438A 没有。)

    我想你必须在某个地方使用 UCBUSY (一个字节时间)。