打印

熟悉AT91RM9200的请进来

[复制链接]
1627|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zsf.xjtu|  楼主 | 2007-9-20 22:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在试着用定时器里面的实时定时器中断,不知道哪里设置的不恰当,老是无法进入中断
请高手指点哈:
#include "timer.h"
extern void AT91F_DBGU_Printk(char* buffer);
void InitINT1(void)//中断源1的初始化
{
    
AT91C_BASE_AIC->AIC_SMR[1]=0x00;//中断源1优先级设置
AT91C_BASE_AIC->AIC_SVR[1]=(unsigned int)INT1done;//中断入口函数
/*  int tmp;
    __asm
    {
        MRS tmp,CPSR
        BIC tmp,tmp,#0x80
        MSR    CPSR_c,tmp
    }
*/    
    AT91C_BASE_AIC->AIC_ICCR=0x02;//中断标志清零
    AT91C_BASE_AIC->AIC_IECR=0x02;//中断使能置位
        
}
void InitTimer(void)//定时器初始化
{
    
    AT91C_BASE_ST->ST_RTMR=    0x8000;//65536个SCLK慢时钟周期
    
    AT91C_BASE_ST->ST_IER=AT91C_ST_RTTINC;//选择实时定时器
}
void EndTimer(void)
{
    AT91C_BASE_ST->ST_IDR=0x01;//禁用周期间隔定时器状态
}
void __irq INT1done(void)
{
    
    AT91F_DBGU_Printk("INT1 done~~ ");
         if(AT91C_BASE_ST->ST_SR==AT91C_ST_RTTINC )
//判断是否是定时器的实时定时器中断
    {TimerDone();}

    AT91C_BASE_AIC->AIC_ICCR=0x02;    
    AT91C_BASE_AIC->AIC_EOICR=0x02;
}

void TimerDone(void)
{
    AT91F_DBGU_Printk("Timer done~~ ");
}
主函数调用如下:
    
    int tmp;
    char tmpbuf[36];
    InitINT1();
    InitTimer();
    while(1)
    {
        __asm
        {
            MRS tmp,CPSR
            
        }
        sprintf(tmpbuf,"I_BIT=%d ST_CRTR=%d ",tmp&&0x80,(AT91C_BASE_ST->ST_CRTR)&0xFFFFF);
        AT91F_DBGU_Printk(tmpbuf);
        AT91F_Delay(50000);
        AT91F_DBGU_Printk("the main operate is running^^ ");        
    }
请高手指点下,是不是我哪里设置的还缺少点啥 谢谢    

相关帖子

沙发
wangkj| | 2007-9-20 22:28 | 只看该作者

9200裸奔者,俺都是跑在linux下面,没这么用过。

9200裸奔是否太浪费了呀?

使用特权

评论回复
板凳
zsf.xjtu|  楼主 | 2007-9-21 09:00 | 只看该作者

现在我只是在线调试

把整个程序在线仿真好了以后,还是要移植到linux里面去的。
可是总也搞不好这个中断 进不去

使用特权

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

本版积分规则

1

主题

2

帖子

1

粉丝