//pISR_URXD0=(unsigned)Uart0_RxInt;
//rINTMSK=~(BIT_URXD0); //enable UART0 RX Default value=0xffffffff
//#if 1
// pISR_USBD =(unsigned)IsrUsbd;
// pISR_DMA2 =(unsigned)IsrDma2;
//#else
// pISR_IRQ =(unsigned)IsrUsbd;
//Why doesn't it receive the big file if use this. (???)
//It always stops when 327680 bytes are received.
//#endif
// ClearPending(BIT_DMA2);
// ClearPending(BIT_USBD);
//rINTMSK&=~(BIT_USBD);
//pISR_FIQ,pISR_IRQ must be initialized
}
对子函数的理解:
1. rINTMOD=0x0; // All=IRQ mode
在addr.h文件里面定义了 #define rINTMOD (*(volatile unsigned *)0x4a000004) 根据datasheet知道给中断模式寄存器INTMOD地址0x4a000004赋值0表示IRQ(外部中断请求),若赋 值各位为1则表示FIQ(快速中断请求)。
2.rINTMSK=BIT_ALLMSK; // All interrupt is masked
在addr.h文件里面定义了#define rINTMSK (*(volatile unsigned *)0x4a000008)
BIT_ALLMSK定义为#define BIT_ALLMSK (0xffffffff)表示给BIT_ALLMSK赋值。整个意思是在地址0x4a000008赋值0xffffffff,根 据datasheet知道中断屏蔽寄存器(INTMSK))各位为1表示Interrupt service is masked.
3.对前面的中断向量表的定义:
pISR_UNDEF=(unsigned)HaltUndef;
pISR_SWI =(unsigned)HaltSwi;
pISR_PABORT=(unsigned)HaltPabort;
pISR_DABORT=(unsigned)HaltDabort;
(1)addr.h文件里面
#define pISR_UNDEF (*(unsigned *)(_ISR_STARTADDRESS+0x4))
#define pISR_SWI (*(unsigned *)(_ISR_STARTADDRESS+0x8))
#define pISR_PABORT (*(unsigned *)(_ISR_STARTADDRESS+0xc))
#define pISR_DABORT (*(unsigned *)(_ISR_STARTADDRESS+x010))
又在option.h文件里面
#define _ISR_STARTADDRESS 0x33ffff00
(2)在main.c文件里
void HaltUndef(void)
{
Uart_Printf("Undefined instruction exception!!!\n");
while(1);
}
而在 2440lib.c里面定义
void Uart_Printf(char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
Uart_SendString(string);
va_end(ap);
}
在 2440lib.c里面定义
void Uart_SendString(char *pt)
{
while(*pt)
Uart_SendByte(*pt++);
}
在 2440lib.c里面
void Uart_SendByte(int da『本文转载自网络,版权归原作者所有,如有侵权请联系删除』