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.

[参考译文] MSP430FR2311:内部错误:IAR Embedded Workbench

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/604907/msp430fr2311-internal-error-iar-embedded-workbench

器件型号:MSP430FR2311

我为 UART 编写了以下代码。

如果我分步调试这个代码(逐行)、并且在断点的帮助下、代码将数据发送到 UART。 当我进入完全运行模式时,编译器生成错误:内部错误:(状态),状态= 0x1,停止= 0x1,周期= 0x12a4fd80。

因此、问题是:

此错误 来自编译器端或代码中。

最初、我写入了1分钟延迟 @while 循环的最后一行(_delay_cycles (60000000)。 我认为 该内部误差是由于这种长时间延迟造成的。 因此、我将延迟降低至(6000)。 但误差没有得到解决。 实际上、我希望每隔1分钟向 UART 发送一次数据。  

我还在编译器设置中进行了较高的优化级别。 但错误未得到解决。

指导我如何解决此错误。

 #include

#include
易失性 int Send_Data[]={0xE1、0x10、0x00、0x00、0xFE、 0xFF、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、0x00、0x01、 0x10、0x0F、0x00、0x7E};
内部标记;
int Index = 0;
int main (空)

WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器

//配置 GPIO


PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式
//激活1个先前配置的端口设置
P1DIR |= BIT2;

P1SEL0 |= BIT6 | BIT7;//将2个 UART 引脚设置为第二功能

//配置 UART
UCA0CTLW0 |= UCSWRST;
UCA0CTLW0 |= UCSSEL_1;//将 ACLK 设置为 BRCLK

//波特率计算。 请参阅 UG 17.3.10
//(1) N=32768/4800=6.827
//(2) OS16=0、UCBRx=INT (N)=6
//(4)分数部分= 0.827。 参考 UG 表17-4、UCBRSx=0xEE。
UCA0BR0 = 3;// INT (32768/4800)
UCA0BR1 = 0x00;
UCA0MCTLW = 0x9200;

UCA0CTLW0 &=~UCSWRST;//初始化 eUSCI
// UCA0IE |= UCTXIE;//启用 USCI_A0 RX 中断

_bis_SR_register (GIE);//输入 LPM3、中断被启用


while (1)


P1OUT &=~BIT2;
标记= 19;
_DELAY_CYCLES (1000);
UCA0IE |= UCTXIE;

while (标记!= 0)

__no_operation();

UCA0IE &=~UCTXIE;
P1OUT |= BIT2;
_delay_cycles (6000);




//////////////////////////// TX 和 RX ISR ////////////////////////////////////////
#pragma vector=USCI_A0_Vector
_interrupt void USCI_A0_ISR (void)

switch (__evo_in_range (UCA0IV、USCI_UART_UCTXCPTIFG))

USCI_NONE 案例:中断;
USCI_UART_UCRXIFG 案例:
中断;
USCI_UART_UCTXIFG 案例:
标记----;
UCA0TXBUF =发送数据[Mark];
索引++;
中断;
案例 USCI_UART_UCSTTIFG:中断;
案例 USCI_UART_UCTXCPTIFG:中断;
默认值:break;

此致、

Kelvin Kalariya

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于尝试在32kHz 的 ACLK 中使用一个9600波特率而创建的 TX/RX 误差的很大一部分、有可能产生这个错误。 在~1.048MHz (默认值)时将波特率降低至1200或从 SMCLK 获取 BRCLK、看看这是否会产生差异。 您还可以尝试运行 msp430fr231x_euscia0_UART_05.c 示例、并评论这是否会导致类似的错误。

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

    在这种情况下、当我放置断点并分步执行时、我将在 UART 上获得定义的时间间隔上的准确数据、并且我在同一代码中不会遇到相同的错误。 但是、在全运行模式下、为什么会发生此错误?

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

    我的 ACLK 生成完美的32768Hz 时钟、并在示波器上以32768Hz 的频率进行观察。 我的波特率也很完美。 我已经检查了 CCS (Code Composer Studio)上的相同代码、并且它能够毫无中断地正常工作。 因此、错误不在代码或时钟配置中。 错误来自 IAR Embedded Workbench 编译器。

    谢谢、
    开尔文