bushi27 发表于 2012-6-9 20:12:49

LPC2103 捕获寄存器用法求助

想用的2103的捕获功能来捕获某一路信号的高低电平持续时间,请问该怎么做啊,,我自己有写一段程序,在IAR中能看到其捕获到了,但是无法正常进入捕获处理函数中去,求指点,,,,,


__irq __arm void irq_handler (void)            
{
void (*interrupt_function)();                   //中断入口函数
unsigned int vector;

vector = VICVectAddr;   //获得中断向量
interrupt_function = (void(*)())vector;       //将获得的中断向量地址赋给中断入口函数
if(interrupt_function != 0x00)            
{
    interrupt_function();//调用中断指向的函数//也即进入到Timer0Handler函数中
}
else
{
    VICVectAddr = 0;      //清除在VIC中的中断
}
}

void Init_timer0(void)
{

T0TCR = 2;                               //复位并关闭定时器
T0PR=99;                               //分频                        
    //T0CTCR=0x02;                                                                                                                这一句也不知道该不该加,在另一个程序中,加了以后,TC就无法启动了
    T0CCR =0x06;             //捕获寄存器上升、下降沿捕获 并且中断
VICIntSelect_bit.TIMER0 = 0;                // 配置为IRQ      
   VICVectAddr0 = (unsigned int) irq_down;
VICVectCntl0_bit.NUMBER = VIC_TIMER0;      //中断号
VICVectCntl0_bit.ENABLED = 1;               //使能中断地址
VICIntEnable_bit.TIMER0 = 1;                   //Timer0中断使能

T0TCR = 0x01;                                     //开始定时器

}

/*中断处理函数*/                                                                                                         
__irq __arm void irq_down (void)
{
    // 清中断标志
T0IR_bit.MR0INT = 1;

down=T0CR0;               //下降沿来临时把捕获寄存器的值送入down
//T0TCR = 2;                     //关闭并且复位定时计数器
flag2=1;
VICVectAddr = 0;                     //返回 main函数

}


void main ()
{
__disable_interrupt(); //关闭中断
   VicInit();            //中断初始化
   Init_pll();
Init_Gpio();         //端口初始化
    Init_timer0();       //定时器一初始化
   __enable_interrupt();//打开中断

while(T0IR!=0x10);       //等待进入下降沿中断                                 此句不知道是否需要加 ,,是不是捕获到下降沿后,其会产生中断并自己进入到中断处理函数中?????            
delay();

bushi27 发表于 2012-6-10 16:19:44

有没有人能帮帮忙看看啊,,,,,,,{:smile:}
页: [1]
查看完整版本: LPC2103 捕获寄存器用法求助