Если вы знакомы с C, я рекомендую
- начните с справочника по AVR Libc
- просмотрите iom328p.h для конкретных определений вашего процессора (находится в разделе
...\Atmel Toolchain\AVR8 GCC\Native\[#.#.####]\avr8-gnu-toolchain\avr\include\avr
)
- опционально, в Atmel Studio создайте новый проект платы ASF, выбрав устройство ATmega328p, и проверьте исходники, загруженные в папку вашего проекта из шаблона "user_board" (который в любом случае является общим почти пустым набором
*.h
, обеспечивающим пространство для вещи, которые могут вам понадобиться/не понадобиться)
- иметь полное руководство по процессору рядом с вами всегда — найденные там регистры и битовые имена совпадают с определениями в библиотеках AVR
Имейте в виду, что библиотеки, поставляемые с Atmel Studio, и набор инструментов поддерживают m328P, но плата UNO сама по себе не поддерживается ASF. Тем не менее, для базового программирования вам будет хорошо.
добавление ... на PORTB
PORTB
определяется в конкретном ...io.h
вашего процессора (1-й пункт выше), который автоматически включается при включении <io.h>
и выборе правильного процессора в AVR Studio. В библиотеке вашего процессора вы найдете
#define PORTB _SFR_IO8(0x05)
Просматривая руководство по процессору (4-й пункт выше) на странице 615, вы видите, что PORTB находится по адресу ввода-вывода 0x05
(q.e.d.). _SFR_IO8(..)
сам по себе является макросом, определенным в <avr/sfr_defs.h>
для преобразования из ввода-вывода в адрес памяти (да, нижние регистры дважды отображаются как ввод-вывод и память, в результате чего адрес памяти на 0x20 выше, потому что самые низкие адреса памяти заняты от R0 до R31).
Включив <io.h>
вы получаете из библиотеки AVR
#include <avr/io.h>
// included by io.h
// #include <avr/sfr_defs.h>
// #include <avr/portpins.h>
// #include <avr/common.h>
// #include <avr/version.h>
// #include <avr/io(your_processor).h> via processor declaration ... fuses
// #include <avr/(maybe some more).h>
Все эти ...h
(и некоторые другие), наконец, позволяют вам программировать на C, используя имена регистров/портов/выводов, которые вы найдете в руководстве по процессору.
Есть еще несколько полезных библиотек, таких как
#include <stdint.h> // Type definitions, e.g. uint8_t
// #include "stdint-gcc.h"
#include <avr/power.h> // clock prescaler macro
#include <avr/interrupt.h> // interrupt macros
вы найдете библиотеки для поддержки чтения/записи из/в программу и флэш-память и т. д. и т. д.
person
MikeD
schedule
18.06.2015