MSP430F6638单片机中断、时钟与低功耗
[复制链接]
本帖最后由 火辣西米秀 于 2020-6-13 20:56 编辑
各种中断向量
【注意】排序顺序为实验顺序,不代表优先级大小
中断向量的计算
中断优先级
不同中断源发出的中断请求重要程度不同,每个中断源对应一个优先级,称为中断优先级。
【作用】:多个中断同时发生时,决定哪个中断被响应。
【注意】:
中断优先级只有在多个中断同时到来时才起作用,在中断嵌套中是不考虑的
中断优先级固定不变,取决于模块在中断向量表中的排序
中断嵌套
CPU响应某一中断时,在开总中断的前提下若有其他中断发生,CPU将中断当前ISR,执行新的ISR。
MSP430默认关闭中断嵌套,即进入中断服务函数后,默认关闭总中断。如果想要开启中断嵌套需要用户使用软件开启总中断。
开启和关闭总中断例程中最常用的方式是
__bis_SR_register(GIE); // 开启总中断
__bic_SR_register(GIE); // 关闭总中断
//其中__bis_SR_register()函数是将SR寄存器中的相应位置1
//__bic_SR_register()函数是将SR寄存器中的相应位置0
中断服务函数
如果是多元中断,可能会在终端服务函数中查看是那种中断置位,即用if或switch语句判断中断标志位是否为1.例如:
// Timer_A1 Interrupt Vector (TAIV) handler
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
{
switch(__even_in_range(TA0IV,14))// __even_in_range()本征函数,用于多源中断的查询。
{
case 0: break; // No interrupt
case 2: break; // CCR1 not used
case 4: break; // CCR2 not used
case 6: break; // reserved
case 8: break; // reserved
case 10: break; // reserved
case 12: break; // reserved
case 14: P4OUT ^= BIT1; // TAIFG
break;
default: break;
}
}
|