您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 技术讨论区 -> [求助]Blackfin的定时器程序出问题了
本帖共有1331个阅读者
发表帖子 发表投票 回复主题
[求助]Blackfin的定时器程序出问题了
微风1981(论坛新手)
微风1981
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:138
积分:6
注册时间:2011/6/8
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]Blackfin的定时器程序出问题了

麻烦问一下,有人用BLACKFIN做过定时器的程序么?我写了一个小程序,但有问题
void  InitTimer0 (void)
{
    *pTIMER0_CONFIG = 0x0019;//
    *pTIMER0_PERIOD = 0x00886400;    
    *pTIMER0_WIDTH  = 0x00443200;
  
asm("ssync;");
//    *pSIC_IMASK1   |= IRQ_TIMER0 | IRQ_TIMER1 ;        // Enable Timer0 and Timer1 interrupt              
    *pSIC_IMASK1   = IRQ_TIMER0;        // Enable Timer0            
    asm("ssync;");
    
    register_handler(ik_ivg12, IVG12_ISR);        // Install ISR for IVG# 12              
    asm("ssync;");                                              //Interrupt Group: Timers  (0 -1)      

//    *pTIMER_ENABLE  = 0x0003;                          // Enable Timer0 and Timer1                          
    *pTIMER_ENABLE  = 0x0001;                          // Enable Timer0                          
    asm("ssync;");                                                              
}

这是定时器0的初始化。

void  IVG12_ISR (void)
{
    long status;
    long status1;
    long status2;
    
    
    status  = *pTIMER_STATUS; //494
    status1 = status & 1;
    status2 = status & 2;
        
    if (status1 != 0)
    {                                 /* Timer0 interrupt                            */
    
        *pTIMER_STATUS = 0x0001;                   /* confirm interrupt handling                  */
   ssync();
    }

}
这是中断程序,只能进一次中断,后面就再也进不去了,麻烦帮忙看一下啊,感谢


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/6/9 12:51:18
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
if (status1 != 0)
    {                                 /* Timer0 interrupt                            */
    
        *pTIMER_STATUS = 0x0001;                   /* confirm interrupt handling                  */
   ssync();
    }
你看一下这个代码是不是进中断后被执行

我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2011/6/9 12:53:46
微风1981(论坛新手)
微风1981
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:138
积分:6
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

执行了。TIMER_STATUS = 0了。但只进了一次中断,之后就进不了了。

*pSIC_IAR2 这个怎么指定中断的?我用518,定时器0是指定到SIC_IAR4[3:0]

int main( void )
{
/* Begin adding your custom code here */
int i;
Init_Pll();
InitTimer0();
  
for(i=0;i<100;i++) asm("nop;");

while(1)
{
  asm("nop;");
}
}
这个是主函数

void  IVG12_ISR (void)
{
    long status;
    long status1;
    long status2;
    
    
    status  = *pTIMER_STATUS; //494
    status1 = status & 1;
    status2 = status & 2;
        
    if (status1 != 0)
    {                                 /* Timer0 interrupt                            */
    
        *pTIMER_STATUS = 0x0001;                   /* confirm interrupt handling                  */
   ssync();
    }

} 这个是中断函数


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/6/9 12:58:12
微风1981(论坛新手)
微风1981
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:138
积分:6
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

没别的了



「该帖子被 微风1981 在 2011-06-09 13:37:40 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/6/9 13:22:28
微风1981(论坛新手)
微风1981
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:138
积分:6
注册时间:2011/6/8
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

坐等回复



「该帖子被 微风1981 在 2011-06-09 13:38:46 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/6/9 13:36:44
尊贵身份标志
夜色飘摇(论坛版主)
夜色飘摇
头衔:社区公民
帮派:无帮无派
帖数:350
金钱:1773
积分:332
注册时间:2011/6/8
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

你确认一下 ik_ivg12 对应的SIC_IAR4 值是不是4,SIC_IAR4 的最低位是不是timer0 ,EX_INTERRUPT_HANDLER(IVG12_ISR)
把函数头改为这个 ,ik_ivg12 对应的中断等级参数是5,你如果不确认就不要配置SIC_IAR4 ,使用默认。

要注意中断的等级,你中断等级不对,就会出问题。你可以在VDSP的帮助文件里去找一个表,SIC_IARx里面会有用4bit组成的值,这个值代表中断等级,和你后面调用的
*pSIC_IAR4 = 0xfffffff4;//163  174
    
    register_handler(ik_ivg12  ...
这个一一对应,值越小优先级越高。


我要成为勇敢的海上战士!
等级:论坛版主 参考IP地址:*.*.*.*
2011/6/9 13:39:43
微风1981(论坛新手)
微风1981
头衔:社区公民
帮派:无帮无派
帖数:5
金钱:138
积分:6
注册时间:2011/6/8
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

感谢!改完之后解决了!中断函数的应该用EX_INTERRUPT_HANDLER。我是菜鸟。。。。呵呵,多谢帮忙


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/6/9 13:56:03
fengzheng(论坛新手)
fengzheng
头衔:社区公民
帮派:无帮无派
帖数:6
金钱:127
积分:5
注册时间:2011/10/19
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
我刚学 问下bankfin512的中断优先级怎么设计 在512的硬件手册上是以grou1~group 7 的不知道SIC_IAR0,SIC_IAR1,SIC_IAR2,SIC_IAR3,SIC_IAR4,是怎么设置的,对应哪些中断

呵呵
等级:论坛新手 参考IP地址:*.*.*.*
2011/10/20 10:44:35
ppsca(论坛新手)
ppsca
头衔:社区公民
帮派:无帮无派
帖数:43
金钱:305
积分:41
注册时间:2011/6/8
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
等级:论坛新手 参考IP地址:*.*.*.*
2011/10/20 12:04:33
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154037 Call, 1 Queries, Processed in 0.015625 second(s),