811定时捕获一直不成功,那位大侠帮我找找错

2019-03-24 14:50发布

我使用的是PC7作为CCP4的输入捕获功能,但是无论我PC7怎么变化,始终进不了中断函数,附上timer的设置程序,请那位大侠指点下原因我注册了中断并使能了中断函数。程序死在        while (!CPP4_Flag)                                  //  等待捕获输入脉冲这里,经检查未进中断
/*
 IR_Din --  PC7
*/#include "IR_CPP4.h"#include "uartGetPut.h"#include <stdio.h>
volatile tBoolean CPP4_Flag;volatile tBoolean T2A_TimerOut;
void Timer2A_ISR(void);//  定时器16位输入边沿定时捕获功能初始化void timerInitCapTime(void){    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);           //  使能Timer模块    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);            //  使能CCP4所在的GPIO端口PC7/CCP4    GPIOPinTypeTimer(GPIO_PORTC_BASE,GPIO_PIN_7);           //  配置CCP4管脚为脉冲输入 GPIOPadConfigSet(GPIO_PORTC_BASE,GPIO_PIN_7, GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);    TimerConfigure(TIMER2_BASE, TIMER_CFG_16_BIT_PAIR |     //  配置Timer为16位事件定时器                                TIMER_CFG_A_CAP_TIME);
    TimerControlEvent(TIMER2_BASE,                          //  控制TimerA捕获负边沿                      TIMER_A,                      TIMER_EVENT_NEG_EDGE);
    TimerControlStall(TIMER2_BASE, TIMER_A, true);          //  允许在调试时暂停定时器计数 TimerIntRegister(TIMER2_BASE, TIMER_A,Timer2A_ISR); // 注册中断服务程序    TimerIntEnable(TIMER2_BASE, TIMER_CAPA_EVENT| TIMER_TIMA_TIMEOUT);        //  使能TimerA事件捕获中断和超时中断    IntEnable(INT_TIMER2A);                  //  使能TimerA中断    IntMasterEnable();                                      //  使能处理器中断}
//  测量输入脉冲频率并显示extern void lcd_write_stringxy(unsigned char x,unsigned char y,unsigned char *p);void pulseMeasure(unsigned char* s){    unsigned short i;    unsigned short usVal[2];    char ss[40];
CPP4_Flag = false; T2A_TimerOut = false;    TimerLoadSet(TIMER2_BASE, TIMER_A, 0xFFFF);             //  设置计数器初值    TimerEnable(TIMER2_BASE, TIMER_A);                      //  使能Timer计数uartPuts("into loop ");    for (i = 0;  i < 2;  i++)    {        while (!CPP4_Flag)                                  //  等待捕获输入脉冲   if(T2A_TimerOut) break;        CPP4_Flag = false;                                   //  清除捕获标志        usVal = TimerValueGet(TIMER2_BASE, TIMER_A);     //  读取捕获值 uartPuts("get value ");    }
    TimerDisable(TIMER2_BASE, TIMER_A);                     //  禁止Timer计数    sprintf(ss, "%d ms ", (usVal[0] - usVal[1]) / 6);     //  输出测定的脉冲频率 uartPuts(ss);// if(!T2A_TimerOut) lcd_write_stringxy(0,2,s);}

//  Timer2的中断服务函数void Timer2A_ISR(void){    unsigned long ulStatus;
    ulStatus = TimerIntStatus(TIMER2_BASE, true);           //  读取当前中断状态    TimerIntClear(TIMER2_BASE, ulStatus);                   //  清除中断状态,重要!
    if (ulStatus & TIMER_CAPA_EVENT)                        //  若是TimerA事件捕获中断    {        CPP4_Flag = true;                                    //  置位捕获标志    }    if (ulStatus & TIMER_TIMA_TIMEOUT)                      //  若是TimerA计时溢出中断    {        T2A_TimerOut = true;                                    //  置位捕获标志    }}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
tekkon
1楼-- · 2019-03-24 17:27
 精彩回答 2  元偷偷看……
shower.xu
2楼-- · 2019-03-24 22:22
< :TI_MSP430_内容页_SA7 -->

我已经在pulseMeasure()函数里写了这一句。

 TimerEnable(TIMER2_BASE, TIMER_A); // 使能Timer计数

所以不应该是这里吧。谢谢你

[ 本帖最后由 shower.xu 于 2012-3-8 11:21 编辑 ]

一周热门 更多>

相关问题

    相关文章