开发板与平台: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
posted on 2012-07-12 22:03  孜求嵌道  阅读(480)  评论(0编辑  收藏  举报