Linux 下的 Avr 微控制器指南

修订历史
修订 442009-04-20 17:13:07修订者:jdd
应作者要求,混淆电子邮件地址
修订 432009-03-29 20:49:12修订者:ranjeeth
修订 422009-03-29 20:45:09修订者:jdd
出版后还原
修订 412009-03-29 20:41:59修订者:jdd
编辑以导出 docbook
修订 402009-03-28 21:07:57修订者:RickMoen
根据作者的原始偏好调整 mailto 链接的样式。
修订 392009-03-28 21:05:45修订者:RickMoen
还原电子邮件混淆,补充一些缺失的标点符号,[重新]修复大小写,修复并澄清新的冗长句子。
修订 382009-03-23 18:21:24修订者:ranjeeth
修订 372009-03-23 18:19:51修订者:ranjeeth
修订 362009-03-23 17:20:32修订者:ranjeeth
修订 352009-03-23 17:19:47修订者:ranjeeth
修订 342009-03-23 10:26:00修订者:jdd
发布测试
修订 332009-03-23 10:25:06修订者:jdd
修订 322009-03-23 10:24:24修订者:jdd
使用宏来混淆电子邮件
修订 312009-03-23 10:11:47修订者:jdd
更改仅是为了导出不带警告的 docbook
修订 302009-03-23 10:09:15修订者:jdd
修订 292009-03-23 10:05:07修订者:jdd
修订 282009-03-23 09:58:40修订者:jdd
添加 wiki 作为链接
修订 272009-03-23 09:53:28修订者:RickMoen
在 “pin9”、“pin10”、“pin25” 结构中插入所需的空格字符
修订 262009-03-23 09:49:05修订者:RickMoen
使提及的所有软件项目的标记保持一致
修订 252009-03-23 09:43:40修订者:RickMoen
删除几个多余的逗号。
修订 242009-03-23 09:41:30修订者:RickMoen
润色一些最后的标点符号
修订 232009-03-23 04:11:31修订者:ranjeeth
修订 222009-03-23 04:10:34修订者:ranjeeth
修订 212009-03-23 04:09:07修订者:ranjeeth
修订 202009-03-17 16:20:27修订者:ranjeeth
修订 192009-03-17 16:18:33修订者:ranjeeth
修订 182009-03-16 19:10:30修订者:RickMoen
修复超链接,修复新句子的英语措辞。
修订 172009-03-16 18:50:19修订者:ranjeeth
修订 162009-03-16 11:36:49修订者:RickMoen
一些标点符号的小问题
修订 152009-03-16 11:21:14修订者:RickMoen
修正了许多冗长的句子、标点符号和语法错误,以及有问题的习语。
修订 142009-03-15 10:27:24修订者:BordenRhodes
清理了基本语法和拼写
修订 132009-03-15 09:52:41修订者:jdd
修订 122009-03-15 09:51:37修订者:jdd
添加 avr-libc 手册的链接
修订 112009-03-14 21:47:18修订者:jdd
基本转换结束
修订 102009-03-14 21:40:18修订者:jdd
修订 92009-03-14 21:39:26修订者:jdd
修订 82009-03-14 21:33:04修订者:jdd
添加图像
修订 72009-03-14 21:27:59修订者:jdd
修订 62009-03-14 21:26:48修订者:jdd
修订 52009-03-14 21:25:13修订者:jdd
第一步 - 由 jdd 进行 html 转换和基本格式编辑
修订 42009-03-14 21:22:37修订者:jdd
修订 32009-03-14 21:18:25修订者:jdd
修订 22009-03-14 21:13:09修订者:jdd
修订 12009-03-14 21:10:33修订者:jdd

目录
1. HOWTO
2. Linux 下的 AVR 微控制器 HOWTO
2.1. 许可
2.2. 什么是微控制器?
2.3. 所需软件
2.4. Hello World
2.5. 作者
2.6. 最新版本

1. HOWTO

Linux 下的 AVR 微控制器 HOWTO,版权 (C) 2009 Ranjeeth p t (ranjeeth_gecmail[at]yahoo[dot]com)

本 HOWTO 适用于希望使用 GNU/Linux 机器编程 AVR 微控制器的读者。 为了烧录您的代码,我们将使用并行端口。 您可能需要其他电子元件(如一些电阻器、电容器、并行端口连接器等),这些元件可以从任何电子商店购买。


2. Linux 下的 AVR 微控制器 HOWTO

2.1. 许可

      Permission is granted to copy, distribute, and/or modify this
      document under the terms of the GNU Free Documentation License,
      Version 1.2, or any later version published by the Free Software
      Foundation; with no Invariant Sections, no Front-Cover Texts, and
      no Back-Cover Texts.  A copy of the license is included in the
      section entitled "GNU Free Documentation License".

GNU 自由文档许可证


2.2. 什么是微控制器?

微控制器是单芯片计算机。 它具有内部 RAM、ROM、定时器、计数器、中断电路、I/O 端口、模拟比较器、串行 USART、模数转换器、看门狗定时器和 RISC 架构。 当您使用微处理器时,不能单独对其进行编程。 您需要其他组件,如 RAM、ROM、定时器等。 对于编程,您应该彻底了解其架构:您必须阅读微控制器的数据手册。


2.3. 所需软件

binutils: 汇编器、链接器等工具。

gcc-avr: GNU C 编译器(avr 的交叉编译器)。

avr-libc: AVR C 库的软件包,包含许多实用程序函数。

uisp: 用于 Atmel AVR MCU 的微型系统内编程器(用于将代码烧录到 MCU 的内存中)。

以下 Atmel 微控制器在 Linux 中受 avr-gcc 支持

at90s 类型设备

at90s2313, at90s2323, at90s2333, at90s2343, at90s4414, at90s4433, at90s4434, at90s8515, at90s8515, at90s8515, at90s8535, at90s1200。

atmega 类型设备

atmega103, atmega603, atmega8, atmega48, atmega88, atmega8515, atmega8535, atmega16, atmega161, atmega162, atmega163, atmega165, atmega168, atmega169, atmega32, atmega323, atmega325, atmega3250, atmega64, atmega645, atmega6450, atmega128。

attiny 类型设备

attiny22, attiny26, attiny26, attiny13, attiny13, attiny13, attiny13, attiny2313, attiny11, attiny12, attiny15, attiny28。

其他 AVR 设备

avr2, at90c8534, at86rf401, avr3, at43usb320, at43usb355, at76c711, avr4, avr5, at90can128, at94k, avr1。

binutils: 用于操作可能为 Atmel AVR 架构创建的二进制文件和目标文件的程序。 此软件包主要面向 AVR 开发人员和交叉编译器。

gcc-avr: GNU C 编译器,一种相当便携的优化编译器,支持多种语言。 此软件包包含 C 语言支持。

avr-libc: 用于为 Atmel AVR 微控制器开发 C 程序的标准库。 此软件包包含静态库以及所需的头文件。

uisp: 用于使用 gcc-avr 创建的目标代码对 AVR 芯片进行编程的实用程序。 它支持系统内编程。

您可以下载上述软件包,解压、配置和安装它。 如果您使用的是 Debian 或 Ubuntu,这些软件包在您的发行版中可用:使用 apt 或 synaptic 包管理器安装它们。


2.4. Hello World

我们正在为 atmega8 微控制器编写 hello world,它具有 28 引脚、8 位 RISC 架构。

在继续之前,请查看关于 __avr-libc__ 的本手册,这将帮助您更好地编程和理解。 此外,请参阅各种 AVR 微控制器的数据手册。

这是我们的第一个程序

/* ledblink.c, an LED blinking program */
#include<avr/io.h>
#include<util/delay.h>
void sleep(uint8_t millisec)
{
        while(millisec)

        {
                _delay_ms(1);/* 1 ms delay */
                millisec--;
        }
}
main()
{

        DDRC |=1<<PC2;  /* PC2 will now be the output pin */
        while(1)
        {
                PORTC &= ~(1<<PC2);/* PC2 LOW */
                sleep(100);/* 100 ms delay */

                PORTC |=(1<<PC2); /* PC2 HIGH */
                sleep(100);/* 100 ms delay */
        }
}

2.4.1. 代码解释

用于 Atmel 系列的 GNU C 编译器使用有意义的名称标识微控制器内的所有功能单元。 因此,编写“PORTC=0xff”将导致编译器生成机器代码,将 0xff 写入 I/O 端口 C,这将将所有端口 C 引脚设置为逻辑高电平。 由于端口是双向的,我们必须决定每个引脚应充当输入还是输出。 如果名为 DDRC(数据方向寄存器 C)的寄存器的第 i 位为 1,则 PORTC 的第 i 个引脚的第 i 个引脚将为输出。 否则,它将充当输入引脚。 (请注意,引脚和位编号从零开始。)要使 LED 闪烁,您必须先使引脚为高电平,然后再为低电平。 (在这里,我们使用 PORTC 的第 2 个端口。也就是说,PC2 将是第 25 个引脚。)两者之间应该有延迟。 这就是代码其余部分的作用。 对于延迟,我们使用内置函数 _delay_ms(1),它会导致 1 毫秒的延迟。


2.4.2. 编译

avr-gcc -mmcu=atmega8 Os ledblink.c o ledblink.o

这将生成目标文件 ledblink.o。 现在,我们将把它转换为 hex 文件,适合烧录到微控制器的内存中。

avr-objcopy -j .text -j .data -O ihex  ledblink.o  ledblink.hex

我们将其转换为 hex 文件是因为,为了将代码烧录到 atmega8,我们将使用 uisp,其输入文件必须是 .hex 文件。

请注意,您可以使用 less 命令查看 ledblink.hex 文件。

:1000000012C02BC02AC029C028C027C026C025C0C6
:1000100024C023C022C021C020C01FC01EC01DC0DC
:100020001CC01BC01AC011241FBECFE5D4E0DEBF28
:10003000CDBF10E0A0E6B0E0EAE8F0E002C0059035
:100040000D92A036B107D9F710E0A0E6B0E001C0EC
:100050001D92A036B107E1F70CC0D2CF282FE4ECF7
:10006000F9E004C0CF010197F1F721502223D1F725
:100070000895CFE5D4E0DEBFCDBFA29AAA9884E66A

:0A008000EDDFAA9A84E6EADFF9CF6B
:00000001FF

2.4.3. 烧录代码

2.4.3.1. 硬件

我们将使用并行端口进行烧录。 首先,我们必须为其开发一个烧录电路。

这是 atmega8 微控制器的电路。 引脚 9 和引脚 10 通过 4 MHz 晶体振荡器连接,这是外部时钟。 右下角的连接器用于并行端口。

如果您使用上述任何其他微控制器,您应该进行相应的更改。 }}}

您应该注意 RESET,XTAL1,XTAL2,SCK,MISO,MOSI 引脚 并连接。


2.4.3.2. 软件

现在,我们将 ledblink.hex 烧录到微控制器。

uisp -dprog=dapa -dlpt=0x378

您应该收到消息 找到 Atmega8

dprog 是编程方法说明符,在本例中是 dapa,即直接 AVR 并行访问。 dlpt 用于并行设备设置,即 0x378,并行端口的设备地址。

uisp -dprog=dapa -dlpt=0x378 --erase

将擦除微控制器的代码。

uisp -dprog=dapa -dlpt=0x378 --upload if=ledblink.hex

上传输入文件 ledblink.hex

请注意,您可以看到引脚 25 处的 LED 闪烁。


2.5. 作者

评论请发送至:mailto:ranjeeth_gecmail[at]yahoo[dot]com

Ranjeeth 博客

Govt Engg College Sreekrishnapuram,

Palakkad,Kerala India.


2.6. 最新版本

您可以在 LDP wiki 上找到本 HOWTO 的最新版本。