打印

初学者碰到的44B0进不了中断

[复制链接]
1900|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
电子尘埃|  楼主 | 2007-4-6 08:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/******************************************************************** 
功    能:定时器初始化
说    明:
入口参数
********************************************************************/
void Init_Time(void)
{
    
    rTCFG0=0x64;        //T0的预分频值为100
    rTCFG1=0x04;        //T0分割比例为1/32,T1-T5均为1/2
                //定时器输入时钟频率=MCLK/预分频*分割比例

    rTCNTB0=0xc8;        //(1/64MHZ/100/32)*200=10ms;
    
    /*------中断设置------*/
    rINTCON = 0x01;        //开启"矢量中断模式"与IRQ中断
    rINTMOD = 0x00;        //普通IRQ中断模式
    rINTMSK= ~(BIT_GLOBAL|BIT_TIMER0);    //开启全局中断与TIMER0
    
    pISR_TIMER0=(unsigned)Timer0Done;
    rTCON = 0x01;        //启动定时器
}

/*------------------------------------------------------------------

        定时中断服务程序
        
-------------------------------------------------------------------*/
void __irq Timer0Done(void)
{
    rI_ISPC=BIT_TIMER0;
    Time_var++;
    if(Time_var==100)
    {
        Time_var=0;
        rPDATE=~rPDATE;
    }

}

在下刚开始学ARM各路高手帮忙看看,为什么进不去呀??

相关帖子

沙发
电子尘埃|  楼主 | 2007-4-6 09:30 | 只看该作者

找到了,是TCON寄存器高置的原因

使用特权

评论回复
板凳
电子尘埃|  楼主 | 2007-4-6 10:49 | 只看该作者

传上更改后的定时中断初始化程序,让像我这样的菜鸟注意

/*******************************************


第一个自已写的ARM程序


*******************************************/
#include "Target44blib.h"
#include "Target44b.h"



void Init_Time(void);
void delay(unsigned int);
void __irq Timer0Done(void);

volatile unsigned int Time_var=0;

/******************************************************************** 
功    能:定时器初始化
说    明:
入口参数
********************************************************************/
void Init_Time(void)
{
    
    /*------中断设置------*/
    rINTCON = 0x05;        //开启"矢量中断模式"与IRQ中断
    rINTMOD = 0x00;        //普通IRQ中断模式
    rINTMSK= ~(BIT_GLOBAL|BIT_TIMER0);    //开启全局中断与TIMER0
    
    pISR_TIMER0=(unsigned)Timer0Done;
    
        
    rTCFG0=0x64;        //T0的预分频值为100
    rTCFG1=0x04;        //T0分割比例为1/32,T1-T5均为1/2
                //定时器输入时钟频率=MCLK/预分频*分割比例
    rTCNTB0=0xc8;        //(1/64MHZ/100/32)*200=10ms;
    rTCON=0x0a;        //设置对应定时器的手动更新位
    rTCON = 0x09;        //设置对应定时器的启动位来启动定时器0(同时清除手动更新位)


}

/*------------------------------------------------------------------

        定时中断服务程序
        
-------------------------------------------------------------------*/
void __irq Timer0Done(void)
{
    rI_ISPC=BIT_TIMER0;
    Time_var++;
    if(Time_var==100)
    {
        Time_var=0;
        rPDATE=~rPDATE;
    }

}

/******************************************************************** 
功    能:延时
说    明:
入口参数:unsigned char i
********************************************************************/
void delay(unsigned int i)        //延时
{
     
    while(--i)
    {
/*        _nop_();
        _nop_();
        _nop_();
        _nop_();
*/

    }

/*******************************************************************

此处的Main仅为一个标号,也可使用其他名称,与C语言程序中的main()函数没
有关系

*******************************************************************/

void Main(void)
{
//    unsigned int i;
    
    Init_Time();        //定时器初始化
    rPCONE=0x5500;        //PE4-7为输出
    rPDATE=0xffffffff;
    rPUPE=0xffffffff;        //所有PE端口禁止上拉
    rPDATE=0xaaaaaaaa;
    while(1)
    {
        //rPDATE=0x00000000;
        //for(i=1000;i>0;i--)delay(1000);
        //rPDATE=0xffffffff;
        //for(i=1000;i>0;i--)delay(1000);
    }
}

使用特权

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

本版积分规则

51

主题

444

帖子

0

粉丝