搜索
bottom↓
回复: 8

MDK下2410无法进入中断及相关问题请教

[复制链接]

出0入0汤圆

发表于 2012-1-10 22:28:16 | 显示全部楼层 |阅读模式
先介绍一下板的配置情况:

1、晶振为12M,时钟设置为120M,USB CLK禁用了;
2、一片NAND FLASH 16M,将OM[1,0]=00,没有NOR FLASH;
3、两位16M的SDRAM,构成32M的外部RAM,地址空间为:0x3000 0000 ~ 0x31FF FFFF;
4、ROM定义到:0x3000 0000 ~ 0x3000 3fff; RAM定义到:0x3000 4000 ~ 0x31FF FFFF;
5、Interrupt Vector Table 设为 0x3000 3000;
6、GPA[21]接了一个LED;

禁用全部中断,采用DELAY()方式,可以正常跑马灯;

现在的问题是:配置TIMER0,一个中断定时10ms,(禁用TIMER0中断,即将INTMSK置1)在MAIN()里面采用查询方式计数到50闪一次灯,这样是可以的,说明定时器初始化是对的,能够正常定时;
但是打开中断(将TIMERO 相对应的INTMSK清零),则无法进入中断,而且程序跑飞了;

这是我的代码(因为MDK没有2410的头文件所以用了2440的头文件)

哪位知道的指点一下哈,思路或例程都行!

#include<S3C2440.h>

//GPACON
//GPADAT

#define TIMER0_BIT 10

#define SetBit(reg,regbit) reg=reg|(1<<regbit)
#define ClrBit(reg,regbit) reg=reg&(~(1<<regbit))
#define RevBit(reg,regbit) reg=reg^(1<<regbit)


void delay(void)
{
        unsigned int a = 0x008FFFFF;
        while(a--);
}

int main(void)
{
        unsigned int tmp = 0;
       
        GPACON = GPACON & (~(1<<21));                        //        GPA21配置为输出;
        GPADAT = GPADAT & (~(1<<21));                        //        GPA21置0

//*       
        TCFG0 = 0x0000003B;                        //        /60
        TCFG1 = 0x00000000;                        //        /

        TCNTB0 = 10000;
        TCMPB0 = 5000;
       
        SetBit(TCON,1);
        SetBit(TCON,3);
        ClrBit(TCON,1);

        SetBit(TCON,0);
       
//*/
        ClrBit(INTMSK,TIMER0_BIT);        //        允许TIMER0中断;


        while(1)
        {
                //
                /*
                if((SRCPND&(1<<10))==(1<<10))
                {
                        SRCPND = (1<<10);
                        if(++tmp>=50)
                        {
                                tmp = 0;
                                RevBit(GPADAT,21);
                        }
                }
                //
                */
        }
}

///*
__irq void HandleTIMER0(void)
{
        static unsigned int cnt10ms = 0;
        RevBit(GPADAT,21);
        ClearPending(BIT_TIMER0);
        if(++cnt10ms>=50)
        {
                cnt10ms = 0;
                RevBit(GPADAT,21);
        }
}
//*/

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-1-10 22:43:37 | 显示全部楼层
还有一个问题请教:

当OM[1。0] = 00,即从NAND FLASH启动且设置为DEBUG IN RAM 时,4KB的 BOOT Internal SRAM可以拿来用吗?



2410 MAP (原文件名:2410memory.JPG)

出0入0汤圆

 楼主| 发表于 2012-1-11 08:38:04 | 显示全部楼层
MDK版本为4.23

PS:顶帖

出0入0汤圆

发表于 2012-1-11 08:59:54 | 显示全部楼层
中断向量放在什么地方呢?以前不是有个帖子讲MDK下开发2440的吗,可以先参考一下

出0入0汤圆

 楼主| 发表于 2012-1-11 11:26:56 | 显示全部楼层
回复【3楼】cht-rtos
中断向量放在什么地方呢?以前不是有个帖子讲mdk下开发2440的吗,可以先参考一下
-----------------------------------------------------------------------

中断向量放在S3C2410.s的启动文件中了,建工程时自动生成的,没有改,应该不会错;

另外,谢谢你的提醒,我找找看·(昨晚也搜了,没找着)

出0入0汤圆

 楼主| 发表于 2012-1-11 14:36:25 | 显示全部楼层
回复【3楼】cht-rtos
中断向量放在什么地方呢?以前不是有个帖子讲mdk下开发2440的吗,可以先参考一下
-----------------------------------------------------------------------

找了半天没找着。。。。

出0入0汤圆

 楼主| 发表于 2012-1-11 16:56:34 | 显示全部楼层
现在确认是中断向量哪里出了问题,程序不能正常跳转到相对应的中断处理函数进去,但是还是不知道如何解决。。。。

出0入0汤圆

 楼主| 发表于 2012-1-12 10:20:11 | 显示全部楼层
见鬼,可以进入IRQ中断函数,但是却一直跳转到当前那句,而不执行后面的操作,哪里不对?

下面是DEBUG时的汇编:


(原文件名:IRQINT.JPG)

出0入0汤圆

 楼主| 发表于 2012-1-12 10:21:44 | 显示全部楼层
现在我的IRQ中断函直接改为:

__irq void IRQ_Handler(void)
{
        ClearPending(BIT_TIMER0);
        RevBit(GPADAT,21);
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 17:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表