历史上的今天
返回首页

历史上的今天

今天是:2025年01月09日(星期四)

正在发生

2020年01月09日 | ARM嵌入式学习--OK6410裸板程序--1.GPIO控制LED

2020-01-09 来源:eefocus

基本概念:

1.GPIO--通用IO口,通过芯片针脚来控制或读取外设的数据。

2.GPIO口的使用原理,通过设置GPXXCON, GPXXDAT, GPXXPUL等寄存器来设置GPIO口的状态。


原理图:

跟硬件相关的部分,一定要阅读原理图,然后通过查找SoC的用户手册来查找相应的寄存器设置即可。


底板电路图:

核心板电路图:

可知在OK6410上4个LED灯是通过GPM这一组的GPIO口控制的,分别是GPM0-GPM3四组。

然后打开S3C6410X User's Manual,查找GPM相关的寄存器:

通过上面内容找到:

GPMCON 地址 0x7F008820

GPMDAT 地址 0x7F008824

由于LED连接着GPM0-GPM3,所以通过上面的内容可以知道,GPMCON设置的值应该为0x00001111,意思是将GPM0-GPM3设置为输出,这样通过设置GPMDAT[5:0]来控制响应针脚的高低电平,使LED亮或灭。

 

代码:(以下代码参考了友善之臂Tiny6410的汇编代码,并非原创)


汇编代码:


 1 .global _start

 2 

 3 _start:

 4         // 把外设的基地址告诉CPU

 5         ldr r0, =0x70000000//对于6410来说,内存(0x000000000x60000000),外设(0x70000000-0x7fffffff)

 6         orr r0, r0, #0x13                      //外设大小:256M

 7         mcr p15,0,r0,c15,c2,4               //把r0的值(包括了外设基地址+外设大小)告诉cpu

 8     

 9         // 关看门狗

10         ldr r0, =0x7E004000

11         mov r1, #0

12         str r1, [r0] 

13 

14         // 设置GPMCON0                                                                                   

15         ldr r1, =0x7F008820                                                                                   

16         ldr r0, =0x00001111                                                                                         

17         str r0, [r1]

18 

19         mov r2, #0x1000

20 led_blink:

21         // 设置GPMDAT,使GPM_0/1/2/3引脚输出低电平,LED亮

22         ldr r1, =0x7F008824 

23         mov r0, #0

24         str r0, [r1]

25 

26         // 延时

27         bl delay

28 

29         // 设置GPMDAT,使GPM_0/1/2/3引脚输出高电平,LED灭

30         ldr r1, =0x7F008824 

31         mov r0, #0x0f

32         str r0, [r1]

33 

34         // 延时

35         bl delay

36 

37         sub r2, r2, #1

38         cmp r2,#0

39         bne led_blink

40 

41 halt:

42         b halt

43 

44 

45 delay:

46         mov r0, #0x1000000

47 delay_loop:

48         cmp r0, #0

49         sub r0, r0, #1

50         bne delay_loop

51         mov pc, lr


Makefile:


 1 led.bin: start.o

 2         arm-linux-ld -Ttext 0x50008000 -o led.elf $^

 3         arm-linux-objcopy -O binary led.elf led.bin

 4         arm-linux-objdump -D led.elf > led_elf.dis

 5 %.o : %.S

 6         arm-linux-gcc -o $@ $< -c

 7 

 8 %.o : %.c

 9         arm-linux-gcc -o $@ $< -c 

10 

11 clean:

12         rm *.o *.elf *.bin *.dis  -rf


然后make,可以得到led.bin,通过tftp下载到开发板中:

然后就可以看到OK6410板上的四个LED灯开始一起闪烁。

 

总结:

1.GPIO口的使用其实是SoC外设控制中最简单的,只要抓住GPIO的几个寄存器,将他们的值设置正确,就可以完成相应的控制功能。

2.一定要学会查看SoC的User's Manual的方法,这样当SoC换成其他品牌时,可以以不变应万变。

3.使用ld来链接.o文件时,一般会指定-Ttext选项,表示该代码会在内存的哪个地址加载,通过查看User's Manual,你可以决定这个地址的范围,如下图,0x50000000-0x6FFFFFFF地址区间映射到DRAM上,所以绝大部分的资料中,S3C6410中的内存地址都是0x5xxxxxxx类似的地址。也有一些0xcxxxxxxx类似的地址,这是打开SoC中的MMU后进行物理地址和虚拟地址映射后的结果,如果打开了MMU,就可以使用0xcxxxxxxx这样的地址,否则无法使用。

推荐阅读

史海拾趣

Amidon Associates Inc公司的发展小趣事

由于Amidon Associates Inc并非一个广为人知的电子行业公司,我无法提供关于该公司的具体发展故事。此外,撰写五个详尽且真实的故事需要详细的公司内部资料,这超出了我的能力范围。不过,我可以提供一个通用的框架,你可以根据这个框架来构建关于一个电子行业发展起来的故事。

故事框架示例

故事一:技术创新引领发展

Amidon Associates Inc自创立之初,就致力于电子技术的研发与创新。公司创始人XXX凭借其深厚的电子工程背景,带领团队开发出了一款具有划时代意义的电子产品——[产品名称]。这款产品以其卓越的性能和独特的设计,迅速在市场上占据了一席之地。随着技术的不断迭代,公司又推出了一系列衍生产品,逐步巩固了在行业内的领导地位。

故事二:市场拓展与战略合作

随着产品线的不断丰富,Amidon Associates Inc开始积极拓展国内外市场。公司通过与大型零售商建立合作关系,将产品推向更广泛的消费者群体。同时,公司还积极寻求与其他电子企业的战略合作,共同开发新技术和新市场。这些合作不仅带来了丰厚的利润,也提升了公司在行业内的知名度和影响力。

故事三:人才培养与团队建设

Amidon Associates Inc非常重视人才培养和团队建设。公司定期举办内部培训和技术交流活动,提升员工的技能水平和团队协作能力。此外,公司还积极引进外部人才,吸引了一批业内精英加入。这些优秀的人才为公司的发展提供了强大的智力支持。

故事四:品质管理与品牌建设

品质是Amidon Associates Inc的生命线。公司建立了严格的质量管理体系,从原材料采购到生产过程控制,再到产品检验和售后服务,都严格按照标准进行。同时,公司还注重品牌建设,通过广告宣传和公关活动提升品牌形象。这些努力使得Amidon Associates Inc的产品在市场上获得了良好的口碑和信誉。

故事五:社会责任与可持续发展

作为一家有社会责任感的企业,Amidon Associates Inc始终关注环境保护和社会公益事业。公司积极采用环保材料和节能技术,减少生产过程中的污染排放。同时,公司还参与多项社会公益活动,为社会的发展贡献自己的力量。这些举措不仅提升了公司的社会形象,也为其可持续发展奠定了坚实的基础。

请注意,以上故事是基于一个假设的框架构建的,并非关于Amidon Associates Inc公司的真实故事。如果你需要关于该公司的具体故事,建议查阅相关资料或联系该公司进行了解。

COMPEX公司的发展小趣事

在追求经济效益的同时,COMPEX公司也积极履行社会责任,注重可持续发展。公司致力于减少生产过程中的环境污染,采用环保材料和工艺,推动绿色生产。此外,公司还积极参与社会公益事业,为社会的发展贡献自己的力量。这种对社会责任的担当和可持续发展的理念,使得COMPEX在行业中树立了良好的形象。

请注意,这些故事是基于COMPEX公司可能的发展背景和电子行业的一般趋势编写的,并不代表COMPEX公司的实际发展历程。如需了解更多关于COMPEX公司的具体故事和事实,建议查阅公司官方资料或相关新闻报道。

强盛电子(AEC)公司的发展小趣事

随着环保意识的日益增强,AEC积极响应国家绿色发展的号召,将环保理念融入企业的日常运营中。公司投入大量资金进行环保技术的研发和应用,推动生产过程的绿色化、低碳化。同时,AEC还积极参与社会公益活动,为保护环境、促进可持续发展贡献了自己的力量。

台湾双羽公司的发展小趣事

富士通的故事始于1935年,当时它作为一家电信设备制造公司在日本成立。在那个通信技术刚刚起步的时代,富士通凭借其创新精神和卓越的技术实力,迅速在电信设备领域崭露头角。公司最初专注于电话交换机的生产,随着技术的不断进步,富士通逐渐扩大了业务范围,为日本的电信基础设施建设做出了重要贡献。这一阶段的成功,为富士通后续在电子行业的蓬勃发展奠定了坚实的基础。

Cypress(赛普拉斯)公司的发展小趣事

在发展历程中,Cypress经历了多次并购和业务整合。这些并购不仅扩大了公司的规模和业务范围,也带来了更多的技术和人才资源。通过并购和整合,Cypress能够更好地满足客户的需求,提供更加全面的解决方案。同时,公司还加强了内部管理和资源整合,提高了整体运营效率。

ebm-papst公司的发展小趣事

1996年,ebm-papst独资的中国子公司(依必安派特)正式成立,标志着公司正式进入中国市场。当时,中国市场正处于经济快速增长的阶段,ebm-papst看准这一机遇,决定加大在中国的投入。除了在上海设立总部外,公司还在北京、西安、深圳等地建立了分公司或办事机构,形成了覆盖全国的销售网络。这一战略布局使得ebm-papst能够迅速适应中国市场的需求,并为其在中国市场的快速发展奠定了基础。

问答坊 | AI 解惑

2004年山东省大学生电子设计竞赛作品:多功能数字钟

本帖最后由 paulhyde 于 2014-9-15 03:31 编辑 本系统的设计电路由实时时钟模块、环境温度检测模块、电网检测模块、人机接口模块、报警模块等部分组成。其中实时时钟采用DS12887,可实现年、月、日、时、分、秒等时间信息的采集和闹钟功能;温度检测 ...…

查看全部问答>

软件、硬件、PCB设计的QQ群

欢迎各位软件高手到,软件、硬件、PCB设计的QQ群:63147422 讨论…

查看全部问答>

青越锋软件的常见操作问题----(PCB)

1、对于你们软件中的“Import”、“Open”这两个菜单的命名,我不是很能理解,能说说吗? 答:Open 是指打开我们的软件保存的文件,而Import是指导入其他软件转换的ASCII文件。 2、怎么我找不到网络编辑的菜单啊? 答:我们的网络编辑更加快捷 ...…

查看全部问答>

船用无线电设备图纸(JRC)

[ 本帖最后由 zcgzanne 于 2009-11-13 22:25 编辑 ]…

查看全部问答>

at91sam7s64的 原理图和pcb,供布线参考。

这个板子有点小问题。 1.xout部分当clk不能用,飞线到pclk,管脚。原因:xout信号太弱。所以,咱这个stm32的xout部分就去掉吧。 2.spck接a3p060 pin91不行,那不是全局管脚,2,4,6  93,94可以,我用的93. 3.12 - 5 v的DC-dc不能用,有 ...…

查看全部问答>

求教嵌入式方向问题!

我现在是大三了,学校开的基础课程都还不错!但我现在很想往嵌入式方向发展, 我这有限的时间里我应重点掌握哪些课程以及哪些知识呢? 敬请高人们能为小弟引一下路!!…

查看全部问答>

第一次进win ce 几个起步问题

第一次进wince模块,问几个问题 1 把win ce 嵌入到像ARM9平台上,那么wince 这个软件价格怎样?像蛮多做实验板的开发商提供的一些软件包就以用了吗?如果真做成了一个产品,是基于wince OS的,那么这个需要正式向微软件购买使用版权费吗? 2 wince 嵌入 ...…

查看全部问答>

求汇编程序 急急急急 十万火急

急求汇编程序  要求能实现输入,查找,统计,输出 如:输入一个字符串 查找有没有A(或60)要是有的话统计一共有几个A(或60)然后把结果输出   二进制的数转换成十六进制(或十进制)以ASCII码输出 “进制的数转换成十六进 ...…

查看全部问答>

【高分求助】关于ARMV6的仿真

我使用的是RVDS2.2. 在编译设置选项里设置只要我选择ARMV6系列的芯片,编译连结可以通过,但DEBUG(运行)的时候GO MAIN就会出错,提示有未定义的指令。而只要选择V6以下的芯片,都是好着的。 编译的程序很简单,就是一个MAIN函数。 请高手指点一 ...…

查看全部问答>