首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2024国际航空电子大会
2024国际 AIoT 生态发展大会
3D IC 设计和Chiplet资料下载
车载总线测试和解码方案
新能源汽车三电测试技术中心
在线研讨会
EE直播间
小测验
白皮书
行业及技术活动
杂志免费订阅
免费在线工具
厂商资源中心
论坛
博文
电子工程专辑
电子技术设计
国际电子商情
资料
白皮书
研讨会
芯语
文库
登录|注册
登录
mzwhhwj
修改
文章:
26
阅读:
59734
评论:
33
赞:
435
好友
私信
个人主页
文章
26
原创
0
阅读
59734
评论
33
赞
435
原创
ARM9/ARM11裸机开发笔记1之MDK开发环境和点亮LED
2015-1-11 12:35
6854
17
27
分类:
MCU/ 嵌入式
很多从单片机或者从CM3转到ARM9/ARM11的时候,一开始就讲得是Uboot,Linux,然后就是什么QT等高级玩意,不像单片机有什么裸机开发的概念,的确,这些高级ARM本来就是用来跑系统,谁用来它做裸机开发呢。但是如果我们要更好了解ARM的工作原理,,尤其是想进阶嵌入式中最难的一层,驱动层的话,甚至想把其它的非Linux系统移植到ARM9/ARM11上。我们就无法避免要跟ARM跟底层的寄存器打交道,要了解ARM的内核,时钟,GPIO,SPI,等等外设的工作原理和配置。通过裸机的一些实验,我们就可以像用STM32这样来写ARM9/ARM11代码,让我们更深入了解ARM的原理。
我之前因为在做把MF这个系统移植到S3C2416上,基本上都靠MDK来完成调试,对ARM9/ARM11的认识有了进一步的认识。这里我就以S3C2416为例来讲怎么建立开发环境和点亮LED灯。
1、裸机开发必要条件:玩过ARM9之上同学都知道,ARM9之类的ARM是没有内部Flash的话,我们不能直接用开发软件来对烧写代码来调试硬件,这点跟我们开发单片机是最大的区别,也是导致很多人不知道怎么来进行ARM9的裸机开发。有同学就说,没有Flash,还有RAM,没错S3C2416内部是有RAM,但是很小,S3C2416的内部RAM在用NAND启动时候,才8K而已,S3C2440的才4K,我们要在这8K的RAM既放存数据还要放代码,那我们写不了几行代码。所以最好的方法就是用Uboot,先把芯片的时钟,SDRAM都初始化好,那我们就可以用SDRAM来调试代码,一般都有64M的SDRAM,对我们来完全足够用了。这里我只在开发上烧写了Uboot,内核跟文件系统都没有烧,因为如果Uboot引导了Linux内核后,Linux内核接到CPU的控制权,Debug会被关掉,我们就无法再使用Jlink对开发进行调试。你可以进去Uboot上用nand erase来把内核擦掉,不然你每次要调试的时候要注意不要让Uboot引导内核。
2、用MDK建立工程:新建工程大家都会,我这里只说要点。选择器件的话,选择我们对应ARM开发板上芯片,注意如果是MDK5.0以上,默认是没有安装有ARM7/ARM9有器件库的,我有发帖子共享给大家,如果用是用MDK5.0以上的同学翻翻帖子去下载。
点确定后,然后是打开工程设置
其中IROM就是代码区的地址,前面说了我们没法用NAND,只能通过SDRAM来调试。我的S3C2416的开发是64M的DDR,地址就是从0X30000000开始到0x34000000,这里我一半用做ROM,从0x32000000开始,另一半用做RAM。
Debug设置,一样我们设置成J-Link。点OK就可以完成工程的建立。
3、点亮LED灯:用过STM32的同学都知道,新工程后,要增加启动代码,然后才是C代码来写Main函数。这里我们没有启动代码,也不知道怎么找到Main函数。没关系,我们自己来写个最简单的启动代码,让它来转到我们的C代码。新建一个startup.s的汇编代码文件,然后加入到工程上来,代码如下
IMPORT Main ;//c语言入口函数
PRESERVE8 ;//字节对齐
CODE32 ;//ARM代码
AREA RESET,CODE,READONLY ;//reset名,代码段,只读
ENTRY ;//程序入口
bl Main
END
IMPORT Main这里就引入我们C文件里的Main函数,ENTRY 表示的这里代码的开始,编译器就从这里开发编译代码。 bl Main这里就是跳转到我们的Main函数。END就是说这里代码的结尾。相关的汇编指令大家可以去找《DUI0204HC_rvct_assembler_guide 》这本书,里面就讲到MDK所有的汇编指令。这里我们就写出来最简单的启动代码。接着就是写我们的C代码了,增加Main.c文件到工程中,我的代码如下:
#define GPBCON *(volatile unsigned int*)0x56000010
#define GPBDAT *(volatile unsigned int*)0x56000014
#define GPBUDP *(volatile unsigned int*)0x56000018
int Main(void)
{
unsigned int i;
GPBCON = 1 << 2;//设置PB1为输出
GPBUDP = 2 << 2;//设置PB1为上拉
GPBDAT &= ~(1 << 1);//置PB1的输出为0
while(1)
{
}
}
点亮LED的原理大家都知道,就不用我再说了,我的开发的LED的控制脚对应的是PB1,这里我就要对GPIOB第一个引脚进去配置。代码的开头我定义了GPIOB口相关的寄存器。具体的自然也就是翻对应ARM的参考手册,下面是S3C2416手册相关GPIOB的寄存器
这里就以GPBCON的寄存器来说,折腾寄存器的同学一看明白怎么做了。GPBCON是来控制GPIO的输入还是输出的,我们这里把GPB1设置成输出,然后设置GPBDAT寄存器让GPB1输出低电平,LED就会被点亮。
接下就是编译,代码没写错就会编译成功,点调试之前要注意开发不要进去Linux,如果你没有擦除内核,就要让开发板进入Uboot,如下:
点调试,弹出下面对话框,提示Jlink不支持S3C2416,没关系,点Yes
然后我们选一个最接近S3C2416的S3C2410A。如果是用S3C2440的话应该就不会有这个问题。
然后点OK进去调试。进去调试后注意不要点运行。因为这时候的PC指针地址是0x0,而我们的代码并不是在0x0,而是在0x32000000。我们手工修改PC指针为0x32000000
然后我们单步执行,可以看代码跑起来了,代码执行于While(1)的时候,就可以看到LED灯亮起来了。
裸机
arm9
s3c2416
写原创有奖励!2025面包板原创奖励正在进行中
最新发表
推荐阅读
明星博主
原创博文
年度排行
博文排行
博文评论
FPGA/CPLD
MCU/ 嵌入式
模拟
电源/新能源
测试测量
通信
智能手机
处理器与DSP
PCB
汽车电子
消费电子
智能硬件
物联网
软件与OS
采购与分销
供应链管理
工程师职场
EDA/ IP/ 设计与制造
无人机
机器人/ AI
医疗电子
工业电子
管理
写博文
点赞(
17
)
收藏
分享到:
上一篇:
STM32的内存变量的由来
下一篇:
Microsoft .NET Micro Framework移植开发笔记之移植初步
PARTNER CONTENT
换一换>
更多>
案例分享 | 高效节能,性能卓越!汉高三防漆为电动汽车充电系统披上"隐形铠甲"
汉高
2025-03-21
文章评论
(
10
条评论)
登录
后参与讨论
您需要登录后才可以评论
登录
|
立即注册
发布
用户377235
2015-7-4 14:21
写的很好
回复
用户377235
2015-4-4 21:46
这个是在线调试吧,可不可以使程序单独运行?
回复
用户1672330
2015-1-16 09:54
努力学习中新手一个
回复
xyd20405
2015-1-16 07:30
Mark. 对我这样的初学者来说,建立概念比较重要。这是一篇好文。
回复
用户377235
2015-1-15 19:37
讲解不够详细
回复
hnltm_451604858
2015-1-15 18:16
MDK不支持ARM11吧?
回复
用户592202
2015-1-15 17:11
文字润色不够!有好多语句不通顺、词不达意,不容易理解。可能没有检查完就上传了。
回复
mzwhhwj
2015-1-15 09:51
我这边是没有问题的
回复
用户1675147
2015-1-15 09:36
已阅读,谢谢
回复
用户1823973
2015-1-15 08:38
报告楼主,我这图片看不了,无法显示。
回复
查看更多评论
相关推荐阅读
mzwhhwj
2017-12-07 08:49
物联网前端后台1——一条硬件狗的学习历程
距上次写MQTT的文章,不知不觉已经过了三个月了,本来打算写自己搭建MQTT Borker的,但这方面的资料只要一百度都有,难度也不大,又加上项目比较忙,一直没时间写文章。从上个月开始...
mzwhhwj
2017-09-12 08:18
物联网核心之MQTT移植
在上一篇文章中,只是讲了MQTT的主要内容,至于怎么移植到STM32上,怎么使用才是最重要的关键。这里使用的平台是RT8711的WIFI SOC,使用的LWIP跟FreeRTOS,移植使用跟STM32...
mzwhhwj
2017-09-12 08:15
打造实用个性的Log输出宏
我们在调试嵌入式程序的时候,用IDE+调试器是最直接的方式,但是很多时候我们还需要用串口输出来打印一些Debug的信息,来帮助我们调试。串口调试最简单的方式的话,最简单就是用printf来打印。但是...
mzwhhwj
2017-08-24 08:39
物联网核心之MQTT(一)
MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的oneNet、百度的云平台也都支持MQTT的接入。虽然MQTT很...
mzwhhwj
2016-03-18 18:47
硬件狗的浪漫
硬件平台:STM32F4-discovery开发平台:VS2013+VisualGDB5.12 ...
mzwhhwj
2015-11-06 09:24
评论:@sunyzz 博客中提到的“【博客大赛】“虚短”“虚断”两板斧,搞定运算放大器!”
学习了...
mzwhhwj
修改
文章:
26
阅读:
59734
评论:
33
赞:
435
好友
私信
个人主页
文章
26
原创
0
阅读
59734
评论
33
赞
435
个人文集
.NET Micro Framework USB移植
(9)
最新评论
更多
写的好,学习和参考,很适用
开发工匠 ...
评论博文
2025-4-3
从新人到骨干:三大思维转变助你职场腾飞 ...
学习了
curton
评论博文
2025-4-2
从新人到骨干:三大思维转变助你职场腾飞 ...
写的好,学习和参考,分析很细,大师之作,比亚迪还是很牛
开发工匠 ...
评论博文
2025-4-1
特斯拉入华十年:褪去光环,开始 “交学费 ...
最新
博文
Mobileye选用Valens VA7000芯片组集成 ...
陆上目标智能识别系统全面解析 ...
WD5208非隔离ACDC高性能离线式PWM控制 ...
资料下载
本周热帖
电源工程师技术培训-初级
微弱直流电压信号采集
自动控制原理++上册,黄家英,第二版 ...
MT6374A.pdf 百盛新纪元原装现货需要 ...
【2025新品】java-antd-web3全栈dapp ...
HMD3075国产首款量产型七位半万用表! ...
灯具防尘试验:保障灯具性能与安全的 ...
手机、平板连接电脑|Type-C转HDMI线 ...
电气设备的安全性与绝缘性能测试 ...
DIY一个真正零延迟去抖动的游戏鼠标 ...
最新资讯
芯语最新
中国IC设计产业高速发展后的再思考 ( ...
台积电2nm工艺即将量产,苹果A20芯片 ...
库克再次减持苹果股票,套现1.76亿元 ...
LM317拓扑再升级,升压预调节器让效率 ...
中欧同意重启电动汽车反补贴案谈判 ...
重大突破!微米级脑机接口多模态三维 ...
柔性和超高频SAW谐振器及传感应用 ...
奥松电子MEMS半导体绝对湿度传感器荣 ...
基于MoSe₂/PdSe₂异质结非制冷光电探 ...
可编程刺绣纺织压力传感器,用于集成 ...
EE直播间
更多
精准捕获瞬态信号,掌控复杂射频环境 – 实时频谱分析与录制回放
直播时间: 04月10日 10:00
利用高性能源表和强大的软件, 实现半导体参数的测试和分析
直播时间: 04月17日 10:00
在线研讨会
更多
MAXQ™ Power转换器架构:性能零浪费
多物理场仿真在半导体制程中的应用
迈来芯新一代经济型热成像技术:赋能电力电子过热保护与智能应用温度监控
ADI 应用于电池管理系统 (BMS) 的电芯监测解决方案
热门
推荐
揭秘实时频谱分析的黑科技原理
多物理场仿真在半导体制程中的应用
汽车用卸负载电阻低价方案
芯片现货市场行情分析
我要评论
10
17
分享到微信
分享到微博
分享到QQ
点击右上角,分享到朋友圈
我知道啦
请使用浏览器分享功能
我知道啦
关闭
站长推荐
/4
【直播】ADI 全新架构解析汽车电源设计
汽车电源设计人员正面临下一代系统的开发挑战,参与直播了解MAXQ Power架构如何帮助设计下一代软件定义的ADAS、信息娱乐和车身电子系统,如何解决关键系统设计问题和实际案例分析。
2025第1期拆解活动:赢示波器、运动相机、热像仪等!
示波器、影石运动全景相机、大疆无人机、高清红外热成像仪;树莓派5等等
【在线研讨会】多物理场仿真在半导体工艺中的应用
聚焦 COMSOL 仿真软件在半导体制程中的广泛应用,内容涵盖晶圆制备、光刻、沉积、刻蚀、离子注入、热处理,以及平坦化等前道工艺过程中各种多物理场现象的模拟和分析。
Keysight 最新频谱仪方案直播:技术原理及实测案例
在复杂的射频环境中,瞬态信号的精准捕获至关重要。本次直播介绍实时频谱分析的原理及技术要求,介绍是德科技最新方案,分享实测案例,并就用户在应用中遇到的问题进行交流。
首页
论坛
电子技术基础
模拟技术
可编程器件
嵌入式系统与MCU
工程师职场
最新帖子
问答
版主申请
每月抽奖
商城免费换礼
社区有奖活动
博客
下载
评测
视频
文库
芯语
资源
2024国际航空电子大会
2024国际 AIoT 生态发展大会
3D IC 设计和Chiplet资料下载
车载总线测试和解码方案
新能源汽车三电测试技术中心
在线研讨会
EE直播间
小测验
白皮书
行业及技术活动
杂志免费订阅
免费在线工具
厂商资源中心
帖子
博文
返回顶部
×
用户377235 2015-7-4 14:21
用户377235 2015-4-4 21:46
这个是在线调试吧,可不可以使程序单独运行?
用户1672330 2015-1-16 09:54
xyd20405 2015-1-16 07:30
用户377235 2015-1-15 19:37
hnltm_451604858 2015-1-15 18:16
用户592202 2015-1-15 17:11
mzwhhwj 2015-1-15 09:51
用户1675147 2015-1-15 09:36
用户1823973 2015-1-15 08:38