Timer T2 - zgodny z 8052 Tryb autoreload 16 bitowy - wyzwalany przepełnieniem licznika lub sygnałem zewnętrznym Tryb zatrzasku (capture) 16 bitowy - wyzwalany sygnałem zewnętrznym Tryb auto-reload Tryb capture Rejestr T2CON - adr. bitowo 7 - TF2 - Flaga przepełnienia, kasowanie programowe 6 - EXF2 - Przeładowanie nastąpiło sygnałem zewnętrznym. Kasowanie programowe 5 - RCLK - do złącza transmisji szeregowej 4 - TCLK - 3 - EXEN2 - zgoda na zewnętrzne przeładowanie 2 - TR2 - start/stop timera 1 - CNT2 - wybór trybu pracy: 0: timer, 1: licznik 0 - CAP2-1: zgoda na wyzwalanie zewnętrzne funkcji CAPTURE 0: zgoda na przeładowanie 1
Przykład - pomiar okresu impulsów #include <ADUC831.H> unsigned int okres; void handler_t2(void) interrupt 5 EXF2=0;TF2=0; TL2=0; TH2=0; okres=rcap2l+((unsigned char)rcap2h<<8); void main (void) T2CON=0x0D; //0000 1101 ET2=1; EA=1; // Zgoda globalna while(1); Okres - liczba z zakresu 0 do 65535 MOV R7,RCAP2H MOV A,R7 MOV R6,A MOV R5,RCAP2L MOV R4,#00H CLR A ADD A,R5 MOV okres+01h,a MOV A,R4 ADDC A,R6 MOV okres,a struct two_byte unsigned char hi,lo;; union int_to_byte unsigned int word; struct two_byte byte; ; union int_to_byte okres; void handler_t2(void) interrupt 5 EXF2=0;TF2=0; TL2=0; TH2=0; okres.byte.lo=rcap2l; okres.byte.hi=rcap2h; Efektywny dostęp do danych dwubajtowych MOV MOV okres+01h,rcap2l okres,rcap2h Pamięć w mikrokontrolerze ADuC 831 Model programowania ADuC 831 256 Bytes of General-Purpose RAM 2 kbytes of Internal XRAM 62 kbytes of On-Chip Flash Program Memory 4 kbytes of On-Chip Flash Data Memory Uniwersalna pamięć RAM - 256 B Dolne 128 B - adresowanie bezpośrednie i pośrednie. Górne 128 B - adresowanie pośrednie Zewnętrzna pamięć XRAM 2
Zewnętrzna pamięć XRAM - interfejs sprzętowy Wewnętrzna pamięć programu typu Flash Programowanie: poprzez łącze szeregowe - w czasie resetu pin PSEN=0 (In-Circuit Programming) równoległe - za pomocą typowego programatora EEPROM/Flash User Download Mode (UMODE) - umoŝliwia zapisanie przez program uŝytkownika do 56 kb pamięci programu Flash, oferując łącznie 60 kb pamięci nieulotnej Wewnętrzna pamięć programu typu Flash Zewnętrzna pamięć CODE - interfejs sprzętowy Gdy w czasie resetu pin EA=1 - wewnętrzna pamięć Flash EA=0 - zewnętrzna pamięć EPROM Wewnętrzna pamięć danych Flash 4 kb pamięci zorganizowane w 1 k stron po 4 B Dostęp poprzez rejestry SFR: EDATA1-4, EADRH/L i ECON Typowe czasy dostępu: READPAGE (4 bytes) 5 cykli maszynowych WRITEPAGE (4 bytes) 380 µs VERIFYPAGE (4 bytes) 5 cykli maszynowych ERASEPAGE (4 bytes) 2 ms ERASEALL (4 kbytes) 2 ms READBYTE (1 byte) 3 cykli maszynowych WRITEBYTE (1 byte) 200 µs Wewnętrzna pamięć danych Flash 3
Przykładowe polecenia rejestru ECON 0x01 - READ - strona zaadresowana przez EADRH/L jest odczytywana do EDATA1-4 0x02 - WRITE - strona zaadresowana przez EADRH/L jest zapisywana przez EDATA1-4 0x04 -VERIFY - strona zaadresowana przez EADRH/L jest porównywana z EDATA1-4 0x05 -ERASE - strona zaadresowana przez EADRH/L jest kasowana do wartości 0xFF 0x06 - ERASE ALL - kasowanie całej pamięci #include <ADUC831.H> #define uchar unsigned char #define uint unsigned int void zapis_flash(uint adres, uchar d1, uchar d2, uchar d3, uchar d4) EADRL = (uchar)(adres & 0xFF); EADRH = (uchar)(adres>>8); ECON = 0x05; //ERASEPAGE EDATA1=d1; EDATA2=d2; EDATA3=d3; EDATA4=d4; ECON = 0x02; // WRITEPAGE /* UWAGA: operacja ERASEPAGE trwa 2 ms, operacja WRITEPAGE 0.38 ms. W tym czasie CPU przechodzi w tryb Idle, i nie obsługuje przerwań. Układy peryferyjne pracują normalnie. */ void odczyt_flash(uint adres, uchar *d1, uchar *d2, uchar *d3, uchar *d4) EADRL = (uchar)(adres & 0xFF); EADRH = (uchar)(adres>>8); ECON = 0x01; // READPAGE *d1=edata1; *d2=edata2; *d3=edata3; *d4=edata4; void main(void) uchar a,b,c,d; zapis_flash(400,0x11,0x22,0x33,0x44); odczyt_flash(400,&a, &b, &c, &d); while(1); Rozmieszczenie zmiennych w pamięci RAM Atrybuty lokalizacji: data - zmienna w pamięci wewnętrznej; do 128 bajtów adresowane bezpośrednio. idata- zmienna w pamięci wewnętrznej; do 256 bajtów adresowane pośrednio pdata - stronicowany (256 B) dostęp do pamięci zewnętrznej poprzez MOVX @Rn xdata - zmienna w pamięci zewnętrznej, adresowanie wskaźnikowe code - zmienna wpamięci programu- tylko do odczytu #define uchar unsigned char #define uchar unsigned char uchar data zm1; uchar idata zm2; void main(void) zm1=0x11; zm2=0x22; while(1); MOV zm1,#011h MOV R0,#LOW zm2 MOV @R0,#022H uchar x; uchar xdata zm3; uchar code zm4; void main(void) zm3=0x33; x=zm4; while(1); MOV DPTR,#zm3 MOV A,#033H MOVX @DPTR,A MOV DPTR,#zm4 CLR A MOVC A,@A+DPTR MOV x,a 4
Modele pamięci w kompilatorze - SMALL Domyślnie wszystkie zmienne umieszczane sa w pamięci wewnętrznej RAM - jak z dyrektywą data Bardzo efektywny dostęp do zmiennych, ale wszystkie zmienne, oraz stos muszę się zmieścić w max. 128 bajtach. Modele pamięci w kompilatorze - COMPACT Model zmiennych w pamięci zewnętrznej. Wszystkie zmienne muszą zmieścić się w 256 bajtach. Starszy bajt adresu (wystawiany na porcie P2) jest stały i musi zostać ustawiony przez program. Domyślnie wszystkie zmienne deklarowane są z atrybutem pdata Adresowanie pośrednie poprzez R0 i R1 (MOVX @R0/@R1) Wolniejsze niŝ SMALL lecz szybsze niŝ LARGE. Modele pamięci w kompilatorze - LARGE Model zmiennych w pamięci zewnętrznej. Pełen zakres dostępnej pamięci zewnętrznej. Domyślnie wszystkie zmienne deklarowane są z atrybutem xdata Do adresowania wykorzystywany jest rejestr wskaźnikowy (DPTR) Wolniejsze niŝ SMALL oraz COMPACT. Zewnętrzna pamięć z RTC - M48T02 Pamięć SRAM 2 kb*8 Zegar czasu rzeczywistego Programowa kalibracja zegara Wbudowana bateria zasilająca zegar i podtrzymująca pamięć Rejestry RTC układu M48T02 Dostęp do zadanego adresu w pamięci XDATA #define ADRES 0xFF00 uchar x; uchar xdata zm3; char xdata *p; p=(char xdata *) ADRES; *(p)=0x55; zm3=0; x=*(p); MOV MOV p,#0ffh p+01h,#00h MOV DPL,p+01H MOV DPH,p MOV A,#055H MOVX @DPTR,A CLR A MOV DPTR,#zm3 MOVX @DPTR,A MOV DPL,p+01H MOV DPH,p MOVX A,@DPTR MOV x,a 5
Modele kompilacji kodu - ROM(SMALL) Instrukcje CALL i JMP są kodowane jako odpowiednio ACALL i AJMP. Maksymalna wielkość całego programu jest ograniczona do 2 kilo bajtów. Modele kompilacji kodu - ROM(COMPACT) Instrukcje CALL jest kodowana jako LCALL, natomiast JMP wewnątrz funkcji jako AJMP. Maksymalna wielkość kaŝdej z funkcji programu jest ograniczona do 2 kilo bajtów. Cały program moŝe osiągnąć do 64 kilo bajtów. Modele kompilacji kodu - ROM(LARGE) Instrukcje CALL jest kodowana jako LCALL, takŝe JMP jest kodowana jako LJMP. Cały program moŝe osiągnąć do 64 kilo bajtów, bez ograniczeń na długość poszczególnych funkcji. Wybór pomiędzy modelami ROM(COMPACT) a ROM (LARGE) zaleŝy od konkretnego przykładu Watchdog timer Kontroluje poprawność działania programu - błędy programowe lub wynik zakłóceń Po przekroczeniu zadanego czasu generuje Reset lub przerwanie niemaskowalne Ustawiany okres działania - od 15.6 do 2000 milisekund Obsługa - poprzez sekwencję instrukcji: WDWR=1; WDCON=0x72; SETB WDWR ;zgoda na zapis do WDT MOV WDCON, #72H ; zapis - okres 2 s Rejestr WDCON - adr. bitowo 7 - PRE3 - wybór okresu zliczania 6 - PRE2-5 - PRE1-4 - PRE0-3 - WDIR - 1: generowanie przerwań 0: generowanie sygnału RESET 2 - WDS - 1: gdy Reset od Watchdoga 1 - WDE - zgoda na prace Watchdoga 0 - WDWR - zgoda na zapis do WDCON 6
Układ modulacji szerokości impulsów PWM Rejestr sterujący PWMCON 7 - SNGL - wyjścia przypisane do PWM 6 - MD2 - wybór trybu pracy 5 - MD1-4 - MD0-3 - CDIV1 - dzielnik częstotliwości 2 - CDIV0-1 - CSEL1 - wybór źródła sygnału 0 - CSEL0 - Tryb 1 - Single Variable Resolution PWM1 określa okres pracy i rozdzielczość PWM0 określa wypełnienie Gdy PWM1H/L = 65536-16-bit PWM 244 Hz (16 MHz/65536) Gdy PWM1H/L = 4096-12-bit PWM 3906 Hz (16 MHz/4096) Tryb 2 - podwójny sygnał 8 bitowy Tryb 3 - podwójny sygnał 16 bitowy PWM1L - określa okres pracy pozostałe - wypełnienie sygnału 7
Tryb 4: Tryb 5: Dwa 8 bitowe PWM Tryb 6: Przetwornik AC Szybki, 8 kanałowy, 12 bitowy przetwornik Przetwarzanie pojedyncze lub ciągłe, inicjowane programowo lub zewnętrznie Praca okresowa - sygnał z timera T2 Tryb pracy DMA - wyniki bezpośrednio przesyłane do pamięci, bez udziału CPU Kalibrowane wewnętrzne źródło odniesienia Przetwornik AC Rejestry sterujące ADCCON1-3 12 bitowy rezultat w ADCDATAH/L Na starszych bitach ADCDATAH - numer kanału 8
Przetwornik C/A Dwa 12 bitowe przetwornik C/A Zakres przetwarzania - sygnał zewnętrzny lub wewnętrzne źródło odniesienia Rejestr sterujący DACCON i rejestry danych DAC1H/L i DAC0H/L Dla trybu 12 bitowego - zmiana stanu wyjścia po wpisie do rejestru DAC1L (DAC0L) DACCON 7 MODE Tryb pracy 1: 8 bitów, 0: 12 bitów 6 RNG1 Zakres pracy: 5 RNG0 1: napięcie zasilania 0: napięcie REF 4 CLR1 Wymuszenie napięcia równego 0 3 CLR0 2 SYNC Synchroniczna aktualizacja wyjść 1 PD1 Zasilanie przetworników 0 PD0 Dane 12 bitowe: w młodszej części DAC1H i DAC1L Układ kontroli zasilania Kontrola zasilania części cyfrowej i analogowej Spadek napięcia poniŝej nastawianego progu wywołuje przerwanie Gdy przez 250 ms napięcie jest ponownie wyŝsze od wartości progowej to przerwanie jest kasowanie UmoŜliwia uŝytkownikowi zapisanie wyników w pamięci nieulotnej. 9
Tryby oszczędności energii Prądy części cyfrowej dla U=5V: Normal mode - 21 ma Idle mode - 10 ma Power down mode -0.025 ma Tryb Idle Zegar systemowy pracuje normalnie, lecz nie jest doprowadzany do CPU Wszystkie układy peryferyjne pracują Przerwania powodują powrót do normalnej pracy Tryb Power Down Zatrzymany oscylator i wszystkie peryferia Wyjście poprzez: Sygnał RESET Przerwanie od układu TIC (pracującego z własnym oscylatorem RC) Przerwanie od łączy szeregowych SPI lub I2C Przerwanie zewnętrzne INT0 Wyłączenie i włączenie 10