×
单片机 > 单片机程序设计 > 详情

AVR单片机入门+使用keil-MDK裸奔TQ2440

发布时间:2020-06-17 发布时间:
|

两三个月没更新博客了,近两个月在学习AVR单片机,芯片的复杂度提高了不少,光300页的数据手册就看了三遍才有个大概的认识。接下来要做实验来熟悉各个模块啊,就找到了马潮老师的《单片机C语言程序设计实训--基于AVR PROTEUS仿真》这本极好的入门书籍,到现在基础练习就差一个上位机和下位机通信和看门狗实验没有做了,遗憾的是这本书布置的“作业”整体难度不高,有些作业一眼就能想出解决方案的就没有做,我认为还不清楚该怎么做的就一个也不放过。


每次开始学习新类型单片机的时候,都需要做的事是:

1)选择合适的单片机芯片

2)选择合适的开发环境

3)选择合适的烧写工具

4)学写裸奔程序以此熟悉单片机片上的资源

这样才能开始应用级的开发。我从游戏开发的需求出发,选择的是atmega1284P,开发环境是AVR Studio 4,五代安装麻烦,而且无法和winAVR编译器配合而导致_delay_us(variable)方法无法通过编译,只能使用常量做为延时参数。这个bug太让人不爽了,所以无奈换成四代+winAVR,网上其他的开发环境用过IAR,编译器比较下来更喜欢gcc提供的接口,所以才最终确定使用AVR Studio 4。烧写用不着,因为全部使用proteus仿真。之后实验的方式和在51上差不多,就是一个片上资源一个一个实验透。


转眼又一个多月过去了,做到了lcd控制器T6963C的实验,一个很严重的问题出现了,就是:一像素占1bit的图形lcd,画像素点以及基于此的画几何图形的效率极低。读写数据都是至少8bits,也就是以字节为单位。这样想要写个像素,需要

1)读取像素所在的字节

2)改变相应的位

3)写回显存

这样画像素的结果就是无法实现我希望的物理粒子效果,也许这种低效的方式也能实现粒子效果,但我没有去尝试。看看早期的游戏像“俄罗斯方块”和“推箱子”都不是平滑移动的,这样就可以避免不必要的位操作而把操作粒度放大到字节。即使像“贪吃蛇”这样的看似平滑移动的游戏,它的帧率是远低于一般游戏的,所以可以容忍低效的像素操作。而我要做的是基于精灵动画的游戏,需要对一个图片进行平滑移动,这样1bit像素lcd如果没有bit级别的块拷贝的话,实现起来极其麻烦,我唯一想到的办法是使用串行接口的lcd,这样可以在数据前后加bit达到数据的平移。


另一方面,网上有配合TFT显示屏的AVR单片机卖,那我的另一条出路是买个AVR开发板在上面继续实验。而我现成的有一块ARM7的板子和一块带触摸屏的ARM9的板子,权衡考虑后我决定升级到ARM平台,arm9的板子三年前就买好了,现在应该有能力驾驭了。 


cpu已经没的选了,就是S3C2440,开发环境我知道不能选早过气的ADS,极不友好的编译错误提示信息简直让人崩溃,搜搜发现可以用keil,那再好不过了。从ARM官网下了个MDK4.5评估版,烧写用和板子同时期买的J-link,调试一番后可以正常工作。可是最后一步的“裸奔”花了我几天的时间,网上的办法多少带点问题,根源是ARM的启动Flash有Nor和Nand两种,启动方式也有两种,所以参考了网上很多资料加上对启动过程的学习理解,才最终让led正确的亮起来。由于flash的刷写次数的限制,理想的裸奔方式是直接下载到RAM中去运行程序,几天的辛苦没白费。

 

keil-MDK裸奔TQ2440重点:

I.启动过程的理解。 

51单片机和AVR单片机的裸奔很简单,只要把编译出来的hex文件下载到单片机中就可以了,所以不会有复杂的地址配置。ARM就不同了,可以从Nor闪存启动,也可以选择从Nand闪存启动。

下图截自S3C2440A的数据手册(datasheet)。

 

1)左边的图可以是Nor闪存的启动内存映射,应该可以用其他rom代替,比如eeprom。这种模式和51,AVR就没有什么区别了,适合裸奔的应用。Nor闪存可以像RAM一样以字节的粒度存取,所以在Nor闪存中的程序就好像在RAM中一样被执行,你也可以选择把程序搬到真正的RAM中再执行。

2)右边的图是Nand闪存的启动内存映射,适合带操作系统的大型程序启动,Nand闪存的访问类似于电脑上的硬盘,是个块设备,启动方式也类似。先是搬Nand闪存开头4KB的引导程序到ARM内部的静态内存中(SRAM),引导程序的作用就是把更大的启动程序加载到真正RAM中再跳转过去执行。

 

II.创建并编写裸奔程序。

1)创建的时候cpu要选择s3c2440,也让MDK自动生成*.s的启动代码,网上有一篇不用MDK启动代码的从ADS移植裸奔程序的牛人文档,要改地东西较多,而我只想要个点亮led的裸奔程序,以我的51和AVR经验,我直觉的认为应该不需要很复杂的配置。

2)*.s的文件在MDK中可以可视化配置,这个做的比较人性化,

 

 主要的配置就是RAM内存的大小,我的TQ2440是64M,还有就是Led连接的端口,下图是核心板的电路图:

 

可以看到Led连接到GPB端口上。

3)主程序的编写。这个比较简单。

 

III.目标选项配置(Project->Option for Target)

Target,Linker,Debug,Utilities需要配置, 我是按Nand启动配置的,Nor的大家自己琢磨琢磨吧。


注意:经过尝试,我发现其实只要一个DebugInRAM_config.ini配置文件就可以运行程序了,里面重要的是SetupForStart(),PC值要设置在RAM的开头,我的就是BANK6的开头0x30000000。貌似J-link是直接把程序加载到外部内存的开头,这个也许跟Init()的配置相关。如果要调试的话就要把信息填填全。

关键字:AVR单片机  keil  MDK  裸奔TQ2440 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PIC单片机的多路AD切换程序设计