|
先介绍一下板的配置情况:
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, 杜汶泽)
|