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/MSP430F67791A:UART (UCA0IFG)-错误发送"无法从非基元位置加载"

Guru**** 2534260 points
Other Parts Discussed in Thread: MSP430F67791A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/964957/ccs-msp430f67791a-uart-uca0ifg---error-transmit-cannot-load-from-non-primitive-location

器件型号:MSP430F67791A

工具/软件:Code Composer Studio

尊敬的先生:

我正在使用 MSP430F67791A 微控制器、并在3.3V 直流电压下施加外部电源电压。  
我正在调试 UART 代码、并在观察窗口中不断收到消息"Cannot load from non-基 元位置"。
然后、在 (!(UCA0IFG 和 UCTXIFG)时、在行之后停止处理;       // USCI_A0 TX 缓冲器就绪?
连接到我的 UART 代码。 请为任何人解决此问题。
    
#include


空 UART_INIT()

  //设置 P3.0 UCA0RXD、P3.1 UCA0TXD
    P3SEL0 |= BIT0 | BIT1;          //将 P3.0、P3.1设置为非 IO
    P3DIR |= BIT0 | BIT1;          //启用 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();


空 UART_Tx (无符号字符 A)

  while (!(UCA0IFG & UCTXIFG));       // USCI_A0 TX 缓冲器就绪?
    UCA0TXBUF = A;


空 UART_Str (无符号字符* a)

  while (* a!='\0')
    {
    UART_Tx (* a);A++;
    }



void main (void)
{   
  WDTCTL = WDTPW | WDTHOLD;        //停止 WDT
  
  UART_INIT();  

  while (1)
    {

    UART_Str ("ABCD");

    }

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

    您好!

    对于此错误、您可以在以下主题中了解有关此错误的更多信息。 但是、这可能表示您的代码存在较高级别的问题。 我建议查看 CCS 内"Register"视图中的寄存器值。 如果这一行代码从未执行、这似乎表明 TXIFG 标志没有被清除。 这也许是因为您已经注释掉了上面代码中启用全局中断(GIE)的代码行。

    "无法从非基元位置加载"是什么意思?

    此致、

    James

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

    我很少使用"Watch"窗口。 表达式窗口中是否也显示为"void *"? (我确实使用它。)

    如果是这样、则表明程序的符号表有问题。 如果没有显示"Watch"窗口有问题、

    [编辑:从 msp43067791a.h:

    #define SFR_16BIT (address) extern volatile unsigned int 地址

    它不是非常"无效*"]