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.

[参考译文] 编译器/MSP432P401R:查找使用同步中断子例程进行通信(SPI、I2C)、ADC、PWM 和 UATR 的应用示例

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/805155/compiler-msp432p401r-looking-for-an-example-of-application-using-simultaneously-interrupt-sub-routines-for-communication-spi-i2c-adc-pwm-and-uatr

器件型号:MSP432P401R

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

尊敬的所有人:

我正在开发一个应用、并且我希望 尽可能多地将中断子例程用于通信、例如 SPI、I2C、UART、用于 ADC、PWM (伺服电机)和 DMA。 不幸的是、我在多个 ISR 方面遇到问题、我认为问题在我身边(当然)。 我的应用程序在短时间内工作、然后阻止:发出一些中断标志、但不调用 ISR。

我想知道是否有人可以向我指出一些同时使用 ISR 进行通信的示例代码、ADC…… MSP432的调试功能。

我正在使用 DriverLib 库。

非常感谢您的帮助、

此致、

Yann

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

    我不知道在 driverLib 上下文中处理 ISR 争用的任何示例。 有一些示例涉及优先级、但并不特定于 ADC 和通信。  其中一个带有两个不同的计时器,但可以扩展到 comms 和 adc: http://dev.ti.com/tirex/explore/node?node=AHIBsRRMqZITYd-WzRZCbQ__z-lQYNj__LATEST 。

    当您说未调用 ISR 时、这似乎是不正确的。  CPU 将尾链中断、因此即使延迟也应该对它们进行处理。   

    此致、

    Chris

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

    您好 Chris、

    非常感谢。

    我将再次检查我的未调用 ISR 的问题。

    此致、

    Yann

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

    您好!

    是否有任何更新?

    此致。

    Chirs

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

    您好 Chris、

    不是真的。 我从头开始逐步介绍使用 TI 示例所需的不同模块。 目前我有 SysTick、Timer A (向上计数模式)和 UART。

    下一步是重新介绍 I2C、我遇到了一些问题。

    如果我有问题、我很快会回来、否则、我会将此案例的状态更改为"已解决"

    非常感谢、

    此致、

    Yann

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

    您好 Chris、

    我创建了一个尝试混合 PWM、计时器32、ADC 和 UART 的基本应用。

    从全局来看、我可以说它正在工作、但我有一个奇怪的行为:当我在周期模式()下启用定时器32时、UART 输出似乎在'while (!(UCA0IFG & UCTXIFG)'中被阻止。 如果我禁用 Timer32、一切都正常。

    注:在自由运行模式下、不会出现此问题。

    在所有情况下、输入似乎都可以正常工作(在控制台上输入文本时无延迟)。

    您有什么提示吗? UART 和计时器32之间是否有链接?

    非常感谢您的参与、

    此致、

    Yann

    e2e.ti.com/.../0576.i2c_5F00_master_5F00_rw_5F00_repeated_5F00_start_2D00_master_5F00_code.c

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

    您好 Chris、

    抱歉、我附上了一个婴儿车版本。 这是我之前描述的问题的正确答案。

    此致、

    Yanne2e.ti.com/.../5618.i2c_5F00_master_5F00_rw_5F00_repeated_5F00_start_2D00_master_5F00_code.c

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

    > MAP_Timer32_setCount (TIMER32_0_base、24000000);//=>TIMER32_PERiod_MODE、而不是 TIMER32_FREE_RUN_MODE

    > MAP_Timer32_initModule (TIMER32_0_base、TIMER32_prescaler_1、TIMER32_32位、TIMER32_PERiod_MODE);

    我建议您按相反的顺序执行这些操作。 由于调用 setCount 时定时器处于16位模式、因此周期设置为0xFFFF、因此定时器每1ms 中断一次、而不是每1秒中断一次 这将减慢 SysTick 处理程序的速度(较低优先级)、可能会达到看起来停止的程度。 在任何情况下、我都不认为这是您想要的。

    [编辑:]

    此外:

    > MAP_UART_clearInterruptFlag (EUSCI_A0_BASE、ISR_STATUS);

    我建议您不要这样做。 相反、始终调用 receiveData (如果设置了 receive_interrupt_flag)、然后决定要执行的操作。 此呼叫会设置一个比赛、可能导致您描述的症状。 (通常情况下、高数据速率更是一个问题、但始终是可能的。)

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

    Bruce、您好!

    一 计时器32

    对于计时器32、您是对的、我完全错过了它、非常感谢。

    更一般而言、我想开发一个与某些多通道模拟采样和数字信号处理相关联的惯性运动单元应用。 主要特性包括:

    1) 1)使用 UART 的应用程序交互和设置

    2) 2) MPU6050支持(I2C、SPI)

    3)电机和服务器电机驱动(PWM)

    4) 4)模拟读取

    5) 5)多路模拟输入信号采样、信号处理和移动校正(包括 DMA 支持)

    6) 6)尽量使用 ISR

    当我打开此案例时、我遇到了 I2C 问题(未调用 ISR)。

    用自己的代码尝试了几次之后,我决定从头开始重新启动,并逐一添加每个功能(UART、PWM)。

    目前、我支持 PWM、伺服电机控制和 UART)。  

    我想使用 SysTick 触发 SPI/I2C 读取操作、以便从 MPU6050获取原始数据... 和用于 用户输出的定时器32 (方向、速度...的计算和显示)。  这似乎不是一个好主意? 好的方式是什么?

    二 UART

    关于 UART、您是否意味着在收到来自控制台的字符时、我不必清除中断标志? 如果是、我不确定是否理解您(抱歉)。

    非常感谢您的帮助、

    此致、

    Yann

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

    >二 UART
    我建议您不要使用 clearInterruptFlag 来清除 Rx 中断标志(RXIFG)、因为它不是原子的。 receiveData 自动清零 RXIFG。 clearInterruptFlag 有可能(无意中)清除 TXIFG、这将导致 UART (Tx)停止。 人们经常来这里旅行、例如:

    e2e.ti.com/.../2543693

    我不知道这是发生在这里的情况、但症状是匹配的、并且 clearInterruptFlag 调用是不必要的。

    >一 计时器32
    您尝试做的并不是不可能的、但随着复杂性的增加、手工调度变得越来越困难。 您还需要避免过度提交 CPU (尝试执行过多操作)、这需要一定的测量量。

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

    Bruce、您好!

    非常感谢、现在工作正常。

    让我们继续;)

    此致

    Yann