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