打印
[ZLG-ARM]

2214的,CAP1.0捕获中断,中断不了啊,哪儿出错啦,帮偶瞧瞧

[复制链接]
2358|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jstu023123|  楼主 | 2007-12-3 23:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ic, ni, TI, se, Order
    使用CAP1.0测频,上升沿捕获并产生中断,现在程序不能采集到数据,郁闷。main中测试是否采集BORDER_NUM 个数据,蜂鸣器未响,后将if( num==BORDER_NUM )一句注释掉,仍未响,说明没有跳出中断或者就没有进入中断,查了好久还没发现问题所在,还望高手提点一下!!!

程序如下:
#define BORDER_NUM   17
static UINT16 num=0;
static BOOL sgCapFinished = FALSE;
static UINT32 counter[BORDER_NUM];

void __irq IRQ_Time1(void)    // 中断程序
{  T1IR = 0x10;   
    if(sgCapFinished == FALSE )
    {  counter[num++] = T1CR0;
       if( num>BORDER_NUM-1)   // 
       {  sgCapFinished = TRUE; 
          T1CCR = 0x00;
     }  }   
    VICVectAddr = 0x00;
}

void Timer1_Init( void )
{
    VICIntEnClr |= 0x20;
    num=0;
    sgCapFinished = FALSE;
    T1PR = 0;     // 预分频为0
    T1CCR = 0x05;  //  上升沿捕获,产生中断
    T1IR = 0x10;
    
    VICIntSelect = 0x00;     
    VICVectCntl0 = 0x25;
    VICVectAddr0 = (UINT32)IRQ_Time1;

    T1TCR = 0x03;
    T1TCR = 0x01;
    VICIntEnable |= 0x20;
}

int main(void)
{
    UINT32 i;
    
    Timer1_Init( );  
    while( sgCapFinished == FALSE ); //  等待
    sgCapFinished == FALSE;   
    num = 0; 
    if( num==BORDER_NUM )    // 测试是否取到17个数据
      PWM2_EnbleSound(2600);   // 蜂鸣器响

    Data_Process( counter );   // 数据处理
    while(1);
    return 0;
 }

相关下载

相关帖子

沙发
jstu023123|  楼主 | 2007-12-4 08:34 | 只看该作者

少写了一行

main()中加一行    
PINSEL0 = (PINSEL0&0xFF0FFFFF)|0x02<<20;    //  CAP1.0

使用特权

评论回复
板凳
kernel99| | 2007-12-4 08:54 | 只看该作者

还少了点东西

main()中加一行    
PINSEL0 = (PINSEL0&0xFF0FFFFF)|0x02<<20;    //  CAP1.0 
以及在void Timer1_Init( void ){}

    VICIntSelect = 0x00;     
    VICVectCntl0 = 0x25;
    VICVectAddr0 = (UINT32)IRQ_Time1;

    T1TCR = 0x03;
    T1TCR = 0x01;
    VICIntEnable |= 0x20;

语句前面加上一条IRQEnable();语句

使用特权

评论回复
地板
jstu023123|  楼主 | 2007-12-4 09:10 | 只看该作者

回kernel99

VICIntSelect = 0x00; 这条就是分配为IRQ啊。。。 

使用特权

评论回复
5
kernel99| | 2007-12-4 09:31 | 只看该作者

回jstu023123

VICIntSelect = 0x00;只是选择中断为向量中断(IRQ);
还得用IRQEnable();语句使能它中断啊!

使用特权

评论回复
6
jstu023123|  楼主 | 2007-12-4 11:45 | 只看该作者

还是不行嘛!

编译是通过的,但还是没有反应
void Timer1_Init( void )
{
    VICIntEnClr |= 0x20;
    num=0;
    sgCapFinished = FALSE;
    PINSEL0 = (PINSEL0&0xFF0FFFFF)|0x02<<20;
    T1PR = 0;     // 预分频为0
    T1CCR = 0x05;  //  上升沿捕获,产生中断
    T1IR = 0x10;
    
    IRQEnable( );
    VICIntSelect = 0x00;
    VICVectCntl0 = 0x25;
    VICVectAddr0 = (UINT32)IRQ_Time1;

    T1TCR = 0x03;
    T1TCR = 0x01;
    VICIntEnable |= 0x20;
}

IRQEnable    //  调用这个
        ;开IRQ中断
        MRS   R0, SPSR
        BIC   R0, R0, #NoInt
        MSR   SPSR_c, R0
        MOVS    PC, LR

使用特权

评论回复
7
kernel99| | 2007-12-4 12:17 | 只看该作者

再分析

使用特权

评论回复
8
kernel99| | 2007-12-4 12:29 | 只看该作者

分析

看了下LPC2214资料,觉得
 PINSEL0 = (PINSEL0&0xFF0FFFFF)|0x02<<20;
改为
 PINSEL0 = (PINSEL0&0xFF0FFFFF)|0x01<<20;先试下

使用特权

评论回复
9
jstu023123|  楼主 | 2007-12-4 14:32 | 只看该作者

现在好中断了。。。

   刚才换板子试了,可以中断的,但就是跳不出来,一直在  while( sgCapFinished == FALSE );  等待,跑不下去,一直在中断着啊!在中断采集完数据后T1CCR就清掉了啊,且sgCapFinished为TRUE了。帮我想想哪儿错了,谢谢咯。。。

使用特权

评论回复
10
kernel99| | 2007-12-4 15:47 | 只看该作者

变量num

static UINT16 num=0;
能这么定义吗?改成 volatile UINT16 num=0;试试
觉得中断那段程序,
if( num>BORDER_NUM-1)   // 
       {  sgCapFinished = TRUE; 
          T1CCR = 0x00;
       }   

可能因为num一直没变化就没进去,所以sgCapFinished = TRUE; 
          T1CCR = 0x00;两句就没起作用

使用特权

评论回复
11
jstu023123|  楼主 | 2007-12-4 16:22 | 只看该作者

很奇怪哦

    我原来在main函数中测试,和采集中断等被调用函数不在同一个.C文件中。现去static,改用volatile还是一样的,测试过了,当采集完毕后是sgCapFinished = TRUE,num=BORDER_NUM,T1CCR = 0x00的,还是在那儿等待,跑不下去,也没再进中断,太奇怪咯。。。去哪儿玩儿了呢

使用特权

评论回复
12
kernel99| | 2007-12-4 16:45 | 只看该作者

调试的乐趣就在于测试,修改代码中!

volatile UINT16 num=0;不是在main()函数所在的.C文件中的话,就在
main()函数所在的.C文件中 写上: extern volatile UINT16 num;
然后改:while( sgCapFinished == FALSE ); 
    为如下形式
       while( sgCapFinished == FALSE )
       {} ;
 

使用特权

评论回复
13
jstu023123|  楼主 | 2007-12-4 17:40 | 只看该作者

哇,帅哥太有才了。。。

   是的啊,调试花的时间比较长!
   根据测试所观察的现象,我感觉好像中断中少了某一操作,采集完数据置位、清T1CCR后不能跳出中断,使程序不能往下跑,猜测的。。。但我该关的都关了啊,再找找。。。

使用特权

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

本版积分规则

40

主题

93

帖子

0

粉丝