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.
您好!
我将从 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中、所有其它外设被禁用并且高频时钟源被关闭。
我建议测量引脚更改中断的运行时间。 这可以通过在进入和退出时切换 GPIO 来完成(尽管这会略微增加运行时间)。
您可以使用示波器将此输出与信号输入(您的中断源)进行比较。
如果100%的运行时在中断中"浪费"、肯定会有一个饱和点、即内核从不实际离开处理程序。 通过降低输入频率或中断处理程序运行时、您需要保持低于该值(远低于该值)。
>如果时钟为10k 或以下,则一切正常,但如果时钟为100k,1M...+,则中断处理不正确。
除非 ARM 内核不是专门构建的 CPU、否则在48MHz CPU 上每秒处理1M 次中断是不可能的。 在1MHz 的中断频率下、CPU 只有48个周期、这确实是不够的、尤其是知道您正在从 ISR (!)调用 C 函数。 即使是100KHz (每个中断480个周期)也似乎太大。 可能裸机汇编编码 ISR 例程会赶上此速率、但如果不对数据执行任何操作、只对输入做出反应的重点是什么? 您实际上应该重新考虑处理输入信号的方法。 或重新考虑硬件。 也许您会看一下 FPGA?
请告诉我们您想要实现什么目标吗? 您要捕获哪种类型的输入? 也许还有另一种方法可以满足您的需求。