Programowanie progesorów Atmela z wykorzystaniem kompilatora GCC

Strona o C na procesory

Opis rejestrów USART-u w Atmega328 i jemu podobnych.
UART Opisane ponioże rejstru odnoszę do USART w Atmega328. 
Podobnie działają w Atmeag8 ale nie można się natym wzorowcą 
i należy sięgnąc do dokumentacji Atmega8.
UCSRxA

RXC   - bit informujący o skompletowaniu danej odbieranej
TXC   - bit informujący o wysłaniu całej danej
UDRE  - bit informujący, że bufor nadawania jest gotowy do przyjęcia nowej danej
FE    - bit zgłoszenia błędu ramki (ustawiany gdy w oczekiwanym czasie 
        nie pojawił się bit stopu)
DOR   - bit zgłoszenia błędu nadpisania (dana odbierana jest skompletowana, 
        a wykryto bit startu nowej danej odbieranej)
PE    - błąd parzystości
U2X   - podwojenie prędkości transmisji w trybie asynchronicznym
MPCM  - bit współpracy wieloprocesorowej

UCSRxB 

RXCIE - bit maski przerwania od skompletowania danej odbieranej
TXCIE - bit maski przerwania od wysłania danej
UDRIE - bit maski przerwania od pustego rejestru danych
RXEN  - włączanie odbiornika portu USART (zapis „1”)
TXEN  - włączanie nadajnika portu USART (zapis „1”)
UCSZ2 - jeden z bitów określających rozmiar danej
RXB8  - 9-ty bit odbierany
TXB8  - 9-ty bit nadawany

UCSRxC

URSEL - bit dostępu do rejestru UCSRC i UBRRH, ustawienie na 1 zapewnia dostęp do 
        rejestru UCSRC. Oba rejestry mają ten sam adres.
UMSEL - wybór trybu synchronicznego lub asynchronicznego, „0” tryb asynchroniczny.
UPM1 
UPM0  - wybór rodzaju kontroli parzystości: wyłączona, parzystość parzysta, 
        parzystość nieparzysta
USBS  - ilość bitów stopu: „0”- 1bit stopu, „1”- 2 bity stopu
UCSZ1
UCSZ0 - wybór ilości bitów danej

UCSZ2 UCSZ1 UCSZ0   Długość danej
    0     0     0   5-bitów
    0     0     1   6-bitów
    0     1     0   7-bitów
    0     1     1   8-bitów
    1     0     0   rezerwa
    1     0     1   rezerwa
    1     1     0   rezerwa
    1     1     1   9-bitów

UCPOL - tylko w modzie synchronicznym określa polaryzację sygnału zegarowego
        określenie wielkości danej
Wolna pamięć w procesorze
 freeRam() PRINTF(">> Free RAM is: %d bytes\r\n", freeRam());
int freeRam (void)
{
extern int __heap_start, *__brkval;
int v;
int _res = (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
return _res;
}
Data i godzina kompilacji pliku
Kompilacja const char compile_date[] PROGMEM    = __DATE__;     // Mmm dd yyyy
const char compile_time[] PROGMEM    = __TIME__;     // hh:mm:ss 
PRINTF("Compiled at: %S %S\r\n",compile_date , compile_time );
Stały adres
absolute Stałe położenie danych w pamięci
const int stale[] = {1, 2, 3, 4, 5} absolute 0x1234;

Dasej (C) 2019 : 4588