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);
}
}
//*/ 还有一个问题请教:
当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) MDK版本为4.23
PS:顶帖 中断向量放在什么地方呢?以前不是有个帖子讲MDK下开发2440的吗,可以先参考一下 回复【3楼】cht-rtos
中断向量放在什么地方呢?以前不是有个帖子讲mdk下开发2440的吗,可以先参考一下
-----------------------------------------------------------------------
中断向量放在S3C2410.s的启动文件中了,建工程时自动生成的,没有改,应该不会错;
另外,谢谢你的提醒,我找找看·(昨晚也搜了,没找着) 回复【3楼】cht-rtos
中断向量放在什么地方呢?以前不是有个帖子讲mdk下开发2440的吗,可以先参考一下
-----------------------------------------------------------------------
找了半天没找着。。。。 现在确认是中断向量哪里出了问题,程序不能正常跳转到相对应的中断处理函数进去,但是还是不知道如何解决。。。。 见鬼,可以进入IRQ中断函数,但是却一直跳转到当前那句,而不执行后面的操作,哪里不对?
下面是DEBUG时的汇编:
http://cache.amobbs.com/bbs_upload782111/files_50/ourdev_712497XLEP94.JPG
(原文件名:IRQINT.JPG) 现在我的IRQ中断函直接改为:
__irq void IRQ_Handler(void)
{
ClearPending(BIT_TIMER0);
RevBit(GPADAT,21);
}
页:
[1]