【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
浙公网安备 33010602011771号