在ARMSYS上进行uClinux内核移植的总结
pc,MyHandleDabort;HandlerDAbort
b。;HandlerReserved
ldrpc,MyHandleIRQ;HandlerIRQ
ldrpc,MyHandleFIQ;HandlerFIQ
MyHandleUndefDCDHandleUndef;reserveaword(32bit)
MyHandleSWIDCDHandleSWI
MyHandlePabortDCDHandlePabort
MyHandleDabortDCDHandleDabort
MyHandleIRQDCDHandleIRQ
MyHandleFIQDCDHandleFIQ
ExceptionHanlderEnd
建立二级矢量表:
;****************************************************
;*SetupIRQhandler*
;****************************************************
ldrr0,=(_IRQ_BASEADDRESS+0x100)
ldrr2,=_IRQ_BASEADDRESS
addr3,r0,#0x100
0
CMPr0,r3
STRCCr2,[r0],#4;cc:Carryclear;saveR2toR0address,R0=R0+4。
BCC%B0
ldrr1,=_IRQ_BASEADDRESS
ldrr0,=ExceptionHanlderBegin;ifthereisn't'subspc,lr,#4'at0x18,0x1c
ldrr3,=ExceptionHanlderEnd
0
CMPr0,r3;putthevectortableat_IRQ_BASEADDRESS(0xc000000)
LDRCCr2,[r0],#4
STRCCr2,[r1],#4
BCC%B0
ldrr1,=DIsrIRQ;puttheIRQjudgeprogramat_IRQ_BASEADDRESS+0x80(0xc000080)
ldrr0,=IsrIRQ;ifthereisn't'subspc,lr,#4'at0x18,0x1c
ldrr3,=IsrIRQEnd
0
CMPr0,r3
LDRCCr2,[r0],#4
STRCCr2,[r1],#4
BCC%B0
ldrr1,=MyHandleIRQ;MyHandleIRQpointtoDIsrIRQ
ldrr0,=ExceptionHanlderBegin
ldrr4,=_IRQ_BASEADDRESS;
subr0,r1,r0
addr0,r0,r4
ldrr1,=DIsrIRQ
strr1,[r0]
定义Handlexxx:
^(_IRQ_BASEADDRESS)
HandleReset#4
HandleUndef#4
HandleSWI#4
HandlePabort#4
HandleDabort#4
HandleReserved#4
HandleIRQ#4
HandleFIQ#4
^(_IRQ_BASEADDRESS+0x80)
DIsrIRQ#4
;IntVectorTable
^(_IRQ_BASEADDRESS+0x100)
HandleADC#4
HandleRTC#4
HandleUTXD1#4
HandleUTXD0#4
HandleSIO#4
HandleIIC#4
HandleURXD1#4
HandleURXD0#4
HandleTIMER5#4
HandleTIMER4#4
HandleTIMER3#4
HandleTIMER2#4
HandleTIMER1#4
HandleTIMER0#4
HandleUERR01#4
HandleWDT#4
HandleBDMA1#4
HandleBDMA0#4
HandleZDMA1#4
HandleZDMA0#4
HandleTICK#4
HandleEINT4567#4
HandleEINT3#4
HandleEINT2#4
HandleEINT1#4
HandleEINT0#4
将异常中断矢量重构到SDRAM,这样的好处就是可以在其它的功能程序内对中断处理程序的地址任意赋值。为此,我们在44b。h文件中定义:
/*ISR*/
#definepISR_RESET(*(unsigned*)(_IRQ_BASEADDRESS+0x0))
#definepISR_UNDEF(*(unsigned*)(_IRQ_BASEADDRESS+0x4))
#definepISR_SWI(*(unsigned*)(_IRQ_BASEADDRESS+0x8))
#definepISR_PABORT(*(unsigned*)(_IRQ_BASEADDRESS+0xc))
#definepISR_DABORT(*(unsigned*)(_IRQ_BASEADDRESS+0x10))
#definepISR_RESERVED(*(unsigned*)(_IRQ_BASEADDRESS+0x14))
#definepISR_IRQ(*(unsigned*)(_IRQ_BASEADDRESS+0x18))
#definepISR_FIQ(*(unsigned*)(_IRQ_BASEADDRESS+0x1c))
#definepISR_ADC(*(unsigned*)(_IRQ_BASEADDRESS+0x100))//0x20))
#definepISR_RTC(*(unsigned*)(_IRQ_BASEADDRESS+0x104))//0x24))
#definepISR_UTXD1(*(unsigned*)(_IRQ_BASEADDRESS+0x108))//0x28))
#definepISR_UTXD0(*(unsigned*)(_IRQ_BASEADDRESS+0x10c))//0x2c))
#definepISR_SIO(*(unsigned*)(_IRQ_BASEADDRESS+0x110))//0x30))
#definepISR_IIC(*(unsigned*)(_IRQ_BASEADDRESS+0x114))//0x34))
#definepISR_URXD1(*(unsigned*)(_IRQ_BASEADDRESS+0x118))//0x38))
#definepISR_URXD0(*(unsigned*)(_IRQ_BASEADDRESS+0x11c))//0x3c))
#definepISR_TIMER5(*(unsigned*)(_IRQ_BASEADDRESS+0x120))//0x40))
#definepISR_TIMER4(*(unsigned*)(_IRQ_BASEADDRESS+0x124))//0x44))
#definepISR_TIMER3(*(unsigned*)(_IRQ_BASEADDRESS+0x128))//0x48))
#definepISR_TIMER2(*(unsigned*)(_IRQ_BASEADDRESS+0x12c))//0x4c))
#definepISR_TIMER1(*(unsigned*)(_IRQ_BASEADDRESS+0x130))//0x50))
#definepISR_TIMER0(*(unsigned*)(_IRQ_BASEADDRESS+0x134))//0x54))
#definepISR_UERR01(*(unsigned*)(_IRQ_BASEADDRESS+0x138))//0x58))
#definepISR_WDT(*(unsigned*)(_IRQ_BASEADDRESS+0x13c))//0x5c))
#definepISR_BDMA1(*(unsigned*)(_IRQ_BASEADDRESS+0x140))//0x60))
#definepISR_BDMA0(*(unsigned*)(_IRQ_BASEADDRESS+0x144))//0x64))
#definepISR_ZDMA1(*(unsigned*)(_IRQ_BASEADDRESS+0x148))//0x68))
#definepISR_ZDMA0(*(unsigned*)(_IRQ_BASEADDRESS+0x14c))//0x6c))
#definepISR_TICK(*(unsigned*)(_IRQ_BASEADDRESS+0x150))//0x70))
#definepISR_EINT4567(*(un
移植 总结 内核 uClinux 进行 ARMSYS 相关文章:
- 嵌入式Linux内核移植相关代码分析(04-21)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 蓝牙无线耳机设计及VxWorks移植方法(07-21)
- U-Boot的编译与移植到QT-S3C44B0X开发板上(03-08)
- LPC2292的μC/OS-II硬件抽象层构建(04-26)
- μC/OS-Ⅱ在MSP430F149上的移植(03-01)
