ARM 744 B 0 Boot loader u CGUI
ARM 7(44 B 0) Boot loader 汇 编代码分析以及u. C-GUI的移植
书写ARM汇编时常用的语句 n ldr伪汇编指令,注意和汇编指令ldr的区别 ldr r 0, =lable(两种情况) ldr r 0, [r 1] ldr r 0, lable n n str指令 mov指令:注意在移动pc,lr时的不同 mov pc, lr n mov lr, pc n nop stmfd, ldmfd, stmia, ldmia stmfd sp!, {r 0 -r 3} n ldr pc, [r 0] ldmia r 0, {r 0 -r 3} cmp指令,b和bl指令 条件标志:eq ne cc cmp r 1, r 0 bcc lable
书写Boot Loader的流程
程序示例分析 Reset. Entry b SYS_RST_HANDLER b UDF_INS_HANDLER b SWI_SVC_HANDLER b INS_ABT_HANDLER b DAT_ABT_HANDLER b. b IRQ_SVC_HANDLER b FIQ_SVC_HANDLER SWI_SVC_HANDLER stmfd sp!, {r 0 -r 12, lr} ldr r 0, [lr, #-4] ldr r 1, =SWI_SVC_VECTOR mov lr, pc ldr pc, [r 1] ldmfd sp!, {r 0 -r 12, pc}^ MAP _ISR_STARTADDRESS SYS_RST_VECTOR UDF_INS_VECTOR SWI_SVC_VECTOR ; 0 xcffff 00 # # # 4 4 4 IMPORT SWI_SERVICE ldr r 0, =SWI_SVC_VECTOR ldr r 1, =SWI_SERVICE str r 1, [r 0] void SWI_SERVICE(int type) { switch(type) case 0: case 1: } main() { __asm{ SWI } 0 x 1 }
u. C-GUI移植关键提示 n 必须有一个诸如LCDInit的函数负责初始化, 初始化的 作包括分配一块内存空间用作 framebuffer,同时还要配置LCD适配器的 各个寄存器,使之按照指定的模式 作, 最重要的就是告诉LCD适配器framebuffer 的起始位置 unsigned short int *Bmp; Bmp=(unsigned short int *)malloc(ARRAY_SIZE_G 16/4); r. LCDSADDR 1= (0 x 2<<27) | ( ((U 32)Bmp>>22)<<21 ) | M 5 D((U 32)Bmp>>1); r. LCDSADDR 2= (0 x 1<<29) | M 5 D((((U 32)Bmp+(SCR_XSIZE*LCD_YSIZE/2))>>1)) | (MVAL<<21);
u. C-GUI移植关键提示 n 对lcdconfig. h文件的修改 n #define LCD_XSIZE (240) #define LCD_YSIZE (320) #define LCD_BITSPERPIXEL (4) extern unsigned short int *Bmp; #define LCD_READ_MEM(Off) *((U 16*) #define LCD_WRITE_MEM(Off, data) *((U 16*) #define LCD_SWAP_BYTE_ORDER (1) n 对LCD 13 X. h文件的修改 n #define LCD_BUSWIDTH n n n (16) (Bmp+(((U 32)(Off)))))=data
- Slides: 10