历史上的今天
今天是:2024年12月17日(星期二)
2020年12月17日 | TQ210的裸机编程(一)点亮一个LED灯
2020-12-17 来源:eefocus
初学TQ210不久,以前一直看CSDN的zjhsucceed_329的博客学习,最近发现,他的博客关于TQ210的帖子被删除很多了,为了更多的人能学习TQ210的裸机编程,凭自己的印象,和自己的一些见解,写一些关于裸机编程的一些入门知识,希望爱好这方面的人,能给出宝贵的意见,一起共同成长。
既然是裸机编程,点亮一个LED灯,就像写一个helloworld一样,虽然简单,但是又是一个不得不学的入门知识。
在TQ210的资料《TQ210_BOARD_V4_20121023》可以找到LED的电路图,从图中很清楚的看到,要使LED灯亮,只需要将GPC0_3和GPC0_4,这2个引脚高电平即可。《天嵌科技出品-TQ210_BOARD_V4用户硬件手册_V1.0》的电路图画的确实GPC1_3和GPC1_4这2个引脚(没有做过实验是否正确,仅为提示)。
既然知道只需要将GPC0_3、GPC0_4设置为高电平就能使灯亮,我们只需要去查看QT210的使用手册《S5PV210_UM_REV1.1》搜索GPC0即可。找到GPC0CON他的控制寄存器,如图:
然后搜索GPC0CON的使用:
我们点灯,需要的是GPC0CON[3]和GPC0CON[4]2个的操作,让他们输出高电平,所以要将控制寄存器的地址0xE0200060转为2进制,并将[12:15]和[16:19]位设置为Output,及设置为一个输出端口,至于是高电平,还是低电平由GOC0DAT来设置。
下面来看GPC0DAT的介绍:
由他的描述很容易知道,在输出的设置下,要想输入高电平,只需将GOC0DAT的[4:0]位设置成相应的位,举个例子比较容易明白:
如果想让GPCO_3输出为高电平,因为是第三个,则他相应的位就是2^3(十进制)=8(十六进制),GPC0_4就是2^4(十进制)=10(十六进制),则[4:0]分别是01000和10000,如果想让他们同时亮,则设置成11000即可,16进制就是18。
代码是以前根据zjhsucceed_329的博客写的,所以跟他的代码是一样的(在这做个申明,支持原创作者的版权,虽然现在没得这篇文章,自己以前抄袭的例子),是点亮一个LED灯,有兴趣的人可以自己仿造写一个,2个灯同时亮的程序,为了只是让自己了解裸机编程在位操作的重要,和对查手册的重要性,所以英语不好的朋友也要多恶补一下(比如我自己就是个很好的例子)。
led_on.S文件
.global _start @声明一个全局的标号
_start:
ldr r0, =0xE0200060 @GPC0CON寄存器
ldr r1, =0x00001000
str r1, [r0] @设置GPC0_3为输出,GPC0[15:12] = 0b0001
ldr r0, =0xE0200064 @GPC0DAT寄存器
ldr r1, =0x00000008
str r1, [r0] @设置GPC0_3为高电平
halt:
b halt @死循环
makefile文件
led_on.bin: led_on.o
arm-linux-ld -Ttext 0x20000000 -o led_on.elf $^
arm-linux-objcopy -O binary led_on.elf $@
arm-linux-objdump -D led_on.elf > led_on.dis
led_on.o : led_on.S
arm-linux-gcc -c $< -o $@
clean:
rm *.o *.elf *.bin *.dis
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:00 编辑 电子竞赛人应该具备的经验 1.许多人死在第一天上午,却毫无知觉. 第一天上午是一个选题的日子.一般每个组都有一个能力比较强的担任组长.往往由于缺乏经验,在方案选定上走上歧路. 到底 ...… 查看全部问答> |
|
在ceshell下的SHBindToParent函数有人能解释下如何用吗?请用中文解释,到msdn上抄袭没有意义。 在ceshell下的SHBindToParent函数有人能解释下如何用吗?请用中文解释,到msdn上抄袭没有意义。 … 查看全部问答> |
|
#define ADC2 ((ADC_TypeDef *) ADC2_BASE) #define ADC2 ((ADC_TypeDef *) ADC2_BASE) 中(ADC_TypeDef *) ADC2_BASE是什么啊定义一指针变量吗求解… 查看全部问答> |
|
人人都爱易电源——转发有礼! 活动主题:人人都爱易电源——转发有礼! 活动时间:10月11日—28日 活动链接:https://bbs.eeworld.com.cn/thread-352431-1-1.html … 查看全部问答> |
|
芯片是LM4F231, ARM M4的内核,开发环境是IAR 6.3。 遇到的问题,当定义局部变量时比如 float f=1.1; 时在IAR下察看local 局部变量值时发现f变量值为 也没有分配变量地址。 对于这一问题研究了很久, ...… 查看全部问答> |




