1.点亮1个led程序分析(汇编)
来源:互联网 发布:人工智能平台有哪些 编辑:程序博客网 时间:2024/06/05 09:11
最终目标: 点亮led灯
1:通过原理图,确定nLED_1的引脚关系 ---- GPF4
2:查看S3C2440手册,找到控制GPF4引脚的方法 ---- GPFCON(配置寄存器) ---- GPFDAT(数据寄存器)
3:往GPFCON和GPFDAT这两个寄存器写数据,实现点亮led灯
寄存器相关截图:
所以,需要点亮nLED_1,我们要通过GPFCON寄存器设置GPF4引脚作为输出引脚,通过GPFDAT寄存器设置0或1开控制LED灯的亮灭。
更直白点是,往0x56000050(GPFCON)、0x56000054(GPFDAT) 写入数据
汇编代码:
@******************************************************************************@ File:led_on.S@ 功能:LED点灯程序,点亮LED1@****************************************************************************** .text.global _start_start: LDR R0,=0x56000050 @ R0设为GPFCON寄存器。此寄存器 @ 用于选择端口B各引脚的功能: @ 是输出、是输入、还是其他 MOV R1,#0x00000100 STR R1,[R0] @ 设置GPF4为输出口 LDR R0,=0x56000054 @ R0设为GPBDAT寄存器。此寄存器 @ 用于读/写端口B各引脚的数据 MOV R1,#0x00000000 @ 此值改为0x00000010, @ 可让LED1熄灭 STR R1,[R0] @ GPF4输出0,LED1点亮MAIN_LOOP: B MAIN_LOOP
分析:
1. LDR指令
LDR 伪指令用于加载立即数或一个地址值到指定寄存器
LDR R0,=0x56000050 @加载地址0x56000050到R0寄存器 ----- GPFCON寄存器
2.MOV指令
MOV R1,#0x00000100 @把十六进制数 0x00000100 赋值给R1寄存器
这里的0x00000100 === 配置GPF4为输出,需要对GPFCON寄存器的[9:8]进行赋值,也就是 0000000100000000b 转换成十六进制 0x00000100
3.STR指令
STR R1,[R0] @向R0寄存器写入R1寄存器的数据 即: CPFCON ===> 0x00000100 设置GPF4为输出引脚
后面的 0x56000054 的操作一样的原理
Makefile文件
---------------------------------------------------------------------
led_on.bin : led_on.S
arm-linux-gcc -g -c -o led_on.o led_on.S #编译 led_on.S
arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf #连接成elf可执行程序, -Ttext 0x00000000 定义代码段开始地址(0地址)
arm-linux-objcopy -O binary -S led_on_elf led_on.bin #转换elf文件为bin文件(方便烧写)
clean:
rm -f led_on.bin led_on_elf *.o
--------------------------------------------------------------------
烧写 --- 上电
nLED_1 成功点亮啦~!
- 1.点亮1个led程序分析(汇编)
- 1.点亮1个led程序分析(C语言)
- mini2440之首个C程序点亮LED分析
- 编写第1个程序点亮LED汇编程序
- Cortex A8 LED 点亮程序分析
- TQ2440系列一 ADS 1.2 汇编点亮4个LED
- TQ2440 ADS 1.2 汇编点亮4个LED
- tiny4412 裸机程序 二、汇编点亮LED灯
- 裸机程序二:GPIO点亮led灯 汇编
- 单片机小白学步系列(十四) 点亮第一个LED的程序分析
- ok210汇编点亮LED灯
- 点亮LED——汇编
- STM32F103C8T6-LED点亮程序
- 点亮led过程分析
- 1.点亮一盏LED(ARM汇编实现)
- 【记录】STM32学习之第一个程序(点亮LED)
- 第一个裸机程序---点亮led小灯
- MSP430F1612 第一个程序,点亮一个LED灯
- 线程回顾第二篇:传统定时器
- Big Data, Apple Driving Industry's Biggest Salaries
- html5 视频和音乐播放器标签属性
- C++设计模式---桥接模式—合成/聚合复用原则
- ORALCE控制文件
- 1.点亮1个led程序分析(汇编)
- GetTickCount() 函数的作用和用法
- poj3624 01背包
- Linux设备驱动之I/O端口与I/O内存
- MFC加入滚动条
- 快速排序算法
- 大小为0的数组
- getch() vs getchar()
- uestc OJ 1849Negative People in Da House