按键控制Led的裸奔代码
来源:互联网 发布:游戏ui网络班 编辑:程序博客网 时间:2024/04/25 18:03
很简单的代码,昨晚却折腾了很久,没有仔细看datasheet手册。
先说下原理:GPIOB5 6 7 8分别控制着led1 2 3 4,GPBCON的[11,10],[13,12],[15,14],[17,16]bit分别控制GPIOB的输入输出状态,01为输出状态(见datasheet),GPBDAT0 1 2 3位分别控制各led的数据,输出状态下当为0低电平的时候,对应的led会亮。
GPIOF1 4 2 0引脚控制着按键k1 k2 k3 k4,我们需要读取GPIOF的值来判断按键是否有按下,所以GPIOF要置为输入状态(GPFCON对应的各引脚为00),当有按键按下的时候,会产生一个低电平0,此时我们来轮询GPFDAT的值可以判断到是哪个键被按下。
代码如下:
汇编代码start.S
因为是裸机跑到程序,主程序又是c,所以要建立基本的c环境,建立堆栈,关闭看门狗以免系统不停的重启,我的程序是准备copy进cpu的片内ram中运行,其只有4k大小,所以栈顶不能超出这个范围。
c代码main.c
c代码中按键和led的对应可能有点饶,我昨晚就是饶的晕头了 ,其实很简单,动手写出对应关系就好
K1(GPF1) ------Led1(GPB5)
K2(GPF4) ------Led2(GPB6)
K3(GPF2) ------Led3(GPB7)
K4(GPF0) ------Led4(GPB8)
根据读k的GPFDAT来写Led的GPFDAT
下面的是头文件main.h
用来定义一些地址
最后的是Makefile
被注释掉的部分其实也是可以的,但是生成的bin文件竟然有32K,远大于4k,所以我改用了下面的
其实使用的部分一些参数为也还没有理解,以后学会了就补上
关于注释掉的部分ld的参数-Bdynamic -lgcc_s是google来的,为了避免一个错误
======================================================================
下面说下怎么运行这段程序
我是用jlink下载到cpu片内ram中运行的,先将TQ2440置为nand flash启动,nand flash启动的原理是,nand 会自动将自己的前4k代码复制到cpu的片内ram中,此ram只有4k。此时的片内ram的地址(本来是0x40000000)被映射到0x0地址,所以直接会从此ram运行,这些都是硬件完成的,我们无需干涉,我们能做的就是nand的前4k代码。嗯,扯远了点,但知道了这一原理我们就可以进行下面的操作了
链接好jlink和开发板,打开jlink commader,它会自动识别开发板的信息,
在命令行输入:
loadbin d:/led.bin 0
setpc 0
g
下载命令 目标文件位置 下载到的位置
设置pc值
跳转到0
如果你想从nor flash启动,也是可以的,此时片内ram未映射,地址为0x40000000,所以稍加改动即可
loadbin d:/led.bin 0x40000000
setpc 0x40000000
g
ok,到这里一切大功告成了 ,可以试验下,是否有效了,如果有出入,请仔细对照datasheet和开发板原理图修改
- 按键控制Led的裸奔代码
- tq2440裸奔程序2-按键控制LED
- 基于mini2440的按键中断控制LED(裸机代码)
- 简单的按键控制LED
- 按键控制led
- 按键控制led驱动
- 按键控制led驱动
- 按键控制led应用程序
- 按键控制LED
- ARM按键控制LED
- 按键控制led亮灭
- 按键控制显示LED亮度
- mini2440 按键控制LED 驱动
- 3.按键控制LED灯亮灭
- S3C2440 用按键控制LED
- 5.0 按键控制LED灯
- 独立按键控制led灯
- 5、按键控制LED位移
- 将数据绑定到控件(TextBox、ComboBox),BindingNavigator控件、DataGridView的使用及编程、PropertyGrid组件
- WCF足迹6:并发1
- 内存接口
- C# Delphi读写INI文件
- 图片上传功能关闭?
- 按键控制Led的裸奔代码
- inetd 常常被称为 “超级服务员”---默默无闻的xinetd
- 去过的地方
- WCF足迹7:并发2
- 结构体的字节对齐方式
- 刚刚开通
- 如何保持软件开发团队的稳定性
- 室内设计色彩学--小通视觉
- Access 执行查询时,抛出“标准表达式中数据类型不匹配”的错误