我是一个arm新手,最近买了友善之臂的mini2440,想先熟悉以下芯片的硬件,便在光盘自带的myled的基础上作了一点修改
,只是修改了main文件,结果发现一直都不能进入中断,查阅了很多资料也没有看出来问题出在那里,请各位给指点下,小
弟在此写过了,程序如下
//***************************************************
#include "def.h"
#include "2440addr.h"
#include "option.h"
//================================
U32 data;
void Int_Init(void) //init the interrupt
{
rINTMSK = ~(0x01<<10); //use interrupt
rINTMOD = 0; //all irq mode
//rINTSUBMSK &= (~(0x01<<10)); //did not init at first
//CPSR |= (~(0x1<<6));
//CLR_IF();
}
void Clock_Init(void) //12Mhz Fin;Fclk=500Mhz,m=117,p=1;s=1
{ //Fclk=Mpll=2*(127+8)*12/((2+2)*2^1)=405Mhz
rMPLLCON |= (0x7f<<12)|(0x02<<4)|(0x01); // Fclk max is 200-533MHZ.better at 400MHZ
rCLKDIVN |= 0x07; //Hclk max is 136MHZ,Pclk max is 68MHZ,1:3:6
rCLKCON |= 0x1FFFF0; //(0x1<<8);
rCLKSLOW = 0x00; //(0x0<<4); //Modify AT LAST
}
void Timer0_Init(void)
{
rTCFG0 = 0x00000063; //prescaler 100
rTCFG1 = 1;
rTCNTB0 = 50000; //0.01s
rTCON |= 0x02; //(0x01<<1); //update and start=0
rTCON =0x09; //start and update=0 and autoreload=1
rSRCPND = (1<<10); //add at last
rINTPND = (1<<10);
}
void __irq HandleTIMER0(void)
{
static U8 tt=0;
tt++;
if(100==tt)
{
data =~data;
tt=0;
}
rGPBDAT = data; //(data<<5);
rSRCPND |=(0x01<<10);
rINTPND = rINTPND;
}
void dely(U32 tt)
{
U32 i;
for(;tt>0;tt--)
{
for(i=0;i<60000;i++){}
}
}
int Main(int argc, char **argv)
{
//U32 data;
Clock_Init();
rGPBCON = 0x155555;
data = 0x00;
dely(20);
pISR_TIMER0 = (U32)HandleTIMER0;
Int_Init();
Timer0_Init();
//rGPBDAT = data;
while(1)
{
}
return 0;
}