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.

[参考译文] MSP-EXP430FR2355:MSP430FR2355在"地址位多处理器格式"UART 模式中出现问题

Guru**** 2529560 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/977034/msp-exp430fr2355-issue-in-address-bit-multiprocessor-format-uart-mode-for-msp430fr2355

器件型号:MSP-EXP430FR2355

大家好、团队、

我们正在处理 我提到的地址位多处理器格式(slau445i)部分  22.3.2.我有一个问题,就是它不能按我的预期工作。

我通过设置 MARK 和 NONE、使用通过终端发送的实时数据测试了代码。 当我从实数项设置 NONE 发送字节时、它会进入 ISR (实际上中断不应上升)、也会进入 IF 条件、同样的情况是通过设置标记(第9位、这里应该上升中断)发生。 为什么会发生这样的情况、我的配置出错了吗? 下面是我正在尝试的代码。 有人能帮我解决"地址位多处理器格式 "问题吗? 我非常感谢您通过示例完成此操作。

int main (void)
{
静态常量 uint8_t True = 1;
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

clock_setup();
Initialize_GPIO();
data_transfer_switch();
Initialize_UART();

while (真)
{
if ((in_ptr)!=(out_ptr))
{
UCA0TXBUF = array[OUT_PTR];
OUT_PTR++;
OUT_PTR &= 0x0F;
}
}

void initial_uart()
{
UCA0IFG &=~UCTXIFG;//禁用增强型通用串行通信接口(eUSCI)
//进行 UART 配置
//配置 UART 引脚
P1SEL0 |= BIT6 | BIT7; //将2个 UART 引脚设置为第二个功能

//配置 UART
UCA0CTLW0 |= UCSWRST;//将增强型通用串行通信接口置于复位状态
UCA0CTLW0 |= UCTXADDR_1;
UCA0CTLW0 |= UCDORM_1;
UCA0CTLW0 |= UCSSEL_SMCLK; //时钟源选择为 SMCLK
UCA0CTLW0 |= UCMODE_2;

//波特率计算
UCA0BR0 =波特率整数; // 24000000/1000000 = 24.0
UCA0MCTLW =波特率_分数;// 24000000/1000000 - INT (24000000/1000000)= 0
UCA0CTLW0 &=~UCSWRST;//初始化增强型通用串行通信接口(eUSCI)
UCA0IE |= UCRXIE; //启用 USCI_A0接收中断
_bis_SR_register (GIE); //进入 UART 中断服务例程
}/******

UART ISR ***** /
#if defined (__TI_Compiler_version__)|| defined (__IAR_systems_icc_)
#pragma vector=USCI_A0_vector
__interrupt void USCI_A0_ISR (void)
#Elif defined (__GNU__)
void __attribute__(interrupt (USCI_A1_vector)#USCI_A0

编译器#A0)(void)#USCI_A0!
#endif
{
开关(__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))
{
USCI_NONE 案例:
中断;
USCI_UART_UCRXIFG 案例:

while (!(UCA0IFG & UCTXIFG));
状态=(UCA0STATW 和 UCADDR);
if (状态)
{
array[IN_PTR]= UCA0RXBUF;
IN_PTR++;
IN_PTR &= 0x0F;
}
中断;
USCI_UART_UCTXIFG 案例:
中断;
USCI_UART_UCSTTIFG 案例:
中断;
USCI_UART_UCTXCPTIFG 案例:
中断;
默认值:
中断;
}
} 

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

    尊敬的 Vamshi:

    首先、感谢您的详细帖子以及使用语法 Highlighter 附加您的代码! 调试这些类型的问题非常有帮助。

    接下来、让我帮助您了解这不适合您的原因。 在您的代码中、我看到您正在使用正确 的 UCMODE 和 UCDORM 设置-太棒了! 这里的问题是 LaunchPad 上的反向通道 UART。 如果配置为支持偶校验、它可以支持偶校验、但默认情况下不支持奇偶校验位。 因此、遗憾的是、它无法支持标记或空间奇偶校验位设置。 您可以在 MSP 调试器用户指南中了解有关板载 eZ-FET 调试器反向通道 UART 的更多信息。

    现在、我建议使用支持各种奇偶校验位的独立 TTL 到 USB 串行适配器。 我在串行端口实用程序(SPU)终端上使用一个进行了测试、我观察到当奇偶校验位设置为标记时、UART 数据包被接收、但当设置为空白时、数据包不被接收。 我在 if (status)函数内放置了一个 LED 切换、以便轻松查看数据包的接收时间。

    此外、我建议在 CCS 中不运行调试会话时测试您的代码。 它似乎会影响时钟速度、从而影响性能/响应能力。

    我希望这对您有所帮助!

    此致、

    James

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

    谢谢 James、

    您的解释解决了我的问题。

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

    很棒! 感谢您将线程标记为已解决。

    此致、

    James