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/MSP430FR5989:硬件人员在指针上询问固件问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/805897/ccs-msp430fr5989-hardware-guy-asking-firmware-question-on-pointer

器件型号:MSP430FR5989

工具/软件:Code Composer Studio

我想让 GPIO 中断引起一个 UCRXIFG。。。。为了正确执行这一操作,我必须把一个值写入 UCA1RXBUF。。。然而这是一个只读寄存器。。。。我希望我可以用一个指针指向寄存器,然后更新指针的值。。。。。 有人能告诉我我在这里发生了什么错误

volatile unsigned char *pValue;

pValue = UCA1RXBUF;
*pValue = 0x55; (此行似乎不起作用)

我发现我可以将寄存器更改为 PxDIR、PxOUT 或 PxIE、并且它更新了.....

想法?

谢谢

Steve

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

    尝试直接设置 UCRXIFG:

    #include 
    int
    main (void)
    {
    WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
    PM5CTL0 &&=~LOCKLPM5;
    P1OUT &&=~BIT0; // P1.0 (LED)关闭
    P1DIR |= BIT0; // P1.0 (LED)作为输出引脚
    //我们"知道" UCMODE=0 (UART)
    UCA0CTLW0 &=~UCSWRST; // UART out of reset
    UCA0IE |= UCRXIE; //启用 Rx 中断
    __ENABLE_INTERRUPT (); //启用全局中断(GIE)
    UCA0IFG |= UCRXIFG; //触发
    while (1)
    {
    LPM0; // Goof Off
    }
    /*NOTREACHED*/
    return 0;
    }
    #pragma vector=USCI_A0_vector
    __interrupt void
    UCA0_ISR (void)
    {
    P1OUT |= BIT0; //如果我们在这里,则点亮 LED
    (空) UCA0RXBUF; //清除中断
    返回;
    } 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Bruce。。。。
    是的、这会使我进入中断范围、但我真的需要一个值(0x00以外的值) 要在寄存器中...我在两个系统之间有一段很长的电缆,我想在寄存器中输入一个字符,然后让它在两个系统之间通过电缆来回交替,并监控它是否出现信号衰减...有任何关于我如何操作的想法 将该字符硬编码到寄存器中?

    谢谢
    Steve
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不知道向只读寄存器写入的方法。 (显然你已经尝试过“也许用户指南是错误的”方法--我也会这样做。)

    您可以通过连接 Tx 和 Rx 引脚并传输某些内容来获得某些内容、但这可能对您没有帮助。 USCI 不提供内部回送。

    如果您可以在更高级别上解释您要实现的目标、也许这里的人可以建议不同的方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bruce 暗示着什么。 为什么要写入接收缓冲器? 您不能以这种方式假造系统。

    您如何将数据传回另一个系统? *that *是您要对字节进行硬编码的位置。 UART 不是双工的、您不能在单个引脚的同一行上进行 RX 和 TX。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我有两个 MSP 通过长电缆通过485收发器进行通信...我想测试终端、速度和 EMI 敏感性。 我希望只将一个字符放入 UART 缓冲区(硬编码),并使其递增,并不断通过连接到测试硬件来来回发送此数据...您如何建议我将一个字符插入系统来执行此操作?...我实际上想做一个差人 BERT 测试的版本。 我本来希望不必编写大量代码或引入 DMA 来将数据推送到缓冲区、例如、A/D....it 是一个封闭系统、因此我没有其他485收发器悬挂在 UART 上、而是进入可以与对象交互的 PC Putty。

    谢谢
    Steve
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    假设您使用的是 UART 传输、您也可以将 RX 值复制到 ISR 中的 TX 寄存器中、该寄存器将立即传输该值。