【那些大部分的注释都是我写的,不知道有没有错呢】 【问题存在】我的程序不能够进入定时器3中断服务处理程序,恳请大虾们指点指点
/**************************************************************************** 【文 件 名 称】led_test.c 【功 能 描 述】三星S3C44B0X板测试程序 ****************************************************************************/
//*************************************************************************** #include "inc44b.h" #include "incoption.h" #include "def.h" //*************************************************************************** void Led_Display(int LedStatus); void __irq Timer_Tick(void);
//***************************************************************************
/**************************************************************************** 【功能说明】I/O端口功能、方向设定 ****************************************************************************/ void Port_Init(void) { //PORT C GROUP //PDATC : port C的数据寄存器 PCONC:port C的控制寄存器 rPDATC = 0xffff;//0x0000即所有数据为0 //55: 0101 0101 PC0,PC1,PC2,PC3都为OUTPUT模式 rPCONC = 0xfff5ff55; // } //***************************************************************************
/**************************************************************************** 【功能说明】三个LED 点亮/熄灭状态设置 ****************************************************************************/ void Led_Display(int LedStatus) { if((LedStatus&0x01)==0x01) //PC1状态设置 rPDATC=rPDATC&0xfffD; //LED0熄灭 else rPDATC=rPDATC|0x02; //LED0点亮 if((LedStatus&0x02)==0x02) //PC2状态设置 rPDATC=rPDATC&0xfffB; else rPDATC=rPDATC|0x04;
if((LedStatus&0x04)==0x04) //PC3状态设置 rPDATC=rPDATC&0xfff7; else rPDATC=rPDATC|0x08; }
/**************************************************************************** 【功能说明】定时器3初始化 ****************************************************************************/ void Timer_Init(void) {
/*定时器配置寄存器0*/ //死区长度值为0,定时器(0,1)的预分频值为0,定时器(2,3)的预分频值为0xf=15,定时器(4,5)的预分频值为0, rTCFG0=0x00000f00; /*定时器配置寄存器1 (MUX:混频,即继续分频)*/ //定时器3的MUX输入为1/4,其他的都为1/2 rTCFG1=0x00001000; //定时器3计数缓冲寄存器 rTCNTB3=0xc350; //(1/(60MHz/4/15))*0xc350=50ms //(1/(60MHz/4/15))*0x4320=20ms //定时器3比较缓冲寄存器 rTCMPB3=0x0;
//定时器控制寄存器 rTCON=0x0020000; //update T3(自己手动更新) rTCON=0x0090000; //定时器3自动重载和启动 //中断控制寄存器 rINTCON=0x1; //允许IRQ中断,不适用向量模式 //中断模式设置 0:IRQ模式 1:FIQ模式 rINTMOD=0x0; //将函数的地址赋给定时器3中断服务的地址 pISR_TIMER3=(int)Timer_Tick; //中断屏蔽寄存器 rINTMSK=BIT_GLOBAL;//首先屏蔽全局中断 //然后允许全局中断而且允许定时器3中断 rINTMSK=~(BIT_GLOBAL|BIT_TIMER3);
}
//***************************************************************************
/**************************************************************************** 【功能说明】系统主函数 ****************************************************************************/ void Main(void) { Port_Init(); //IO端口功能、方向设定 Timer_Init();//定时器初始化 while(1); } //***************************************************************************
void __irq Timer_Tick(void) //50ms中断一次 { //I_ISPC :IRQ中断服务清除寄存器 //BIT_TIMER3 (0x1<<10) static volatile U32 TimerCnt=0; rI_ISPC=BIT_TIMER3; TimerCnt++; if(TimerCnt==10) { Led_Display(1); } if(TimerCnt==20) { Led_Display(2); } if(TimerCnt==30) { Led_Display(4); TimerCnt=0; } }
|