这是我拿到FriendlyARM的mini2440板子后的第一个实验,也是入门级的实验。

    我安装的是redhat as5的虚拟机。此虚拟机上已经安装好了交叉工具链。板子上已经烧入了vivi,串口工具是SecureCRT,使用usb下载工具DNW.exe,用来下载二进制可执行文件到内存运行,其具体的使用方法见mini2440-um-*.pdf
参考芯片手册,得知
    led1 <---> GPB5
    led2 <---> GPB6
    led3 <---> GPB7
    led4 <---> GPB8
GPBCON 地址为 0x56000010
GPBDAT 地址为 0x56000014
 本实验目的是:1 熟悉arm汇编指令;2 熟悉arm芯片GPIO操作。
  实验功能是:指定控制某个灯,让其亮或灭。掌握这个功能以后,再写类似跑马灯的功能就很简单了。
方法一:使用汇编代码点亮
实验源代码:
@******************************************************************************
@ File:led_on.S
@ 功能:LED点灯程序,点亮LED4
@******************************************************************************       
            
.text
.global _start
_start:     
            LDR     R0,=0x56000010      @ R0设为GPBCON寄存器。此寄存器
                                        @ 用于选择端口B各引脚的功能:
                                        @ 是输出、是输入、还是其他
            MOV     R1,#0x00010000        
            STR     R1,[R0]             @ 设置GPB8为输出口, 位[17:16]=0b01
            LDR     R0,=0x56000014      @ R0设为GPBDAT寄存器。此寄存器
                                        @ 用于读/写端口B各引脚的数据
            MOV     R1,#0x00000000      @ 此值改为0x00000100,
                                        @ 可让LED4熄灭
            STR     R1,[R0]             @ GPB5输出0,LED1点亮
MAIN_LOOP:
            B       MAIN_LOOP

对应的Makefile:

led_on.bin : led_on.S
 arm-linux-gcc -g -c -o led_on.o led_on.S
 arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf
 arm-linux-objcopy -O binary -S led_on_elf led_on.bin
clean:
 rm -f   led_on.bin led_on_elf *.o

方法二:使用C语言点亮
#define GPBCON      (*(volatile unsigned long *)0x56000010)
#define GPBDAT      (*(volatile unsigned long *)0x56000014)
int main()
{
    GPBCON = 0x00010000;    // 设置GPB8为输出口, 位[17:16]=0b01
    GPBDAT = 0x00000000;    // GPB8输出0,LED4点亮,此值改为0x00000100,LED4点亮熄灭
return 0;
}
这里需要一段汇编代码来设置C程序的堆栈:crt0.S
@******************************************************************************
@ File:crt0.S
@ 功能:通过它转入C程序
@******************************************************************************      
.text
.global _start
_start:
            ldr     r0, =0x56000010     @ WATCHDOG寄存器地址
            mov     r1, #0x0                     
            str   r1, [r0]              @ 写入0,禁止WATCHDOG,否则CPU会不断重启
            
            ldr     sp, =1024*4         @ 设置堆栈,注意:不能大于4k, 因为现在可用的内存只有4K
                                        @ nand flash中的代码在复位后会移到内部ram中,此ram只有4K
            bl      main                @ 调用C程序中的main函数
halt_loop:
            b       halt_loop
对应的Makefile文件:
led_on_c.bin : crt0.S  led_on_c.c
 arm-linux-gcc -g -c -o crt0.o crt0.S
 arm-linux-gcc -g -c -o led_on_c.o led_on_c.c
 arm-linux-ld -Ttext 0x0000000 -g  crt0.o led_on_c.o -o led_on_c_elf
 arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin
 arm-linux-objdump -D -m arm  led_on_c_elf > led_on_c.dis
clean:
 rm -f led_on_c.dis led_on_c.bin led_on_c_elf *.o

mini2440 之——LED简单控制(裸机) c与汇编相关推荐

  1. stm32 led屏控制卡_LED显示屏控制卡解析

    LED显示屏控制卡是LED图文显示屏的核心部件,负责接收来自计算机串行口的画面显示信息,置入帧存储器,按分区驱动方式生成天津LED显示屏所需的串行显示数据和扫描控制时序.LED显示屏画面的效果与它有关 ...

  2. 二、点亮LED(GPIO控制)

    二.点亮LED(GPIO控制) 文件状态: [ ] 草稿 [ ] 正在修改 [ √ ] 正式发布 文件标识: 当前版本: V1.1 作 者: Skymixos 完成日期: 2022年10月02日 版 ...

  3. python led屏控制_【教程】简易Python上位机之LED控制

    电子爱好者应该不会对"上位机"这个词感到陌生,毕竟或多或少有过接触.但若是说到上位机的开发的话,大家就不一定熟悉了.很多电子爱好者完全没有接触过上位机的开发工作,他们真的没有相应的 ...

  4. 《STM32单片机开发应用教程(HAL库版)—基于国信长天嵌入式竞赛实训平台(CT117E-M4)》第四章4.1 LED显示控制实验

    写在前面-- <STM32单片机开发应用教程(HAL库版)-基于国信长天嵌入式竞赛实训平台(CT117E-M4)>第四章4.1,本节将通过LED显示控制实验,学习STM32G431的开发技 ...

  5. MT7621方案 LED 灯控制 (基于OpenWrt平台)

    注:出处不明,最开始是在这里看到的,图竟然没有...没有...相关资料也几乎木有...datasheet里也没有寄存器配置说明......MT7621还真是坑爹啊! 目前市面上大部分路由器方案是基于M ...

  6. openwrt中LED的控制

    openwrt中LED的控制 上手总结 配置方法一 简单操作 直接进入/sys/class/leds目录下面.以<路由器名字>:颜色:<功能>格式命名的目录均对应一个LED. ...

  7. LED灯控制 实验报告

    实验目标 掌握STM32的GPIO的使用方法,并能实现对LED的控制. 实现跑马灯实验,即多个LED灯(3个以上)依次点亮熄灭. 实验步骤 跑马灯实验,即多个LED灯(3个以上)依次点亮熄灭. (1) ...

  8. android 亮化图片,LEDLAMP(led灯光控制)

    LEDLAMP(led灯光控制)是一款非常不错的手机端led等控制软件.LEDLAMP(led灯光控制)app这款软件可以对:舞台灯光.亮化工程.商业照明等一系列的led灯控制,软件的操作需要利用到G ...

  9. SGL8022W单通道直流LED 灯光控制触摸芯片

    SGL8022W单通道直流LED 灯光控制触摸芯片版本1.4 概述 SGL8022W 是一款用于LED 灯光亮度调节及开关控制的单通道触摸芯片.使用该芯片可以实现 LED 灯光的触摸开关控制和亮度调节 ...

最新文章

  1. debounce实现 js_javascript防抖函数debounce详解
  2. Phalcon控制器
  3. 云上主机SSH秘钥对连接linux注意事项
  4. 8 种常被忽视的 SQL 错误用法
  5. CSS设置图片的对齐
  6. vc下c语言网络编程,用VC编写C/S消息传送程序
  7. java知识百科全书--强烈推荐
  8. Angular 下拉菜单实现的一个例子
  9. gather torch_浅谈Pytorch中的torch.gather函数的含义
  10. 单片机红外通信c语言,基于C语言的计算机与多单片机红外无线串口通信的实现.doc...
  11. 算法-两最长回文子串
  12. Java 实现发送Http请求
  13. (每日一题 day 002 - 模拟) 166. 分数到小数
  14. nyoj461 Fibonacci数列(4)解通项公式
  15. window电脑 休眠后无法唤醒 解决办法
  16. 手把手教你做一个天气时钟,推荐收藏
  17. 正反向隔离装置(网闸)
  18. 【NOIP2016】bzoj4719 天天爱跑步
  19. 唐宇迪之tensorflow学习笔记项目实战(LSTM情感分析)
  20. 医学统计学 第五章(定性资料的统计描述)

热门文章

  1. 【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )
  2. 【网络安全】网络安全攻防 -- 黑客攻击简要流程
  3. Linux Shell的输入彩色字体
  4. spark 执行流程及各组件执行
  5. 01.Python基础-3.集合容器
  6. 谁偷走了程序员的时间??
  7. ubuntu 安装pycharm
  8. JEECG弹出框提交表单
  9. 学习node js 之微信公众帐号接口开发 准备工作之三
  10. Lucene4.3和Lucene3.5性能对比(一)