【FL2416学习笔记】LED开发

        

    由上图可以看出LED使用的GPIO号码。代码定义如下:

1 #define GPIO_LED_0     5
2 #define GPIO_LED_1     6
3 #define GPIO_LED_2     9
4 #define GPIO_LED_3     10

根据S3C2416芯片手册可以查出对应的寄存器的值

对应的bit位的配置:

对应的代码如下:

 1 #define GPB_5            10
 2 #define GPB_5_INPUT      0x00
 3 #define GPB_5_OUTPUT     0x01
 4 
 5 #define GPB_6            12
 6 #define GPB_6_INPUT      0x00
 7 #define GPB_6_OUTPUT     0x01
 8 
 9 #define GPB_9            18
10 #define GPB_9_INPUT      0x00
11 #define GPB_9_OUTPUT     0x01
12 
13 #define GPB_10           20
14 #define GPB_10_INPUT     0x00
15 #define GPB_10_OUTPUT    0x01
16 
17 /*
18 The port pull-up/down register controls the pull-up/down resister enable/disable of each port group. 
19 When the corresponding bit is 0, the pull-down resister of the pin is enabled. 
20 When 1, the pull-down resister is disabled.
21 */
22 #define LED_ON         0
23 #define LED_OFF        1
24 
25 #define GPIO_LED_0     5
26 #define GPIO_LED_1     6
27 #define GPIO_LED_2     9
28 #define GPIO_LED_3     10
29 
30 /*LED灯打开*/
31 #define set_led_on(gpio_led)    (LED_ON << (gpio_led))
32 /*LED灯关闭*/
33 #define set_led_off(gpio_led)   (LED_OFF<< (gpio_led))

 

至此准备工作OK,可以上主程序了。

 1 int ledMain(void)
 2 {    
 3     int i = 0;
 4     // GPB5,GPB6,GPB9,GPB10设置为输出
 5     GPBCON = (GPB_5_OUTPUT<<GPB_5) | (GPB_6_OUTPUT<<GPB_6) 
 6            | (GPB_9_OUTPUT<<GPB_9) | (GPB_5_OUTPUT<<GPB_10) ;
 7     //使LED全灭
 8     GPBDAT = set_led_off(GPIO_LED_0) | set_led_off(GPIO_LED_1) 
 9            | set_led_off(GPIO_LED_2) | set_led_off(GPIO_LED_3) ;    
10 
11     for (i = 0; i < 3; ++i)
12     {
13         GPBDAT = set_led_on(GPIO_LED_0) | set_led_off(GPIO_LED_1) 
14                | set_led_off(GPIO_LED_2) | set_led_off(GPIO_LED_3) ;
15         Delay(200);
16         
17         GPBDAT = set_led_on(GPIO_LED_1) | set_led_off(GPIO_LED_0) 
18                | set_led_off(GPIO_LED_2) | set_led_off(GPIO_LED_3) ;
19         Delay(200);
20         
21         GPBDAT = set_led_on(GPIO_LED_2) | set_led_off(GPIO_LED_1) 
22                | set_led_off(GPIO_LED_0) | set_led_off(GPIO_LED_3) ;
23         Delay(200);
24         
25         GPBDAT = set_led_on(GPIO_LED_3) | set_led_off(GPIO_LED_1) 
26                | set_led_off(GPIO_LED_2) | set_led_off(GPIO_LED_0) ;
27         Delay(200);
28         
29         GPBDAT = set_led_off(GPIO_LED_3) | set_led_off(GPIO_LED_1) 
30                | set_led_off(GPIO_LED_2) | set_led_off(GPIO_LED_0) ;    
31     }
32     return 0;  
33 }

    汇编相对简单,不过 ldr r13, =0x40001000 这个地址为要烧写时需要的注册地址。

1   PRESERVE8
2   AREA |DATA|,CODE,READONLY 
3   ENTRY   
4   ldr r13, =0x40001000
5   IMPORT ledMain 
6   b ledMain 
7   END

 

编译环境:WIN7 + CodeWarrior for RVDS 2.2

以上为烧写界面。至此简单的LED灯点亮demo完成。

 

源码下载地址:https://files.cnblogs.com/files/dgm3000/LED.zip

posted on 2015-03-16 21:00  独孤的即墨  阅读(115)  评论(0)    收藏  举报

导航