打印

大虾们看看,我不知道我的程序为什么不能够进入中断,能否指

[复制链接]
1559|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
125008301|  楼主 | 2008-11-10 09:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
【那些大部分的注释都是我写的,不知道有没有错呢】
【问题存在】我的程序不能够进入定时器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; 
 } 

相关帖子

沙发
biehoff| | 2008-11-10 09:37 | 只看该作者

RE

正在看中断呢···
    兄弟 你知道44BOX的分散加载怎么搞吗?

使用特权

评论回复
板凳
125008301|  楼主 | 2008-11-10 12:04 | 只看该作者

44BOX的分散加载 这个我不懂呢 我还在入门当中

44BOX的分散加载 这个我不懂呢 我还在入门当中

使用特权

评论回复
地板
armecos| | 2008-11-11 08:41 | 只看该作者

应该是你的中断处理过程中的某个步骤有问题,

参看万能中断模板,只要你完全按照其操作,什么问题也不会出现。
注意:清除中断,反复陷如中断。
《ecos中断操作》

更多内容,详见:
《培训系列“丛书”》
www.armecos.com
-----------------------------------
More details, see:
《"Series Books" of Training》
www.armecos.com

使用特权

评论回复
5
xiaoyufph| | 2008-11-11 09:40 | 只看该作者

rINTCON=0X1应该是向量模式不是非向量模式

使用特权

评论回复
6
125008301|  楼主 | 2008-11-11 19:13 | 只看该作者

rINTCON

那么我将 rINTCON=0X1
变为 rINTCON=0X0 就OK吧

使用特权

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

本版积分规则

23

主题

69

帖子

6

粉丝