纯汇编点亮led-以替代uboot的方式执行
2015-08-25 20:49
447 查看
led.S
#define GPIO_BASE 0x01C20800 #define GPIO_PH_CFG2_BASE (GPIO_BASE + 0x104) #define GPIO_PH_DAT_BASE (GPIO_BASE + 0x10C) .global _start _start: b reset reset: ldr r0, =GPIO_PH_CFG2_BASE /* read current cfg */ ldr r1, [r0] /* clear bit 22:20 for LED1 (PH21) */ bic r1, r1, #(0x7 << 20) /* set PH21 (LED1) to output */ orr r1, r1, #(0x01 << 20) str r1, [r0] /* clear bit 18:16 for LED2 (PH20) */ bic r1, r1, #(0x7 << 16) /* set PH20 (LED2) to output */ orr r1, r1, #(0x01 << 16) str r1, [r0] loop: ldr r0, =GPIO_PH_DAT_BASE bl led1_on bl delay bl led1_off bl delay bl led2_on bl delay bl led2_off bl delay b loop led1_on: /* pull up PH21 to light on LED1 */ ldr r1, [r0] orr r1, r1, #(0x01 << 21) str r1, [r0] /* return */ mov pc, lr led1_off: /* pull up PH21 to light on LED1 */ ldr r1, [r0] bic r1, r1, #(0x01 << 21) str r1, [r0] /* return */ mov pc, lr led2_on: /* pull up PH20 to light on LED2 */ ldr r1, [r0] orr r1, r1, #(0x01 << 20) str r1, [r0] /* return */ mov pc, lr led2_off: ldr r1, [r0] bic r1, r1, #(0x01 << 20) str r1, [r0] /* return */ mov pc, lr delay: mov r5, #0x0 ldr r4, =0x3ffff minus: sub r4, r4, #1 cmp r5, r4 bne minus /* return */ mov pc, lr
编译
arm-linux-gnueabihf-gcc -c led.S -o led.o
添加sunxi头
./mksunxiboot led.o led.bin
烧写到TF卡
sudo dd if=led.bin of=/dev/sdb bs=1024 seek=8
相关文章推荐
- #新闻拍一拍# IBM 招聘广告要求应聘者具备至少 12 年 K8S 使用经验
- vivi下重新调整分区
- ARM Linux系统启动
- Linux及ARM Linux程序开发笔记(零基础入门篇)
- U-Boot源码分析及移植-fs2410
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数