主题中讨论的其他器件:MSP432WARE、
在对 MSP432Ware 3.4_xx 进行一些研究并使用 Timer_A0中断进行实验而不激活它们之后、必须有理由
下面使用的示例不是 driverlib、而是使用一个计时器和一个中断的纯寄存器级示例。
//-----
// Texas Instruments Inc.
// 2016年6月(更新)| 2013年11月(创建)
// 使用 CCSv6.1、IAR、Keil、GCC 构建
//
#include "msp.h"
int main (void){
WDT_A->CTL = WDT_A_CTL_PW | //停止 WDT
WDT_A_CTL_HOLD;
//配置 GPIO
P1->DIR |= BIT0;
P1->OUT |= BIT0;
Timer_A0->CCTL[0]= TIMER_A_CCTLN_CCIE;// TACCR0中断被启用
Timer_A0->CCR[0]= 50000;
Timer_A0->CTL = TIMER_A_CTL_ssel_SMCLK |// SMCLK,连续模式
Timer_A_CTL_MC__Continuous;
SCB->SCR |= SCB_SCR_SLEEPONEXIT_MSK; //从 ISR 退出时启用睡眠
_enable_interrupt ();
NVIC->ISER[0]= 1 <<(TA0_0_IRQn)& 31);
while (1) {
_SLEEP();
__no_operation(); //用于调试器
}
}
//计时器 A0中断服务例程
void TA0_0_IRQHandler (void){
Timer_A0->CCTL[0]&&~Timer_A_CCTLN_CCIFG;
P1->OUT ^= BIT0;
Timer_A0->CCR[0]+= 50000; //将偏移添加到 TACCR0
}
此示例 A 看起来完整、但实际上在 CCS 6.1.3中、这些中断不存在。
现在、由于 Cortex 使用大量预设、依赖项和模式、 例如在可以使用中断之前激活中断、
这是否意味着每次 预设都是静态的,还是在 它被释放之前,它应该是静态的?
其他一些示例 B 以另一种方式使用中断,它们在使用中断之前每次都被激活?
while (1) {
MAP_GPIO_clearInterruptFlag (GPIO_PORT_P1、GPIO_PIN1 | GPIO_PIN4);
MAP_UART_enableInterrupt (EUSCI_A0_BASE、EUSCI_A_UART_receive_interrupt);
MAP_Interrupt_enableInterrupt (INT_EUSCIA0);
MAP_Interrupt_enableInterrupt (INT_Port1);
MAP_Interrupt_enableInterrupt (INT_TA1_0);
MAP_Interrupt_enableInterrupt (INT_TA2_0);
MAP_Interrupt_enableMaster();
MAP_PCM_gotoLPM0 ();
}
现在 、另一个 MSP432Ware 3.4_xx 示例 B 会按预期激活中断、但这两个示例原理 A 和 B 现在有所不同
最后一个问题是 MSP432WARE 3.40_xx 寄存器级示例是否正常工作? 或者是否存在其他问题
此问题背后的未知原因、工具、版本、库等
实际上、如果 MSP432的文档确实具有运行时寿命、则对上述定义生命周期的描述并不十分详细。
BR