打印
[应用相关]

程序就是进不去中断

[复制链接]
617|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laozhongyi|  楼主 | 2020-5-4 17:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用g2335的P1.2作为定时器TIMEA_0的捕获输入端,但是再看数据手册是的时候发现如图的描述,看有的资料说要选择P1.2的第二功能,但是怎么看TIMEA_0是这个管脚的第几功能啊,并且我还用到这个管脚的外部中断功能,应该是先进入普通的IO中断,当溢出之后进入定时器中断这是我配置的管脚
P1DIR&=~BIT2;     
P1IES&=~BIT2;     
P1SEL = BIT2 ;      
这是用到的中断向量
#pragma vector=TIMER0_A0_VECTOR              
__interrupt void Timer_A (void)   

#pragma vector=PORT1_VECTOR
__interrupt void P1_ISR (void)
但是程序就是进不去中断

使用特权

评论回复
沙发
Edisons| | 2020-5-4 17:44 | 只看该作者
#define uint unsigned int
#define uchar unsigned char
uint Period; //==用于存放周期==
unsigned long int TA_OverflowCnt;
unsigned char frequency; //==用于存放频率==
uint fy[7];

void process(void);
void delay();
void PWM(void);
void main( )
{
    WDTCTL = WDTPW+ WDTHOLD;  //stop WDT
    BCSCTL1=CALBC1_1MHZ;
    DCOCTL=CALDCO_1MHZ;
    P1DIR=BIT0+BIT1+BIT5+BIT3+BIT4;//控制液晶用的
    P1DIR&=~BIT2;     
    P1IES&=~BIT2;
    P1SEL = BIT2 ;         
  P1SEL2 =BIT2 ;

    BCSCTL3 |= LFXT1S_0;                      // LFXT1 = VLO
    IFG1 &= ~OFIFG;                           // Clear OSCFault flag
    BCSCTL2 |= SELM_0 + DIVM_0 + DIVS_0;      // MCLK = DCO, SMCLK = DCO
    lcd_init();
//  lcd_write_stringxy(1,0,"ADC result");
    _EINT();
    while(1)
    {
         PWM();
         
         P1IE|=BIT2;        //    开启I/O中断,连续计数模式、无分频、开启定时中断
         TACTL=TASSEL_1+MC_2+TAIE+TACLR+ID_0;  //TA基准时钟为32768HZ

         process();



         LCD_Disp_Num(0,3,fy[5]);
         LCD_Disp_Num(6,3,fy[4]);
         LCD_Disp_Num(12,3,fy[3]);
         lcd_write_stringxy(18,3,".");
         LCD_Disp_Num(24,3,fy[2]);
         LCD_Disp_Num(30,3,fy[1]);
         LCD_Disp_Num(36,3,fy[0]);
         lcd_write_stringxy(42,3,"KHZ");

    }

}
void process(void)
{

            frequency=Period/(1/32768);

             fy[6]=frequency/1000000;
             fy[5]=(frequency-1000000*fy[6])/100000;
             fy[4]=(frequency-1000000*fy[6]-100000*fy[5])/10000;
             fy[3]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4])/1000;
             fy[2]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4]-1000*fy[3])/100;
             fy[1]=(frequency-1000000*fy[6]-100000*fy[5]-10000*fy[4]-1000*fy[3]-100*fy[2])/10;
             fy[0]=frequency%10;


}
void PWM(void)
{


  P2DIR |= BIT2;                                // 选择P2.2的第二功能,即TA1.1
  P2SEL |= BIT2;
  TA1CCR0 = 199;                             // PWM Period

TA1CCTL1 = OUTMOD_7;                         // CCR1 reset/set
  TA1CCR1 = 100;                               // CCR1 PWM duty cycle
  TA1CTL = TASSEL_2 + MC_1;                  // SMCLK, up mode
}

//  I/O中断程序
#pragma vector=PORT1_VECTOR
__interrupt void P1_ISR (void)
{
    static unsigned int i=0;            //   I/O中断计数值

    if(P1IFG&BIT2)
        i++;
    if(i>=100)                     //    计数100次
    {
        i=0;
        Period=(((unsigned long int)TA_OverflowCnt)<<16)+TAR;     //   获得100个周期内的时钟个数
        TA_OverflowCnt=0;
        TACTL|=TACLR;            //   定时清零
    }
    P1IFG=0;
}

//   Timer_A中断程序
#pragma vector=TIMER0_A0_VECTOR                //改过了
__interrupt void Timer_A (void)
{
        switch(TAIV)                //  TA中断方式选择
    {
        case 2:break;
        case 4:break;
        case 10: TA_OverflowCnt++;    //    溢出中断计数加1
                 break;
    }
}

使用特权

评论回复
板凳
_gege| | 2020-5-4 17:50 | 只看该作者
把#pragma vector=TIMER0_A0_VECTOR改为
#pragma vector=TIMER0_A1_VECTOR
试试。

使用特权

评论回复
地板
Mozarts| | 2020-5-4 17:50 | 只看该作者
应该是:#pragma vector=TIMER1_A0_VECTOR,我也是初学者。。

使用特权

评论回复
5
Listate| | 2020-5-4 19:09 | 只看该作者
我觉得P1.2不是TIMEA_0的捕获输入口吗,中断向量应该是#pragma vector=TIMER0_A0_VECTOR吧,而且我硬件调试的时候连IO口中断都进不去。。

使用特权

评论回复
6
feiqi1| | 2020-5-4 19:09 | 只看该作者
P1SEL = BIT2 ;         
  P1SEL2 =BIT2 ;
个人认为:P1SEL |=BIT2;就行了

使用特权

评论回复
7
androidbus| | 2020-5-4 19:15 | 只看该作者
尝试检查你的中断信号源电压。。

使用特权

评论回复
8
litengg| | 2020-5-4 19:17 | 只看该作者
g2335的P1.2

手册里面有这个引脚功能说明。

使用特权

评论回复
9
shashaa| | 2020-5-4 19:26 | 只看该作者
中断不能进入可能有硬件问题,可能是软件问题。。

使用特权

评论回复
10
xia00| | 2020-5-4 19:27 | 只看该作者
程序要加死循环!   是否设置好了 中断

使用特权

评论回复
11
hfdy01| | 2020-5-4 19:33 | 只看该作者
你是问T0中断中断进不去?

使用特权

评论回复
12
CallReceiver| | 2020-5-4 19:33 | 只看该作者

将一个定时器的中断优先级设置为最高 。

使用特权

评论回复
13
sourceInsight| | 2020-5-4 19:42 | 只看该作者
中断配置有问题,肯定无法进入中断的。

使用特权

评论回复
14
bbapple| | 2020-5-4 19:43 | 只看该作者

不然一直在装初值 本来加到要益处。。

使用特权

评论回复
15
zhouhuanの| | 2020-5-4 19:47 | 只看该作者
有可能就是内部设置的问题吧。

使用特权

评论回复
16
handleMessage| | 2020-5-4 19:48 | 只看该作者
请检查中断函数名是否与启动代码中的中断函数名一致

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

1388

帖子

0

粉丝