Linux下AT90S8515单片机GCC编程点灯实验纪实
唐铁鑫
看着那发光二极管一闪一闪的,我的高兴得又蹦又跳。成功啦!对于一个新手来说,这第一次太难忘了。
……
在CSDN的论坛听说过AVR,下载编程之类的东东,在网上搜索相关资料时发现了Linux focus上有一篇Guido Socher写的《AVR单片机GCC编程》,觉得有可操作性,于是把相关的资料、软件下到了硬盘。
可是,跑遍了广州的电子商店都找不到AT90S4433,只有AT90S8515,怎么办呢?从网上看到《AVR高速嵌入式单片机原理与应用(修订版)》的介绍,到书店找来看了看,发现两个片子下载编程的原理是一样的,只是引脚有些不同,不如就……
硬件制作:
到电子城买来以下东东:AT90S8515单片机(比OTP的51片贵了n倍,n>5)一个,40脚普通锁紧插座一个,30pf的陶式电容两个(我找不到27pf的,不过就我所了解的,起振用10到30pf都行),4M晶振一个,聚酯板一块,DB25并口一个,单排针、双排针各一排(其实也可以不用),电阻、发光二极管我是从坏了的显示器上卸下来的。电阻我没有470欧的,用100欧加380欧串联代替,我把三节1.5V电池用导线串联焊在一起做的电源。
一切都齐了,动手吧。按照Guido Socher在avrledtest-0.1.tar里的原理图,根据《AVR高速嵌入式单片机原理与应用(修订版)》上AT90S8515的接脚,重画了原理图。很简单,我描述一下吧:6脚PB5(MOSI)串联480欧电阻接并口2针,7脚PB6(MISO)串联220欧接电阻并口11针,8脚PB7(SCK)串联480欧电阻接并口2针,9脚PB8(RESET)串联480欧电阻接并口16针之外再连10千欧电阻接电源正极(VCC),15脚PD5串联1千欧电阻和一个发光二极管(注意方向)后接电源正极(VCC),18脚XTAL2、19脚XTAL1接晶振和起振电容(标准接法),振荡电路GND、单片机20脚(GND)、并口18针(GND)接到电源负极,单片机40脚(VCC)接电源正极。
做板子,你肯定要有焊锡、烙铁、导线和万用表等东西。做好后,检查线路有没接错,用万用表测测电路通不通,电阻、电容有没坏,然后就搞定了。
软件安装:
软件我开始想用我已经有的Redhat 7.0,结果没有ppdev的补丁,于是装Redhat 9.0(即7.3,Linux内核2.4.18)。这Redhat 9.0,在我的intel 810上装了5、6遍我才明白,你不给810的显卡分配4M以上的内存,Xfree86-4的Sever它就启动不了,倒霉!
没有gxtar的话,你要会用gzip、bzip2和tar解压;都是源代码安装,你要会;另外,以root身份操作。安装方法我不详细讲了,参照Guido Socher的《AVR单片机GCC编程》。提醒注意:1、装完binutils-2.11.2后一定要添加/usr/local/atml/lib这行到/etc/ld.so.conf文件里面,并运行/sbin/ldconfig命令重建连接器缓存,如果忘了,你要从这步开始往后重装一遍;2、装avr-libc-20020106前,有
export CC=avr-gcc
export AS=avr-as
export AR=avr-ar
export RANLIB=avr-ranlib
export PATH=/usr/local/atmel/bin:${PATH}
几步,用export命令看看你的环境设置的path是什么样的,那就是这里的 ${PATH}所指的,千万不要直接输入export PATH=/usr/local/atmel/bin:${PATH}后敲回车,那不对,或者到你的root目录下,把隐藏文件显示出来,配置你的.bash_profile文件,加入:/usr/local/atmel/bin路径,重启系统,这就一劳永逸了;3、千万记住,Linux下是区分大小写的,我在Win下解压的uisp-20011025,到了Linux下就不能make,原来DAPA.C变成了dapa.c,真是气死我了!折腾了半天。
安装好后,解压avrledtest-0.1.tar,因为我用的是AT90S8515,所以,把解压后的avrledtest-0.1文件夹里的avrledtest.hex和avrledtest_pre.hex删了,那是AT90S4433的。用Gedit或其他文本编辑器打开makefile文件,把MCU=at90s4433改成MCU=at90s8515,把
# here is a pre-compiled version in case you have trouble with
# your development environment
load_pre: avrledtest_pre.hex
uisp -dlpt=/dev/parport0 --erase -dprog=dapa
uisp -dlpt=/dev/parport0 --upload if=avrledtest_pre.hex -dprog=dapa -dno-poll -v=3 --hash=32
#-------------------
这一段删掉,因为我要重新编译一个MCU=at90s8515的avrledtest.hex,如果development environment有麻烦,那就完成不了啦!
测试:
搞定makefile后,把硬件上的并口接到电脑打印口,接通电源;然后,打开linux的console,进到/sbin目录下,lsmod看看有没
parport_pc
ppdev
parport
如果没有,要用
insmod parport_pc
insmod ppdev
insmod parport
可能这样parport还不能加载,再insmod一次。用lsmod看看,确定都加载了,进到avrledtest-0.1目录里,输入
make
顺利的话avrledtest.hex就产生了,然后
make load
我make load了三四次,因为我的板子有毛病,检查了好一会才搞好。我make load成功的画面是console里出现
uisp –dlpt=/dev/parpart0 –erase –dprog=dapa
Atmel AVR AT90S8515 is found.
Erasing Device
……
Uploading:flash
#####
(total 146 bytes transferred in 0.68s (216 bytes/s))
Polling:count=145,min/avg/max=3.00/3.14/12.08ms
OK,下载到芯片了,拿开并口,断电,重新接通,片子就reset了,发光二极管一闪一闪的。点灯实验成功了,以后就可以自己做其他的实验了,AT90S8515的flash可以刷1000次。Cool!原来做单片机实验也可以这么便宜!仿真机、编程器都省了。(不过,十几片AT90S8515多出来的钱,都可以买编程器了。开发产品还是要用仿真机、编程器)。
如果你做不出来,可以和我联系,netscaner@sina.com.cn。