AVR单片机GCC编程-设计应用_第1页
AVR单片机GCC编程-设计应用_第2页
AVR单片机GCC编程-设计应用_第3页
AVR单片机GCC编程-设计应用_第4页
AVR单片机GCC编程-设计应用_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档-下载后可编辑AVR单片机GCC编程-设计应用软件安装:AVRGCC编译器软件安装:AVRC语言库软件安装:编程器这个编程器将指定的准备好的目标代码载入到我们单片机的EEPROM中.这个Linux下的uisp是一个非常好的编程器.可以直接用在Makefile里面.你只要添加"makeload"规则,这样你就可以编译载入软件完成.uisp按照下面这样安装:tarzxvfuisp-20221025.tar.gzcduisp-20221025/srcmakecpuisp/usr/local/atmel/bin

一个小的测试工程我们将以一个小的测试电路开始.这个测试电路的目的仅仅是测试我们的开发环境.我们用它来编译,以及测试一个小程序.这个测试程序仅仅是引起LED闪烁.我建议给这个单片机弄一个小的印刷电路板.以后你就可以在这块电路板的区域做你自己的试验.一个好办法是用一个模拟板当作这个.你无论如何也不能尝试着把AVR和它的4MHz晶震直接放在模拟板上.更好的办法是用少量的短线把输入和输出脚与模拟板相连,因为这样的模拟板不是为快速数字电路制作的.4Mhz的晶震和电容器在物理上应该非常靠近单片机.在我们这个例子里编程器的连接器电阻实际上是不必要的.只有在你打算把port-B输入输出脚用于其他目的时才需要.需要的硬件你需要的部件列在下表中.所有的这些都非常普通,便宜,只是单片机贵点,大概7.5欧元.尽管它是非常普通的单片机,它也不是随便在那家当地的无线电商店就能买到的,象那些大的电子部件销售商例如:(www.reichelt.de(德国),www.conrad.de(德国),www.selectronic.fr(法国)等等,可能在你的国家这些类似的站点)的仓库里才有全部的部件.1xAT90S4433,Atmel8位AVRRISC处理器.2x14脚IC插槽或者1x28脚7.5mmIC插槽这种28脚插槽要找到有点点困难,通常28脚插槽是14mm宽的,但是我们需要的是7.5mm的插槽.1x10K电阻(颜色代码:棕,黑,橙)3x470欧姆电阻(颜色代码:黄,紫,棕)1x1K电阻(颜色代码:棕,黑,红)1x220欧姆电阻(颜色代码:红,红,棕)1x4Mhz晶震2x27pf陶电容用于编译器的任意种类的5脚插头/插座.我们通常买些连接器条,然后5个折成一段.聚酯板.1xDB25连接器用于插到并口.1xLED一块模拟板.我们在这里不用,但是如果你想做将来的AVR实验这是非重有用的.我建议你把微控制器与晶震和电容集中在聚酯板上,然后通过短电缆把它们的输入/输出脚连接到模拟板.除开上面的这些,还需要提供一个稳定的5V直流电源,你也可以采用4.5V的电池作为电源供应.安装编程器硬件AT90S4433支持在线编程(ISP).简单说就是:你没有必要为了给单片机编程而移动单片机模块.你会看到可以用50-150欧元买到做好的编程器硬件,但没有必要为一个编程器更多地投资.采用Linux,uisp软件和的并口你就可以建立起一个非常好的简单的AVR编程器,也就采用一根简单的电缆连接而已.编程器电缆的线必须符合下列要求:AVR端针脚并口端针脚SCK(19)Strobe(1)MISO(18)Busy(11)MOSI(17)D0(2)Reset(1)Init(16)GNDGND(18)电缆长度不超过70cm.写入软件在GCC的帮助下AT90S4433可以用一般的C语言编程.了解一些AVR汇编很有用,但也不是非要不可.AVRC语言库的avr-libc-reference讲述了libc的大部分函数.HaraldLeitner写了一个关于如何使用AVR和GCC的带有大量有用的例子的文档(haraleit.pdf,286Kb,原作/AVRGCC/).从Atmel公司的网页,(,找到:avrproducts-8bitrisc-Datasheets),你可以完整的数据资料(复制到本地:avr4433.pdf,2361Kb).它描述了所有的寄存器以及如何使用CPU.使用4433的时候有一点要注意的是它只有128字节的RAM和4K字节的EEPROM.这就意味着你不能定义大的数据结构和字符串.程序中不能采用深入的嵌套调用或者是递归调用.就像写charstring[90];这样一行就已经太大了.一个整数是16bit,如果需要一个小的整数你可以采用unsignedchari;/*0-255*/你将非常惊讶你的程序是多么大.它真是一个强大的处理器.理论不如实践,我们将写一个程序让我们的LED每隔0.5秒闪烁.虽然不是很有用不过也是一个非常好的开头,而且可以用来测试我们的开发环境和编程器.voidmain(void){/*enablePD5asoutput*/sbi(DDRD,PD5);while(1){/*ledon,pin=0*/cbi(PORTD,PD5);delay_ms(500);/*setoutputto5V,LEDoff*/sbi(PORTD,PD5);delay_ms(500);}}

上面的例子可以看出用它写个程序是多么简单.你看到的仅仅是主程序,delay_ms函数包含在全部的清单(avrledtest.c)中.PD5脚用作输出的话,你必须在数据寄存器中为D端口(DDRD)设置PD5位.然后就能用cbi*(PORTD,PD5)函数给PD5设置0V电压(清除PD5)或者用sbi(PORT,PD5)设置5V电压(设置PD5)."PD5"值的定义包含在通过io.h包含的io4433.h中.你不用担心这点.如果你曾经在象Linux这样的多用户多任务系统下写过程序的话你就知道绝不要写一个非模块化的无穷的循环.这会浪费CPU时间,减慢系统速度.在AVR上就不一样了,我们没有多个任务,也没有其他程序在运行,这甚至不是一个操作系统,在这上面运用无穷循环显得很普遍.编译和载入在开始之前确认一下PATH中包含了/usr/local/atmel/bin路径,必要的话编辑你的.bash_profile或者.tcshrc,添加如下内容:exportPATH=/usr/local/atmel/bin:${PATH}(forbash)setenvPATH/usr/local/atmel/bin:${PATH}(fortcsh)

我们用并口和uisp来为AVR编程.uisp使用内核的ppdev接口,因此你必须已经载入了下列内核模块:#/sbin/lsmodparport_pcppdevparport

用/sbin/lsmod命令检查是否已经载入,如果没有就以root用户载入它们.modeprobeparportmodeprobeparport_pcmodeprobeppdev

一个比较好的办法是在启动的时候就自动执行这些命令.你可以把这些命令添加倒rc脚本中(例如:Redhat下的/etc/rc.d/rc.local).为了给普通用户ppdev接口写权限,运行下面的命令:chmod666/dev/parport0

确保没有在并口上的打印守护进程运行.如果你运行了就要在你连接编程器电缆前停止这个进程.现在编译和单片机编程的所有准备工作都做好了.我们的测试程序包(avrledtest-0.1.tar.gz)里面有个编译工程文件文件.你要做的只是输入:makemakeloadT这样就编译和载入软件了.我并不想详细描述所有的命令.你可以打开那个Makefile查看,它们都是一样的.我自己都不能把它们完全记下来.我只是知道我只需要做"makeload".如果你想写不同的程序你只要把Makefile中所有出现avrledtest的地方用你的程序名字替换就行了.一些有趣的binutils比实际编译过程更有趣的是一些小工具软件.avr-objdump-havrledtest.out

S显示程序的不同段的大小..text是调入falshEEPROM的指令代码,.data是象staticcharstr[]="hello";这类的初始化数据..bss是非初始化全局数据,在我们这个里面全是零..eeprom用于存储倒eeprom的变量,我从没有用过这个..stab和.stabstr是调试信息,不会载入AVR的.avrledtest.out:fileformatelf32-avrSections:IdxNameSizeVMALMAFileoffAlgn0.text0000008c0000000000000000000000942**0CONTENTS,ALLOC,LOAD,READONLY,CODE1.data00000000008000600000008c000001202**0CONTENTS,ALLOC,LOAD,DATA2.bss00000000008000600000008c000001202**0ALLOC3.eeprom000000000081000000810000000001202**0CONTENTS4.stab000007500000000000000000000001202**2CONTENTS,READONLY,DEBUGGING5.stabstr000005f40000000000000000000008702**0CONTENTS,READONLY,DEBUGGING你也可以用avr-size命令得到一个更精简的形式:avr-sizeavrledtest.out

textdatabssdechexfilename140001408cavrledtest.out在AVR上工作你必须特别注意.text+data+bss不超过4K,data+bss+stack(你可以不考虑stack的大小,它取决于有多少嵌套调用)不能超过128字节.下面这个命令也非常有意思:avr-objdump-Savrledtest.out

它会生成你的代码的汇编列表.结论现在你已经了解到足以开始我们的工程的AVR硬件和GCC方面的知识.LinuxFocus将来会有更多更复杂的,更有趣的关于硬件这方面的文章.参考文献Libcanduisp:/www.amelek.gda.pl/avr/libc/GCCandbinutils:/pub/GNU/avrfreaks(watchoutsomepeopleonthatsitearestillusingwindows!?):/thetavrasmassemblerforLinux:AVRwebring:R./h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论