Programowanie mikrokontrolerów AVR Narządzia rozwojowe

background image

1

Programowanie

mikrokontrolerów

rodziny AVR

Narz dzia rozwojowe

background image

2

AVR-GCC

AVR-GCC jest darmowym kompilatorem j zyka C

(licencja GNU) słu cym do pisania programów dla

mikrokontrolerów serii AVR firmy ATMEL.

Kompilator jest doł czany do rodowiska AVR

Studio, pozwalaj c na tworzenie projektów

programistycznych w j zyku C/C++

background image

3

Programy narz dziowe - Binutils

Jest to zbiór programów pozwalaj cych na sprawne

zarz dzanie projektem.

Binutils s doł czone do rodowiska rozwojowego i wraz

z kompilatorem AVR-GCC oraz bibliotek avr-libc stanowi

kompletny ła cuch narz dzi rozwojowych

background image

4

Programy narz dziowe - Binutils

Dost pne s nast puj ce programy narz dziowe:

avr-as - asembler

avr-ld - linker

avr-ar - zarz dza bibliotekami

avr-ranlib – generuje indeksy do bibliotek

avr-objcopy – kopiuje i tłumaczy zbiory obiektowe

avr-objdump – wy wietla informacje z plików obiektowych

avr-size – podaje informacj o rozmiarze sekcji i programu

avr-nm – listuje symbole ze zboiru obiektowego

avr-strings – listuje ła cuch znakowe ze zbiorów obiektowych

avr-strip – usuwa symbole

avr-readelf – wy wietla zawaro

zbioru z rozszerzeniem ELF

avr-addr2line – konwertuje adresy

avr-c++filt – filtr symboli C++

background image

5

Biblioteka avr-libc

avr-libc jest standardow bibliotek C dla AVR-GCC.

Biblioteka zawiera wiele standardowych funkcji C

i wła ciwych dla architektury procesorów rodziny AVR.

Dodatkowo biblioteka pozwala na tworzenie kodu startowego

programu.

background image

6

Biblioteka avr-libc

Mikrokontrolery spierane przez bibliotek avr-libc w wersji 1.4.7:

megaAVR:

atmega103

atmega128

atmega1280

atmega1281

atmega16

atmega161

atmega162

atmega163

atmega164p

atmega165

atmega165p

atmega168

atmega168p

atmega2560

atmega2561

atmega32

atmega323

atmega324p

atmega325

atmega325p

atmega3250

atmega3250p

atmega328p

atmega48

atmega48p

atmega64

atmega640

atmega644

atmega644p

atmega645

atmega6450

atmega8

atmega88

atmega88p

atmega8515

atmega8535

background image

7

Biblioteka avr-libc

Mikrokontrolery spierane przez bibliotek avr-libc w wersji 1.4.7:

tinyAVR:

attiny11

attiny12

attiny13

attiny15

attiny22

attiny24

attiny25

attiny26

attiny261

attiny28

attiny2313

attiny43u

attiny44

attiny45

CAN AVR:

at90can32

at90can64

at90can128

LCD AVR:

atmega169

atmega169p

atmega329

atmega329p

atmega3290

atmega3290p

atmega649

atmega6490

attiny461

attiny48

attiny84

attiny85

attiny861

Lighting AVR:

at90pwm1

at90pwm2

at90pwm2b

at90pwm216

at90pwm3

at90pwm3b

at90pwm316

Smart Battery AVR:

atmega8hva

atmega16hva

atmega406

background image

8

Biblioteka avr-libc

Mikrokontrolery spierane przez bibliotek avr-libc w wersji 1.4.7:

USB AVR:

at90usb82

at90usb162

at90usb646

at90usb647

at90usb1286

at90usb1287

Inne:

at94K

at76c711

at43usb320

at43usb355

at86rf401

Standardowe AVR:

at90s1200

at90s2313

at90s2323

at90s2333

at90s2343

at90s4414

at90s4433

at90s4434

at90s8515

at90c8534

at90s8535

attiny461

attiny48

attiny84

attiny85

attiny861

background image

9

Biblioteka avr-libc

Moduły biblioteki avr-libc w wersji 1.4.7:

<alloca.h> - alokujacja pami ci stosu

<assert.h> - diagnostyka

<ctype.h> - operacje na znakach

<errno.h> - obsługa bł dów

<inttypes.h> - konwersje typów całkowitych

<math.h> - funkcje matematyczne

<setjmp.h> - długie skoki

<stdint.h> - definicje standardowych typów całkowitych

<stdio.h> - standardowa biblioteka wej cia/wyj cia

<stdlib.h> - funkcje standardowe

<string.h> - funkcje operuj ce na ła cuchach

<avr/boot.h> - narz dzia wspieraj ce funkcje bootloadera

<avr/eeprom.h> - funkcje dost pu do wewn trznej pami ci EEPROM

<avr/interrupt.h> - funkcje obsługi przerwa

<avr/io.h> - definicje rejestrów i bitów I/O (doł cza wła ciwe dla danego uC)

<avr/pgmspace.h> - fukncje dost pu do pami ci programu

<avr/power.h> - funkcje zarz dzania energi

<avr/sfr_defs.h> - funkcje operuj ce na rejestrach funkcyjnych

background image

10

Biblioteka avr-libc

Moduły biblioteki avr-libc w wersji 1.4.7, cd:

<avr/sleep.h>- funkcje zarz dzania trybami energooszcz dnymi

<avr/version.h> - makra wersji

<avr/wdt.h> - funkcje obsługi Watchdoga

<util/crc16.h> - obliczanie sum CRC

<util/delay.h> - funkcje realizuj ce opó nienia

<util/delay_basic.h> - funkcje realizuj ce podstawowe opó nienia

<util/parity.h> - generowanie bitu parzystoci

<util/twi.h> - definicje masek interfejsu TWI

<compat/deprecated.h>- informacje o przestarzałych funkcjach

<compat/ina90.h> - funkcje zapewniaj ce kompatybilno z IAR EWB 3.x

Projekty przykładowe:

•kompilacja plików C i asemblerowych

•prosty projekt

•projekt bardziej zło ony

•u ywanie standardowych narz dzi I/O

•przykład u ycia interfejsu TWI

background image

11

Biblioteka avr-libc

Przykłady funkcji modułu <ctype.h>

int isalpha (int

__c ) – sprawdza, czy dana jest znakiem alfanumercznym

int isascii (int

__c ) – sprawdza, czy dana jest znakiem ASCII

int isblank (int

__c ) - sprawdza, czy dana jest znakiem spacji lub tabulacji

int isdigit (int

__c ) - sprawdza, czy dana jest cyfr dziesi tn

int toascii (int

__c ) – konwertuje dan do znaku ASCII

int tolower (int

__c ) - konwertuje wielk liter do małej

int toupper (int

__c ) - konwertuje liter mał do wielkiej

background image

12

Biblioteka avr-libc

Przykłady funkcji modułu

<math.h>

Trygonometryczne:

double acos (double

__x ) – arcus cosinus

double asin (double

__x ) – arcus sinus

double atan (double

__x ) – arcus tangens

double atan2 (double

__y, double __x ) – arcus tangens x/y w danej wiartce

double cos (double

__x ) - cosinus

double cosh (double

__x ) – cosinus hiperboliczny

double sin (double

__x ) - sinus

double sinh (double

__x ) – sinus hiperboliczny

double tan (double

__x ) - tangns

double tanh (double

__x ) – arcus tangens

background image

13

Biblioteka avr-libc

Przykłady funkcji modułu

<math.h>

Zaokr glenia:

double ceil (double

__x ) – zaokr glenie w gór

double floor (double

__x ) – zaokr glenie w dół

Pot gi i pierwiastki:

double exp (double

__x ) - eksponent

double ldexp (double

__x, int __exp ) – iloczyn liczby x i pot gi exp liczby 2

double pow (double

__x, double __y ) – pot ga y liczby x

double square (double

__x ) – kwadrat x

double sqrt (double

__x ) – pierwiastek kwadratowy x

background image

14

Biblioteka avr-libc

Moduł

<stdio.h>

W module s implementowane podstawowe operacje I/O. Ze wzgl du na brak

typowych urz dze wej cia wyj cia zakłada si kojarzenie strumieni I/O z

jednym z portów szeregowych mikrokontrolera.

Definicje:

#define

FILE

struct __file

#define

stdin

(__iob[0])

#define

stdout

(__iob[1])

#define

stderr

(__iob[2])

#define

EOF

(-1)

#define

fdev_set_udata

(stream, u) do { (stream)->udata = u; } while(0)

#define

fdev_get_udata

(stream) ((stream)->udata)

#define

fdev_setup_stream

(stream, put, get, rwflag)

background image

15

Biblioteka avr-libc

Moduł

<stdio.h>

Definicje, cd:

#define

_FDEV_SETUP_READ

__SRD

#define

_FDEV_SETUP_WRITE

__SWR

#define

_FDEV_SETUP_RW

(__SRD|__SWR)

#define

_FDEV_ERR

(-1)

#define

_FDEV_EOF

(-2)

#define

FDEV_SETUP_STREAM

(put, get, rwflag)

#define

fdev_close

()

#define

putc

(__c, __stream) fputc(__c, __stream)

#define

putchar

(__c) fputc(__c, stdout)

#define

getc

(__stream) fgetc(__stream)

#define

getchar

() fgetc(stdin)

background image

16

Biblioteka avr-libc

Funkcje modułu

<stdio.h>

int

fclose

(FILE *__stream)

int

vfprintf

(FILE *__stream, const char *__fmt, va_list __ap)

int

vfprintf_P

(FILE *__stream, const char *__fmt, va_list __ap)

int

fputc

(int __c, FILE *__stream)

int

printf

(const char *__fmt,...)

int

printf_P

(const char *__fmt,...)

int

vprintf

(const char *__fmt, va_list __ap)

int

sprintf

(char *__s, const char *__fmt,...)

int

sprintf_P

(char *__s, const char *__fmt,...)

int

snprintf

(char *__s, size_t __n, const char *__fmt,...)

int

snprintf_P

(char *__s, size_t __n, const char *__fmt,...)

int

vsprintf

(char *__s, const char *__fmt, va_list ap)

int

vsprintf_P

(char *__s, const char *__fmt, va_list ap)

int

vsnprintf

(char *__s, size_t __n, const char *__fmt, va_list ap)

int

vsnprintf_P

(char *__s, size_t __n, const char *__fmt, va_list ap)

int

fprintf

(FILE *__stream, const char *__fmt,...)

int

fprintf_P

(FILE *__stream, const char *__fmt,...)

background image

17

Biblioteka avr-libc

Funkcje modułu

<stdio.h>, cd.

int

fputs

(const char *__str, FILE *__stream)

int

fputs_P

(const char *__str, FILE *__stream)

int

puts

(const char *__str)

int

puts_P

(const char *__str)

size_t

fwrite

(const void *__ptr, size_t __size, size_t __nmemb, FILE *__stream)

int

fgetc

(FILE *__stream)

int

ungetc

(int __c, FILE *__stream)

char *

fgets

(char *__str, int __size, FILE *__stream)

char *

gets

(char *__str)

size_t

fread

(void *__ptr, size_t __size, size_t __nmemb, FILE *__stream)

void

clearerr

(FILE *__stream)

int

feof

(FILE *__stream)

int

ferror

(FILE *__stream)

background image

18

Biblioteka avr-libc

Funkcje modułu

<stdio.h>, cd.

int

vfscanf

(FILE *__stream, const char *__fmt, va_list __ap)

int

vfscanf_P

(FILE *__stream, const char *__fmt, va_list __ap)

int

fscanf

(FILE *__stream, const char *__fmt,...)

int

fscanf_P

(FILE *__stream, const char *__fmt,...)

int

scanf

(const char *__fmt,...)

int

scanf_P

(const char *__fmt,...)

int

vscanf

(const char *__fmt, va_list __ap)

int

sscanf

(const char *__buf, const char *__fmt,...)

int

sscanf_P

(const char *__buf, const char *__fmt,...)

int

fflush

(FILE *stream)

FILE *

fdevopen

(int(*put)(char, FILE *), int(*get)(FILE *))

background image

19

Biblioteka avr-libc

Ograniczenia funkcji modułu <stdio.h>:

Ze wzgl du na brak systemu operacyjnego nie ma faktycznej

implementacji systemu plików

Standardowe strumienie stdin, stdout i stderr s dost pne, ale

musz by otwarte za pomoc funkcji fdevopen(), kojarz cej

strumie z urz dzeniem wysyłaj cym i odbieraj cym znaki

Implementacja funkcji printf() i scanf() jest skomplikowana i nie

zaleca si ich u ywa (zamiast nich wskazane jest u ywa : vprintf()

i vscanf() )

background image

20

Biblioteka avr-libc

Przykładowy program korzystaj cy z modułu

<stdio.h>:

#include <

stdio.h

>

static int uart_putchar(char c,

FILE

*stream);

static

FILE

mystdout =

FDEV_SETUP_STREAM

(uart_putchar, NULL, _

FDEV_SETUP_WRITE

);

static int uart_putchar(char c,

FILE

*stream)

{

if (c == '\n') uart_putchar('\r', stream);

loop_until_bit_is_set

(UCSRA, UDRE);

UDR = c; return 0;

}

int main(void)

{

init_uart();

stdout

= &mystdout;

printf

("Hello, world!\n");

return 0;

}

background image

21

Biblioteka avr-libc

Moduł

<avr/io.h>

•Moduł zawiera definicje rejestrów bitów i ko cówek I/O dla mikrokontrolera

•W rzeczywistoci doł czony zostaje moduł <avr/io

XXXX

.h> definiuj cy I/O

wybranego mikrokontrolra na podstawie opcji wywołania kompilatora -mmcu=

typ_mikrokontrolera

•Moduł doł cza moduły: avr/sfr_defs.h, avr/portpins.h, avr/common.h

i avr/version.h

•W module s zdefiniowane makra:

RAMEND – stała b d ca adresem ostatniej komórki pami ci RAM

XRAMEND - stała b d ca adresem ostatniej komórki zewn trznej pami ci RAM

E2END – stała b d ca adresem ostatniej komórki pami ci EEPROM

FLASHEND – stała b d ca adresem ostatniej komórki pami ci FLASH

SPM_PAGESIZE – stała okre laj ca rozmiar pami ci bootloadera w bajtach

background image

22

Biblioteka avr-libc

Moduł

<stdlib/io.h>

•Moduł zawiera definicje makr i funkcji wymaganych przez standard j zyka i

wła ciwych dla mikrokontrolerów AVR.

Struktury danych:

struct

div_t

, struct

ldiv_t

Funkcje niestandardowe:

char *

ltoa

(long int __val, char *__s, int __radix)

char *

utoa

(unsigned int __val, char *__s, int __radix)

char *

ultoa

(unsigned long int __val, char *__s, int __radix)

long

random

(void)void

srandom

(unsigned long __seed)

long

random_r

(unsigned long *__ctx)

char *

itoa

(int __val, char *__s, int __radix)

background image

23

Biblioteka avr-libc

Moduł

<stdlib/io.h>

Stałe:

#define

RANDOM_MAX

0x7FFFFFFF

Funkcje konwersji dla argumentów podwójnej precyzji:

(umieszczone w module ”libm.a”, doł czanej opcj wywołania kompilatora: -lm)

char *

dtostre

(double __val, char *__s, unsigned char __prec, unsigned char __flags)

char *

dtostrf

(double __val, signed char __width, unsigned char __prec, char *__s)

#define

DTOSTR_ALWAYS_SIGN

0x01

#define

DTOSTR_PLUS_SIGN

0x02

#define

DTOSTR_UPPERCASE

0x04

background image

24

Biblioteka avr-libc

Moduł

<stdlib/io.h>

Definicje:

#define

RAND_MAX

0x7FFF

typedef int(*)

__compar_fn_t

(const void *, const void *)

Funkcje:

void

abort

(void) __ATTR_NORETURN__

int

abs

(int __i)

long

labs

(long __i)

void *

bsearch

(const void *__key, const void *__base, size_t __nmemb, size_t

__size, int(*__compar)(const void *, const void *))

div_t div

(int __num, int __denom) __asm__("__divmodhi4")

ldiv_t ldiv

(long __num, long __denom) __asm__("__divmodsi4")

void

qsort

(void *__base, size_t __nmemb, size_t __size,

__compar_fn_t

__compar)

long

strtol

(const char *__nptr, char **__endptr, int __base)

unsigned long

strtoul

(const char *__nptr, char **__endptr, int __base)

long

atol

(const char *__s) __ATTR_PURE__

int

atoi

(const char *__s) __ATTR_PURE__

void

exit

(int __status) __ATTR_NORETURN__

background image

25

Biblioteka avr-libc

Moduł

<stdlib/io.h>

Funkcje, cd:

void *

malloc

(size_t __size) __ATTR_MALLOC__

void

free

(void *__ptr)

void *

calloc

(size_t __nele, size_t __size) __ATTR_MALLOC__

void *

realloc

(void *__ptr, size_t __size) __ATTR_MALLOC__

double

strtod

(const char *__nptr, char **__endptr)

double

atof

(const char *__nptr)

int

rand

(void)

void

srand

(unsigned int __seed)

int

rand_r

(unsigned long *__ctx)

Zmienne:

size_t

__malloc_margin

char *

__malloc_heap_start

char *

__malloc_heap_end

background image

26

Biblioteka avr-libc

Makra modułu

<interrupt.h>

sei() – zał cza system przerwa

cli() – wył cza system przerwa

EMPTY_INTERRUPT (vector ) – puste przerwanie (tylko powrót)

ISR (vector ) – procedura obsługi przerwania o podanym wektorze

ISR_ALIAS (vector, target_vector ) – powtórzenie obsługi dla nowego wektora

reti() – powrót z procedury obsługi przerwania

Mo liwe kombinacje parametrów:

ISR(vector, ISR_NOBLOCK) - procedura obsługi przerwania nie blokuje

kolejnych przerwa

ISR(vector, ISR_NAKED) - procedura obsługi przerwania definiowana w pełni

przez u ytkownika (równie prolog i epilog)

background image

27

Biblioteka avr-libc

U ycie makr modułu

<interrupt.h>

Przykład:

ISR

(INT0_vect)

{

PORTB = 42;

}

ISR_ALIAS

(INT1_vect, INT0_vect);


Wyszukiwarka

Podobne podstrony:
Marcin Wiazania Programowanie mikrokontrolerow AVR w jezyku Bascom
AVR i ARM7 Programowanie mikrokontrolerow dla kazdego avrar7
Podstawy programowania mikrokontrolerów AVR8 w środowisku AVR Studio 4
mikrokontrolery, ELEKTRONIKA I PROGRAMOWANIE, Mikroprocesory, programowanie Bascom, AVR,
Mikrokontrolery AVR programowanie w języku C Przykłady zastosowań
Mikrokontrolery AVR programowanie w języku C Przykłady zastosowań
Bootloader dla mikrokontrolerów AVR
ZL5PRG Programator mikrokontrol Nieznany
z80 wersja polska, ELEKTRONIKA I PROGRAMOWANIE, Mikroprocesory, programowanie Bascom, AVR,
z80 porownanie list, ELEKTRONIKA I PROGRAMOWANIE, Mikroprocesory, programowanie Bascom, AVR,
opis pojec, ELEKTRONIKA I PROGRAMOWANIE, Mikroprocesory, programowanie Bascom, AVR,
Podstawy Programowania Mikrokontrolera 8051
Programowanie mikrokontrolerow 8051 w jezyku C
Galka Galka Podstawy Programowania Mikrokontrolera 8051
Podstawy programowania mikrokontrolera 8051
język C dla mikrokontrolerów AVR od podstaw do zaawansowanych aplikacji

więcej podobnych podstron