//用timer a中的TAIE 溢出中断实验
//但是程序进入中断服务程序后 无法返回断点继续执行后续程序 不知道什么原因啊 求好人
#include <msp430x16x.h>
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P2DIR=0XFF;
P2OUT=0Xff;
TACTL=TASSEL_1+ID_0+MC_2+TACLR+TAIE;//增计数 模式
while(1)
{
_EINT();
P2OUT=0X00;
}
}
#pragma vector = TIMERA1_VECTOR //ccr0中断服务
__interrupt void TIMERA(void)
{
P2OUT=0X13;}
//程序运行到此处 就退不出中断服务程序
//了.,一直循环怎么回事啊???弄了半天一直没懂啊
Hardy Hu:
1.初始化时TACTL中的TACLR位不用设置;
2.你的意思是退不出中断还是在main的while(1)中一直循环?
Hardy Hu:
TAIV能自动reset当前响应的IFG
you leo:
回复 Hardy Hu:
是的啊~~我要崩了
Hardy Hu:
这样操作确实是有问题,因为MCLK比ACLK快很多,所以虽然TAIFG被自动清零,但是马上又被置位了,建议你参考一下TI官方的例程。
you leo:
回复 Hardy Hu:
TAIFG不是多源中断么?怎么会自动复位??
you leo:
回复 Fiona Chen:
我改成持续模式了 但是也出现跳不出中断了
#include <msp430x16x.h>
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P2DIR=0XFF;
P2OUT=0Xff;
TACTL=TASSEL_2+ID_0+MC_2+TACLR+TAIE+TAIFG;//
while(1)
{
_EINT();
P2OUT=0X00;
}
}
#pragma vector = TIMERA1_VECTOR //
__interrupt void hf(void)
{
int i;
P2OUT=0Xff;
for(i=10000;i>0;i–);
}
you leo:
回复 Hardy Hu:
TAIFG中断向量不是中断多源么? 怎么会自动复位??
Hardy Hu:
回复 you leo:
TAIV会把当前响应的中断标志清零,也就是说如果是多个中断同时发生了,TAIV响应当前最高优先级的并清该IFG,如果只有一个IFG就只能是这一个了。