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