开发板与平台:XSBASE 270-S、PXA270
裸机程序:流水灯
编译环境:ads 1.20
调试方法:直接用工具烧至片内norflash的0x0地址
一:分析
由图1可知,点亮led需要激活led的片选信号LED_CS4,BD0-BD7决定了8个led灯的亮灭。由图2可知,led的片选地址为CS4+0x500000,在cpu手册上可以知道CS4的基址是0x10000000,所以led的片选地址为0x10500000。由图3和图4可知,CS4的片选信号由GPIO80的决定的,需要把GPIO80置成输出-功能复用2。
由图5可知,把GPIO80置成输出-功能复用2需要配置GPSR2、GPDR2、GAFR2_U三个寄存器。具体寄存器的设置看下cpu手册就清楚了。
图1:
图2:
图3:
图4:
图5:
二:程序代码
1 area boot, code, readonly 2 entry 3 4 GPSR2 equ 0x40e00020 5 GPDR2 equ 0x40e00014 6 GAFR2_U equ 0x40e00068 7 LED_CS equ 0x10500000 8 9 ldr r8, =0x110 11 ;把GPIO80置成输出高电平12 ldr r0, =GPSR213 ldr r1, [r0]14 orr r1, r1, r8, lsl #1615 str r1, [r0]16 17 ; 把GPIO80置成输出18 ldr r0, =GPDR219 ldr r1, [r0]20 orr r1, r1, r8, lsl #1621 str r1, [r0]22 23 ;把GPIO置成功能复用224 ldr r0, =GAFR2_U25 ldr r1, [r0]26 bic r1, r1, r8, lsl #027 orr r1, r1, r8, lsl #128 str r1, [r0]29 30 ;灭掉所有led灯31 ldr r0, =LED_CS32 ldr r1, =0xff33 str r1, [r0]34 35 ;循环点亮led36 led37 ldr r9, =0x038 139 bic r1, r1, r8, lsl r940 str r1, [r0]41 bl delay42 43 orr r1, r1, r8, lsl r944 str r1, [r0]45 46 add r9, r9, #0x147 cmp r9, #0x848 bne %b149 b led 50 51 ;延时函数52 delay53 ldr r10, =0xfffff54 255 sub r10, r10, #0x156 cmp r10, #0x057 bne %b258 mov pc, lr59 60 end