开发板与平台: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, =0x1 10 11 ;把GPIO80置成输出高电平 12 ldr r0, =GPSR2 13 ldr r1, [r0] 14 orr r1, r1, r8, lsl #16 15 str r1, [r0] 16 17 ; 把GPIO80置成输出 18 ldr r0, =GPDR2 19 ldr r1, [r0] 20 orr r1, r1, r8, lsl #16 21 str r1, [r0] 22 23 ;把GPIO置成功能复用2 24 ldr r0, =GAFR2_U 25 ldr r1, [r0] 26 bic r1, r1, r8, lsl #0 27 orr r1, r1, r8, lsl #1 28 str r1, [r0] 29 30 ;灭掉所有led灯 31 ldr r0, =LED_CS 32 ldr r1, =0xff 33 str r1, [r0] 34 35 ;循环点亮led 36 led 37 ldr r9, =0x0 38 1 39 bic r1, r1, r8, lsl r9 40 str r1, [r0] 41 bl delay 42 43 orr r1, r1, r8, lsl r9 44 str r1, [r0] 45 46 add r9, r9, #0x1 47 cmp r9, #0x8 48 bne %b1 49 b led 50 51 ;延时函数 52 delay 53 ldr r10, =0xfffff 54 2 55 sub r10, r10, #0x1 56 cmp r10, #0x0 57 bne %b2 58 mov pc, lr 59 60 end