用Keil MDK开发TQ2440裸机程序入门教程(有图有程序)(word文档在1楼)
开发板也差不多买了半年了, 以前照着教程用的是软件是ADS,在win7下老是崩溃, 后来才知道ADS早就不提供支持了, ADS的公司怎样怎样了...(此处省略300..)然后我就捣鼓着怎么转到KEIL上来, 具体的例程代码我不会移植, 不过裸机开发是没什么问题的了, 在网上也找了些教程, 因为我比较菜, 然后教程又不是针对TQ2440的, 也有针对TQ2440的, 内容不全, 前段时间一直看不懂, 无奈, 捣鼓了好长时间, 终于明白了, 然后就想写一份文档, 造福一下和我一样用TQ2440的后人~
先上传示例工程点击此处下载 ourdev_704996U2860Q.zip(文件大小:74K) (原文件名:JLINKDemo.zip)
主要内容有:
1 准备工作
2.JLINK SDRAM调试
3.JLINK 烧写NOR Flash
4.生成下载到NAND的bin文件(这个不需要JLINK)
一. 准备工作:
1. JLINK驱动(如果只是打算生成下载到nand的bin文件的话就不用看这个了)
1). 首先安装驱动
2). 阅读此目录下的readme文档, 用Flash.csv 支持更多Nor Flash的配置文件替换C:\Program Files\SEGGER\JLinkARM_V408e\ETC\JFlash目录下的同名文件(假设您是把这个软件安装到C盘的)
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705063VH70AF.png
(原文件名:1.png)
对JLINK不熟可以参考TQ2440的使用手册第四章, TQ2440烧写说明, 4.1.3 使用Jlink-Flasher烧写
2. 创建工程和编写代码
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705064XIZAPC.png
(原文件名:2.png)
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705065IA1VFR.png
(原文件名:3.png)
选择CPU, 然后点OK
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705066XN9Z6N.png
(原文件名:4.png)
复制启动代码到我的工程文件里, 选是,
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705067OJFXMV.png
(原文件名:5.png)
然后工程就建好了
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705068NX94VK.png
(原文件名:6.png)
启动代码就在S3C2440.s里面, 在Keil里面是可以可视化自由配置的, 打开S3C2440.s你会看到很多的汇编代码, 呵呵, 我也不喜欢汇编. 然后点下面的配置向导http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705069S23Z4T.jpg
(原文件名:7.jpg)
先都打个勾吧, 其实我也不知道这样配置好不好,
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705070PC47JN.jpg
(原文件名:8.jpg)
对了, LED对应的IO口要设置为输出
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705071NKT2P2.png
(原文件名:9.png)
建个main.c文件, 写你的工程代码咯~这里就以闪烁灯为例啦
新建文件, 其实不太想说这个了, 考虑到可能还真有人没用过Keil的...http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705072ALLD15.png
(原文件名:10.png)
点保存, 文件名为main.c
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705073X25ECN.png
(原文件名:1.png)
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705074EI75VP.png
(原文件名:1.png)
好了, 开始写代码了, 噢, 还要先把main.c文件添加到项目里来咧
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705077VTC9Y2.png
(原文件名:1.png) 选择main.c, 鼠标单击Addhttp://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705078JNMYM8.png
(原文件名:1.png)工程目录里就有这个东东了http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705079F0112A.png
(原文件名:1.png)
下面是代码:
注意到我在第一句打了个断点, 呵呵, 无奈, 之前调试的时候上系统启动后自动在main函数入口停下来的指令不管用, 所以就手动加了个断点了,然后就可以保存文件啦
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705080L6C4BU.png
(原文件名:1.png)
设置工程:http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705081P87TXQ.png
(原文件名:1.png)
这一项玩过51的就再熟不过了http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705082J3SDRI.png
(原文件名:1.png)
这个设置不重要, 习惯而已http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705083K2YDTK.png
(原文件名:1.png)
准备完啦, 继续~
二. JLINK在SDRAM中调试TQ2440
用SDRAM调试是一个不错的方式, 可以有效的减少Flash的擦写, 方便又快捷, 呵呵, 不啰嗦了, 直接进入正题~
在SDRAM里面调试的时候是这样设置的, 主要是ROM1和RAM1的起始地址
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705084TDTQTB.png
(原文件名:1.png)
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705111XBJKEH.png
(原文件名:1.png)
对了, 还要复制一个初始化文件,文件在Keil的安装目录里找, 我这里是D:\Program Files\Keil\ARM\Boards\Samsung\S3C2440\RTX_Blinky\Ext_RAM.ini
直接复制到你的工程目录下, 然后还要做一点修改, 如果不修改, 就调试不了, 会出现这样的情况
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705087VKASGN.png
(原文件名:1.png)
工程输出的.axf文件(我也不清楚是用来干啥的)在工程目录下的Output文件夹里, 所以可以用编辑工具(记事本就行了)打开来这样修改:
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705088HF9YC5.png
(原文件名:1.png)
然后添加这个文件,http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705089L5QKYC.png
(原文件名:1.png)
呃, 突然发现少做了一件事...这样就OK了, 设置utilities这里添加了烧写算法的, 其实在烧NOR Flash那里我才需要这个, 这个算法是不能擦除的, 但是这里我找不到合适的算法, 就用这个相近的了, 要擦除的话就用JFlash
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705090TPY205.png
(原文件名:1.png)
现在可以按F7编译了, 然后用你的JLINK连接好TQ2440开发板和你的电脑, TQ2440要先上电哦~最后在KEIL里面点调试就行了~
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705091JXXW8S.png
(原文件名:1.png)
然后你就可以单步调试什么的了, 主要是由这里控制的, 我就不多说了, 自己捣鼓捣鼓去吧~
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705092C1R27K.png
(原文件名:1.png)
三. 烧写NOR Flash
烧写NOR Flash时要这样配置:
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705093HZ6T9B.png
(原文件名:1.png)
然后是这个, 再啰嗦一下, 设置utilities, 这里添加了烧写算法的, 这个算法是只能用来编程不能擦除的, 但是这里我找不到合适的算法, 就用这个相近的了, 要擦除的话就用JFlash
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705094PGS17E.png
(原文件名:1.png)
按F7编译, 然后打开JFlash, JFlash的设置参考TQ2440的用户手册哈,然后
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705095UL6E0L.png
(原文件名:1.png)
擦除...http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705096DP99XR.png
(原文件名:1.png)
回到MDK, LOAD, 就可以看到下载成功了
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705097PTOK5Z.png
(原文件名:1.png)
四. 生成下载到NAND的bin文件
首先, TQ2440开发板出厂的时候是有烧有BootLoader的, 我也不懂BootLoader的原理, 所以直接用那个就行了. 如果刚刚烧过NOR Flash, 那么BootLoader就没了, 要重新烧进去了, 这个可以参考TQ2440的使用手册第四章, TQ2440烧写说明, 4.1.3 使用Jlink-Flasher烧写
然后这个是设置http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705098DTTR2Q.png
(原文件名:1.png)
接着, 让keil在生成后运行生成bin文件的用户程序,
http://cache.amobbs.com/bbs_upload782111/files_49/ourdev_705099ELGUW9.png
(原文件名:1.png)
然后编译就可以生成需要的bin文件了, 就在你的工程目录下, 下载的方式和TQ2440裸奔教程那里一开始说的是一样的, 用secureCRT和DNW, 我就不多说啦 ^_^ 咦, 重启电脑以后又能复制图片了~
./emotion/em012.gif 这个是文档~
点击此处下载 ourdev_705047CFY5NE.doc(文件大小:1020K) (原文件名:MDK与TQ2440之-JLINK在SDRAM中调试TQ2440-JLINK下载程序到NOR-生成下载到NAND的bin文件.doc) 顶你,我有二块QQ2440开发板了,可是还是不知道怎么玩这个东西。。 顺便上传参考的几个资料, 其实都大同小异
注意第一个不是txt格式的, 是docx格式的, 所以下载下来要自己改格式
点击此处下载 ourdev_705103A7I6EB.txt(文件大小:151K) (原文件名:Keil_MDK_生成BIN_过程.docx)
点击此处下载 ourdev_705104UW6SOB.pdf(文件大小:1.19M) (原文件名:RealView MDK Jlink Mini2440测试程序移植(成功).pdf)
点击此处下载 ourdev_705105KS02BN.pdf(文件大小:821K) (原文件名:RealView_MDK_2440_快速开发快速入门.pdf)
点击此处下载 ourdev_705106RXA7Q7.pdf(文件大小:287K) (原文件名:用RealView_MDK调试TQ2440.pdf) 回复【2楼】haohan007
-----------------------------------------------------------------------
呵呵, 一起加油~
其实我也还算是新手, 最近一直在忙着弄51呢,
在搞51上的代码库, 做好了就转到ARM上来, 现在也完成的差不多了, 呵呵, 有些通用的代码还可以直接移植到ARM上来~简化了不少工作 另外这个帖子也有提供资料,
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3361280&bbs_page_no=1&bbs_id=1032
那位楼主说还可以直接下载到NAND的, 因为我菜, 所以看了他的说明也不会用...有时间再研究研究... 标记一下,谢谢共享 回复【7楼】ylyfxzsx ylyfxzsx
-----------------------------------------------------------------------
谢谢! mark 谢楼主! 回复【4楼】Pony279霍斯
-----------------------------------------------------------------------
呵呵,我也是在弄51的扩展系统,51(BOOT和硬件驱动代码)+32KRAM(即是内存空间也是外扩代码空间)+12864LCD,好象和ARM2440有点相似哦。可是遇到了很多困难,好象是12864LCD在使能E为低的情况下(LCD关闭?),还再工作,还会对数据总线造成干扰。 回复【11楼】haohan007
-----------------------------------------------------------------------
呵呵, 我不是在做外设驱动, 我做的代码库主要是针对芯片内部功能的,
目标是封装大部分的寄存器操作, 这样用起来会觉得很自然, 而且很多寄存器操作会简化成复制粘贴的工作
还有在做的是协同式的操作系统, 已经写好了, 只是在完善
另外还有个FAT文件系统, 是前段时间做51单片机的MP3的时候不知道有的抄才自己写的代码, 也还在完善
12864在网上有很多源码, 所以搞不定可以对着源码看看差别在哪里, 说不定就找出问题了
我没玩过12864, 帮不了你了 mark mark MARK,围观,学习!!! 好东西,学习了。。 说明一下, 因为我不会移植TQ2440的测试程序
所以建议不要把程序烧到NAND flash下, 因为NAND FLASH是没有运行程序的能力的, 如果你不会写NAND下的启动代码, 程序最大只能有4K(如果从NAND启动, 上电后CPU自动把NAND里的前4K内容复制到内部的存储器里执行)
但是TQ2440的测试程序可以移植到MDK并烧到NOR里面(需要用JLINK或JTAG烧程序的),
如果纯粹是自己写的裸机程序的话, NOR的容量(2M)已经完全够你用的了, 写个上十K的程序都可以把你累死...
怎样移植到MDK并烧到NOR我就不写了(期末复习, 实在是不好意思...), 这个帖子里有示例程序, 也有参考资料
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5302644&bbs_id=9999 刚开始学ARM 受教了 mark,学习 回复【18楼】Pony279 霍斯
-----------------------------------------------------------------------
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5306535&bbs_page_no=1&search_mode=3&search_text=Pony279&bbs_id=9999
移植测试程序的内容已经写好了..../emotion/em012.gif mark. 多谢了,现在正在研究244O。 MARK! 正在学习这个,谢谢 mark了 MARK 再来啰嗦一下:
注意: 不建议用这个教程的方法去生成下载到NAND flash的bin文件(因为这里程序最大只可以有4K, 原因请参考教程2), 照着教程操作一次熟悉一下就好,
如果要生成下载到nand flash的bin 文件并移植TQ2440配套的测试程序, 请参考教程2
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5306535&bbs_id=9999 (详细内容已贴到3楼) 谢了 嗯
调试过了
就是.bin没运行
谢谢楼主哈! 好贴勒,顶一下。。。 楼主辛苦了。 学习下,谢谢LZ! Mark.
楼主辛苦了。 mark 我用的TQ2440,谢谢楼主 不错,标记一下! Pony279 发表于 2011-12-29 19:09 static/image/common/back.gif
再来啰嗦一下:
注意: 不建议用这个教程的方法去生成下载到NAND flash的bin文件(因为这里程序最大只可以 ...
麻烦问一下LZ 这个移植对TQ2440的版本有要求吗?
我买的版本比较早 大概是09年的 09的还早啊,我这里还有更早的呢? 好东西,Mark一下,以后有空再来看 老论坛的资料还是下不了啊,阿莫还不解决啊,以后和楼主混了 收藏了。 留作学习用,顺便请教各位前辈,有没有在Linux gcc下裸跑的教程? 楼主你好,你写的很详细。不过我用的时候发现几个问题:
1、还要复制一个初始化文件,文件在Keil的安装目录里找, 我这里是D:\Program Files\Keil\ARM\Boards\Samsung\S3C2440\RTX_Blinky\Ext_RAM.ini
我没找到这个文件。我的MDK文件夹下D:\Program Files\Keil\ARM\Boards\Samsung\没有后面的东西了;
2、我下载了你的工程,仿真的时候提示“*** error 65: access violation at 0x53000008 : no 'write' permission”;
3、将程序下载进Nor flash或Nand flash中,在Target Option-->Target-->Read/Only Memory area 中,Start起始地址中,一个是0x00000000,一个是0x0
这不是一样吗?也就是说着两种下载方式地址的设置都一样吗?
我是一个新手,用ADS觉得很不方便,就改为MDK,但是有很多不懂。比如:nor flash 和nand flash.为什么板子要用这两种flash?ARM9内部有RAM和ROM吗?SDRAM又是怎么一回事?
希望楼主可以帮我解答 好帖子 ,学习了。 辛苦了,感谢分享 mark 正在学习stm32,偶然看到实验室有很多友善的ARM9,心动啊,先记下来,希望以后用的着。楼主辛苦~~~ 好東東,標記一下! 看贴回贴 是美徳.ADS虽然不更新了,但是以前很多人都是用的ADS,网上许多 程序都是ADS编写的.所以纠结是用MDK还是用ADS 非常好,非常好,楼主辛苦了 真不错,写 的详细 Pony279 发表于 2011-12-15 21:13 static/image/common/back.gif
另外这个帖子也有提供资料,
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3361280&bbs_page_no=1&bbs_ ...
这个帖子不存在了!你有下载到nad中资料吗如果有的话可以分享一下吗 不错。{:smile:}{:smile:} 好东西,mark 初学者,学习了顶起 mark 以后看会有用的 sunhaojie 发表于 2012-10-7 16:55 static/image/common/back.gif
楼主你好,你写的很详细。不过我用的时候发现几个问题:
1、还要复制一个初始化文件,文件在Keil的安装目 ...
同遇到这个问题
X:\XXXX\Keil\ARM\Boards\Samsung\S3C2440\RTX_Blinky\Ext_RAM.ini
目前使用4.70A 版本中Samsuung 文件夹下没有S3C2440 这个文件夹了
只在S3FM02G_MBD 文件夹下找到了RTX_Blinky 文件夹 其中也只有个Dbg_RAM.ini 没见到有Ext_RAM.ini
哪位朋友 有的给传一个
先谢谢了 研究这东西好几天了,先顶下,再慢慢研究 下载来试试 顶下 顶,这个给力 我的 nor flash里有bootloader 在nandflash里有linux系统,
如果我在sdram里调试2440裸机程序,是不是就不会影响到两块flash里的程序啊?
请问楼主,我用MDK生成的bin文件能在SDRAM中运行,但下载到NANDFLASH就运行不了,应该怎么解决,求帮忙啊! mark ! 照着做,jlink调试不行 这么老的帖子怎么被顶上来的…… mark ,,谢谢楼主分享,,,{:smile:} 留名学习 好贴必须顶啊,以后能用上。谢谢啊,大公无私的楼主。 谢谢!!!!!!!!!!!!!!!
我也是新手,新新。。。手!
谢谢LZ无私奉献。。。 mark.,....... mark 这个必须得标记一下
页:
[1]