LED跑马灯实验笔记
来源:互联网 发布:js使用正则表达式 编辑:程序博客网 时间:2024/05/05 17:00
此总结是依照S3C2440总结。对于S3C2440,LED接在CPU管脚图上有nLED_1、nLED_2、nLED_3、nLED4。而他们分别对应的寄存器是GPB5、GPB6、GPB7、GPB8,这里要说下GPB寄存器。PORT端口一共有GPA 25位输出端口、GPB 11位输入输出端口、GPC 16位输入输入端口、GPD 16位输入输出端口、GPE 16位输入输出端口、GPF 8位输入输入端口、GPG 16位输入输出端口、GPH 9位输入输出端口、GPJ 13位输入输出端口。这里不做细致总结。以后学到PORT再总结。先拿CPB为例。
端口控制寄存器GPBCON是用来设置输入输出属性的,GPBCON在手册中写的地址为0x56000010,端口数据寄存器GPBDAT的地址是0x56000014,端口上拉寄存器GPBUP的地址是0x56000018,PBCON寄存器是从第0位到第10位的11位寄存器。每个位由2位二进制数表示,00表示输入状态,01表示输出状态,10表示功能引脚,11是保留的。输入状态是将数据写入状态寄存器的,而输出状态是将数据从数据寄存器中读出。我们想要让LED亮灭是将LED对应的位设置成10就可以了。对于端口上拉寄存器我对它还不是怎么了解,先将它的作用记一下吧。端口上拉寄存器用于控制每组端口的上拉电阻为禁止还是使能。如果为0,则是该引脚上拉电阻使能,为1则禁止,如果使能了,则不论引脚配置为那种功能上拉电阻都会起作用。现在对LED与CPU的连接应该有些了解了。应该开始写程序了。首先得写个引导程序。
AREA |DATA|,CODE,READONLY
ENTRY
ldr r13, =0x1000
IMPORT main
b main
END
群里有人说只写后面3行就可以。可是我试了下不好使,(不知道为什么我对ARM汇编不是很了解)总之对应跑马灯函数的主函数应该是main而且返回类型要求是int型的。贴出论坛上对此话的理解不错,看到那个=号就知道LDR是伪指令,用来解决mov之类或者ldr不能直接解决的问题,把这个问题留给汇编器来解决。LDR r13,=0x1000.看看0x1000内存4k的位置有些什么东西,r13一般表示为lr,程序跳转用的。似乎bootloader正好是4k的大小。
下面贴出我写的跑马灯的程序
#define GPBCON (*(volatile unsigned *)0x56000010)
#define GPBDAT (*(volatile unsigned *)0x56000014)
#define GPBUP (*(volatile unsigned *)0x56000018)
void delay(int x)
{
int i,j;
for(i=0;i<1000;i++)
{
for(j=0;j<x;j++)
;
}
}
int main()
{
GPBCON=0x3d57fc;//11 01 01 01 01 11 11 11 11 00第0位应该是蜂鸣器
GPBDAT=0x3ff;//全置1让LED灯灭
GPBUP=0X000; //上啦电阻使能
delay(300);
while(1)
{
GPBDAT=0xffdf;//第5位为0让第一个LED亮
delay(200);
GPBDAT=0xffbf;//第6位为0让第二个LED亮
delay(200);
GPBDAT=0xff
delay(200);
GPBDAT=0xfeff;//第8位为0让第四个LED亮
delay(200);
}
return 0;
}
程序写完了,烧到板子行了发现了个问题,就是没达到预期的效果。理想是12341234循环亮,但是真正的LED却是1234123如此循环亮。具体点是1234123灭1234123灭的循环。while循环体中没有让灯全灭竟然出现了全灭的状态。而在while循环外面有个delay函数delay值钱灯是全灭的这样可以想到程序并不是循环的执行while中的语句,而是过一段时间就重新执行。这是什么原因呢?我还不了解。和群里人讨论了一下,好像是因为看门狗没关导致的,现在我的实力还不能确定是不是这样。还等我继续学习再发现吧。
- LED跑马灯实验笔记
- mini2440 LED 跑马灯实验
- 点亮LED(跑马灯实验和流水灯实验)
- 2013-10-06 实验之Led跑马灯
- LED跑马灯
- 单片机LED跑马灯
- tiny6410 LED跑马灯
- LED跑马灯效果
- LED跑马灯_20160107
- LED跑马灯-库函数
- LED跑马灯-寄存器
- STM32学习笔记一(LED,跑马灯,呼吸灯)
- stm32f2系列 学习笔记之LED跑马灯
- Arduino学习笔记——LED跑马灯
- LED跑马灯之二
- LED跑马灯-位操作
- arm项目--LED跑马灯
- 【led】djyos下基于tq2440开发板上跑马灯实验
- 你不是菜鸟3:让他升职的简单技术
- c++专题: const
- C++中const用法浅析
- java插件菜单
- java插件00
- LED跑马灯实验笔记
- c1
- c3
- 达芬奇 DMSoC 初始化流程
- 字符串与图片的互相转换
- n!后面零的数目
- 操作系统
- 让我高兴的事的记录
- [转] 如何看透一个人