2785|2

2002

帖子

24

TA的资源

五彩晶圆(高级)

楼主
 

811定时捕获一直不成功,那位大侠帮我找找错 [复制链接]

我使用的是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\r\n");
    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\r\n");
    }

    TimerDisable(TIMER2_BASE, TIMER_A);                     //  禁止Timer计数
    sprintf(ss, "%d ms\r\n", (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;                                    //  置位捕获标志
    }
}

最新回复

在InMasterEnable()之前试着加上 //enable the Timer2A TimerEnable(TIMER2_BASE, TIMER_A);  详情 回复 发表于 2012-3-8 00:31
 
点赞 关注

回复
举报

89

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
在InMasterEnable()之前试着加上
//enable the Timer2A
TimerEnable(TIMER2_BASE, TIMER_A);
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

板凳
 

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

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

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

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

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表