Mikrokontroler ATMEL z serii AT91SAM7S - INFO-KAM

Transkrypt

Mikrokontroler ATMEL z serii AT91SAM7S - INFO-KAM
U.I. INFO-KAM A.Zeja www.infokam.kielce.pl
Mikrokontroler ATMEL z serii AT91SAM7S
draft 25.04.2006
PIT-Zegar systemowy
Do realizacji zegara systemowego wykorzystamy PIT (ang. Periodic Interval Timer)
Parametry programowania PIT:
Okres:
MCK = 47 923 200 Hz 0,0209 µs lub 50 Cykli na 1µs
MCK/16=2 995 200Hz czyli 0,3387 µs
20-bitowy licznik CPIV zlicza od 0 do wartości PIV ustawianej w rejestrze PIT_MR
trafiamy z przerwaniem w
1µs - PIV = 3
1ms - PIV = 3000
KaŜde osiągnięcie wartości PIV powoduje zwiększenie wartości licznika PICNT , wyzerowanie
licznika PIV oraz ustawiany jest bit PITS w rejestrze statusu PIT_SR .
JeŜeli w rejestrze statusu PIT_SR zezwolono na przerwania (bit PITIEN ) - zbocze narastające
PITS sygnalizuje przerwanie.
Wpisanie nowej wartości PIV nie powoduje zerowania oraz restartu licznika.
Kiedy wartości liczników PIV oraz PICNT zostaną odczytane z rejestru PIT_PIVR licznik
przepełnienia PICNT jest zerowany oraz PITS jest zerowany - sekwencja powinna być
wykorzystana do potwierdzenia przyjęcia przerwania i wykonania procedury obsługi
Istnieje drugi rejestr umoŜliwiający odczytanie zawartości PIV oraz PICNT bez zmiany wartości
PICNT oraz PITS : PIT_PIIVR
U.I. INFO-KAM A.Zeja www.infokam.kielce.pl
Mikrokontroler ATMEL z serii AT91SAM7S
Obsługa modułu UART
Szybkość transmisji danych
Chcemy osiągnąć 115200
MCK = 47923200
BaudRate =MCK /(CD *16)
CD = MCK /(BaudRate*16)
U.I. INFO-KAM A.Zeja www.infokam.kielce.pl
Mikrokontroler ATMEL z serii AT91SAM7S
MCK
47923200
47923200
BaudRate
16
16
CD
230400
115200
Błąd
13
26
0
0
SPI
void spi_init(void)
{
/* disable and reset */
spi->SPI_CR = AT91C_SPI_SPIDIS | AT91C_SPI_SWRST; //Disable and reset
AT91F_SPI_CfgPMC(); /* enable clock */
spi->SPI_MR = ((0xb <<16) | (32 << 24) | AT91C_SPI_MSTR | /* Master */
AT91C_SPI_PS_VARIABLE );
/* VAriable periheral (== 1) */ // Czyli SPI Będziemy wybierać urządzenie zewnętrzne podczas
wpisywania słowa do transmisji
AT91F_SPI_CfgCs(spi, 0,
AT91C_SPI_CPOL |
(AT91C_SPI_BITS & AT91C_SPI_BITS_12) | // 12 bitów
(AT91C_SPI_SCBR & (CS_BAUD << 8)) |
(AT91C_SPI_DLYBS & (128 << 16)) |
(AT91C_SPI_DLYBCT & (0 << 24))
);
// Drugi kanal
AT91F_SPI_CfgCs(spi, 1,
AT91C_SPI_CPOL |
(AT91C_SPI_BITS & AT91C_SPI_BITS_12) | // 12 bitów
(AT91C_SPI_SCBR & (CS_BAUD << 8)) |
(AT91C_SPI_DLYBS & (128 << 16)) |
(AT91C_SPI_DLYBCT & (0 << 24))
);
AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA, // PIO controller base address
((unsigned int) AT91C_PA11_NPCS0 ) |// Peripheral A
((unsigned int) AT91C_PA31_NPCS1 ) |
((unsigned int) AT91C_PA13_MOSI ) |
((unsigned int) AT91C_PA12_MISO ) |
((unsigned int) AT91C_PA14_SPCK ),0);// ((unsigned int) AT91C_PA9_NPCS1 ) );
AT91F_PDC_Open(spi_pdc);
AT91F_SPI_Enable(spi);
}
U.I. INFO-KAM A.Zeja www.infokam.kielce.pl
Mikrokontroler ATMEL z serii AT91SAM7S