Nisi’s work blog

Nisi’s work blog – programing tips

C for Atmega (GCC) Data Types

Tipuri de date recunoscute de compilatorul GCC pentru microcontrolele de la Atmel

Toate Exemplele sunt testate in Avr-Studio & GCC plugin

Tipuri Intregi de date

8 bit types

  1. typedef signed char        int8_t
  2. typedef unsigned char    uint8_t

16 bit types

  1. typedef int                       int16_t
  2. typedef unsigned            int uint

32 bit types

  1. typedef long                    int32_t
  2. typedef unsigned long    uint32_t

64 bit types

  1. typedef long long                    int64_t
  2. typedef unsigned long long    uint64_t

Pointer Types

  • typedef int16_t       intptr_t
  • typedef uint16_t     uintptr_t



Atmega 128 – UART Comunication

Exemplul este valabil pentru Atmega128 + Quartz 8MHz

Atmega 128 – UART Comunication  

  1. UART0
  • Initializare

               BaudRate 4800 se seteaza registrul UBRR1H = 0 si UBRR1L = 103

               BaudRate 9600 se seteaza registrul UBRR1H = 0; UBRR1L = 51;

               BaudRate 115200  – UBRR1H = 0; UBRR1L = 3;

  • Activare Linie RX, TX si intreruperea aferenta lui RX

              - pentru a se putea citi date este necesar sa se activeze linia RX

              – de asemenea pantru a se trimite date trebuie activata linia TX

                         UCSR1B = (1<<RXEN1)|(1<<TXEN1)

             – Pentru a citi date de pe linia RX exista 2 posibilitati: sa se astepte in continuu pana la RX vine “ceva” in cazul asta nu se mai poate face nimic altceva pana nu se citeste de la UART sau sa se semnaleze cu ajutorul unei intreruperi momentul exact cand vine o data pe Rx si doar atunci sa se faca citirea.

            – Pentru a “spune” microcontrolerulul ca intreruperea pentru Rx este activata se foloseste urmatoarea linie de cod:

                        UCSR1B = (1<<RXEN1)|(1<<TXEN1) | (1 << RXCIE1)

  •  Restul de setari: (no parity, 8data, 1stop)

                        UCSR1C = (3<<UCSZ10);

  •  Citire byte din UART1

                      while ((UCSR1A & (1<<RXC1))==0);   //  astept pana apare ceva la portul serial

                      return UDR1;   // dupa ce iese din while -ul de mai sus in UDR1 este disponibil un Byte