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.

[参考译文] 编译器/MSP430F67641A:不触发 UART 中断

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/827607/compiler-msp430f67641a-uart-interrupt-is-not-triggering

器件型号:MSP430F67641A

工具/软件:TI C/C++编译器

尊敬的先生:

我使用 的是 MCLK_DEF 16

UCA2CTLW0 |= UCSWRST; //**将状态机置于重置中**
UCA2CTLW0 |= UCSSEL_2; // CLK = ACLK
#if MCLK_DEF = 12
UCA2BRW_L = 0x1E; //
UCA2BRW_H = 0x05; //
UCA2MCTLW = 0x5D00; //
#endif

#if MCLK_DEF = 16
UCA2BRW_L = 0xD3; //
UCA2BRW_H = 0x06; //
UCA2MCTLW = 0x0500; //
#endif
UCA2CTLW0 &=~UCSWRST; //**初始化 USCI 状态机**
UCA2IE |= UCRXIE;

P2SEL|= BIT2 + BIT3;



#pragma vector=USCI_A2_vector
__interrupt void USCI_A2_ISR (void)
{

} 

我的问题是我的 UART 中断未触发 我已选择此引脚作为外设  P2SEL|= BIT2 + BIT3;  

我的 UART 配置高于...

建议我尽快回答,因为我在这个项目上的时间太短了。

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

    你好 Satish、

    将来、请使用下面的语法 Highlighter 图标发布您的代码。 如果没有它、代码很难阅读、我们的社区成员可能会查看它并提供建议的机会就会降低。 我继续修复了您的上述初始帖子。

    关于您的问题、我看不到您在哪里启用全局中断。 此外、看起来您正在使用 ACLK、但我看不到任何 XT1设置代码。 因此、可能存在一个未被清除的振荡器故障标志。

    [引用 USER="CCESH SHARMA13"]我的问题是我的 UART 中断没有触发 ,我选择了这个引脚作为外密  P2SEL|= BIT2 + BIT3; [/QUERP]

    代码在哪里停止? 您的 UART 连接是否正确? 在配置 UART 模块之前初始化引脚。

    [引用 user="sath sharma13"]尽快向我建议答案,因为我在这个项目上的时间太短了。

    我强烈建议使用我们的一个代码示例作为参考。 如果它起作用、请逐件添加您的更改、直到出现不起作用的情况。 然后、弄清这种变化导致问题的原因。 如果所有更改都正确、最好不会出现任何问题。

    msp430f67641A_uscia0_UART_03.c

    /*-版权所有-、BSD_EX
    *版权所有(c) 2013、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    ***
    *
    * MSP430代码示例免责声明
    *
    * MSP430代码示例是自包含的低级程序
    ,通常*以
    高度*简明的方式演示单个外设功能或器件功能。 为此、代码可能依赖于器件的加电默认
    值*寄存器值和时钟配置等设置、
    并且在组合多个示例中的代码时必须*小心以避免潜在的副作用
    *。 另请参阅 www.ti.com/grace 了解 GUI、并参阅 www.ti.com/msp430ware
    *了解外设配置的 API 函数库方法。
    *
    *--/版权--*
    //*********
    // MSP430F67641A 演示- USCI_A0、超低功耗 UART 9600回波 ISR、32kHz ACLK
    //
    说明:回波接收到的字符、使用的 RX ISR。 正常模式为 LPM3、
    // USCI_A0 RX 中断触发 TX 回波。
    // ACLK = 32768Hz 晶振,MCLK = SMCLK = DCO ~1.045MHz
    //带有32768Hz XTAL 的波特率分频器@9600 = 32768Hz/9600 = 3.41
    //请参阅用户指南了解波特率分频器表
    //
    
    ////// MSP430F67641A
    // --------
    // /|\| XIN|-
    // || | 32kHz
    // ---|RST XOUT|-
    // | |
    // | P1.3/UCA0TXD|--- >//
    | | 9600 - 8N1
    // | P1.2/UCA0RXD|<---
    ////
    E. Chen
    // Texas Instruments Inc.
    // 2015年1月
    //使用 CCS 生成版本:5.5.0和 IAR 嵌入式工作平台版本:5.52//
    ********
    #include 
    
    int main (void)
    {
    WDTCTL = WDTPW | WDTHOLD; //停止 WDT
    
    //设置 P1.2 UCA0RXD、P1.3 UCA0TXD
    P1SEL |= BIT2 | BIT3; //将 P1.2、P1.3设置为非 IO
    P1DIR |= BIT2 | BIT3; //启用 UCA0RXD、UCA0TXD
    
    //设置 LFXT1
    UCSCTL6 &=~(XT1OFF); // XT1打开
    UCSCTL6 |= XCAP_3; //内部负载电容
    //循环直到 XT1故障标志被清除
    操作
    {
    UCSCTL7 &=~(XT2OFFG | XT1LFOFFG | DCOFFG);
    //清除 XT2、XT1、DCO 故障标志
    SFRIFG1 &=~OFIFG; //清除故障标志
    } while (SFRIFG1和 OFIFG); //测试振荡器故障标志
    
    //设置 eUSCI_A0
    UCA0CTLW0 |= UCSWRST; //**将状态机置于重置中**
    UCA0CTLW0 |= UCSSEL_1; // CLK = ACLK
    UCA0BRW_L = 0x03; // 32kHz/9600=3.41 (请参阅用户指南)
    UCA0BRW_H = 0x00; //
    UCA0MCTLW = 0x5300; //调制 UCBRSx=0x53、UCBRFx=0
    UCA0CTLW0 &=~UCSWRST; //**初始化 USCI 状态机**
    UCA0IE |= UCRXIE; //启用 USCI_A0 RX 中断
    
    _bis_SR_register (LPM3_bits | GIE); //进入 LPM3、中断被启用
    __no_operation(); //对于调试
    器}
    
    // USCI_A0中断服务例程
    #if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
    #pragma vector=USCI_A0_Vector
    __interrupt void USCI_A0_ISR (void)
    #Elif defined (__GA0__)#pragma vector=USCI_A0_COMPILE_ERROR
    (void
    
    )(USCI_COMPILE_INTERRUPTIC_)(void)(UCI_TRIBUCI_TRIBRATOR)(UCI_ENTRIBUCI_ERSI_EN
    #endif
    {
    开关(__evo_in_range (UCA0IV、4))
    {
    USCI_NONE 案例:中断; //无中断
    USCI_UART_UCRXIFG 案例: // RXIFG
    while (!(UCA0IFG & UCTXIFG));// USCI_A0 TX 缓冲器准备就绪?
    UCA0TXBUF = UCA0RXBUF; // TX -> RXed 字符
    中断;
    案例 USCI_UART_UCTXIFG:中断; // TXIFG
    案例 USCI_UART_UCSTTIFG:中断; // TTIFG
    案例 USCI_UART_UCTXCPTIFG:中断;// TXCPTIFG
    默认值:break;
    }
    } 

    此致、

    James

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

    尊敬的先生:

    我使用 uca2rxd 模块接收数据...其引脚编号为 p2.2.

    我通过一个寄存器给这个引脚提供3.2V 的电压、它将变为零、表示电压穿越这个引脚为零。

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

    [引用 user="cnchh sharmam13"]我正在使用 uca2rxd 模块来接收数据...其引脚编号为 p2.2...

    当然、只需更改上面代码示例中的代码以使用 P2.2。

    [引用 user="acchh sharma13"]我通过寄存器向该引脚提供3.2V 的电压,该引脚将变为零,表示电压穿越该引脚为零。[/引用]

    很抱歉、但这毫无意义。 您是否尝试使用上升/下降沿手动触发某项操作? 我认为、使用连接到 UART 引脚的 USB 转串行适配器测试 UART 代码示例会更容易。

    此致、

    James