【求助】我的中断怎么打不开啊!请教!
时间:2006-06-13
来源:互联网
我现在做2410的串口中断读程序,对2410里面的关于串口的中断寄存器都进行了设置,可是当有数据发送过来的时候并没有触发中断,而进入到中断服务程序中去,大家帮忙看看是哪出错了,谢谢大家!我的程序如下:
void Main(void)
{
Led_Display(0x0f);
Led_Display(0x00);
MMU_Init();
ChangeClockDivider(1,1); // 1:2:4
ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz
Port_Init(); //口线初始化
Isr_Init(); //初始化中断寄存器
Uart_Init(0,115200); //初始化串口
Uart_Select(2); //选择串口2
pISR_UART2=(unsigned)IntUart;
rSUBSRCPND=(0x1<<6);//下面3句是设置中断寄存器中关于串口的位
rINTSUBMSK=~(0x1<<6);
rINTMSK=~(0x1<<15);
while(1)
{
Glib_FilledRectangle(0,0,239,319,0x00);
Glib_Line(0,0,239,319,0xF800);
Delay(50000);
Glib_FilledRectangle(0,0,239,319,0xFFFF);
Glib_Line(0,0,239,319,0xF800);
Delay(50000);
}
}
//中断服务程序如下:
void __irq IntUart(void) ;
{
int l;
rSRCPND=(0x1<<15);
rINTPND=(0x1<<15);
rINTPND;
l=Uart_Getch();
dadian(l,0x00); //这是我自己写的一个画点的函数,从串口读数据,然后打点
}
void Main(void)
{
Led_Display(0x0f);
Led_Display(0x00);
MMU_Init();
ChangeClockDivider(1,1); // 1:2:4
ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz
Port_Init(); //口线初始化
Isr_Init(); //初始化中断寄存器
Uart_Init(0,115200); //初始化串口
Uart_Select(2); //选择串口2
pISR_UART2=(unsigned)IntUart;
rSUBSRCPND=(0x1<<6);//下面3句是设置中断寄存器中关于串口的位
rINTSUBMSK=~(0x1<<6);
rINTMSK=~(0x1<<15);
while(1)
{
Glib_FilledRectangle(0,0,239,319,0x00);
Glib_Line(0,0,239,319,0xF800);
Delay(50000);
Glib_FilledRectangle(0,0,239,319,0xFFFF);
Glib_Line(0,0,239,319,0xF800);
Delay(50000);
}
}
//中断服务程序如下:
void __irq IntUart(void) ;
{
int l;
rSRCPND=(0x1<<15);
rINTPND=(0x1<<15);
rINTPND;
l=Uart_Getch();
dadian(l,0x00); //这是我自己写的一个画点的函数,从串口读数据,然后打点
}
作者: peipei101 发布时间: 2006-06-13
你的中断处理模块都不贴出来,怎么找问题。
还有mmu_init有没有进行虚拟地址转换?
还有mmu_init有没有进行虚拟地址转换?
作者: hhq2005 发布时间: 2006-06-13
中断处理模块?
HandlerFIQ HANDLER HandleFIQ
HandlerIRQ HANDLER HandleIRQ
HandlerUndef HANDLER HandleUndef
HandlerSWI HANDLER HandleSWI
HandlerDabort HANDLER HandleDabort
HandlerPabort HANDLER HandlePabort
IsrIRQ
sub sp,sp,#4 ;reserved for PC
stmfd sp!,{r8-r9}
ldr r9,=INTOFFSET
ldr r9,[r9]
ldr r8,=HandleEINT0
add r8,r8,r9,lsl #2
ldr r8,[r8]
str r8,[sp,#8]
ldmfd sp!,{r8-r9,pc}
是这段吗?我现在都糊涂了,真弄不明白了!
还有就是MMU_INIT,
void MMU_Init(void)
{
int i,j;
//========================== IMPORTANT NOTE =========================
//The current stack and code area can't be re-mapped in this routine.
//If you want memory map mapped freely, your own sophiscated MMU
//initialization code is needed.
//===================================================================
MMU_DisableDCache();
MMU_DisableICache();
//If write-back is used,the DCache should be cleared.
for(i=0;i<64;i++)
for(j=0;j<8;j++)
MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
MMU_InvalidateICache();
#if 0
//To complete MMU_Init() fast, Icache may be turned on here.
MMU_EnableICache();
#endif
MMU_DisableMMU();
MMU_InvalidateTLB();
//MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr)
MMU_SetMTT(0x00000000,0x07f00000,0x00000000,RW_CNB); //bank0
MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,RW_CNB); //bank1
MMU_SetMTT(0x10000000,0x17f00000,0x10000000,RW_NCNB); //bank2
MMU_SetMTT(0x18000000,0x1ff00000,0x18000000,RW_NCNB); //bank3
MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_NCNB); //bank4
MMU_SetMTT(0x28000000,0x2ff00000,0x28000000,RW_NCNB); //bank5
MMU_SetMTT(0x30000000,0x30f00000,0x30000000,RW_CB); //bank6-1
MMU_SetMTT(0x31000000,0x33e00000,0x31000000,RW_NCNB); //bank6-2
MMU_SetMTT(0x33f00000,0x33f00000,0x33f00000,RW_CB); //bank6-3
MMU_SetMTT(0x38000000,0x3ff00000,0x38000000,RW_NCNB); //bank7
MMU_SetMTT(0x40000000,0x5af00000,0x40000000,RW_NCNB);//SFR+StepSram
MMU_SetMTT(0x5b000000,0xfff00000,0x5b000000,RW_FAULT);//not used
MMU_SetTTBase(_MMUTT_STARTADDRESS);
MMU_SetDomain(0x55555550|DOMAIN1_ATTR|DOMAIN0_ATTR);
//DOMAIN1: no_access, DOMAIN0,2~15=client(AP is checked)
MMU_SetProcessId(0x0);
MMU_EnableAlignFault();
MMU_EnableMMU();
MMU_EnableICache();
MMU_EnableDCache(); //DCache should be turned on after MMU is turned on.
}
我也没看懂,不知道虚拟地址转换了没?
刚刚学,好多问题,也许对你们来说一句的事,可是我要想N天,多多赐教啊!呵呵
HandlerFIQ HANDLER HandleFIQ
HandlerIRQ HANDLER HandleIRQ
HandlerUndef HANDLER HandleUndef
HandlerSWI HANDLER HandleSWI
HandlerDabort HANDLER HandleDabort
HandlerPabort HANDLER HandlePabort
IsrIRQ
sub sp,sp,#4 ;reserved for PC
stmfd sp!,{r8-r9}
ldr r9,=INTOFFSET
ldr r9,[r9]
ldr r8,=HandleEINT0
add r8,r8,r9,lsl #2
ldr r8,[r8]
str r8,[sp,#8]
ldmfd sp!,{r8-r9,pc}
是这段吗?我现在都糊涂了,真弄不明白了!
还有就是MMU_INIT,
void MMU_Init(void)
{
int i,j;
//========================== IMPORTANT NOTE =========================
//The current stack and code area can't be re-mapped in this routine.
//If you want memory map mapped freely, your own sophiscated MMU
//initialization code is needed.
//===================================================================
MMU_DisableDCache();
MMU_DisableICache();
//If write-back is used,the DCache should be cleared.
for(i=0;i<64;i++)
for(j=0;j<8;j++)
MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
MMU_InvalidateICache();
#if 0
//To complete MMU_Init() fast, Icache may be turned on here.
MMU_EnableICache();
#endif
MMU_DisableMMU();
MMU_InvalidateTLB();
//MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr)
MMU_SetMTT(0x00000000,0x07f00000,0x00000000,RW_CNB); //bank0
MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,RW_CNB); //bank1
MMU_SetMTT(0x10000000,0x17f00000,0x10000000,RW_NCNB); //bank2
MMU_SetMTT(0x18000000,0x1ff00000,0x18000000,RW_NCNB); //bank3
MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_NCNB); //bank4
MMU_SetMTT(0x28000000,0x2ff00000,0x28000000,RW_NCNB); //bank5
MMU_SetMTT(0x30000000,0x30f00000,0x30000000,RW_CB); //bank6-1
MMU_SetMTT(0x31000000,0x33e00000,0x31000000,RW_NCNB); //bank6-2
MMU_SetMTT(0x33f00000,0x33f00000,0x33f00000,RW_CB); //bank6-3
MMU_SetMTT(0x38000000,0x3ff00000,0x38000000,RW_NCNB); //bank7
MMU_SetMTT(0x40000000,0x5af00000,0x40000000,RW_NCNB);//SFR+StepSram
MMU_SetMTT(0x5b000000,0xfff00000,0x5b000000,RW_FAULT);//not used
MMU_SetTTBase(_MMUTT_STARTADDRESS);
MMU_SetDomain(0x55555550|DOMAIN1_ATTR|DOMAIN0_ATTR);
//DOMAIN1: no_access, DOMAIN0,2~15=client(AP is checked)
MMU_SetProcessId(0x0);
MMU_EnableAlignFault();
MMU_EnableMMU();
MMU_EnableICache();
MMU_EnableDCache(); //DCache should be turned on after MMU is turned on.
}
我也没看懂,不知道虚拟地址转换了没?
刚刚学,好多问题,也许对你们来说一句的事,可是我要想N天,多多赐教啊!呵呵
作者: peipei101 发布时间: 2006-06-15
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28