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/MSP430FR2433:SPI (B0) moudle 发送停止

Guru**** 2551640 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/935254/ccs-msp430fr2433-spi-b0-moudle-send-stop

器件型号:MSP430FR2433

工具/软件:Code Composer Studio

大家好、我制作了一个板、通过 SPI 鼠标连接 OLED 屏幕。 我设置通过中断自动发送数据。 但是、如果我在发送额外的中断时触发它、它将随机停止。

SPI 鼠标被设置为 SPI 3线主设备。 我调试和检查寄存器、TX 缓冲区存在数据、但 maoudle 不发送。 在手动和演示代码中、只需将数据放入 TX 缓冲区即可。

SMCLK=16M; UCB0BR0=15; NWAITS=1;  

我尝试了 IAR 和 CCS 相同的结果。

谢谢你

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

    您好!

    您是否意味着在使用 SPI 中断发送数据时、它将被 I/O 端口中断中断?
    MSP430没有中断抢占机制、因此您描述的问题不应该发生。

    请告诉我您如何发送 SPI 数据?

    此致

    Johnson

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

    尊敬的 Johnson:  

       感谢您的快速回复!

       我只是定义一个数组。 在中断函数中、检查是否是数组的末尾、如果不是、则将新数据放入 TX 缓冲区;如果是末尾、则复位 TXIE。

       但是、如果我不触发额外的中断。 该程序可以运行数天。 仅触发几次发送就会停止。

       额外中断。 我只需将一些数据写入信息 FRAM。

        谢谢你

        标记

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

    您好!

    根据您的描述、您只需将 SoM 日期写入 SPI TXBUF、因此您不会使用中断、因此 这将被 I/O 端口中断中断中断中断中断。

    您能否展示您的应用要求或软件流程?

    此致

    Johnson

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

    您好!

      我确实执行 SPI 中断、并且 I/O 端口中断也被执行。 如果不触发 I/O 中断、SPI 中断可以正常工作。 但是当触发额外的中断时、SPI 鼠标似乎没有 将  UCxTXBUF 置于 发送移位寄存器中。 附加的 UCB0寄存器状态。

     最棒的

    谢谢你

    开关(__evo_in_range (UCB0IV、USCI_SPI_UCTXIFG))

    案例 USCI_NONE:中断;//向量0 -无中断

    USCI_SPI_UCRXIFG 案例:

    中断;

    USCI_SPI_UCTXIFG 案例:
    如果(OLED->IS 发送缓冲器位置>=OLED->IS 发送缓冲器 num)

    UCB0IE &=~UCTXIE;//禁用 TX 中断
    OLED->IS_SEND_BUF_STA=0;
    中断;

    其他

    UCB0TXBUF = OLED->DISP_SEND_BUF[1][OLED->is_send_BUF_pos];
    OLED->I_SEND_BUF_pos++;


    中断;

    默认值:break;


    UCB0IFG=0;

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

    读取 UCB0IV 会将 TXIFG 清零、并且可能会也可能不会返回。 因此、您需要跟踪这一点。

    1) 1)一种可能的方法是检查 UCTXIE=0、如果是、则显式将字节写入 TXBUF。

    2) 2)另一种可能是不读取 UCB0IV、而是显式检查 UCB0IFG 中的位、并让写入 TXBUF 为您清除 TXIFG (我个人偏好)。

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

    您好!  

     看起来更好、 当我写入 UCB0IFG 时会导致"IFG"逻辑错误?

    我在使用 B0 I2C 模式时遇到了相同的问题。 可能是相同的原因。

    非常感谢。