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.

[参考译文] MSP430FR5962:启动 UART 发送中断

Guru**** 2439560 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1281245/msp430fr5962-priming-the-uart-transmit-interrupt

器件型号:MSP430FR5962

我为 MSP430 UART 实施了无锁定 FIFO、以便在中断时进行发送和接收、波特率为115200。 在打印到 TeraTerm 窗口之前、会在发送环缓冲区中填充该字符串。 我需要启动发送中断、为此、我发送一个"\0"字符。 此后、Tx_ISRHandler 会从环形缓冲区中获取字节、直到环形缓冲区为空。 用于设置 TX 中断的"\0"字符不会在屏幕上显示任何内容、并且在 Microcom 窗口和 Linux 主机上使用自定义脚本时的输出效果良好。 问题是、为什么在 UART TX 上发送不可调用的"\0"字符? 我使用的是 TI v21.6.0.LTS 编译器。

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

    问题是、为什么在 UART TX 上发送'\0'字符不可用?

    我不知道你在这里指的是什么。 如果其余的字节被传输,显然你的"初始"工作. 我怀疑 Microcom 不使用0字节、这就是您看不到任何内容的原因。

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

    问题是、为什么传输的'\0'字符 在 UART TX 上不可见?

    是的、这就是问题所在。 谢谢

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

    您能解释一下自己的意思吗? *怎么*它是"不可见"?

    请详细说明。

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

    我在 TeraTerm 窗口上看不到它。 固件中没有任何内容对"\0"字符的处理方式有所不同。

    int WDtoBMS_UART_puts(char *str)
    {
        int err;
        char c = '\0';
    
        firstChar = 1;
    
        while (*(str) != 0)
        {
            err = ring_buffer_put(_rbTxIdx, str);
            if (err == 0){
                str++;
            }
        }
    
        if (firstChar){
            firstChar = 0;
            while (WDtoBMS_UARTBusy);
            WDtoBMS_UART_TXBUF = c;
        }
    
        return err;
    }
    
    static inline void WDtoBMS_UART_TxISRHandler(){
        char c;
    
        if (ring_buffer_get(_rbTxIdx, &c) == 0){
            WDtoBMS_UART_TXBUF = c;
        }
    
        return;
    }
    

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

    对、它并没有被区别对待。 当终端软件具有微字符时、它会执行什么操作? 如果您希望看到该文件、则需要发送一个可打印的字符

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

    好的、谢谢。 我不知道终端软件在使用 null 字符时执行的操作。 我从 TeraTerm 窗口打开 Microcom。 或者我使用 TeraTerm 中的自定义 shell 脚本。 shell 脚本没有为"\0"字符执行任何特殊操作。

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

    空字符的历史是 "什么也不做"回写电传的人。 (ASR33等)  发送回车后发送(多次),因为终端需要时间来移动打印头。 由于没有任何类似微芯片的东西来缓存数据、当它收到一个字符时、就会打印出来。

    忽略空字符已发生。