LK9286 发表于 2012-1-10 22:28:16

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

先介绍一下板的配置情况:

1、晶振为12M,时钟设置为120M,USB CLK禁用了;
2、一片NAND FLASH 16M,将OM=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接了一个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);
      }
}
//*/

LK9286 发表于 2012-1-10 22:43:37

还有一个问题请教:

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


http://cache.amobbs.com/bbs_upload782111/files_50/ourdev_712052S4Q22F.JPG
2410 MAP (原文件名:2410memory.JPG)

LK9286 发表于 2012-1-11 08:38:04

MDK版本为4.23

PS:顶帖

cht-rtos 发表于 2012-1-11 08:59:54

中断向量放在什么地方呢?以前不是有个帖子讲MDK下开发2440的吗,可以先参考一下

LK9286 发表于 2012-1-11 11:26:56

回复【3楼】cht-rtos
中断向量放在什么地方呢?以前不是有个帖子讲mdk下开发2440的吗,可以先参考一下
-----------------------------------------------------------------------

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

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

LK9286 发表于 2012-1-11 14:36:25

回复【3楼】cht-rtos
中断向量放在什么地方呢?以前不是有个帖子讲mdk下开发2440的吗,可以先参考一下
-----------------------------------------------------------------------

找了半天没找着。。。。

LK9286 发表于 2012-1-11 16:56:34

现在确认是中断向量哪里出了问题,程序不能正常跳转到相对应的中断处理函数进去,但是还是不知道如何解决。。。。

LK9286 发表于 2012-1-12 10:20:11

见鬼,可以进入IRQ中断函数,但是却一直跳转到当前那句,而不执行后面的操作,哪里不对?

下面是DEBUG时的汇编:

http://cache.amobbs.com/bbs_upload782111/files_50/ourdev_712497XLEP94.JPG
(原文件名:IRQINT.JPG)

LK9286 发表于 2012-1-12 10:21:44

现在我的IRQ中断函直接改为:

__irq void IRQ_Handler(void)
{
      ClearPending(BIT_TIMER0);
      RevBit(GPADAT,21);
}
页: [1]
查看完整版本: MDK下2410无法进入中断及相关问题请教