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.

[参考译文] MSP432变慢

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/568553/msp432-to-slow

您好!

我将从 MSP 432开始。

我在一个引脚上连接了一个时钟源、在中断中、我切换另一个引脚。 (我需要读取一些串行数据)

如果时钟为10k 或以下、则一切正常、但如果时钟为100K、1M……+、则中断处理不正确。

 我尝试对 TI RTOS 执行相同的操作、但情况相同。 我还尝试使用 SPI 处理数据、也尝试使用 SPI 处理数据。 :/

您能不能告诉我我出了什么问题? 48MHz 处理器应该可以轻松处理这一问题。

谢谢!

代码来自中断示例。

int main (void)
{
volatile uint32_t ii;

/*停止看门狗*/
MAP_WDT_A_HOLDTimer();

/*将 P1.0配置为输出,将 P1.1 (开关)配置为输入*/
MAP_GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN7);

/*将 P1.1配置为输入并启用中断*/
MAP_GPIO_setAsInputPinWithPullUpResistor (GPIO_PORT_P1、GPIO_PIN5);
// MAP_GPIO_setAsInputPin (GPIO_PORT_P1、GPIO_PIN5);
MAP_GPIO_clearInterruptFlag (GPIO_PORT_P1、GPIO_PIN5);
MAP_GPIO_enableInterrupt (GPIO_PORT_P1、GPIO_PIN5);

MAP_Interrupt_enableInterrupt (INT_Port1);

/*启用 SRAM 组保持*/
MAP_SYSCTL_enableSRAMBankRetention (SYSCTL_SRAM_BANK1);

/*启用主中断*/
MAP_Interrupt_enableMaster();

/*转至 LPM3 */
while (1)
{
MAP_PCM_gotoLPM3 ();
}
}

/* GPIO ISR */
void Port1_IRQHandler (void)
{
uint32_t status;

STATUS = MAP_GPIO_getEnabledInterruptStatus (GPIO_PORT_P1);
MAP_GPIO_clearInterruptFlag (GPIO_PORT_P1、状态);

/*切换 LED 上的输出*/
IF (STATUS & GPIO_PIN5)
{
MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P2、GPIO_PIN7);
}

} 

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

    [引用 user="user4504050"]//转到 LPM3 */ while (1){map_PCM_gotoLPM3();}

    我想、如果您需要快速反应、您不应该将内核发送到 LPM3或任何 LPM 中。

    我建议阅读/重新阅读技术参考手册(slau356e.pdf)的第7.4.3节。

    例如:

    与 LPM0类似、处理器在 LPM3或 LPM4期间停止执行。 LPM3模式将器件工作的最大频率限制为32.768kHz。 在 LPM3模式下、只有 RTC 和 WDT 模块可在低频时钟源(LFXT、REFO 和 VLO)下正常工作。 在 LPM3中、所有其它外设被禁用并且高频时钟源被关闭。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经添加了 LPM3、但它们是相同的。

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

    我建议测量引脚更改中断的运行时间。 这可以通过在进入和退出时切换 GPIO 来完成(尽管这会略微增加运行时间)。

    您可以使用示波器将此输出与信号输入(您的中断源)进行比较。

    如果100%的运行时在中断中"浪费"、肯定会有一个饱和点、即内核从不实际离开处理程序。 通过降低输入频率或中断处理程序运行时、您需要保持低于该值(远低于该值)。

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

    >如果时钟为10k 或以下,则一切正常,但如果时钟为100k,1M...+,则中断处理不正确。

    除非 ARM 内核不是专门构建的 CPU、否则在48MHz CPU 上每秒处理1M 次中断是不可能的。 在1MHz 的中断频率下、CPU 只有48个周期、这确实是不够的、尤其是知道您正在从 ISR (!)调用 C 函数。 即使是100KHz (每个中断480个周期)也似乎太大。 可能裸机汇编编码 ISR 例程会赶上此速率、但如果不对数据执行任何操作、只对输入做出反应的重点是什么? 您实际上应该重新考虑处理输入信号的方法。 或重新考虑硬件。 也许您会看一下 FPGA?

    请告诉我们您想要实现什么目标吗? 您要捕获哪种类型的输入? 也许还有另一种方法可以满足您的需求。