Download as pdf or txt
Download as pdf or txt
You are on page 1of 96

dsPIC30F4011/4012 Enhanced Flash

16-bitni Digitalni Signal Kontroler

Priručnik
MIKROPROCESORI

Osnovne karakteristike Modifikovane RISC CPU (centralne procesorske


jedinice):
• Modifikovana Harvard arhitektura
• kompajler programskog jezika C optimiziranog skupa instrukcija sa fleksibilnim adresnim
režimima
• 84 instrukcije
• 24-bitna širina instrukcija, 16-bitna širina memorijskog prostora
• 48 KB internog Fleš programskog prostora
(16K instrukcijskih reči)
• 2 KB interne RAM memorije
• 1 KB EEPROM memorije za čuvanje programa
• Do 30 MIP operacija:
- DC do 40 MHz na ulazu spoljnog (eksternog) takta
- 4 MHz-10 MHz na ulazu oscilatora sa aktivnim PLL (4x, 8x, 16x)
• 30 izvora prekida
- 3 spoljnih izvora prekida
- 8 korisnički izabranih nivoa prioriteta za svaki izvor prekida
- 4 izvora procesor trap-a
• 16 x 16-bita radnog registarskog niza

DSP Karakteristike Uređaja:


• Dualno sakupljaje podataka
• Povratna informacija akumulatora za DSP operacije
• Adresni režimi Modula i Reverzibilnog bita
• Dva akumulatora, 40-bitne širine sa opcionom logikom zasićenja
• 17 x 17-bita jednociklusni hardver sa multiplikatorom za razlomke/cele brojeve
• Sve DSP instrukcije su jednociklične (izvršavaju se u jednom ciklusu)
• ± 16-bitni jednociklični pomeraj

Periferne Karakteristike:
• Uvir-Izvor visoke struje na izlazu U/I pinova: 25 mA/25 mA
• Režim tajmera sa programabilnim reskalerom:
- Pet 16-bitnih tajmera/brojača; opciono par
16-bitni tajmeri u 32-bitnim tajmerskim režimima
• 16-bitne Capture ulazne funkcije
• 16-bitne izlazne funkcije za Poređenje/PWM
• 3-žični SPI™ režim (podržava 4 Frejm režima)
• I2C™ režim podržava Multi-Master/Slave režim i 7-bitno/10-bitno adresiranje
• 2 UART režima sa FIFO Baferima
• 1 CAN režim, 2.0B kompatibilan

Karakteristike upravljanja motorom u PWM Režimu:


• 6 PWM izlaznih kanala
- Komplementarni ili Nezavisni izlazni režimi
- Ivični ili Centralni režimi
• 3 generatori duty ciklusa
• Određena vremenska baza
• Programabilni izlazni polaritet
• Kontrola mrtvog vremena za komplementarni režim
• Ručno upravljanje izlazom
• Okidač za A/D konverzije

Interfejs Režim Kvadratnog Enkodera


Karakteristike:
• Faza A, Faza B i indeks pulsnog ulaza
• 16-bitni brojač pozicije nagore/nadole
• status pravca brojanja
• Režim merenja pozicije (x2 i x4)
• Programabilni digitalni fiteri šuma na ulazima
• Alternativni 16-bitni režim Tajmer/Brojač
• Prekid na poziciji brojača rollover/underflow

Analogne Karakteristike:
• 10-bitni Analogno-Digitalni konvertor (A/D) sa 4 S/H ulaza:
- Odnos konverzije od 500 Ksps
- 9 ulaznih kanala
- Konverzija je moguća u toku Sleep i Idle režima
• Programabilno generisanje Brown-out Detection i Reseta

Specijalne karakteristike mikrokontrolera:


• Pojačana Fleš programska memorija:
- 10,000 briši/piši ciklusa (min.) za industrijski raspon temperature, 100K (tipično)
• EEPROM memorija podataka:
- 100,000 briši/piši ciklusa (min.) za industrijski raspon temperature, 1M (tipično)
• Mogućnost samo-reprogramiranja pod softverskom kontrolom
• Power-on Reset (POR), Power-up Tajmer (PWRT) i Start-up Oscilator Tajmer (OST)
• Fleksibilni Watchdog Tajmer (WDT) sa unutrašnjim RC oscilatorom male snage za pouzdan
rad
• Fail-Safe monitor takta detektuje kvar takta i prebacuje prekidače na unutrašnji RC
oscillator male snage
• Programbilna zaštita koda
• In-Circuit Serijsko Programiranje™ (ICSP™)
• Izborni režimi raspolaganja snagom
1 Sleep, Idle i Alternate režimi takta

CMOS Tehnologija:
• Mala snaga, velika brzina Fleš tehnologije
• Širok spektar operativnog napona (2.5V do 5.5V)
• Industrijski i Prošireni temperaturni rasponi
• mala snaga potrošnje
MIKROPROCESORI

dsPIC30F Kontrola Motora i Familija Pretvarača Snage*


Program Output Moto
SRAMEEPROMTimer Input A/D Quad ™ ™
10-
bit
Device Pins Mem. Comp/StdControl C
Bytes/
2
Bytes Bytes 16-bit Cap 500 Enc CAN
Ksps
Instructions PWM PWM UART SPI I
dsPIC30F2010 28 12K/4K 512 1024 3 4 2 6 ch 6 ch Yes 1 1 1 -

dsPIC30F3010 28 24K/8K 1024 1024 5 4 2 6 ch 6 ch Yes 1 1 1 -

dsPIC30F4012 28 48K/16K 2048 1024 5 4 2 6 ch 6 ch Yes 1 1 1 1

dsPIC30F3011 40/4424K/8K 1024 1024 5 4 4 6 ch 9 ch Yes 2 1 1 -

dsPIC30F4011 40/4448K/16K 2048 1024 5 4 4 6 ch 9 ch Yes 2 1 1 1

dsPIC30F5015 64 66K/22K 2048 1024 5 4 4 8 ch 16 Yes 1 2 1 1


ch

dsPIC30F6010 80 144K/48K 8192 4096 5 8 8 8 ch 16 Yes 2 2 1 2


ch

* Ova tabela daje sumu perifernih karakteristika dsPIC30F6010. Ostali uređaji dsPIC30F
familije pretvarača snage i kontrole motora su prikazani samo u svrhe poređenja

Dijagram pinova:
MCLR 1 40 AVDD

EMUD3/AN0/VREF+/CN2/RB0 2 39 AVSS

EMUC3/AN1/VREF-/CN3/RB1 3 38 PWM1L/RE0

AN2/SS1/CN4/RB2 4 37 PWM1H/RE1

AN3/INDX/CN5/RB3 5 36 PWM2L/RE2

AN4/QEA/IC7/CN6/RB4 6 35 PWM2H/RE3

AN5/QEB/IC8/CN7/RB5 7 34 PWM3L/RE4

AN6/OCFA/RB6 8 33 PWM3H/RE5

dsPIC30F4011
AN7/RB7 9 32 VDD

AN8/RB8 10 31 VSS

VDD 11 30 C1RX/RF0

VSS 12 29 C1TX/RF1

OSC1/CLKIN 13 28 U2RX/CN17/RF4

OSC2/CLKO/RC15 14 27 U2TX/CN18/RF5

EMUD1/SOSCI/T2CK/U1ATX/CN1/RC13 15 26 PGC/EMUC/U1RX/SDI1/SDA/RF2

EMUC1/SOSCO/T1CK/U1ARX/CN0/RC1 PGD/EMUD/U1TX/SDO1/SCL/RF3
4 16 25

FLTA/INT0/RE8 17 24 SCK1/RF6

EMUD2/OC2/IC2/INT2/RD1 18 23 EMUC2/OC1/IC1/INT1/RD0

OC4/RD3 19 22 OC3/RD2

VSS 20 21 VDD

Tabela 1-1 daje kratki opis uredjaja U/I pinova i finkcija koje su multipleksirane pinu porta.
Višestruke funkcije mogu da se jave na jednom pinu porta. Kada dođe do multipleksiranja,
funkcionalni zahtevi perfiernog modula mogu poništiti tok podataka na pinu porta.
MIKROPROCESORI

TABELA 1-1: dsPIC30F4011 opis U/I pinova

Pin Buffer
Pin Name Description
Type Type

AN0-AN8 I Analog Analog input channels.


AN0 and AN1 are also used for device programming data
and clock inputs,
respectively.
AVDD P P Positive supply for analog module.
AVSS P P Ground reference for analog module.
CLKI I ST/CMOS External clock source input. Always associated with
OSC1 pin function.
CLKO O — Oscillator crystal output. Connects to crystal or resonator
in Crystal
Oscillator mode. Optionally functions as CLKO in RC and
EC modes.
Always associated with OSC2 pin function.
CN0-CN7 I ST Input change notification inputs.
CN17-CN18 Can be software programmed for internal weak pull-ups
on all inputs.
C1RX I ST CAN1 bus receive pin.
C1TX O — CAN1 bus transmit pin.
EMUD I/O ST ICD Primary Communication Channel data input/output
pin.
EMUC I/O ST ICD Primary Communication Channel clock input/output
pin.
EMUD1 I/O ST ICD Secondary Communication Channel data
input/output pin.
EMUC1 I/O ST ICD Secondary Communication Channel clock
input/output pin.
EMUD2 I/O ST ICD Tertiary Communication Channel data input/output
pin.
EMUC2 I/O ST ICD Tertiary Communication Channel clock input/output
pin.
EMUD3 I/O ST ICD Quaternary Communication Channel data
input/output pin.
EMUC3 I/O ST ICD Quaternary Communication Channel clock
input/output pin.
IC1, IC2, IC7, I ST Capture inputs 1, 2, 7 and 8.
IC8
INDX I ST Quadrature Encoder Index Pulse input.
QEA I ST Quadrature Encoder Phase A input in QEI mode.
Auxiliary Timer External Clock/Gate input in Timer mode.
QEB I ST Quadrature Encoder Phase A input in QEI mode.
Auxiliary Timer External Clock/Gate input in Timer mode.
INT0 I ST External interrupt 0.
INT1 I ST External interrupt 1.
INT2 I ST External interrupt 2.
FLTA I ST PWM Fault A input.
PWM1L O — PWM 1 Low output.
PWM1H O — PWM 1 High output.
PWM2L O — PWM 2 Low output.
PWM2H O — PWM 2 High output.
PWM3L O — PWM 3 Low output.
PWM3H O — PWM 3 High output.
MCLR I/P ST Master Clear (Reset) input or programming voltage input.
This pin is an active
low Reset to the device.
OCFA I ST Compare Fault A input (for Compare channels 1, 2, 3 and
4).
OC1-OC4 O — Compare outputs 1 through 4.

Legenda: CMOS = CMOS kompatibilni ulaz ili izlaz Analogni = Analogni ulaz
ST = Schmitt Okidač ulaz sa CMOS nivoima O = Izlaz (Output)
I = Ulaz (Input) P = Snaga (Power)
MIKROPROCESORI

TABELA 1-1: dsPIC30F4011 opis U/I pinova (nastavak)


Pin Buffer
Pin Name Description
Type Type

OSC1 I ST/CMOS Oscillator crystal input. ST buffer when configured in RC mode;


CMOS
OSC2 I/O — otherwise.
Oscillator crystal output. Connects to crystal or resonator in Crystal
Oscillator
mode. Optionally functions as CLKO in RC and EC modes.
PGD I/O ST In-Circuit Serial Programming data input/output pin.
PGC I ST In-Circuit Serial Programming clock input pin.
RB0-RB8 I/O ST PORTB is a bidirectional I/O port.
8RC13-RC15 8I/O 8ST PORTC is a bidirectional I/O port.
RD0-RD3 I/O ST PORTD is a bidirectional I/O port.
RE0-RE5, I/O ST PORTE is a bidirectional I/O port.
RE8
RF0-RF6 I/O ST PORTF is a bidirectional I/O port.
SCK1 I/O ST Synchronous serial clock input/output for SPI™ 1.
SDI1 I ST SPI 1 Data In.
SDO1 O — SPI 1 Data Out.
SS1 I ST SPI 1 Slave Synchronization.
SCL I/O ST Synchronous serial clock input/output for I2C.
SDA I/O ST Synchronous serial data input/output for I2C.
SOSCO O — 32 kHz low power oscillator crystal output.
SOSCI I ST/CMOS 32 kHz low power oscillator crystal input. ST buffer when configured
in RC
mode; CMOS otherwise.
T1CK I ST Timer1 external clock input.
T2CK I ST Timer2 external clock input.
U1RX I ST UART1 Receive.
U1TX O — UART1 Transmit.
U1ARX I ST UART1 Alternate Receive.
U1ATX O — UART1 Alternate Transmit.
U2RX I ST UART2 Receive.
U2TX O — UART2 Transmit.
VDD P — Positive supply for logic and I/O pins.
VSS P — Ground reference for logic and I/O pins.
VREF+ I Analog Analog Voltage Reference (High) input.
VREF- I Analog Analog Voltage Reference (Low) input.

Legenda: CMOS = CMOS kompatibilni ulaz ili izlaz Analogni = Analogni ulaz
ST = Schmitt Okidač ulaz sa CMOS nivoima O = Izlaz (Output)
I = Ulaz (Input) P = Snaga (Power)
Opšti pregled arhitekture Centralne procesne jedinice (CPU)

2.1 Opšti pregled jezgra

Jezgro poseduje 24-bitnu instrukcijsku reč. Programski brojač je širok 23 bita, a bit
najmanje važnosti (LSb) je uvek čist, tj. resetovan (vidi Odeljak 3.1), dok se bit
najveće važnosti (MSb) ignoriše tokom normalnog izvršavanja programa, osim u
slučaju određenih specijalizovanih instrukcija.
Na taj način, programski brojač može da adresira do 4M instrukcijskih reči
korisničkog programskog prostora. Instrukcijski mehanizam pretpreuzimanja (pre-
fetch) se koristi da bi se pomoglo održavanju protoka. Konstrukcije petlji u
programu, i free from loop count management overhead su podržani korišćenjem
instrukcija DO i REPEAT a obe instrukcije se mogu prekinuti (interaptibilne su) u
svakom trenutku. Niz radnog registra sastoji se od 16x16-bitnih registara, od kojih
svaki može da se ponaša kao adresni registar, registar podataka ili ofset registar.
Jedan radni registar (W15) radi kao softverski pokazivač steka za prekide i pozive.
Prostor podataka iznosi 64 Kbytes (32K reči), i podeljen je u 2 bloka koji se nazivaju
and X i Y memorija podataka. Svaki brok ima svoju nezavisnu Jedinicu za
generisanje adresa (AGU, Address Generation Unit). Većina instrukcija se izvršava
isključivo kroz jedinicu za generisanje adresa X memorije, što omogućava
pojavljivanje jednog unificiranog prostora podataka. Klasa multipikovanja i
akumulacije (Multiply-Accumulate Class, MAC) DSP instrukcija dualnog izvora
izvršava se i kroz jedinicu za generisanje adresa X memorije i kroz jedinicu za
generisanje adresa Y memorije, deleći na taj način adresni prostor na dva dela (Vidi
Odeljak 3.2.). Granica između prostora podataka X i Y zavisi od uređaja i korisnik je
ne može menjati. Svaka reč podataka sastoji se od 2 bajta, a većina instrukcija
može da adresira podatke bilo kao reči, bilo kao bajte.
Postoje dva metoda pristupanju podacima koji se nalaze sačuvani u programskoj
memoriji.
• Gornjih 32 Kbyte memorijskog prostora podataka može se preslikati u donju
polovinu (korisnički prostor) programskog prostora na bilo kojoj granici 16K
programske reči, što definiše 8-bitni registar Vidljivosti stranice programskog
prostora (Program Space Visibility Page, PSVPAG). Ovo omogućava bilo koji
prostor programa za pristup instrukcijama, kao da je reč o prostoru podataka, sa
ograničenjem da pristup zahteva još jedan dodatni ciklus. Nadalje, ovim metodom
može se pristupiti samo donjim bitima (16 bita) bilo koje instrukcijske reči.
• SWWLinear indirektno adresiranje stranica sa 32K-rečima unutar porogramskog
prostora je takođe moguće, korišćenjem bilo kog radnog registra, preko instrukcija
čitanja i upisa iz tabele. Instrukcije čitanja i upisa iz tabele mogu se koristiti da se
pristupi svim bitima (24 bita) instrukcijske reči. Overhead-free cirkularni baferi
(adresiranje po modulu) podržani su i u X i u Y adresnom prostoru. Primarna
namera ovoga je da se overhead petlji ukloni iz DSP algoritama. Jedinica za
generisanje adresa X takođe podržava reverzno bitno (bit-reversed) adresiranje na
efektivnim odredišnim adresama, što značajno olakšava preraspoređivanje ulaznih i
izlaznih podataka za radix-2 FFT algoritme.
MIKROPROCESORI

Pogledati Odeljak 4.0 za detalje adresiranja po modulu i za detalje vezane za


reverzno bitno (bit-reversed) adresiranje.
Jezgro podržava režime inherentnog adresiranja (bez operanda), relativnog,
doslovnog adresiranja, adresiranja direktno u memoriju, direktno u registar,
indirektno u registar, registarskog ofset (Register Offset) i doslovnog ofset (Literal
Offset) adresiranja. Instrukcije su asocirane sa predefinisanim režimima
adresiranja, u zavisnosti od njihovih funkcionalnih zahteva. Za većinu instrukcija,
jezgro je sposobno da izvrši čitanje iz memorije podataka (ili programskih
podataka), upis u memoriju podataka i čitanje iz programske (instrukcijske )
memorije u toku jednog instrukcijskog ciklusa. Kao rezultat, dobija se da su
podržane instrukcije sa 3 operanda, što dozvoljava da se operacije C = A+B izvrše
u samo jednom ciklusu.
DSP engine je uključen da bi značajno povećao aritmetičke mogućnosti jezgra, kao
i protok. On uključuje množač od 17 bita puta 17 bita, 40-bitnu aritmetičko-logičku
jedinicu (ALU), dva 40-bitna akumulatora zasićenja i 40-bitni dvosmerni pomerač
barela. Podaci u akumulatoru ili bilo kom radnom registru mogu se pomerati
(šiftovati) do 16 bita ulevo ili do 16 bita udesno u toku jednog ciklusa. DSP
instrukcije se vrše bez obrzira na sve druge instrukcije i projektovane su za
optimalne performanse u realnom vremenu. MAC klasa instrukcija može
istovremeno da uzme 2 operanda iz registra, a da u isto vreme množi dva W
registra. Da bi se omogućilo ovo istovremeno preuzimanje operanada podataka,
prostor podataka je za ove instrukcije podeljen, a za ostale je linearan. Ovo se
ostvaruje na transparentan i fleksibilan način, pomoću dodeljivanja određenih
radnih registara svakom adresnom prostoru za MAC klasu instrukcija. Jezgro ne
podržava višenivoski (multi-stage) tok instrukcija. Međutim, koristi se jednonivoski
mehanizam za pretpreuzimanje instrukcija, koji pristupa i delimično dekodira
instrukcije jedan ciklus pre nego što će se izvršiti, da bi se maksimizovalo
raspoloživo vreme izvršenja. Većina instrukcija se izvršave u jednom jedinom
ciklusu, sa izvesnim izuzecima.
Jezgro takođe sadrži i vektorsku strukturu procesiranja izuzetaka za izuzeća
(trapove) i prekide (interapte), sa 62 nezavisna vektora. Izuzeci se sastoje od
najviše 8 trapova (od kojih su 4 rezervisana) i 54 prekida. Svaki prekid ima svoj
prioritet, određen na osnovu toga kako ih je korisnik dodelio - između 1 i 7 (1 je
najniži prioritet prekida a 7 je najviši), u konjunkciji sa predeterminisanim "prirodnim
redom". Trapovi imaju fiksne prioritete, koji se označavaju ciframa od 8 do 15.

2.2 Programerov model

Programerov model je prikazan na Slici 2.1. i sastoji se od 16x16-bitnih radnih


registara (od W0 do W15), 2x40-bitnih akumulatora (AccA i AccB), STATUS
registra (SR), registra Data Table Page (TBLPAG), registra vidljivosti programskog
prostora (Program Space Visibility Page, PSVPAG), registara DO i REPEAT
(DOSTART, DOEND, DCOUNT i RCOUNT), i programskog brojača (Program
Counter, PC). Radni registri se mogu ponašati i kao registri podataka, adresni
registri, ili ofset registri. Svi registri se preslikavaju u memoriju. W0 se ponaša kao
W registar za adresiranje registara fajlova. Neki od ovih registara imaju registre u
senci koji su asocirani sa svakim od njih, kao što je prikazano na Slici 2.1. Registar
u senci se koristi kao registar za privremeno zadržavanje i može da transferiše svoj
sadržaj u registar-domaćina, ili da transferiše svoj sadržaj iz njega, ukoliko se
odigra neki događaj. Nijednom od registara u senci nije moguće pristupiti direktno.
Na transfere registara u senku i iz senke primenjuju se sledeća pravila.
• PUSH.S i POP.S
W0, W1, W2, W3, SR (DC, N, OV, Z i C biti, isključivo) se prenose (transferišu)
• DO instrukcije DOSTART, DOEND, DCOUNT u senci se guraju na početak petlje,
i ubacuju na kraj petlje.
Kada se izvršava bajt operacija izvršava na radnom registru, samo LSb ciljnog
registra doživljava promenu. Međutim, korist od radnih registara koji se preslikavaju
u memoriju je da se i LSb-om i MSb-om može manipulisati kroz pristupe
memorijskom prostoru podataka duž celog bajta.

2.2.1 SOFVERSKI STEK POINTER (POKAZIVAČ STEKA)/ FREJM POINTER


(POKAZIVAČ FREJMA)

dsPIC® uređaji sadrže softverski stek. W15 je dodeljeni sofverski stek pointer (SP),
i on će se automatski modifikovati putem obrade izuzetaka i poziva potprograma i
povrataka iz potprograma. Međutim, W15 se može referencirati pomoću bilo koje
instrukcije na isti način kao i ostali W registri. Ovo pojednostavljuje čitanje, pisanje i
manipulaciju pokazivačem steka (npr. stvaranje stek frejmova).
W15 se tokom Reseta inicijalizuje na 0x0800. Korisnik može reprogramirati SP
tokom inicijalizacije, na bilo koju lokaciju unutar prostora podataka. W14 je
predviđen za stek frejm pointer, na način kako to definišu LNK i ULNK instrukcije.
Međutim, W14 se može referencirati pomoću bilo koje instrukcije na isti način kao i
ostali W registri.

2.2.2 STATUS(NI) REGISTAR

Jezgro dsPIC-a ima 16-bitni Status Register (SR), a njegov LSb se naziva Bit
najmanje važnosti Statusnog Registra (SRL), dok se njegov MSb naziva Bit
najveće važnosti Statusnog Registra (SRL),. Vidi Sliku 2.1. za spoljašnji izgled SR.
SRL sadrži sve statusne flegove MCU ALU operacija (uključujući i bit Z), kao i
statusne bite nivoa prioriteta prekida CPU, IPL<2:0>, i bit statusa aktivnosti
REPEAT-a, RA. tokom izvršenja obrade, SRL se konkatenira sa MSb programskog
brojača, da bi formirao vrednost kompletne reči, koja se onda stekuje. Gornji bit SR
registra sadrži bite statusa DSP sabirača/oduzimača, bit aktivne petlje DO-a (DA), i
bit statusa prenosa cifara (DC).

2.2.3 PROGRAMSKI BROJAČ (PC)

Programski brojač je širok 23 bita. Bit 0 uvek je čist. Na taj način, PC može da
adresira do 4M instrukcijskih reči.
Primedba: Da bi se zaštitili od pristupa steku koji nisu pravilno poređani, W15<0> je
uvek čist.
MIKROPROCESORI

Slika 2-1: dsPIC30F4011/4012 PROGRAMERSKI MODEL

W0/WREG PUSH.S Shadow


W1
DO Shadow
W2

W3
W4
DSP Registri
operanada W5
W6
W7
Radni registri
W8
DSP adresni W9
registri W10
W11
W12/DSP Offset
W13/DSP Zapis
W14/Frejm Pointer

W15/Stek Pointer

SPLIM Registri stek pointera

AD39 AD31 AD15 AD0

DSP AccA
Akumulatori AccB
PC22 PC0

0 Programski brojač
7 0
TBLPAG Adresa tabele podataka

7 0
PSVPAG Adresa vidljivosti programskog prostora

15 0
RCOUNT REPEAT brojač petlje

15 0
DCOUNT DO brojač petlje

22 0
DOSTART DO početna adresa petlje

22 0
DOEND DO krajnja adresa petlje

15 0
CORCON Registar konfiguracije jezgra

OA OB SA SB OAB SAB DA DC IPL2 IPL1 IPL0 RA N OV Z C Statusni registar

SRH SRL
2.4.1 MNOŽAČ

17x17-bitni množač je sposoban da vrši operacije sa operandima sa znacima ili bez


njih, i može da pomnoži njihov izlaz koristeći skaler koji podržava i rezultate deljive
na razlomke 1.31 (Q31) ili rezultate u vidu 32-bitnih celih brojeva. Operandi bez
znakova imaju nultu ekstenziju na 17. bitu ulazne vrednosti množača. Operandi sa
znacima imaju ekstenziju u vidu znaka na 17. bitu ulazne vrednosti množača. Izlaz
17x17-bitnog množača/skalera je 33-bitna vrednost, koja ima ekstenziju u vidu
znaka na 40 bitova. Celobrojni podaci se inherentno prikazuju kao označeni
komplementi dvojke, gde se MSb definiše kao bit znaka. Uopšteno govoreći,
spektar (raspon) N-bitnog celog broja komplementa dvojke je od -2N-1 do 2N-1 – 1.
Za 16-bitni ceo broj, spektar podataka je od -32768 (0x8000) do 32767 (0x7FFF),
uključujući 0. Za 16-bitni ceo broj, spektar podataka je od -2,147,483,648 (0x8000
0000) do 2,147,483,645 (0x7FFF FFFF). Kada se množač konfiguriše tako da
podržava množenje razlomaka, podaci se predstavljaju kao razlomci komplementa
dvojke, gde se MSB definiše kao bit znaka, a tačka razlomka (razlomačka crta) se
postavi tako da leži tačno posle bita znaka (QX format). Spektar N-bitnog razlomka
komplementa dvojke sa ovako postavljenom tačkom razlomka (razlomačkom crtom)
je od -1.0 do (1-21-N).
Za 16-bitni razlomak, spektar Q15 podataka je od -1.0 (0x8000) do 0.999969482
(0x7FFF), uključujući 0 i ima tačnost od 3.01518x10-5. U razlomačkom režimu,
operacija množenja 16x16 stvara proizvod 1.31 koji ima tačnost od of 4.65661x10-
10.
Isti množač se koristi da podrži instrukcije množenja MCU, koje uključuju označene
16-bitne cele brojeve, neoznačene brojeve, kao i brojeve koji imaju mešovite znake.
Instrukcije množenja (MUL) mogu se upraviti tako da koriste operande koji imaju
večilinu reči ili veličinu bajta. Operandi veličine bajta će dati direktno 16-bitni
rezultat, dok će operandi u vidu reči dati 32-bitni rezultat i proslediti ga u određeni
registar (ili registre) u W nizu.

2.4.2 AKUMULATORI PODATAKA I SABIRAČI/ODUZIMAČI

Akumulatori podataka sastoje se od 40-bitnih sabirača/oduzimača sa logikom


automatske ekstenzije putem znaka. On može da selektuje jedan od dva
akumulatora (A ili B), kao svoj predakumulatorski izvor i postakumulatorsku
destinaciju. Za instrukcije ADD i LAC, podaci koje treba akumulirati učitati mogu biti
opciono skalirani butem pomerača barela, pre akumulacije.

2.4.2.1 Sabirač/Oduzimač, Prekoračenje (Overflow) i Zasićenje (Saturation)

Sabirač/oduzimač je 40-bitni sabirač sa opcionim nultim ulazom na jednoj strani i


pravim ili komplementiranim podatkom na drugom ulazu. U slučaju sabiranja, ulaz
prenosa/pozajmice (carry/borrow) je aktivan na visokom nivou, a na drugom ulazu
je pravi podatak (nije komplementiran), dok je u slučaju oduzimanja, ulaz
prenosa/pozajmice (carry/borrow) aktivan na niskom nivou, a na drugom ulazu je
MIKROPROCESORI

podatak komplementiran. Sabirač/oduzimač generiše bite prekoračenja (overflowa)


SA/SB i OA/OB, koji se zaključavaju i reflektuju u statusnom registru.
• Prekoračenje (overflow) od bita 39: ovo je tzv. katastrofalno prekoračenje, u kom
slučaju znak akumulatora biva uništen.
• Prekoračenje (overflow) bita čuvanja, od 32 do 39: od ovog prekoračenja može se
opraviti. Ovaj bit se setuje kada god svi biti čuvanja (guard bits) nisu identični jedan
drugome. Sabirač ima dodatni blok zasićenja koji upravlja zasićenjem podataka u
akumulatoru, ukoliko se selektuje. On koristi rezultat sabirača, statusne bite
prekoračenja, opisane malopre, i bite upravljanja režimom SATA/B
(CORCON<7:6>) i ACCSAT (CORCON<4>) da bi odredio kada i na kojoj vrednosti
treba da izvrši zasićenje. Šest statusnih registara nalazi se na raspolaganju da
podrže zasićenje i prekoračenje, i to su:
1. OA:
prekoračenje nastalo u AccA na bitovima čuvanja
2. OB:
prekoračenje nastalo u AccBA na bitovima čuvanja
3. SA:
AccA zasićen (bit 31 prekoračen i zasićen) ili
prekoračenje nastalo u AccA na bitovima čuvanja i AccA zasićen (bit 39 prekoračen
i zasićen)
4. SB:
AccB zasićen (bit 31 prekoračen i zasićen)
ili prekoračenje nastalo u AccB na bitovima čuvanja i AccB zasićen (bit 39
prekoračen i zasićen)
5. OAB:
Logičko ILI (OR) od OA i OB
6. SAB:
Logičko ILI (OR) od SA i SB

Biti OA i OB se modeluju svaki put kada podatak prolazi kroz sabirač/oduzimač.


Kada se setuju, označavaju da je najskorija operacija izvršila prekoračenje u bite
čuvanja akumulatora (biti od 32 do 39). Biti OA i OB takođe opciono generišu
aritmetički trap upozorenja i setuje se odgovarajući bit aktivacije flega za trap
prekoračenja (overflow trap), OVATEN, OVBTEN u registru INTCON1 (pogledaj
Odeljak 5.0.). Ovo omogućava korisniku da preduzme neodložnu akciju, na primer,
da koriguje sistemsko pojačanje.
Biti SA i SB se modifikuju svaki put kada podatak prolazi kroz sabirač/oduzimač, ali
ih može očistiti samo korisnik. Kada se setuju, označavaju da je akumulator doživeo
prekoračenje svog maksimalnog kapaciteta (bit 31 za 32-bitno zasićenje, ili bit 39
za 40-bitno zasićenje) i biće u zasićenju (ukoliko je dozvoljeno zasićenje). Kada
zasićenje nije dozvoljeno, SA i SB se po defaultu konfigurišu na prekoračenje na
bitu 39, što znači da se odigralo katastrofalno prekoračenje. Ako se setuje bit
COVTE u registru INTCON1, SA i SB biti će generisati aritmetičku zamku
upozorenja kada zasićenje nije aktivirano. Biti statusa zasićenja i prekoračenja
mogu se opciono videti u Status Registru (SR), i to kao logičko ILI (OR) od OA i OB
(na bitu OAB) i kao logičko ILI (OR) od SA i SB (na bitu SAB). Ovo omogućuje
programerima da provere jedan bit u Status Registru da bi utvrdili da li je u
akumulatoru došlo do prekoračenja ili zasićenja. Ovo bi bilo korisno za aritmetiku sa
kompleksnim brojevima, koja uobičajeno koristi oba akumulatora.
Uređaj koristi tri režima zasićenja i prekoračenja.

1. Zasićenje i prekoračenje na bitu 39:


Kada se zasićenje i prekoračenje dogode na bitu 39, logika zasićenja učitava
maksimalno pozitivnu vrednost 9.31 (0x7FFFFFFFFF) maksimalno pozitivnu
vrednost 9.31 (0x8000000000) u ciljni akumulator. Biti SA ili SB se setuju i ostaju
setovani sve dok ih korisnik sam ne očisti. Ovo se smatra "super-zasićenjem", i
omogućava zaštitu protiv problema pogrešnih podataka ili neočekivanih algoritama
(npr. proračun pojačanja)

2. Zasićenje i prekoračenje na bitu 31:


Kada se zasićenje i prekoračenje dogode na bitu 39, logika zasićenja učitava
maksimalno pozitivnu vrednost 9.31 (0x007FFFFFFF) maksimalno pozitivnu
vrednost 9.31 (0x0080000000) u ciljni akumulator. Biti SA ili SB se setuju i ostaju
setovani sve dok ih koristnik sam ne očisti. Kada je na snazi ovaj režim zasićenja,
biti čuvanja se ne koriste (tako da biti OA, OB ili OAB nisu nikada setovani).

3. Katastrofalno prekoračenje (overflow) na bitu 39


Bit statusa prekoračenja na bitu 39 iz sabirača koristi se da setuje bit SA ili SB, koji
ostaje setovan sve dok ga korisnik ne očisti sam. Nikakva operacija zasićenja se ne
vrši, i akumulatoru je dozvoljeno da uđe u prekoračenje (i time uništi svoj znak). Ako
se setuje bit COVTE u registru INTCON1, karastrofalno prekoračenje može da
započne izuzetak trapa.

2.4.2.2 Upis unazad u akumulator

Klasa instrukcija MAC (sa izuzetkom MPY, MPY.N, ED i EDAC) može opciono
učitati zaokruženu verziju visoke reči (biti od 31 do 16) akumulatora koji nije ciljan
instrukcijom u memoriji prostora podataka. Ovo upisivanje se vrši preko X
magistrale u kombinovani X i Y adresni prostor. Pocržani su sledeći adresni režimi:
1. W13, direktno u registar:
Zaokruženi sadržaj neciljanog akumulatora se upisuje u W13 kao 1.15 razlomak.
2. [W13]+=2, indirektno u registar sa kasnijim inkrementiranjem (Register Indirect
with Post-Increment)
Zaokruženi sadržaj neciljanog akumulatora se upisuje u adresu koju pokazuje W13
kao 1.15 razlomak.
W13 se tada inkrementira za 2 (za upis reči).

2.4.2.3 Kružna logika

Kružna logika je kombinacioni blok, koji vrši konvencionalnu ili konvergentnu


funkciju zaokruživanja tokom upisa (čuvanja) u akumulator. Režim zaokruživanja je
određen stanjem bita RND u registru CORCON. On generiše 16-bitnu, 1.15
MIKROPROCESORI

vrednost podatka koja se dalje prosleđuje u logiku zasićenja upisa u prostor


podataka. Ako zaokruživanje nije naznačeno instrukcijom, trunkovana (odsečena)
1.15 vrednost podatka se sačuvava, a reč najmanje važnosti se jednostavno
odbacuje. Konvencionalno zaokruživanje uzima bit 15 iz akumulatora, daje mu nultu
ekstenziju i dodaje ga u ACCxH reč (biti od 16 do 31 akumulatora). Ukoliko je
ACCxL reč (biti od 0 do 151 akumulatora) između 0x8000 i 0xFFFF (uključujući i
0x8000), ACCxH se inkrementira. Ukoliko je ACCxL reč između 0x0000 i 0x7FFF,
ACCxH se ne menja. Posledica ovog algoritma je da posle nekog broja operacija
zaokruživanja, vrednost ima tendenciju da postane blago pozitivna.
Konvergentna operacija zaokruživanja radi na isti način kao i konvencionalno
zaokruživanje, osim kada je ACCxL jednako 0x8000. Ako je to slučaj, ispituje se
LSb (bit 16 u akumulatoru) od ACCxH. Ako je on "1", ACCxH se inkrementira. Ako
je "0", ne menja se vrednost ACCxH.
Pretpostavljajući da je bit 16 u suštini proizvoljan i slučajan po svojoj prirodi, ova
shema će ukloniti svaki uticaj zaokruživanja koji može da bude akumulativan.
Instrukcije SAC i SAC.R upisuju ili skraćenu (trunkovanu) verziju (SAC) ili
zaokruženu verziju (SAC.R) sadržaja ciljnog akumulatora u memoriju podataka,
putem X magistrale (podložno zasićenju podataka, vidi Odeljak 2.4.2.4). Primetimo
da za MAC klasu instrukcija, operacija upisa unazad u akumulator funkcioniše na
isti način, adresirajući kombinovani MCU (X i Y) prostor podataka kroz X magistralu.
Za ovu klasu instrukcija, podaci su uvek podložni zaokruživanju.

2.4.2.4 Zasićenje upisa u prostor podataka

Kao dodatak zasićenju sabirača/oduzimača, treba naglasiti da i upisivanje u prostor


podataka može takođe da bude zasićeno, ali, bez ikakvog uticaja na sadržaj
izvornog akumulatora. Logički blok zasićenja upisivanja u prostor podataka prihvata
16-bitne, 1.15 vrednosti ralomaka iz logičkog bloka zaokruživanja kao svoj ulaz,
zajedno sa statusom prekoračenja iz originalnog izvora (akumulatora) i 16-bitnog
kružnog sabirača. One se kombinuju i koriste da selektuju odgovarajuću 1.15
vrednost razlomka kao izlaz, da bi se upisali u memoriju prostora podataka. Ukoliko
je SATDW bit u CORCON registru setovan, podaci (posle zaokruživanje ili
trunkovanja), se testiraju na prekoračenje (overflow) i preilagođavaju u skladu sa
tim. Za ulazne podatke veće od 0x007FFF, podaci upisani u memoriju se prisilno
svode na najveću pozitivnu 1.15 vrednost, 0x7FFF. Za ulazne podatke manje od
0xFF8000, podaci upisani u memoriju se prisilno svode na najveću negativnu 1.15
vrednost, 0x8000. MSB izvora (bit 39) se koristi da bi se odredio znak operanda koji
se testira. Ukoliko SATDW bit u CORCON registru nije setovan, ulazni podaci uvek
prolaze bez modifikacija, pod svim uslovima.

2.4.3 POMERAČ BARELA

Pomerač barela je sposoban da izvrši najviše 16-bitno aritmetičko ili logičko


pomeranje udesno, ili najviše 16-bitno aritmetičko ili logičko pomeranje ulevo u
jednom jedinom ciklusu. Izvor mogu biti ili 2 DSP akumulatora ili X magistrala (da bi
se podržala višebitna pomeranja registara ili podataka u memoriji). Pomerač
zahteva označenu binarnu vrednost da bi se odredila i veličina (broj bita) i smer
pomeranja. Pozitivna vrednost će pomeriti operand udesno, a negativna ulevo.
Vrednost 0 neće pomeriti operand. Pomerač barela je širok 40 bita, i na taj način se
dobija 40-bitni rezultat za DSP operacije pomeranja i 16-bitni rezultat za operacije
pomeranja MCU. Podaci sa X magistrale se predstavljaju u barelu između pozicija
bita 16 i 31 za pomeranja udesno, i između pozicija bita 0 i 15 za pomeranja ulevo.
MIKROPROCESORI

3.0 ORGANIZACIJA MEMORIJE

3.1 Prostor programskih adresa

Prostor programskih adresa predstavljaju 4M instrukcione reči. On je adresabilan


pomoću 23-bitnog programskog brojača, efektivne adrese (EA) instrukcione tabele,
ili efektivne adrese prostora podataka, kada se programski prostor preslikava u
prostor podataka, na način definisan u Tabeli 3.1. Primetimo da se adrese
programskog prostora inkrementiraju za 2 između svake dve uzastopne
programske reči, da bi se omogućila kompatibilnost sa adresiranjem prostora
podataka. Pristup prostoru korisničkog programa je ograničen na donji deo spektra
od 4M instrukcijskih reči (od 0x000000 do 0x7FFFFE), za sve ostale pristupe osim
TBLRD/TBLWT, koji koriste TBLPAG<7> da bi odredili pristup prostoru
konfiguracije ili pristup prostoru korisnika. U Tabeli 3.1., kod instrukcija čitanja i
upisa (Read/Write) bit 23 dozvoljava pristup ID-u uređaja (Device ID), ID-u korisnika
(User ID) i konfiguracijskim bitima. Inače, bit 23 će biti uvek čist, odnosno
resetovan.
Slika 3-1: Mapa prostora programskih adresa dsPIC30F4011/4012
Reset – GOTO instrukcija 000000
Reset – Target adresa 000002
000004

Vektor Tabela
Prekida
Vektor Tabele

Memorijski 00007E
prostor Rezervisano 000080
korisnika Alternativna Tabela Vektora 000084
0000FE
000100
Korisnička Fleš
Programska Memorija
(16K instrukcija)
007FFE
7FFC00
Rezervisano
(čitanje 0)
7FFBFE
7FFC00
EEPROM podaci
(1 kbajt)
7FFFFE
800000

Rezervisano

Memorijski 8005BE
prostor UNITD (32 instr.) 8005C0
konfiguracije 8005FE
800600
Rezervisano
F7FFFE
Registri konfiguracije F80000
uredjaja F8000E
F80010

Rezervisano

FEFFFE
DEVID (2) FF0000
FFFFFE
MIKROPROCESORI

Tabela 3-1: Kontrukcija prostora programskih adresa


Access Program Space Address
Access Type
Space <23> <22:16> <15> <14:1> <0>
Instruction Access User 0 PC<22:1> 0
TBLRD/TBLWT User TBLPAG<7:0> Data EA
<15:0>
(TBLPAG<7> = 0)
TBLRD/TBLWT Configuration TBLPAG<7:0> Data EA
<15:0>
(TBLPAG<7> = 1)
Program Space Visibility User 0 PSVPAG<7:0> Data EA <14:0>

Slika 3-2: Pristup podacima u generisanju prostora programskih adresa

3.1.1 PRISTUP PODACIMA IZ PROGRAMSKE MEMORIJE KORIŠĆENJEM


INSTRUKCIJA IZ TABELE

Ova arhitektura uzima 24-bita široku programsku memoriju. Kao posledica toga,
instrukcije su uvek poravnate. Međutim, ako je u pitanju modifikovana Harvard
arhitektura, podaci takođe mogu biti predstavljeni u programskom prostoru. Postoje
2 metoda pomoću kojih se programu može pristupiti: preko specijalnih instrukcija iz
tabele, ili putem ponovnog preslikavanja 16K porogramskog prostora reči u gornju
polovinu prostora podataka (Vidi Odeljak 3.1.2.). Instrukcije TBLRDL i TBLWTL
nude direktne metode čitanja i pisanja reči najmanje važnosti unutar programskog
prostora, bez prolaska kroz prostor podataka. Instrukcije TBLRDH i TBLWTH su
jedini metod kod koga se gornjim bitovima (gornjih 8 bita) programskog prostora
može pristupiti kao podacima. Programski brojač se inkrementira za 2 za svaku
uzastopnu 24-bitnu programsku reč. Ovo omogućava adresama programske
memorije da se direktno preslikaju u adrese prostora podataka. Programska
memorija može se, stoga, posmatrati kao adresni prostor sa dužinom od dve 16-
bitne reči, koje se nalaze jedna do druge, a svaka ima isti adresni spektar. TBLRDL
i TBLWTL pristupaju prostoru koji sadrži reč podataka koja ima najmanju važnost, a
TBLRDH i TBLWTH pristupaju prostoru koji sadrži bajt podataka koja ima najveću
važnost,
Slika 3.2. prikazuje kako se stvara EA za operacije iz tabele i pristupe prostoru
podataka (PSV = 1). Ovde se P<23:0> odnosi na reč programskog prostora, dok se
D<15:0> odnosi na reč prostora podataka.
Skup Instrukcija iz tabele je obezbeđen da bi pomerio podatke koji su veličine bajta
ili reči u programski prostor ili iz njega.

1. TBLRDL: Table Read Low


Reč: Čita reč najmanje važnosti programske adrese;
P<15:0> se preslikava u D<15:0>.
Bajt: Čita jedan od bajtova najmanje važnosti programske adrese;
P<7:0> se preslikava u odredišni bajt kada je selekcija bajta = 0;
P<15:8> se preslikava u odredišni bajt kada je selekcija bajta = 1.
2. TBLWTL: Table Write Low (pogledaj Odeljak 6.0. za detalje Fleš programiranja).
3. TBLRDH: Table Read High
Reč: Čita reč najveće važnosti programske adrese;
P<23:16> se preslikava u D<7:0>; D<15:8> je uvek = 0.
Bajt: Čita jedan od bajtova najveće važnosti programske adrese;
P<23:16> se preslikava u odredišni bajt kada je selekcija bajta = 0;
Odredišni bajt će uvek biti = 0 kada je selekcija bajta = 1.
4. TBLWTH: Table Write High (pogledaj Odeljak 6.0. za detalje Fleš
programiranja).
SLIKA 3-3: PRISTUP TABELI PROGRAMSKIH PODATAKA (REČ NAJMANJE
VAŽNOSTI)

PC Adresa 23 16 8 0
0x000000 0000 0000

0x000002 0000 0000

0x000004 0000 0000

0x000006 0000 0000

Fantomski bajt u TBLRDH.W


programskoj memoriji TBLRDH.B (Wn<0> = 0)
(cita se kao 0)
TBLRDH.B (Wn<0> = 1)
MIKROPROCESORI

SLIKA 3-4: PRISTUP TABELI PROGRAMSKIH PODATAKA (REČ NAJVECE


VAŽNOSTI)
TBLRDH.W

PC Adresa 23 16 8 0
0x000000 0000 0000

0x000002 0000 0000

0x000004 0000 0000

0x000006 0000 0000

Fantomski bajt u
programskoj memoriji TBLRDH.B (Wn<0> = 0)
(cita se kao 0) TBLRDH.B (Wn<0> = 1)

3.1.2. PRISTUP PODACIMA IZ PROGRAMSKE MEMORIJE KORIŠĆENJEM


VIDLJIVOSTI PROGRAMSKOG PROSTORA

Gornjih 32 Kbajta prostora podataka može se opciono preslikati u bilo koju stranicu
programskog prostora 16 K - reči. Ovo omogućava transparentan pristup
sačuvanim konstantnim podacima iz prostora podataka X, bez potrebe da se koriste
specijalne instrukcije (npr. instrukcije TBLRDL/H, TBLWTL/H). Pristup
programskom prostoru kroz prostor podataka dešava se ako se MSb efektivne
adrese programskog prostora setuje, i ako je omogućena vidljivost programskog
prostora, pomoću setovanja PSV bita u registru upravljanja jezgrom (CORCON).
Fukcije CORCON-a se razmatraju u Odeljku 2.4, pod nazivom DSP Engine.
Pristupanje podacima u ovom području dodaje jedan ekstra ciklus instrukciji koja se
izvršava, budući da su neophodna 2 preuzimanja iz programske memorije.
Primetimo da je gornji deo adresabilnog prostora podataka uvek deo prostora
podataka X. Stoga, kada DSP operacije koriste preslikavanje programskog prostora
da bi pristupile ovom regionu memorije, prostor podataka Y mora u tipičnom slučaju
da sadrži promenljive podatke za DSP operacije, dok prostor podataka X mora u
tipičnom slučaju da sadrži koeficijentne (konstnatne) podatke. Iako se svaka adresa
prostora podataka koja je veća od 0x8000, preslikava direktno u odgovarajuću
adresu programske memorije (vidi Sliku 3.5.), samo se najnižih 16 bita 24-bitne
programske reči koriste da bi se u njih smestili podaci. Gornjih 8 bita se moraju
programirati tako da prisile nedozvoljene instrukcije da održe robustnost mašine. Za
detalje kodiranja instrukcija treba konsultovati dsPIC30F Programmer’s Reference
Manual (DS70030).
Primetimo da inkrementiranjem programskog brojača za 2 za svaku programsku
memorijsku reč, 15 bita najmanje važnosti adresa prostora podataka se direktno
preslikavaju u 15 bita najmanje važnosti odgovarajućih adresa programskog
prostora. Ostali biti su obezbeđeni putem registra stranice vidljivosti programskog
prostora (Program Space Visibility Page register), PSVPAG<7:0> (Slika 3-5).

Za instrukcije koje koriste PSV koje se koriste izvan petlje REPEAT:


• Sledeće instrukcije će zahtevati jedan dodatni instrukcioni ciklus, kao
dodatak specificiranom vremenu izvršenja:

- MAC klasa instrukcija sa pretpreuzimanjem operanada podataka


- MOV instrukcije
- MOV.D instrukcije
• Sve druge instrukcije će zahtevati dva dodatna instrukciona ciklusa, kao
dodatak specificiranom vremenu izvršenja instrukcije.

Za instrukcije koje koriste PSV koji se izvršavaju unutar petlje REPEAT:

• Sledeće instrukcije će zahtevati jedan dodatni instrukcioni ciklus, kao


dodatak specificiranom vremenu izvršenja:

- Izvršenje prve iteracije


- Izvršenje poslednje iteracije
- Izvršenje pre ulaska u petlju, zbog prekida
- Izvršenje pošto se ponovo uđe u petlju posle izvšenja prekida

• Svaka druga iteracija petlje REPEAT će omogučiti instrukciji, koja pristupa


podacima korišćenjem PSV-a, da se izvrši u toku jednog ciklusa.

Primedba: pristup PSV-u je privremeno onemogućen tokom procesa upisa i čitanja


iz Tabele.
MIKROPROCESORI

Slika 3-5: Prozor prostora podataka u rad programa


3.2 Prostor adresnih podataka

Jezgro ima dva prostora podataka. Prostori podataka mogu se smatrati bilo
odvojenim (za neke DSP instrukcije), bilo unificiranim linearnim adresnim spektrom
(za MCU instrukcije). Prostorima podataka se pristupa korišćenjem dve Jedinice za
generisanje adresa (Address Generation Units (AGUs)), i odvojenim putevima
podataka.

3.2.1 MAPA MEMORIJE PROSTORA PODATAKA

Memorija prostora podataka je podeljena u dva bloka, X i Y prostor. Ključni element


ove arhitekture je da je Y prostor podskup X prostora, i potpuno se sadrži unutar X
prostora. Da bi se omogućio očigledni linearni adresni prostor, X i Y prostori imaju
uzastopne adrese (koje se međusobno graniče).
Kada se izvršava bilo koja instrukcija koja ne pripada MAC klasi instrukcija, X blok
se sastoji od 64 Kbajtnog adresnog prostora podataka (ovo uključuje sve Y adrese).
Kada se izvršava jedna od instrukcija koja pripada MAC klasi, X blok se sastoji od
64 Kbajtnog adresnog prostora podataka koji ne uključuje Y adresni blok (samo za
čitanje podataka). Drugim rečima, sve druge instrukcije posmatraju celokupnu
memoriju podataka kao jedan kompozitni adresni prostor. MAC klasa instrukcija
izvlači Y adresni prostor iz prostora podataka i adresira ga korišćenjem efektivnih
adresa koje potiču iz W10 i W11. Preostali X prostor podataka je adresiran
korišćenjem W8 i W9. Oba adresna prostora su konkurentno adresirana samo u
slučaju izvršenja MAC klase instrukcija. Mapa memorije prostora podataka
prikazana je na Slici 3.6.
Slika 3.7. prikazuje grafički sažetak načina na koji se X i Y prostori podataka
adresiraju za instrukcije MCU i MSP.
MIKROPROCESORI

Slika 3-6: dsPIC30F4011/4012 Mapa memorijskog prostora podataka

MS adresa bajta LS adresa bajta


16 bita

MSB LSB

0x0000
2 Kbajta 0x0001 SFR prostor
SFR prostora 0x07FE
0x07FF 0x0800
0x0001

X data RAM (X)


4096 bajtova
bliskih prostoru
0x0BFF 0x0BFE podataka
2 Kbajta 0x0C01 0x0C00
SRAM prostora

Y data RAM (Y)

\
0x0FFE
0x0FFF
0x1000

0x8001 0x8000

X data
neimplementirano
(X)

Opciono mapirano
u programskoj
memoriji

0xFFFF 0xFFFE
Slika 3-7: Prostor podataka za MCU i DSP (MAC klase) primer instrukcija

SFR prostor SFR prostor


neiskorišteno

(X prostor)
(X prostor)

(Y prostor) (Y prostor) neiskorišteno

(X prostor)
neiskorišteno

Non-MAC klasa Ops (čitaj/piši) MAC klasa Ops (samo čita)


MAC klasa Ops (piši)

Indirektni EA koristi svaki W Indirektni EA koristi W8, W9 Indirektni EA kor. W10,W11

3.2.2 PROSTORI PODATAKA

X prostor podataka koriste sve instrukcije i on podržava sve režime adresiranja.


Postoje posebne magistrale za čitanje i pisanje. Magistrala za čitanje iz X prostora
je put za povratak podataka za sve instrukcije koje vide prostor podataka kao
kombinovani X i Y adresni prostor. Takođe je X adresni prostor i put podataka za
instrukcije čitanja koje čitaju dualne operande (MAC klasa). Magistrala za upis u X
prostora je isključivo put za prostor podataka za sve instrukcije. X prostor podataka
takođe podržava adresiranje po modulu, koje je podložno restirikcijama režima
adresiranja.
Bit-reverzno adresiranje je jedino podržano za upis u X prostor podataka. Y prostor
podataka se koristi zajedno sa X prostorom podataka, i koristi ih MAC klasa
instrukcija (CLR, ED, EDAC, MAC, MOVSAC, MPY, MPY.N i MSC) da bi omogućila
dva konkurentna puta za čitanje podataka. Kroz Y magistralu se ne događaju upisi
podataka. Ova klasa instrukcija namenjuje dva W pokazivača registara, W10 i W11,
da uvek adresira Y prostor podataka, nezavisnu od X prostora podataka, dok W8 i
W9 uvek adresiraju porostor podataka. Primetimo da se tokom upisa unazad u
akumulator, prostor adresa podataka smatra kombinacijom X i Y prostora podataka,
MIKROPROCESORI

tako da se upisi vrše kroz X magistralu. Konsekventno, upis se može izvršiti na bilo
koju adresu u celom prostoru podataka.
Y prostor podataka može se isključivo koristiti za operacije pretpreuzimanja
podataka asocirane sa MAC klasom instrukcija. Takođe, on podržava adresiranje
po modulu za automatizovane cirkularne bafere. Naravno, sve druge isntrukcije
mogu da pristupe Y prostoru podataka kroz put podataka X, kao deo kompozitnog
linearnog prostora. Granica između X i Y adrsnog prostora se definiše na način
prikazan na Slici 3.6. i korisnik je ne može programirati.
Ukoliko EA pokaže na podatak van sebi dodeljenog adresnog prostora, ili na
lokaciju van fizičke memorije, vratiće se kao rezultat reč ili bajt koji sadrži sve nule.
Npr. iako je Y adresni prostor vidljiv za sve ne-MAC isntrukcije koje koriste bilo koji
režim adresiranja, pokušaj MAC instrukcije da pokupi podatke iz tog prostora,
koristeći W8 i W9 (pokazivače u X prostoru), će vratiti 0x0000.

3.2.3 ŠIRINA PROSTORA PODATAKA

Širina podataka u jezgru je 16-bitna. Unutrašnji registri su organizovani kao 16-bitne


reči. Memorija prostora podataka je organizovana u 16-bita široke blokove koji su
bajt-adresabilni.

3.2.4 URAVNAVANJE PODATAKA

Da bi se pomoglo da se održi kompatibilnost sa ranijim uređajima PICmicro® i da bi


se poboljšala efikasnost korišćenja memorije prostora podataka, skup instrukcija
dsPIC30F podržava i operacije sa bajtovima i operacije sa rečima. Podaci su
uravnati u memoriji podataka i u registrima kao reči, ali se sve efektivne adrese
prostora podataka predstavljaju kao bajtovi. Čitanje bajtova podataka će pročitati
kompletnu reč, koja sadrži bajt, koristeći LSb bilo koje EA da bi odredilo koji bajt
treba selektovati. Selektovani bajt se postavlja na bajt najmanje važnosti puta
podataka X (nisu moguća pristupanja podacima iz puta podataka Y, pošto MAC
klasa instrukcija može samo da pokupi reči). To jest, memorija podataka i registri su
organizovani kao dva paralelna entiteta široka po bajt sa deljenim (shared)
dekodiranjem adresa (reči), ali sa odvojenim linijama upisivanja. Upis u bajt
podataka upisuje samo u odgovarajuću stranu niza ili registra koji se slaže sa
adresom bajta. Kao posledica ove pristupnosti bajtima, sva sračunavanja efektivnih
adresa (uključujući i one koje su generisane putem DSP operacija) su interno
skalirane da bi se moglo kretati kroz memoriju uravnatu po rečima. Na primer,
jezgro bi prepoznalo da će režim indirektnog adresiranja post-modifikovanog
registra (Post-Modified Register Indirect Addressing mode), [Ws++], rezultovati
vrednošću Ws+1 za operacije sa bajtovima, i vrednošću Ws+2 za operacije sa
rečima. Sva pristupanja rečima moraju biti uravnata na parne adrese. Kupljenje
podataka iz neuravnatih reči nije podržano, tako da se mora paziti kada se mešaju
operacije na rečima i operacije na bajtovima, ili kada se prevodi sa 8-bitnog MCU
koda. Ukoliko se pokuša sa upisom ili čitanjem neuravnatih reči, generisaće se trap
Address Error. Ukoliko se greška dogodi prilikom čitanja, instrukcije koje se usput
izvršavaju biće završene, dok će u slučaju da se greška pojavi prilikom čitanja,
instrukcije izvršiti ali se upis neće odigrati. U svakom slučaju, trap će tada biti
izvršen, dozvoljavajući sistemu i/ili korisniku da ispita stanje mašine pre nego što se
izvrši adresna greška.

TABELA 3.2.: EFEKTI NEPRAVILNOG PRISTUPA MEMORIJI


Attempted Operation Data Returned

EA = an unimplemented address 0x0000


W8 or W9 used to access Y data 0x0000
space in a MAC instruction
W10 or W11 used to access X 0x0000
data space in a MAC instruction

Slika 3-8: Sortiranje podataka

MS bajt LS bajt
15 8 7 0
0001 Bajt 1 Bajt 0 0000
0003 Bajt 3 Bajt 2 0002
0005 Bajt 5 Bajt 4 0004

Sva učitavanja bajtova u bilo koji W registar se vrše u bajt najmanje važnosti. Bajt
najveće važnosti se ne modifikuje.
Instrukcije sa ekstenzijom znaka (sign-extend (SE)), su obezbeđene da bi se
omogućilo korisnicima da prevedu 8-bitne označene podatke na 16-bitne označene
vrednosti. alternativno, za neoznačene 16-bitne podatke, korisnici mogu da očiste
(resetuju) bajt najveće važnosti bilo kog W registra putem izvršenja instrukcije nulte
ekstenzije, zero-extend (ZE) na odgovarajućoj adresi. Iako većina instrukcija ima
sposobnost da radi na podacima veličine bajta ili veličine reči, trebalo bi primetiti da
neke instrukcije, uključujući DSP instrukcije, mogu da rade samo na rečima.

3.2.5 PROSTOR BLIZAK PODACIMA

Prostor od 8 Kbajta "blizu" prostora podataka je rezervisan za X memorijski adresni


prostor između 0x0000 i 0x1FFF, što je direktno adresabilno putem 13-bitnog
apsolutnog adresnog polja unutar svih memorijskih direktnih instrukcija. Ostatak X
adrsenog prostora i ceo Y adresni prostor je indirektno adresabilan. Nadalje, ceo X
adresni prostor je adresabilan korišćenjem MOV instrukcija, koje podržavaju
adresiranje direktno u memoriju sa 16-bitnim adresnim poljem.

3.2.6 SOFTVERSKI STEK

dsPIC uređaji sadrže softverski stek. W15 se koristi kao pokazivač steka (Stack
Pointer). Pokazivač steka uvek pokazuje na prvu raspoloživu slobodnu reč i raste
od nižih vrednosti adresa prema višim adresama. On pre-dekrementira za uzimanje
MIKROPROCESORI

sa steka i post-inkrementira za guranje steka (daodavanje na stek), kao što je to


pokazano na Slici 3.9. Primetimo da za guranje programskog brojača tokom bilo
koje instrukcije CALL, bajt najveće važnosti programskog brojača ima nultu
ekstenziju pre guranja, na taj način omogućavajući da bajt najveće važnosti ostaje
uvek čist. Postoji registar limita pokazivača steka (Stack Pointer Limit register
(SPLIM)), koji je neinicijalizovan prilikom RESETA. Kao što je slučaj i sa
pokazivačem steka, SPLIM<0> je prisiljen da se dovede na vrednost ‘0’, zato što
sve operacije sa stekom moraju biti uravnate po rečima. Kadagod se efektivna
adresa (EA) generiše korišćenjem W15, kao izvora odredišnog pokazivača, adresa
na taj način generisana se poredi sa vrednošću u SPLIM-u. Ako je sadržaj
pokazivača stek (W15) i sadržaj SPLIM registra jednak, a vrši se operacija guranja,
neće se desiti trap Stack Error. Ovaj trap će se odigrati na sledećoj operaciji
guranja. Tako, na primer, ukoliko je poželjno je da se izazove ovaj trap kada stek
raste iznad adresa 0x2000 u RAM-u, inicijalizuje se SPLIM na vrednost 0x1FFE. Na
sličan način, trap underflow pokazivača steka Stack Pointer Underflow (Stack Error)
se generiše kada se uoči da su adrese pokazivača steka manje od 0x0800, i na taj
način se onemogućava da se stek meša sa prostorom registra specijalnih funkcija,
Special Function Register (SFR).
Upis u SPLIM registar ne bi trebao da bude odmah praćen indirektnom operacijom
čitanja koja bi se obavila putem korišćenja W15.

Tabela 3-3: Mapa jezgra registara


Address
SFR Name Bit 15 Bit 14 Bit Bit Bit Bit 10 Bit Bit 8 Bit 7 Bit 6 Bit 5 Bit Bit 3 Bit 2 Bit 1 Bit Reset State
13 12 11 9 4 0
(Home)
W0 0000 W0 / WREG 0000 0000
0000 0000
W1 0002 W1 0000 0000
0000 0000
W2 0004 W2 0000 0000
0000 0000
W3 0006 W3 0000 0000
0000 0000
W4 0008 W4 0000 0000
0000 0000
W5 000A W5 0000 0000
0000 0000
W6 000C W6 0000 0000
0000 0000
W7 000E W7 0000 0000
0000 0000
W8 0010 W8 0000 0000
0000 0000
W9 0012 W9 0000 0000
0000 0000
W10 0014 W10 0000 0000
0000 0000
W11 0016 W11 0000 0000
0000 0000
W12 0018 W12 0000 0000
0000 0000
W13 001A W13 0000 0000
0000 0000
W14 001C W14 0000 0000
0000 0000
W15 001E W15 0000 1000
0000 0000
SPLIM 0020 SPLIM 0000 0000
0000 0000
ACCAL 0022 ACCAL 0000 0000
0000 0000
ACCAH 0024 ACCAH 0000 0000
0000 0000
ACCAU 0026 Sign-Extension ACCAU 0000 0000
(ACCA<39>) 0000 0000
ACCBL 0028 ACCBL 0000 0000
0000 0000
ACCBH 002A ACCBH 0000 0000
0000 0000
ACCBU 002C Sign-Extension ACCBU 0000 0000
(ACCB<39>) 0000 0000
PCL 002E PCL 0000 0000
0000 0000
PCH 0030 — — — — — — — — — PCH 0000 0000
0000 0000
TBLPAG 0032 — — — — — — — — TBLPAG 0000 0000
0000 0000
PSVPAG 0034 — — — — — — — — PSVPAG 0000 0000
0000 0000
RCOUNT 0036 RCOUNT uuuu uuuu
uuuu uuuu
DCOUNT 0038 DCOUNT uuuu uuuu
uuuu uuuu
DOSTARTL 003A DOSTARTL 0 uuuu uuuu
uuuu uuu0
DOSTARTH 003C — — — — — — — — — DOSTARTH 0000 0000
0uuu uuuu
DOENDL 003E DOENDL 0 uuuu uuuu
uuuu uuu0
DOENDH 0040 — — — — — — — — — DOENDH 0000 0000
0uuu uuuu
SR 0042 OA OB SA SB OAB SAB DA DC IPL2 IPL1 IPL0 RA N OV Z C 0000 0000
0000 0000
CORCON 0044 — — — US EDT DL2 DL1 DL0 SATA SATB SATDW ACCSAT IPL3 PSV RND IF 0000 0000
0010 0000
MODCON 0046 XMODEN YMODEN — — BWM<3:0> YWM<3:0> XWM<3:0> 0000 0000
0000 0000
Dodatak:
Address
SFR Name Bit 15 Bit 14 Bit 13Bit 12Bit 11Bit 10 Bit Bit 8 Bit 7 Bit Bit Bit Bit Bit Bit Bit Reset State
9 6 5 4 3 2 1 0
(Home)
XMODSRT 0048 XS<15:1> 0 uuuu uuuu uuuu uuu0
XMODEND 004A XE<15:1> 1 uuuu uuuu uuuu uuu1
YMODSRT 004C YS<15:1> 0 uuuu uuuu uuuu uuu0
YMODEND 004E YE<15:1> 1 uuuu uuuu uuuu uuu1
XBREV 0050 BREN XB<14:0> uuuu uuuu uuuu uuuu
DISICNT 0052 — — DISICNT<13:0> 0000 0000 0000 0000

Slika 3-9: CALL STEK FREJM


MIKROPROCESORI

0x0000 15 0

Stek raste u pravcu više adrese

PC<15:0> W15 (pre CALL)


000000000 PC<22:16>
<Free World> W15 (posle CALL)

POP: [--W15]
PUSH: [W15++]
PREKIDI (INTERAPTI)
dsPIC30F4011/4012 ima 30 izvora prekida i četiri 4 procesorska izuzeća (traps),
koji moraju biti raspoređeni po šemi prioriteta. CPU je zadužen za čitanje
generisanje Tabele Vektora Prekida (IVT) i prenos adrese koja se sadrži u vektoru
prekida u okviru programskog brojača. Vektor prekida se prenosi sa programske
sabirnice u programski brojač, putem 24-bitnog multipleksera na ulazu
programskog brojača.
Tabela Vektora Prekida (IVT) i Alternativna Tabela Vektora Prekida (AIVT) se
smeštaju u blizini početka programske memorije (0x000004). IVT i AIVT su
prikazani na slici 5.1.
Kontroler prekida je zadužen za pretprocesiranje prekida i procesora izuzeća
(trapova), pre nego što oni budu poslati u jezgro procesora.
Periferni prekidi i trapovi su omogućeni, dodeljeni su im prioriteti i kontrolišu se
koriščenjem centralizovanih registara specijalne funkcije:
• IFS0<15:0>, IFS1<15:0>, IFS2<15:0>
Svi flegovi zahteva za prekidom se održavaju u ova tri registra. Ovi flegovi su
setovani svojim odgovarajućim periferalima ili spoljnim signalima i oni se prazne
softverski.
• IEC0<15:0>, IEC1<15:0>, IEC2<15:0>
Svi kotrolni bitovi za omogućavanje prekida se održavaju u ova 3 registra. Ovi
kontrolni bitovi se koriste da pojedinačno omoguće prekide sa periferala ili spoljnih
signala.
• IPC0<15:0>... IPC11<7:0>
Nivo prioriteta koji dodeljuje korisnik svakom prekidu se čuva centralno u ovih 12
registara.
• IPL<3:0> Trenutni nivo prioriteta CPU se eksplicitno čuva u IPL bitovima. IPL<3>
je prisutan u CORCON registru, dok je IPL<2:0> prisutan u statusnom registru (SR
u jezgru procesora.
• INTCON1<15:0>, INTCON2<15:0>
Globalne funkcije za kontrolu prekida se izvode iz ovih registara. INTCON1 sadrži
kontrole i statusne flegove za procesorska izuzeća. INTCON2 registar kontroliše
ponašanje spoljnog signala zahteva prekida i koristi alternativnu vektorsku tabelu.
Svi izvori prekida mogu biti dodeljeni jednom od 7 nivoa prioriteta, od 1 do 7, preko
IPCx registara. Svaki izvor prekida je povezan sa vektorom prekida. Nivoi 7 i 1
predstavljaju najviši i najniži maskiran prioritet, respektivno.
Ako je NSTDIS bit (INTCON1<15>) setovan, neće doći do gomilanja prekida. Tako,
ako se prekid trenutno servisira, procesiranje novih prekida je onemogućeno, čak i
ako je novi prekid višeg prioriteta od onog koji se trenutno obrađuje. Određeni
prekidi imaju specijalne upravljačke bitove za karakteristike kao što su ivično ili
nivoom okidani prekidi, promena prekida, itd. Kontrola ovih karakteristika ostaje na
perifernom modulu koji generiše prekid.
DISI instrukcija se može koristiti da onemogući procesiranje prekida nivoa prioriteta
6 i nižih za određeni broj instrukcija, u toku kojih DISI bit (INTCON2<14>) ostaje
setovan. Kada se prekid servisira, PC se puni adresom koja se čuva na vektorskoj
lokaciji u programskoj memoriji koja odgovara prekidu. Postoje 63 različita vektora u
MIKROPROCESORI

IVT. Ovi vektori se sadrže na lokacijama 0x000004 do 0x0000FE programske


memorije.
Ove lokacije sadrže 24-bitne adrese, i da bi se sačuvala robusnost, adresni error
trap će preuzeti ukoliko PC pokuša da uhvati neku od ovih reči u toku normalnog
rada. Ovo sprečava izvršavanje proizvoljnih podataka kao rezultat slučajnog
dekrementiranja PC u vektorski prostor, slučajnog mapiranja adresnog prostora
podataka u vektorski prostor, ili vraćanje PC u 0x000000 posle dostizanja kraja
implementiranog programskog memorijskog prostora. Izvršavanje GOTO instrukcije
u ovaj vektorski proctor će takodje generisati adresni error trap.
Napomena: Bitovi flega prekida su setovani kada se pojavi uslov za prekid, bez
obzira na stanje njemu odgovarajućeg bita za omogućavanje. Korisnički softver bi
trebao da omogući da se bitovi flega prekida isprazne pre omogućavanja prekida.
Napomena: Dodeljivanje nivoa prioriteta 0 izvoru prekida je ekvivalentno
onemogućavanju tog prekida.
Napomena: IPL bitovi postaju read-only kad god se NSTDIS bit setuje na ‘1’.

5.1 Prioriteti prekida


Bitovi Nivoa prioriteta koje donosi korisnik (IP<2:0>) za svaki pojedinačni izvor
prekida su locirani u LS 3-bitovima svakog nibla, u okviru IPCx registar(a). Bit 3
svakog nibla se ne koristi i čita se kao ‘0’. Ovi bitovi definišu nivo prioriteta dodeljen
pojedinačnom prekidu od strane korisnika. Pošto više od jednog izvora zahteva za
prekidom može biti dodeljeno pojedinačnom korisničkom izvoru nivoa prekida,
objašnjenje se daje da bi se dodelio prioritet u okviru datog nivoa. Ovaj metod se
zove “Prioritet prirodnog redosleda”. Prioritet prirodnog redosleda je određen
pozicijom prekida u tabeli vektora prekida i utiče samo na rad prekida kada se
višestruki prekidi, zadati od korisnika istog prioriteta, nagomilaju u isto vreme.
Mogućnost korisnika da dodeli svaki prekid jednom od sedam nivoa prioriteta
sugeriše da korisnik može da dodeli veoma visok ukupan nivo prioriteta nekom
prioritetu koji inače prirodno ima nizak nivo. Na primer, PLVD (detektor niskog
napona) može dobiti nivo 7. INT0 (spoljni prekid 0) može dobiti nivo prioriteta 1,
tako dobijajući vrlo nizak efektivni nivo prioriteta.
Napomena: Nivoi prioriteta koje dodeljuje korisnik počinju od 0, na najnižem nivou, i
nivou 7, kao najvišem.
Napomena 1: Šema prirodnog nivoa prioriteta ima 0 kao najviši prioritet i 53 kao
najniži.
2: Broj prirodnog nivoa prioriteta je isti kao INT broj.
Tabela 5-1: Vektor tabela prekida
INT Vector
Interrupt Source
Number Number
Highest Natural Order Priority
0 8 INT0 - External Interrupt 0
1 9 IC1 - Input Capture 1
2 10 OC1 - Output Compare 1
3 11 T1 - Timer 1
4 12 IC2 - Input Capture 2
5 13 OC2 - Output Compare 2
6 14 T2 - Timer 2
7 15 T3 - Timer 3
8 16 SPI1
9 17 U1RX - UART1 Receiver
10 18 U1TX - UART1 Transmitter
11 19 ADC - ADC Convert Done
12 20 NVM - NVM Write Complete
13 21 SI2C - I2C Slave Interrupt
14 22 MI2C - I2C Master Interrupt
15 23 Input Change Interrupt
16 24 INT1 - External Interrupt 1
17 25 IC7 - Input Capture 7
18 26 IC8 - Input Capture 8
19 27 OC3 - Output Compare 3
20 28 OC4 - Output Compare 4
21 29 T4 - Timer 4
22 30 T5 - Timer 5
23 31 INT2 - External Interrupt 2
24 32 U2RX - UART2 Receiver
25 33 U2TX - UART2 Transmitter
26 34 Reserved
27 35 C1 - Combined IRQ for CAN1
28 36 Reserved
29 37 Reserved
30 38 Reserved
31 39 Reserved
32 40 Reserved
33 41 Reserved
34 42 Reserved
35 43 Reserved
36 44 Reserved
37 45 Reserved
38 46 Reserved
39 47 PWM - PWM Period Match
40 48 QEI - QEI Interrupt
41 49 Reserved
42 50 Reserved
43 51 FLTA - PWM Fault A
44 52 Reserved
45-53 53-61 Reserved
Lowest Natural Order Priority
MIKROPROCESORI

5.2 Reset Sekvenca


Reset nije pravi izuzetak, zato što kontroler prekida nije angažovan u Reset procesu. Proces
inicijalizuje svoje register kao odgovor na Reset, što tera PC na nulu. Procesor tada počinje
izvršavanje programa na lokaciji 0x000000. GOTO instrukcija se čuva u prvoj programskoj
lokaciji, iza čega odmah sledi adresa cilja GOTO instrukcije. Procesor izvršava GOTO na
specificiranoj adresi i zatim počinje rad na postavljenoj ciljnoj (start) adresi.

5.2.1 RESET IZVORI


Postoji 6 izvora greške koje izazivaju resetovanje uredjaja.
• Watchdog Time-out:
Watchdog ima time out, što pokazuje da processor više ne izvršava tačan tok koda.
• Neinicijalizovani W Registar Trap:
Pokušaj da se koristi W registar kao adresni pokazivač (pointer) će izazvati Reset.
• Ilegalni Trap:
Pokušaj izvršavanja bilo kojih nekoriščenih opkodova će imati za rezultat ilegalni trap
instrukcija. Treba primetiti da hvatanje ilegalne instrukcije neće rezultovati trapom ilegalne
instrukcije ako se ta instrukcija izbaci pre izvršenja zbog promene toka
• Brown-out Reset (BOR):
Trenutni pad napajanja uredjaja je detektovan, što može izazvati neispravan rad.
• Trap Lockout:
Pojava višestrukih Trap stanja simultano će izazvati Reset.

5.3 Trap-ovi
Trapovi se mogu smatrati nemaskiranim prekidima koji ukazuju na softversku ili hardversku
grešku, što je u vezi sa unapred definisanim prioritetom kao što je pokazano na slici 5.1. Oni
služe da bi korisniku omogućili način da ispravi neispravan rad u toku debagovanja i kada se
radi u okviru aplikacije. Treba primetiti da se mnogi od ovih trap stanja mogu detektovati
samo kada se dese. S toga, problematičnoj instrukciji je dozvoljeno izvršenje pre
procesiranja trap izuzetka. Ako korisnik odluči da se povrati iz neispravnog rada, rezultat
neispravnog rada koji je izazvao trap mora biti ispravljen. Postoji 8 fiksnih nivoa prioriteta za
trap: nivoi 8 do 15, koji pokazuju da je IPL3 uvek setovan u toku procesiranja trapa. Ako
korisnik trenutno ne izvršava trap, i setuje IPL<3:0> bitove na vrednost ‘0111’ (nivo 7), tada
su svi prekidi onemogućeni, ali se trapovi i dalje procesiraju.

5.3.1 IZVORI TRAPA


Sledeći trapovi su omogućeni, sa rastućim prioritetom. Medjutim, pošto svi prekidi mogu biti
polagani, prioritet ima malo efekta.
Math Error Trap:
Math Error trap se izvršava pod sledećim uslovima:
1. Ako se pokuša deljenje sa nulom, operacija deljenja će biti obustavljena na granici ciklusa
i trap će nastupiti.
2. Ako je omogućen, Math Error trap će nastupiti kada aritmetička operacija na bilo kom
akumulatoru A ili B izazove overflow od bita 31 i Akumulator Zaštitni bitovi nisu iskorišteni.
3. Ako je omogućen, Math Error trap će nastupiti kada aritmetička operacija na bilo kom
akumulatoru A ili B izazove katastrofalan overflow od bita 39 i sva saturacija je
onemogućena.
4. Ako je navedeni iznos u shift instrukciji veći od maksimuma dozvoljenog za shift, desiće se
trap.
Napomena: Ako korisnik ne namerava da preuzme korektivnu akciju u dogadjaju koji je
prethodio trap error stanju, ovi vektori moraju biti učitani adresom koja jednostavno sadrži
RESET instrukciju. Ako, se sa druge stranepozove jedan od vektora koji sadrži pogrešnu,
adresni error trap se generiše.

Adresni Error Trap:


Ovaj trap se inicira kada se bilo koja od sledećih pojava desi:
1. Pokušaj pristupa pogrešno poredjanoj reči podataka.
2. A data fetch from our unimplemented data memory location is attempted.
3. Pristup podatku neimplementirane lokacije programske memorije.
4. Hvatanje instrukcije iz vektorskog prostora.
5. Izvršavanje “BRA #literal” instrukcije ili “GOTO #literal” instrukcije, gde je literal
neimplementiran pristup programskoj memoriji.
6. Iyvršavanje instrukcija posle modifikacije PC’ja da bi se ukazalo na neimplementirane
adrese programske memorije. PC može biti modifikovan ušitavanjem vrednosti u stek i
izvršavanje RETURN instrukcije.

Stek Error Trap:


Ovaj trap se inicira pod sledećim uslovima:
1. Stek pointer se učitava vrednošću koja je veća (korisnički programabilna) od limita
upisanog u SPLIM registar (stek overflow).
2. Stek pointer učitava vrednost koja je manja od 0x0800 (običan stek underflow).

Fail Trap Oscilatora:


Ovaj trap se inicira ako spoljni oscilator zakaže i rad postane zavisan od unutrašnjeg RC
backup-a.
Napomena: U MAC klasi instrukcija, gde je proctor sa podacima podeljen u X i Y prostor,
neimplementiran X proctor uključuje sve iz Y prostora, i neimplementiran Y proctor uključuje
sve iz X prostora.

5.3.2 HARD i SOFT TRAP-ovi


Moguće je da višestruki trapovi postanu aktivni traps can become active u okviru istog
ciklusa (npr., pomešana reš steak upisana u overflow adresu). U takvom slučaju, fiksiran
prioritet prikazan na Slic 5-2 se implementira, što može zahtevati od korisnika da pogleda da
li ostali trapovi čekaju, kako bi se greška u potpunosti otklonila. ‘Soft’ trapovi uključuju
izuzeća nivoa prioriteta od 8 do 11. Aritmetički error trap (nivo 11) potpada u ovu kategoriju
trapova. ‘Hard’ trapovi uključuju izuzeća nivoa prioriteta od 12 do 15. Adresni error (nivo 12),
stek error (nivo 13) i oscilator error (nivo 14) trapovi potpadaju u ovu kategoriju.
Svaki hard trap koji se desi mora biti uvažen pre izvršavanja koda. Ako se hard trap nižeg
prioriteta desi dok trap višeg nivoa čeka i uvažen je ili se procesira, konflikt hard trapa će se
desiti. Uredjaj se automatski resetuje uz stanje hard trap konflikta. TRAPR status bit
(RCON<15>) se setuje kada se desi Reset, tako da uslov mora biti detektovan u softveru.
MIKROPROCESORI

Slika 5-1: TRAP VEKTORI


Reset - GOTO instrukcija

Reset . GOTO adresa

Rezervisano
Oscilator Fail Trap vektor
Adresni Error Trap vektor

Stek Error Trap vektor


Math Error Trap vektor

Rezervisan vektor

Rezervisan vektor

Rezervisan vektor

Vektor prekida 0
Vektor prekida 1

---
---

---

Vektor prekida 52

Vektor prekida 53
Rezervisan vektor

Rezervisan vektor
Rezervisan vektor

Oscilator Fail Trap vektor


Stek Error Trap vektor

Adresni Error Trap vektor

Math Error Trap vektor

Rezervisan vektor
Rezervisan vektor

Rezervisan vektor

Vektor prekida 0
Vektor prekida 1

---
---

---

Vektor prekida 52

Vektor prekida 53
MIKROPROCESORI

5.4 Sekvenca prekida


Svi flegovi prekida dogadjaja su dati na početku svakog ciklusa instrukcije sa IFSx registrima.
Zahtev za prekidom koji je na čekanju (IRQ) indicira se bitom flega koji je jednak ‘1’ u IFSx
registru. IRQ će izazvati prekid ako je odgovarajući bit u registru omogućavanja prekida
(IECx) setovan. Za ostatak ciklusa instrukcija, prioriteti svih preostalih zahteva prekida na
čekanju. Ako je neki IRQ na čekanju sa nivoom prioriteta većim od onog koji se trenutno
procesira u IPL bitovima, procesor će biti prekinut. Procesor zatim stekuje trenutni
programski brojač i low bajt statusnog registra procesora (SRL), kao što je prikazano na Slici
5-2. Low bajt statusnog registra sadrži nivo prioriteta u trenutku, pre početka prekidačkog
ciklusa. Procesor zatim učitava nivo prioriteta za ovaj prekid u registar statusa. Ova akcija će
onemogućiti sve prekide nižeg nivoa do završetka Rutine Servisa Prekida.

Slika 5-2: Prekid Stek Frejm

0x0000 15 0
Stek raste u pravcu više adrese

PC<15:0> W15 (pre CALL)


SRL IPL3 PC<22:16>

<Free World> W15 (posle CALL)

POP: [--W15]
PUSH: [W15++]

Napomena 1: Korisnik uvek može sniziti prioritet upisivanjem nove vrednosti u SR. IS rutina mora
isprazniti bitove flega prekida u IFSx registru snižavanjem prioriteta procesorskog prekida, da bi se
izbegli rekurzivni prekidi.
2: IPL3 bit (CORCON<3>) je uvek prazan kada se procesiraju prekidi. On se setuje samo u toku
izuzeća trapova.
RETFIE (povratak iz prekida) instrukcija će odstekovati programski brojač i statusne register
da bi se processor vratio u stanje pre sekvence prekida.

8.0 U/I PORTOVI


Svi pinovi uredjaja (osim VDD, VSS, MCLR i OSC1/CLKIN) su podeljeni izmedju periferala i
paralelnih U/I potrova. Svi U/I ulazni portovi imaju Schmitt okidački ulaz sa poboljšanom
zvučnom izolacijom.

8.1 Paralelni U/I (PIO) Portovi


Kada je periferal omogućen i aktivno vodi dodljeni pin, korišćenje izlaznog pina opšte
namene je onemogućeno. U/I može biti pročitan, ali izlazni drajver za bit paralelnog porta će
biti onemogućen. Ako je periferal omogućen, ali ne vodi aktivno pin, tada pin može biti vodjen
portom pin. Svi pinovi porta imaju tri registra direktno vezana sa radom pina porta. Registar
pravca podataka (TRISx) odredjuje da li je pin ulazni ili izlazni. Ako je bit pina pravca
podataka ‘1’, onda je pin ulazni. Svi pinovi porta se definišu kao ulazni posle reseta.
Očitavanje iz (LATx), čita latch. Upisivanje u latch se vrši upisivanjem u (LATx). Očitavanja
sa porta (PORTx), čitaju port pinove, i upisuju u port pinove, pisanjem u (LATx).

Svaki bit i njemu asocirani podaci i kontrolni registri koji nsu validni za dati uredjaj će biti
onemogućeni. Ovo znači da će se odgovarajući LATx i TRISx registri i port pinovi čitati kao
nule. Kada se pin deli sa drugim periferalom ili funkcijom koja je definisana samo kao ulaz, to
se ipak smatra kao dodeljeni port pošto ne postoji drugi konkurentni izvor izlaza. Primer je is
INT4 pin. Format registara za PORTX je prikazan u tabeli 8-1.
TRISX (kontrola pravca podataka) registar kontroliše pravac pinova. LATX registar snabdeva
podacima izlaze, i on se može čitati/pisati. Čitanje PORTX registra daje stanje ulaznih
pinova, dok se upisivanjem u PORTX registar modifikuje sadržaj LATX registra. Paralelni U/I
port koji deli pin sa periferalom je, generalno, podredjen periferalu. Izlaz periferala bafera
podataka i kontrolni signali se obezbedjuju paru multipleksera. Multiplekseri vrše selekciju da
li periferal ili asocirani port select imaju vlasništvo nad izlaznim podacima i kontrolnim
signalima U/I pad ćelije. Slika 8-2 pokazuje kako su portovi podeljeni sa ostalim periferalima,
i asociranim U/I ćelijama (pad) sa kojima su povezane. Tabela 8-1 pokazuje formate
registara za deljene portove, od PORTB do PORTG.

Slika 8-1: Blok Dijagram dodeljene struktore portova

Slika 8-2: Blok Dijagram deljene struktore portova


MIKROPROCESORI

8.2 Konfigurisanje Analognih Port Pinova


Korišćenje ADPCFG i TRIS registara kontroliše rad A/D port pinova. Port pinovi koji
su predvidjeni kao analogni ulazi moraju imati svoje odgovarajuće TRIS bit setove
(ulazi). Ako se TRIS bit obriše (izlaz), digitalni nivo izlaza (VOH ili VOL) će biti
konvertovani. Pri čitanju PORT registra, svi pinovi konfigurisani kao analogni ulazni
kanali će biti pročitani kao čisti (niskog nivoa). Pinovi konfigurisani kao digitalni ulazi
neće biti konvertovani kao analogni ulaz. Analogni ulazi na bilo kom pinu koji je
definisan kao digitalni ulaz (uključujući ANx pinove), može izazvati kod ulaznog
bafera trošenje struje koja prelazi specifikacije uredjaja.

8.2.1 U/I Port čitaj/piši tajming


Jedan ciklus instrukcija je potreban izmedju promene pravca na portu ili operacije
pisanja na portu i operacije na istom portu. Tipično, ova instrukcija bi bila NOP.

Primer 8-1: Čitaj/piši na portu, primer


MOV 0xFF00, W0 ; Configure PORTB<15:8> ; as inputs MOV W0, TRISBB ; and
PORTB<7:0> as outputs NOP ; Delay 1 cycle btss PORTB, #13 ; Next Instruction
9.0 TAJMER1 Modul

Ovaj deo opisuje 16-bitni GP opšte namene, Tajmer1 modul i operativne modove.
Slika 9-1 predstavlja pojednostavljen blok dijagram 16-bitnog Tajmer1 modula.
Sledeći delovi predstavljaju detaljan opis, uključujući setup i kontrolne registre kao i
vezane blok dijagrame za operativne modove tajmera.
Tajmer1 modul je 16-bitni tajmer koji može da posluži kao brojač za real-time takt, ili da radi
kao slobodan interval tajmer/brojač. 16-bitni tajmer ima sledeće modove:
• 16-bitni Tajmer
• 16-bitni sinhroni brojač
• 16-bitni asinhroni brojač
Dalje, podržane su sledeće operativne karakteristike:
• Tajmer gate rad
• Selektivna prescaler podešenja
• Rad tajmera u toku CPU Idle i Sleep modova
• Prekid na 16-bitnom periodičnom registru ili opadajućoj ivici spoljnog gate signala

Napomena: Tajmer1 je ‘Tip A’ tajmer. Treba pogledati specifikaciju ua Tip A tajmer u delu
24.0 Električne karakteristike, ovog dokumenta. Ovi operativni modovi su odredjeni
podešenjima odgovarajućih bitova u 16-bitnom SFR, T1CON. Slika 9-1 predstavlja blok
dijagram 16-bitnog modula tajmera.
16-bitni Tajmer Mod: U 16-bitnom Tajmer modu, tajmer se inkrementira na svaku ciklus
instrukcija do odgovarajuće vrednosti, prethodno učitane u periodični registar PR1, onda se
resetuje na 0 i nastavlja da broji. Kada se CPU prebaci u Idle mod, tajmer će prestati da
inkrementira, ukoliko TSIDL (T1CON<13>) bit = 0. Ako je TSIDL = 1, logika tajmera modula
će obnoviti sekvencu inkrementiranja nakon završetka CPU Idle moda.
16-bitni mod sinhronog brojača: tajmer se inkrementira na rastuću ivicu primenjenog spoljnog
takt signala, koja je sinhronizovana sa internim faznim taktom. Tajmer broji do odgovarajuće
vrednosti prethodno učitane u PR1, onda se resetuje na 0 i nastavlja. Kada se CPU prebaci
u Idle mod, tajmer prestaje da inkrementira, osim ukoliko njegov TSIDL bit = 0. Ako je TSIDL
= 1, logika modula tajmera će obnoviti sekvencu inkrementiranja nakon završetkaCPU Idle
moda.
16-bitni mod asinhronog brojača: tajmer se inkrementira na svaku rastuću ivicu primenjenog
spoljnog takt signala. Tajmer broji do odgovarajuće vrednosti prethodno učitane u PR1, onda
se resetuje na 0 i nastavlja. Kada je tajmer konfigurisan za asinhroni mod rada i CPU se
prebaci u Idle mod, tajmer prestaje da inkrementira ako je TSIDL bit = 1.

Slika 9-1: 16-BITNI TAJMER1 modul blok dijagram (tajmer tipa A)


MIKROPROCESORI

9.1 Rad Tajmer Gate-a


16-bitni tajmer može biti smešten u Gated Time Akumulacioni mod. Ovaj mod dozvoljava
interni TCY da inkrementira odgovarajući tajmer kada je gate ulazni signal (T1CK pin)
postavljen visoko. Kontrolni bit TGATE (T1CON<6>) mora biti setovan da bi se omogućio
ovaj mod. Tajmer mora biti omogućen (TON = 1) i izvor takta tajmera podešen interno (TCS
= 0). Kada CPU predje u Idle mod, tajmer će prestati da inkrementira, osim ukoliko TSIDL =
0. Ako je TSIDL = 1, tajmer će nastaviti sekvencu inkrementiranja will resume the po
završetku CPU Idle moda.

9.2 Prescaler Tajmera


Ulazni takt (FOSC/4 ili spoljni takt) 16-bitnog Tajmera, ima prescale opciju 1:1, 1:8, 1:64, i
1:256 selektovanu kontrolnim bitovima TCKPS<1:0> (T1CON<5:4>). Prescaler brojač se
prazni kada se bilo koji od sledećih dogadjaja desi:
• upis u TMR1 registar
• pražnjenje TON bita (T1CON<15>)
• Reset uredjaja kao što su POR i BOR
Medjutim, ako je tajmer onemogućen (TON = 0), tada se tajmer prescaler ne može resetovati
jer je prescaler takt zaustavljen. TMR1 nije ispražnjen kada se T1CON upisuje. On se prazni
upisivanjem u TMR1 registar.

9.3 Rad Tajmera u Sleep Modu


U toku CPU Sleep moda, tajmer će raditi ako:
• je modul tajmera omogućen (TON = 1) i
• Izvor takta tajmera je selektovan kao spoljni (TCS = 1) i
• TSYNC bit (T1CON<2>) je dodeljen logičkoj 0, što definiše spoljni izvor takta kao asinhroni
Kada su sva tri uslova ispunjena, tajmer nastavlja da broji do perioda registra i onda je
resetovan na 0x0000. Kada se izjednače tajmer i periodični registar, može se generisati
prekid ako je odgovarajući bit omogućavanja prekida tajmera dodeljen.
9.4 Prekid Tajmera
16-bitni tajmer ima mogućnost da generiše prekid na izjednačenom periodu. Kada se
brojanje tajmera izjednači se periodičnim registrom, T1IF bit se dodeljuje i generisaće se
prekid, ako je omogućen. T1IF bit mora biti ispražnjen softverski. Fleg prekida tajmera T1IF
je lociran u IFS0 kontrolnom registru Prekida Kontrolera. Kada se Gated Time Akumulacija
omogući, prekid će se takodje generisati na opadajuću ivicu gate signala (na kraju
akumulacionog ciklusa). Omogućavanje prekida je ostvareno odgovarajućim bitom Timer
Interrupt Enable, T1IE. TIE bit je lociran u IEC0 kontrolnom registru u Kontroleru Prekida

9.5 Real-Time Takt (Clock)


Tajmer1, kada radi u Real-Time Clock (RTC) modu, omogućava potpis u time-of-day i u
vremenu dogadjaja. Glavne radne karakteristike RTC-a su:
• Rad 32 kHz LP oscilatora
• 8-bitni prescaler
• Mala snaga
• Real-Time Clock prekidi
Ovi operativni modovi su odredjeni podešavanjem odgovarajućih bitova u T1CON
kontrolnom registru

Slika 9-2: preporučene komponente za TAJMER1 LP oscilator RTC

9.5.1 RTC rad oscilatora


Kada je TON = 1, TCS = 1 i TGATE = 0, tajmer inkrementira na rastuću ivicu 32
kHz LP izlaznog signala oscilatora, do vrednosti navedene u periodičnom registru, i
onda se resetuje na ‘0’. TSYNC bit mora biti sveden na logičku ‘0’ (asinhroni mod)
za ispravan rad. Omogućavanje LPOSCEN (OSCCON<1>) će onemogućiti
MIKROPROCESORI

normalni Tajmer i Brojač mod i omogućiti tajmer Carrry-out wake-up dogadjaj. Kada
CPU udje u Sleep mod, RTC će nastaviti da radi, ukoliko je 32 kHz spoljni kristalni
oscilator aktivan i kontrolni bitovi nisu promenjeni. TSIDL bit mora biti ispražnjen na
‘0’ kako bi RTC nastavio rad u Idle modu.

9.5.2 RTC prekidi


Kada se desi prekid, odgovarajući fleg prekida, T1IF, je pozvan i generisaće se
prekid, ako je omogućen. T1IF bit mora biti ispražnjen softverski. Odgovarajući fleg
prekida tajmera, T1IF, je lociran u IFS0 statusnom registru Prekida Kontrolera.
Omogućavanje prekida se vrši Timer Interrupt Enable bitom, T1IE. T1IE bit je
lociran u IEC0 kontrolnom registru prekida kontrolera.

10.0 Tajmer2/3 modul


Ovaj deo opisuje 32-bitni tajmer modul module (Timer2/3) opšte namene (General
Purpose - GP) i odgovarajući modove rada. Slika 10-1 pokazuje pojednostavljen
32-bitni Tajmer2/3 modul. Slika 10-2 i Slika 10-3 pokazuju Tajmer2/3 konfigurisani
kao dva nezavisna 16-bitni tajmera; Tajmer2 i Tajmer3, redom. Timer2/3 modul je
32-bitni tajmer, koji može biti konfigurisan kao dva 16-bitna tajmera, sa selektivnim
operativnim modom. Ovi tajmeri se koriste od strane drugih perifernih modova kao
što su:
• Ulazni Capture
• Izlazni Uporedni/Obični PWM
Sledeći deo daje detaljan opis, uključujući setup i kontrolne registre, kao i
pridružene blok dijagrame za operativne modove tajmera.

32-bitni tajmer ima sledeće modove:


• Dva nezavisna 16-bitna tajmera (Tajmer2 i Tajmer3) sa svim 16-bitnim
operativnim modovima (osim moda asinhronog brojača)
• jednu 32-bitnu tajmer operaciju
• jedan 32-bitni sinhroni brojač

Dalje, podržane su sledeće radne karateristike:


• ADC okidač dogadjaja
• tajmer Gate rad
• selektivna Prescaler podešenja
• rad tajmera u Idle i Sleep modu
• prekid na izjednačenom 32-bitnom periodičnom registru

Ovi operativni modovi su odredjeni podesenjem odgovarajućih bitova u 16-bitnom


T2CON i T3CON SFR-u.

Napomena: Tajmer2 je ‘Tip B’ tajmer i Tajmer3 je ‘Tip C’ tajmer. Pogledati tip


tajmera u poglavlju 24.0 električne karakteristike ovog dokumenta.

Za rad 32-bitnog tajmer/brojača, Tajmer2 je LS Word i Tajmer3 je MS Word 32-bitni


tajmer. 16-bitni Mod: Tajmer2 i Tajmer3 mogu biti konfigurisani kao dva nezavisna
16-bitna tajmera. Svaki tajmer može biti podešen ili kao 16-bitni tajmer ili kao 16-
bitni sinhroni brojač. Pogledati poglavlje 9.0 za više informacija.
Jedina funkcionalna razlika izmedju Tajmera2 i Tajmera3 je da Tajmer2 omogućuje
sinhronizaciju izlaza takta prescalera. Ovo je korisno za ulaz spoljnog takta visoke
frekvencije.
32-bitni mod tajmera: tajmer inkrementira na svakom ciklusu instrukcija do
odgovarajuće vrednosti, prethodno učitane u kombinovani 32-bitni periodični
registar.
PR3/PR2 se onda resetuje na 0 i nastavlja da broji. Za sinhrono čitanje 32-bitna
Timer2/Timer3 para, čitanje LS word (TMR2 registra) će izazvati da MS word bude
pročitan i prebačen u 16-bitni registar čuvanja, po imenu TMR3HLD. Za sinhrono
32-bitno pisanje, registar za čuvanje (TMR3HLD) mora prethodno biti upisan. Ako
ovome sledi upisivanje u TMR2 registar, sadržaj TMR3HLD će biti prebačen u MSB
32-bitnog tajmera (TMR3).
32-bitni sinhroni brojački mod: tajmer inkrementira na rastuću ivicu primenjenog
spoljnog takt signala, koji je sinhronizovan sa unutrašnjim faznim taktom. Tajmer
broji do odgovarajuće vrednosti prethodno učitane u kombinovani 32-bitni periodični
registar PR3/PR2, onda se restuje na ‘0’ i nastavlja.
Kada se tajmer konfiguriše za sinhroni brojački mod rada i CPU ode u Idle mod,
tajmer će prestati da inkrementira, osim ukoliko TSIDL (T2CON<13>) bit = 0. Ako je
TSIDL = 1 logika modula tajmera će obnoviti sekvencu inkrementiranja nakon
završetka CPU Idle moda. Napomena: za 32-bitni rad tajmera, T3CON kontrolni
bitovi se ignorišu. Samo T2CON kontrolni bitovi se koriste za setup i kontrolu. Takt
Tajmera 2 i gate ulazi se koriste u 32-bitnom modulu tajmera, ali se prekid generiše
sa flegom prekida Tajmera3 (T3IF) i prekid se omogućava sa bitom omogućavanja
prekida Tajmera3: (T3IE).

10.1 Operacija Timer Gate

32-bitni tajmer se može postaviti u režim Gated Time Accumulation. Ovaj režim
omogućava internom TCY da inkrementira respektivni tajmer kada je ulazni signal
gejta (T2CK pin) visok. Kontrolni bit TGATE (T2CON<6>) mora biti setovan da
omogući ovaj režim. Kada se nalazi u ovom režimu, Timer2 je originalni izvor takta.
Timer3 ignoriše postavke TGATE-a. Tajmeru mora biti omogućen rad (TON = 1) a
izvor takta tajmera mora biti setovan na interno (TCS = 0). Opadajuća ivica
eksternog signala završava operaciju brojanja, ali ne resetuje tajmer. Korisnik mora
da resetuje tajmer da bi ponovo počeo da broji od nule.

10.2 Triger događaja ADC

Kada se dogodi poklapanje između između 32-bitnog tajmera (TMR3/TMR2) i 32-


bitnog kombinovanog registra perioda (PR3/ PR2), Timer3 generiše poseban signal
trigera događaja ADC.

10.3 Preskaliranje tajmera


MIKROPROCESORI

Ulazni takt (FOSC/4 ili eksterni takt) tajmera ima opciju preskaliranja od 1:1, 1:8,
1:64, i 1:256, što selektuju kontrolni biti TCKPS<1:0> (T2CON<5:4> i
T3CON<5:4>). Za 32-bitni rad tajmera, izvorni takt obezbeđuje Timer2. Operacija
preskaliranja za Timer3 nije primenjiva na ovaj režim. Brojač preskalera se čisti
(resetuje) svaki put kada se desi nešto od sledećeg:
• upis u registre TMR2/TMR3
• čišćenje bilo TON (T2CON<15> ili T3CON<15>) bita na ‘0’
• Reset uređaja, kao što je POR i BOR

Međutim, ukoliko je tajmer onemogućen (TON = 0), onda se preskaler koji pripada
Timer2-u ne može resetovati, dok god je takt preskalera u zastoju.
TMR2/TMR3 se ne čiste kada se upisuje u T2CON/T3CON.

10.4 Rad tajmera tokom Sleep režima

Tokom Sleep režima CPU, tajmer neće raditi, budući da su unutrašnji klokovi
(taktovi) isključeni.

10.5 Prekid tajmera

32-bitni modul tajmera može da generiše prekid na poklapanju perioda, ili na


opadajućoj ivici eksternog signala na gejtu. Kada se broj na 32-bitnom tajmeru
poklopi sa respektivnim 32-bitnim registrom perioda, ili se detektuje opadajuća ivica
na eksternom "gejtu", T3IF bit (IFS0<7>) se asertuje i generiše se prekid, ukoliko je
to dozvoljeno. U ovom režimu, fleg prekida T3IF se koristi kao izvor prekida. T3IF
bit se mora očistiti softverski.
Omogućavanje prekida se vrši putem respektivnog bita omogućavanja prekida
tajmera, Timer Interrupt Enable bit, T3IE (IEC0<7>).

12.0 Ulazni CAPTURE modul


Ovaj deo opisuje ulazni Capture modul i pridružene operativne modove.
Karakteristike omogućene ovim modulom su korisne u aplikacijama koje zahtevaju
Frekventno (Periodično) i Pulsno merenje. Slika 12-1 prikazuje blok dijagram
Ulaznog Capture modula. Ulazni capture je koristan za:
• Frekventno/Periodično/Pulsno merenje
• Dodatne izvore spoljnih prekida

Ključne radne karakteristike ulaznog Capture modula su:


• obični Capture mod dogadjaja
• Timer2 i Timer3 selekcija moda
• prekid na ulazu capture-a dogadjaja
Ovi operativni modovi su odredjeni podešavanjem odgovarajućih bitova u ICxCON
registru (gde je x = 1,2,...,N). dsPIC30F4011/4012 uredjaj ima 4 capture kanala.
Napomena: dsPIC30F4011/4012 uredjaju imaju 4 capture ulaza: IC1, IC2, IC7 i
IC8.
Imenovanje ova 4 capture kanala je internacionalno i čuva softversku
kompatibilnost sa drugim dsPIC uredjajima.

Slika 12-1: ulazni CAPTURE mod - blok dijagram

Napomena: Gde stoji ‘x’, to je referenca na registre ili bitove dodeljene


odgovarajućim ulaznim capture kanalima, od 1 do N.

12.1 Obični mod Capture dogadjaja


Obični capture dogadjaji u dsPIC30F familiji su:
• Capture svake opadajuće ivice
• Capture svake rastuće ivice
• Capture svake 4te rastuće ivice
• Capture svake 16te rastuće ivice
• Capture svake rastuće i opadajuće ivice. Ovi jednostavni ulazni Input Capture
modovi su konfigurisani odgovarajućim bitovima ICM<2:0> (ICxCON<2:0>).

12.1.1 CAPTURE PRESCALER


Postoji 4 ulaznih capture prescaler podešenja, specificiranih bitovima ICM<2:0>
(ICxCON<2:0>). Kad god je capture kanal isključen, prescaler brojač će biti
ispražnjen. Takodje, svaki Reset će isprazniti prescaler brojač.

12.1.2 CAPTURE BUFFER rad


Svaki capture kanal ima asociran FIFO buffer, koji je dubine četiri 16-bitne reči.
Postoje dva statusna flega, koja omogućavaju status na FIFO bufferu:
• ICBFNE - ulazni Capture Buffer Nije Prazan
• ICOV - ulazni Capture Overflow
ICBFNE će biti setovan na prvi ulazni capture dogadjaj i ostati setovan dok svi
capture dogadjaji ne budu pročitani iz FIFO. Pošto se svaka reč čita iz FIFO, ostale
MIKROPROCESORI

reči napreduju za jednu poziciju u okviru buffera. Ukoliko se desi da je FIFO pun sa
četiri capture dogadjaja i peti se desio pre čitanja FIFO, overflow uslov će se desiti i
ICOV bit će biti setovan na logičku ‘1’. Peti capture dogadjaj je izgubljen i nije
sačuvan u FIFO. Ni jedan dodatni dogadjaj neće biti uhvaćen dok sva 4 dogadjaja
nisu pročitana iz bafera. Ako je FIFO čitanje izvršeno posle poslednjeg čitanja i ni
jedan novi dogadjaj nije primljen, čitanje će dati neodredjene rezultate.

12.1.3 TAJMER2 i TAJMER3 selekcioni mod


Svaki capture kanal može izabrati od dva tajmera za jedan time base, Tajmer2 ili
Tajmer3. Selekcija raspoloživog tajmera je ostvarena kroz SFR bit ICTMR
(ICxCON<7>). Tajmer3 je glavni tajmer raspoloživ za ulazni capture modul.

12.1.4 HALOV SENZOR MOD


Kada se ulazni capture modul setuje za hvatanje na svakoj ivici, rastućoj i
opadajućoj, ICM<2:0> = 001, sledeće operacije se izvršavaju logikom ulaznog
capture:
• ulazni fleg capture prekida je setovan na svakoj ivici, rastućoj i opadajućoj.
• Prekid bitova Capture Mod podešenja, ICI<1:0>, se ignoriše, pošto svaki capture
generiše prekid.
• Capture overflow uslov se ne generiše u ovom modu.

12.2 Ulazni Capture Rad u toku Sleep i Idle Modova


Ulazni capture dogadjaj generise budjenje ili prekid uredjaja, ako je omogućeno,
ako je uredjaj u CPU Idle ili Sleep modu.
Nezavisno od toga da li je tajmer omogućen, ulazni capture modul će se probuditi iz
CPU Sleep ili Idle moda kada se capture dogadjaj desi, ako je ICM<2:0> = 111 i bit
omogućenja prekida adresiran. Isto budjenje može generisati prekid, ako su
zadovoljeni uslovi za generisanje prekida. –Karakteristika budjenja (wake up) je
korisna kao metoda dodavanja dodatnih prekida na pinove.

12.2.1 Ulazni CAPTURE u CPU SLEEP MODU


CPU Sleep mod dozvoljava rad ulaznog capture modula sa redukovanom
funkcionalnošću. U CPU Sleep modu, ICI<1:0> bitovi ne mogu se primeniti i ulazni
capture modul može samo da radi kao spoljašnji izvor prekida.
Capture modul more biti konfigurisan za prekide samo na rastućoj ivici (ICM<2:0> =
111), kako bi ulazni modul bio korišćen dok je uredjaj u Sleep modu. Prescaler
podešenje od 4:1 ili 16:1 nije primenjivo u ovom modu.

12.2.2 Ulazni CAPTURE u CPU IDLE MODU


CPU Idle mod dozvoljava ulazni capture modul sa punom funkcionalnošću. U CPU
Idle modu, prekidački mod selektovan od strane ICI<1:0> bitova je primenjiv, kao i
4:1 i 16:1 capture prescaler podešenja, koja su definisana kontrolnim bitovima
ICM<2:0>. Ovaj mod zahteva da je omogućen selektovani tajmer. Dalje, ICSIDL bit
mora biti dodeljen logičkoj ‘0’. Ako je ulazni capture modul definisan kao ICM<2:0>
= 111 u CPU Idle modu, ulazni capture pin će služiti samo kao pin spoljnog prekida.
12.3 Ulazni Capture Prekidi
Ulazni capture kanali imaju mogućnost da generišu prekid, bazirano na odabranom
broju capture dogadjaja. Selekcioni broj je postavljen kontrolnim bitovima ICI<1:0>
(ICxCON<6:5>). Svaki kanal omogućuje bit flega prekida (ICxIF). Odgovarajući fleg
prekida capture kanala je lociran u dodeljenom IFSx Statusnom registru.
Omogućavanje prekida se ostvaruje omogućavanjem odgovarajućeg bita prekida
capture kanala (ICxIE). Bit omogićavanja prekida Capture je lociran u njemu
asociranom IEC Kontronom registru.

13.0 Izlazni Uporedni (COMPARE) MODUL


Ovaj deo opisuje Izlazni Uporedni (Output Compare) modul i asocirane radne
modove. Karakteristike omogućene ovim modulom su korisne u aplikacijama koje
zahtevaju operativne modove kao što su:
• Generisanje izlaznog pulsa promenljive širine
• Korekcija faktora snage
Slika 13-1 daje blok dijagram izlaznog uporednog modula.

Ključne radne karakteristike IU modula uključuju:


• Tajmer2 i Tajmer3 Selektivni mod
• Obični UI Match mod
• Dualni UI Match mod
• Obični PWM mod
• UI u toku Sleep i Idle modova
• Prekid na UI/PWM dogadjaj
Ovi operativni modovi su odredjeni podešavanjem odgovarajućih bitova u 16-bitnom
OCxCON SFR (gde je x = 1,2,3,...,N). dsPIC30F4011/4012 uredjaji imaju 4/2
uporedne kanale. OCxRS i OCxR na slici predstavlja dualne uporedne registre. U
dualnom uporednom modu, OCxR registar se koristi za prvo poredjenje a OCxRS
za drugo.
MIKROPROCESORI

Slika 13-1: Izlazni Uporedni mod - Blok Dijagram

Napomena: Gde je prikazano ‘x’, napravljena je referenca na registre dodeljene


odgovarajućim UI kanalima od 1 do N.

13.1 Tajmer2 i Tajmer3 Selektivni mod


Svaki UI kanal može da selektuje jedan od dva 16-bitna tajmera; Tajmer2 ili
Tajmer3. Selekcija tajmera je odredjena OCTSEL bitom (OCxCON<3>). Tajmer2 je
glavni izvor tajmera za UI modul.

13.2 Običan Uporedni Izlazni Match Mod


Kada su kontrolni bitovi OCM<2:0> (OCxCON<2:0>) = 001, 010 ili 011, selektovani
izlaz uporednog kanala se konfiguriše za jedan od tri obična UI Match moda:
• Poredjenje tera U/I pin nisko
• Poredjenje tera U/I pin visoko
• Poredjenje obrće U/I pin
OCxR registar se koristi u ovim modovima. OCxR registar se puni vrednošću i
poredi sa selektovanim inkrementalnim brojačem tajmera. Kada se desi poredjenje,
izazove se jedan od Uporednih Match modova. Ako se brojač resetuje na nulu pre
nego što dostigne vrednost u OCxR, stanje OCx pina ostaje nepromenjeno.

13.3 Dualni UI Match Mod


Kada kontrolni bitovi OCM<2:0> (OCxCON<2:0>) = 100 ili 101, selektovani izlazni
uporedni kanal se konfiguriše za jedan od dva Dualna UI moda, koji su:
• Jedinični Izlazni pulsni mod
• Kontinualni Izlazni pulsni mod

13.3.1 Jedinični Pulsni Mod


Da bi korisnik konfigurisao modul za generisanje jediničnog izlaznog pulsa, sledeći
koraci su neophodni (pod pretpostavkom da je tajmer isključen):
• Odredjivanje vremena ciklusa instrukcije TCY.
• Računanje željenog pulsa sa vrednošću baziranom na TCY.
• Računanje vremena do početnog pulsa od početne vrednosti pulsa 0x0000.
• Početak i završetak pisanja širine pulsa u OCxR i OCxRS uporedne registre (x
znači kanale 1, 2, ...,N).
• Podešenje perioda registra tajmera na vrednost koja je jednaka, ili veća od
vrednosti u OCxRS uporednim registrima.
• Setovanje OCM<2:0> = 100.
• Omogućenje tajmera, TON (TxCON<15>) = 1.
Da bi se inicirao još jedan puls, treba izdati još jednu naredbu da bi se postavilo
OCM<2:0> = 100.

13.3.2 Kontinualni Pulsni Mod


Da bi korisnik konfigurisao modul za generisanje kontinualnog toka izlaznih
pulseva, potrebni su sledeći koraci:
• Odredjivanje vremena ciklusa instrukcija TCY.
• Računanje željene vrednosti pulsa bazirane na TCY.
• Računanje širine pulsa tajmera do početka od početne vrednosti tajmera 0x0000.
• Upisivanje vremena početka i završetka tajmera pulsne širine u OCxR i OCxRS (x
znači kanale 1, 2, ...,N) uporedne registre, respektivno.
• Podešavanje vremena registra tajmera na vrednost koja je jednaka ili veća od
vrednosti OCxRS uporednih registra.
• Postavljanje OCM<2:0> = 101.
• Omogućavanje tajmera, TON (TxCON<15>) = 1.

13.4 Obični PWM Mod


Kada su kontrolni bitovi OCM<2:0> (OCxCON<2:0>) = 110 ili 111, selektovani
izlazni uporedni kanal je konfigurisan za PWM mod rada. Tada je OCxR glavni latch
(read only) i OCxRS je sekundarni latch. Ovo omogućava glitchless PWM tranziciju.
Korisnik izvršava sledeće korake da bi konfigurisao izlazni uporedni modul za PWM
rad:
1. Postavljanje PWM perioda upisivanjem u odgovarajuće registre perioda.
2. Postavljanje PWM ciklusa dužnosti upisivanjem u OCxRS registar.
3. Konfigurisanje izlaznog uporednog modula za PWM rad.
4. Postavljanje TMRx vrednosti prescalera i omogućavanje Tajmera, TON
(TxCON<15>) = 1.

13.4.1 Zaštita ulaznog pina za PWM


Kada su kontrolni bitovi OCM<2:0> (OCxCON<2:0>) = 111, selektovani izlazni
uporedni kanal je ponovo konfigurisan za PWM mod rada, sa dodatnom
karakteristikom za zaštitu ulaznog pina. Dok ste u ovom modu, ako se detektuje
logička 0 na OCFA/B pinu, odgovarajući PWM izlazni pin se smešta u ulazno stanje
visoke impedanse. OCFLT bit (OCxCON<4>) indicira da li se desilo stanje kvara
(FAULT). Ovo stanje će biti održavano dok se ne dese oba dogadjaja koja slede:
MIKROPROCESORI

• Spoljni FAULT uslov je uklonjen.


• PWM mod se ponovo omogućio pisanjem u odgovarajuće kontrolne bitove.

13.4.2 PWM PERIOD


PWM period se specificira upisivanjem u PRx registar.
PWM period se može izračunati korišćenjem jednačine 13-1.

Jednačina 13-1: PWM PERIOD


PWM frekvencija se definiše kao 1 / [PWM period].
PWM period = [(PRx) + 1] • 4 • TOSC •
(TMRx prescale vrednost)

13.5 Izlazni Uporedni Rad u toku CPU Sleep Moda


Kada CPU udje u Sleep mod, svi interni taktovi se zaustavljaju. Zato, kada CPU
udje u stanje Sleep, izlazni uporedni kanal će odvesti pin u aktivno stanje koje je
zabeleženo pre ulaska u Sleep. Npr, ako je pin bio setovan visoko kada CPU ušao
u Sleep stanje, pin će ostati visoko. Isto tako, ako je bio postavljen nisko, ostaće
takav. U svakom slučaju, izlazni uporedni modul će nastaviti rad kada se uredjaj
probudi.

13.6 Izlazni Uporedni Rad u toku CPU Idle Moda


Kada CPU udje u Idle mod, ilzazni uporedni modul može da radi sa punom
funkcionalnošću. UI kanal će raditi u toku CPU Idle moda ako je OCSIDL bit
(OCxCON<13>) na logičkoj 0 i selektovana vremenska baza (Tajmer2 ili Tajmer3)
je omogućena i TSIDL bit selektovanog tajmera je setovan na logičku 0.
Kada je selektovani TMRx jednak svom odgovarajućem periodičnom registru, PRx,
sledeća 4 dogadjaja će se desiti na narednom inkrewmentu ciklusa:
• TMRx je ispražnjen.
• OCx pin je setovan.
- Izuzetak 1: Ako je PWM ciklus 0x0000, OCx pin će ostati nisko.
- Izuzetak 2: Ako je ciklus veći od PRx, pin će ostati visoko.
• PWM ciklus se prebacuje iz OCxRS u OCxR.
• odgovarajući fleg prekida se setuje.
Pogledati sliku 13-1 za ključna poredjenja PWM perioda. Tajmer3 je naveden na
slici radi pojašnjenja.

13.7 Izlazni Uporedni Prekidi


UI kanali imaju sposobnost da generišu prekid na uporednom match-u, za bilo koji
Match mod koji je selektovan.
Za sve modove osim PWM, kada se desi dogadjaj poredjenja, odgovarajući fleg
prekida (OCxIF) se adresira i prekid će biti generisan, ako je omogućen. OCxIF bit
je lociran u odgovarajućem FS Status registru, i mora biti ispražnjen softverski.
Prekid je omogućen preko odgovarajućeg bita za omogućenje uporednog prekida
(OCxIE), lociranog u odgovarajućem IEC kontrolnom registru.
Za PWM mod, kada se desi dogadjaj, odgovarajući fleg prekida tajmera (T2IF ili
T3IF) je adresiran i generisaće se prekid, ako je to omogućeno. IF bit je lociran u
IFS0 Statusnom registru, i mora biti softverski ispražnjen. Prekid je omogućen
preko odgovarajućeg bita za omogućavanje prekida tajmera (T2IE ili T3IE),
lociranog u IEC0 kontrolnom registru. Izlazni uporedni fleg prekida nikada nije
setovan u toku PWM rada.
MIKROPROCESORI

Slika 13-2: PWM izlazni tajming

Period

Duty ciklus

TMR=PR3 TMR=PR3
T3IF=1 T3IF=1
TMR3 = Duty ciklus (OCxR)
(fleg prekida) (fleg prekida)
OCxR=OCxRS OCxR=OCxRS

TMR3 = Duty ciklus (OCxR)


14.0 Interfejs Modula Kvadratnog Enkodera (QEI)

Ovaj deo opisuje Interfejs Modula Kvadratnog Enkodera (QEI) i njegovih modova
rada. QEI modul omogućava interfejsu da inkrementira enkodere da bi se dobila
mehanička pozicija podataka.

Radne karakteristike QEI uključuju:


• Tri ulazna kanala za dvofazne signale i indeksi puls
• 16-bitni gore/dole brojač pozicije
• Status pravca brojača
• Merenje pozicije(x2 i x4) moda
• Programabilni digitalni filteri šuma na ulazu
• Alternativni 16-bitni Tajmer/Brojač mod
• Kvadratni prekid interfejsa enkodera
Ovi radni modovi se odredjuju podešenjem odgovarajućih bitova QEIM<2:0>
(QEICON<10:8>). Slika 14-1 daje blok dijagram interfejsa kvadratnog enkodera.
MIKROPROCESORI

Slika 14-1: BLOK DIJAGRAM INTERFEJSA KVADRATNOG ENKODERA

Napomena: U dsPIC30F4011/4012, UPDN pin nije na raspolaganju. Gore/Dole


logički bit i dalje može biti pozvan softverski.

14.1 Logika Interfejsa Kvadratnog Enkodera


Tipični inkrementalni (ili optički) enkoder ima tri izlaza: Faza A, Faza B, i indeksi
puls. Ovi signali su korisni i često potrebni u kontroli brzine i pozicije ACIM i SR
motora. Dva kanala, Faza A (QEA) i Faza B (QEB), imaju jedinstven odnos. Ako
faza A vodi fazu B, onda je pravac (motora) pozitivan ili ide unapred. Ako faza A
čeka fazu B, onda je pravac negativan ili ide unazad. Treći kanal, nazvan indeksi
puls, desi se jednom pri obrtu i koristi se kao referenca da bi se utvrdila apsolutna
pozicija. Indeksiranje pulsa daje nad fazom A i B, oba nisko.

14.2 16-bitni Gore/Dole Brojač pozicije


16-bitni Gore/Dole Brojač pozicije broji gore ili dole na svaki puls, koji se generiše
razlikom ulaznih signala faze A i B. Brojač radi kao integrator čija vrednost jeste
proporcionalna poziciji. Pravac brojanja je odredjen UPDN signalom, koji generiše
logika interfejsa kvadratnog enkodera.

14.2.1 Provera pozicije greške brojača (COUNTER ERROR CHECKING)


Ova mogućnost je data za i indicirana bitom CNTERR (QEICON<15>). Provera
greške je moguća samo kada je pozicija brojača konfigurisana za Reset u
Indeksnom Pulsnom modu (QEIM<2:0> = ‘110’ il ‘100’). U ovim modovima, sadržaj
registra POSCNT se poredi sa vrednošću (0xFFFF ili MAXCNT+1, u zavisnosti od
pravca). Ako se detektuju ove vrednosti, generiše se uslov greške podešavanjem
CNTERR bita i generiše brojač prekida greške QEI. QEI prekid može biti
onemogućen podešenjem CEID bita (DFLTCON<8>). Pozicija brojača nastavlja da
broji ivicu enkodera po opažanju greške. POSCNT registar nastavlja da broji
gore/dole do prirodnog povratka (rollover/underflow). Ni jedan prekid se ne generiše
za ovaj dogadjaj. CNTERR bit je čitaj/piši i korisnik ga resetuje softverski.

14.2.2 RESET pozicije brojača


Bit za omogućavanje reseta pozicije brojača, POSRES (QEI<2>) kontroliše da li je
brojač pozicije resetovan kada se detektuje indeksni puls. Ovaj bit je primenjiv
samo kada QEIM<2:0> = ‘100’ ili ‘110’. Ako je POSRES bit ‘1’, tada se brojač
pozicije resetuje pri detektovanju indeksnog pulsa. Ako je POSRES bit ‘0’, tada se
brojač pozicije ne resetuje pri detektovanju indeksnog pulsa. Brojač pozicije će
nastaviti da broji gore ili dole, i resetovaće na rollover ili underflow uslov. Kada se
selektuje INDX signal da resetuje poziciju (POSCNT), korisnik mora da specificira
stanja na ulaznim QEA i QEB pinovima. Ova stanja moraju da odgovaraju kada se
desi reset. Ona se selektuju IMV<1:0> bitom u DFLTCON <10:9> registru.
IMV<1:0> (Index Match Value) bit dozvoljava korisniku da specificira stanja QEA i
QEB ulaznih pinova u toku Index pulsa kada POSCNT se resetuje registar.
U 4X kvadratnom brojačkom modu:
IMV1 = zahtevano stanje ulaznog signala faze B za odgovarajući indeksni puls
IMV0 = zahtevano stanje ulaznog signala faze A za odgovarajući indeksni puls
U 2X kvadratnom brojačkom modu:
IMV1 = selektuje fazu ulaznog signala za Index state match (0 = faza A, 1 = faza B)
IMV0 = traženo stanje selektovane faze ulaznog signala za odgovarajući indeksni
puls
Prekid se i dalje generiše na detektovanju indeksnog pulsa a ne na brojaču pozicije
overflow/underflow.

14.2.3 Status Pravca Brojanja


Kao što je prethodno pomenuto, QEI logika generiše UPDN signal, bazirano na
odnosu izmedju faze A i faze B. U dodatku na ulazni pin, stanje ovog UPDN signala
se dostavlja SFR bitu UPDN (QEICON<11>) kao read only bit.

Napomena: QEI pinovi su multipleksirani analognim ulazima. Korisnik mora biti


siguran da su svi QEI asocirani pinovi postavljeni kao digitalni ulazi u ADPCFG
registar.
MIKROPROCESORI

14.3 Mod Merenja Pozicije


Postoje dva moda merenja, x2 i x4. Ovi modovi se selektuju QEIM<2:0> bitovima
za selekciju moda koji su locirani u SFR QEICON<10:8>. Kada su kontrolni bitovi
QEIM<2:0> = 100 i 101, x2 mod merenja je selektovan i QEI logika gleda samo na
ulaz faze A input za poziciju inkrementalnog brojača. Svaka rastuća i opadajuća
ivica signala faze A izaziva poziciju brojača da inkrementira ili dekrementira. Signal
faze B i dalje služi za odredjivanje pravca brojanja, isto kao i u x4 modu. U okviru x2
moda merenja, postoje dve varijacije kako se može resetovati pozicija:
1. Pozicija brojača se resetuje detekcijom indeksnog pulsa, QEIM<2:0> = 100.
2. Pozicija brojača se detektuje poredjenjem sa MAXCNT, QEIM<2:0> = 101.
Kada su kontrolni bitovi QEIM<2:0> = 110 ili 111, x4 mod merenja je selektovan i
QEI logika gleda na obe ivice faze A i B ulaznih signala.
Svaka ivica oba signala izaziva poziciju brojača da inkrementira ili dekrementira.
U okviru x4 moda merenja, postoje dve varijacije kako se pozicija brojača može
restovati:
1. resetovanje detekcijom indeksnog pulsa, QEIM<2:0> = 110.
2. resetovanje poredjenjem sa MAXCNT, QEIM<2:0> = 111.
x4 mod merenja omogućava finiju rezoluciju podataka (više brojanja pozicije).

14.4 Programabilni digitalni filteri šuma


Ovaj filter je zadužen za odbacivanje šuma na dolaznom signalu ili kvadratnom
signalu. Schmitt Trigger ulazni filter i trotaktno kašnjenje ciklusa kombinuju se da bi
odbacili šum niskog nivoa i velike glasne skokove koji se obično dešavaju u
aplikacijama sklonim šumu kao što su sistemi sa motorima. Filter omogućava filter
da isfiltrirani izlazni signal ne može da se promeni dok stabilna vrednost nije
registrovana u 3 redom ciklusa takta. Za QEA, QEB i INDX pinove, takt deli
frekvenciju za digitalni filter programira se bitom QECK<2:0> (DFLTCON<6:4>) i
izvodi se iz baznog ciklusa instrukcije TCY. Da bi se omogućio izlaz filtera za
kanale QEA, QEB i INDX, QEOUT bit mora biti ‘1’. Mreža filtera za sve kanale je
onemogućena na POR i BOR.
14.6 Rad modula QEI tokom Sleep režima CPU-a

14.6.1. RAD MODULA QEI TOKOM SLEEP REŽIMA CPU-A

QEI modul će biti u zastoju tokom Sleep režima CPU-a

14.6.2 RAD TAJMERA TOKOM SLEEP REŽIMA CPU-A

Tokom Sleep režima CPU-a, tajmer neće raditi, budući da su unutrašnji klokovi
(taktovi) isključeni.
Primedba: promena režima rada (npr. od QEI na Tajmer ili obratno) neće dotaći
sadržaj registra brojača tajmera/pozicije (Timer/Position Count Register)
Primedba: Ovaj tajmer ne podržava režim eksternog asinhronog brojanja (External
Asynchronous Counter mode). Korišćenjem eksternog izvora takta, takt će se
automatski sinhronizovati na interni instrukcijski takt.
14.7 Rad modula QEI tokom Idle (praznog) režima CPU-a

Kako QEI modul može da funkcioniše kao interfejs za kvadraturni enkoder, ili kao
16-bitni tajmer, sledeći odeljak opisuje rad modela u oba režima.

14.7.1 RAD MODULA QEI TOKOM IDLE REŽIMA CPU-A

Kada se CPU postavi u Idle (doslovno: prazan hod) režim, modul QEI će raditi
ukoliko je QEISIDL bit (QEICON<13>) = 0. Ovaj bit po defaultu se nalazi na logičkoj
‘0’ po izvršenju POR i BOR. Za zaustavljanje modula QEI tokom Idle režima,
QEISIDL treba setovati i postaviti na ‘1’.

14.7.2 RAD TAJMERA TOKOM IDLE REŽIMA CPU-A

Kada se CPU postavi u Idle (doslovno: prazan hod) režim, modul QEI će biti
konfigurisan na 16-bitni tajmerski režim. 16-bitni tajmer će raditi ako je QEISIDL bit
(QEICON<13>) = 0. Ovaj bit po defaultu se nalazi na logičkoj ‘0’ po izvršenju POR i
BOR. Za zaustavljanje modula tajmera tokom Idle režima, QEISIDL treba setovati i
postaviti na ‘1’. Ako se QEISIDL bit očisti, tajmer će funkcionisati normalno, kao da
se nije ni ulazilo u Idle režim CPU-a.

14.8 Prekidi inferfejsa kvadraturnog enkordera

Inferfejs kvadraturnog enkordera ima sposobnost da generiše prekid prilikom


pojave sledećih događaja:

• Prekid na 16-bitnom dvosmernom brojaču pozicija rollover/underflow


• Detekcija kvalifikovanog indeksnog impulsa, ili kada je setovan CNTERR bit
• Period tajmera se poklapa sa događajem (overflow/underflow)
• Događaj akumulacije na gejtu

Bit flega prekida QEI, QEI Interrupt Flag bit, QEIIF, je asertovan kada se dogodi bilo
koji od prethodno navedenih događaja. QEIIF bit mora biti softverski ošičćen. QEIIF
se nalazi unutar IFS2 Statusnog registra. Omogućavanja prekida se vrši putem
respektivnog bita omogućavnja prekida (Enable bit), QEIIE. QEIIE bit se nalazi
unutar IEC2 upravljačkog registra.

15.0 PWM MODUL ZA UPRAVLJANJE MOTOROM

Ovaj modul pojednostavljuje zadatak generisanja višestrukog, sihronizovanog


izlaza Pulse Width Modulated (PWM). PWM modul posebno podržava sledeće
primene na upravljanje snagom i kretanjem.

• Trofazni naizmenični indukcioni motor


• Motor sa prekidnom reluktansom / Switched Reluctance (SR) Motor
• Motor bez četkica / Brushless DC (BLDC) Motor
MIKROPROCESORI

• Neprekidni izvor napajanja / Uninterruptible Power Supply (UPS)

PWM modul ima sledeće karakteristike:


• 6 PWM I/O pinovi sa 3 generatora duty ciklusa
• Rezoluciju do 16 bita
• ‘On-the-Fly’ PWM promene frekvencija
• Režimi ivičnog i centralnog uravnanja izlaza / Edge and Center Aligned Output
modes
• Režim generisanja jednog impulsa/ Single Pulse Generation mode
• Podrška prekidima za asimetrično ažuriranje u režimu centralnog uravnanja /
Interrupt support for asymmetrical updates in Center Aligned mode
• Upravljanje premošćenjem izlaza za rad električnog komutativnog motor / Output
override control for Electrically Commutative Motor (ECM) operation
• Komparator "specijalnih događaja" za obradu drugih perifernih događaja
• FAULT pinovi da bi se opciono pobuđivao svaki od PWM izlaznih pinova na
definisano stanje
Ovaj režim sadrži 3 generatora duty ciklusa, označenih brojevima od 1 do 3. Modul
ima 6 PWM izlaznih pinova, označenih oznakama od PWM1H/PWM1L do
PWM3H/PWM3L
Šest I/O (ulazno-izlaznih) pinova su grupisani u parove, po tome da li imaju velike ili
male brojeve, i to označeno sufiksima H ili L, respektivno.

Za komplementarno učitavanje, donji (niski, low) PWM pinovi uvek odgovaraju


komplementima odgovarajućih gornjih (visokih, high) I/O pinova. PWM modul
omogućava nekoliko režima rada koji su pogodni za specifične aplikacije
upravljanja snagom.
Slika 15-1: PWM MODUL BLOK DIJAGRAM

15.1 PWM Vremenska baza

PWM vremenska baza je obezbeđena putem 15-bitnog tajmera sa preskalerom i


postskalerom. Vremenskoj bazi se pristupa putem PTMR SFR. PTMR<15> je
MIKROPROCESORI

statusni bit Read Only, PTDIR, koji indicira tekući smer brojanja PWM vremenske
baze. Ako je PTDIR nula, PTMR broji nagore. Ako je PTDIR setovan, PTMR broji
nadole. PWM vremenska baza se konfiguriše putem PTCON SFR. PWM
vremenska baza se aktivira/deaktivira setovanjem/resetovanjem PTEN bita u
PTCON SFR. PTMR se ne resetuje, a PTEN bit se resetuje softverski. PTPER SFR
postavlja period brojanja za PTMR. Korisnik mora da upiše 15-bitnu vrednost u
PTPER<14:0>. Kada se vrednost u PTMR<14:0> poklopi sa vrednošću u
PTPER<14:0>, vremenska baza će se ili resetovati na 0, ili će obrnuti smer brojanja
na sledećem taktnom ciklusu. Koja će se akcija preduzeti, zavisi od režima rada
vremenske baze. PWM vremenska baza se može konfigurisati na 4 različita režima
rada:
• Režim slobodnog rada
• Single Shot režim
• Režim kontinualnog brojanja nagore/nadole
• Režim kontinualnog brojanja nagore/nadole sa prekidima za dvostruko ažuriranje

Ova 4 režima rada se selektuju pomoću PTMOD<1:0> bita u PTCON SFR. Režim
kontinualnog brojanja gore/dole i Režim kontinualnog brojanja nagore/nadole sa
prekidima za dvostruko ažuriranje podržavaju generisanje PWM-a sa centriranim
uravnavanjem. Single Shot režim omogućava PWM modulu da podržava
upravljanje taktom (impulsom) izvesnih električnih komutativnih (Electronically
Commutative Motors (ECM)).
Signali prekida koje generiše PWM vremenska baza zavise od odabira selekcionih
bita režima (PTMOD<1:0>) i bita postskalera (PTOPS<3:0>) u PTCON SFR.
Primedba: Ako je registar perioda postavljen na 0x0000, tajmer će prestati da broji,
neće biti generisan ni prekid ni triger specijalnog događaja, čak ni kada je vrednost
specijalnog događaja takođe 0x0000. Modul neće ažurirati registar perioda, ako je
on već na 0x0000; stoga, korisnik mora da deaktivira modul da bi ažurirao registar
perioda.
15.1.1 REŽIM SLOBODNOG RADA

U režimu slobodnog rada PWM vremenska baza broji nagore sve dok se vrednost u
registru perioda vremenske baze, Time Base Period register (PTPER), ne poklopi.
PTMR registar se resetuje na sledećoj ulaznoj ivici ulaznog takta a vremenska baza
će nastaviti da broji naviše sve dok PTEN bit ostaje setovan. Kada je PWM
vremenska u režimu slobodnog rada (PTMOD<1:0> = 00), događaj prekida se
generiše svaki put kada se desi poklapanje sa PTPER registrom i tada se PTMR
registar resetuje. Biti selekcija postskalera mogu se koristiti u ovom režimu tajmera
da bi redukovali učestalost događaja prekida.

15.1.2 SINGLE SHOT REŽIM

U režimu Single Shot brojanja, PWM vremenska baza počinje da broji kada je bit
PTEN setovan. Kada se vrednost u PTMR registru poklopi PTPER registrom,
PTMR registar se resetuje na sledećoj ulaznoj ivici ulaznog takta a PTEN bit će biti
resetovan hardverski da bi se zadržala vremenska baza. Kada je PWM vremenska
baza u režimu Single Shot brojanja (PTMOD<1:0> = 01), događaj prekida se
generiše svaki put kada se desi poklapanje sa PTPER registrom i tada se PTMR
registar resetuje na sledećoj ulaznoj ivici ulaznog takta i PTEN bit će biti resetovan.
Biti selekcija postskalera nemaju nikakva uticaj u ovom režimu tajmera.

15.1.3 KONTINUALNI REŽIMI BROJANJA NAGORE/NADOLE

Kod režima kontuinualnog brojanja nagore/nadole, PWM vremenska baza broji


nagore sve dok se vrednost u registru perioda vremenske baze, Time Base Period
register (PTPER), ne poklopi. Tajmer će početi da broji nadole na sledećoj ivici
ulaznog takta. PTDIR bit u PTCON SFR je read-only i označava smer brojanja.
PTDIR bit je setovan kada tajmer broji nadole.
Kod režima kontuinualnog brojanja nagore/nadole (PTMOD<1:0> = 10), događaj
prekida se generiše svaki put kada vrednost PTMR registra postane 0 i kada PWM
vremenska baza počne da broji unapred. Biti selekcija postskalera mogu se koristiti
u ovom režimu tajmera da bi redukovali učestalost događaja prekida.

15.1.4 REŽIM DVOSTRUKOG AŽURIRANJA

U režimu dvostrukog ažuriranja (PTMOD<1:0> = 11), događaj prekida se generiše


svaki put kada vrednost PTMR registra postane 0, kao i kada se poklope periodi.
Biti selekcija postskalera nemaju nikakva uticaj u ovom režimu tajmera. Režim
dvostrukog ažuriranja omogućava korisniku dve dodatne funkcije. Prvo, pojas
upravljačke petlje je udvostručen zbog toga što PWN duty ciklusi mogu biti ažurirani
dvaput u toku jednog perioda. Drugo, mogu se generisati asimetrični centralno
uravnati PWM talasni oblici, koji su korisni za minimizaciju izobličenja izlaznih
talasnih oblika u izvesnim aplikacijama kojima upravlja motor.

15.1.5 PRESKALER PWM VREMENSKE BAZE

Ulazni takt ka PTMR (FOSC/4), ima opciju preskaliranja od 1:1, 1:8, 1:64, i 1:256,
što selektuju kontrolni biti PTCKPS<1:0> u PTCON SFR. Brojač preskalera se čisti
svaki put kada se desi nešto od sledećeg:
• upis u registar PTMR
• upis u PTCON registar
• Reset bilo kog uređaja

PTMR registar nije očišćen kada se upisuje u PTCON.

15.1.6 POSTSKALER PWM VREMENSKE BAZE


Preslikani izlazni takt iz PTMR ima opciju 4-bitnog postskaliranja od 1:1 do 1:16.
Brojač postskalera se čisti (resetuje) svaki put kada se desi nešto od sledećeg:
• upis u registar PTMR
• upis u PTCON registar
• Reset bilo kog uređaja
PTMR registar nije očišćen kada se upisuje u PTCON.
MIKROPROCESORI

15.2 PWM Period

PTPER je 15-bitni registar i koristi se za period brojanja za PWM vremensku bazu.


PTPER je dvostruko baferovani registar. Sadržaji PTPER bafera se učitavaju u
PTPER registar u sledećim trenucima:
• Režimi slobodnog rada i Single Shot režim: Kada je PTMR registar resetovan na
0, posle poklapanja sa PTPER registrom.
• Režim brojanja nagore/nadole: Kada je PTMR registar nula.
Vrednost koja se čuva u PTPER baferu je automatski učitana u PTPER registar
kada je PWM vremenska baza deaktivirana (PTEN = 0).
Primedba: Programiranje vrednosti 0x0001 u registru perioda može da generiše
kontinualni impuls prekida, i stoga se mora izbegavati.
PWM period se može odrediti korišćenjem Jednačine 15.1.:

JEDNAČINA 15.1.: PWM PERIOD

If the PWM time base is configured for one of the Up/Down Count modes, the PWM
period will be twice the value provided by Equation 15-1.
The maximum resolution (in bits) for a given device oscillator and PWM frequency
can be determined using Equation 15-2:
Ako je PWM vremenska baza konfigurisana za jedan od režima kontuinualnog
brojanja nagore/nadole, PWM period će biti dvostruko veći od vrednosti koju
dobijamo Jednačinom 15.1.
Maksimalna rezolucija (u bitima) za dati oscilator uređaja i PWM frekvenciju može
biti određena Jednačinom 15.2.

JEDNAČINA 15.2.: PWM REZOLUCIJA

15.3 Ivično uravnati PWM

Ivično uravnati PWM signali se dobijaju pomoću modula kada je PWM vremenska
baza u Režimu slobodnog rada ili Single Shot režimu. Za ivično uravnate PWM
izlaze, izlaz ima period koji je određen vrednošću u PTPER a duty ciklus je određen
odgovarajućom vrednošću u registru duty ciklusa (Vidi Sliku 15.2.). Izlaz PWM-a je
aktivno pobuđen na početku perioda (PTMR = 0) a neaktivan je kada se vrednost u
registru duty ciklusa poklopi sa PTMR.
Ako je vrednost određenog registra duty ciklusa jednaka nuli, tada je izlaz na
odgovarajućem PWM pinu neaktivna za celi PWM period. Kao dodatak, izlaz na
PWM pinu biće neaktivan za ceo PWM period ako je vrednost registra duty ciklusa
veća nego vrednost koja se čuva u PTPER registru.
TPWM =TCY • (PTPER + 1)
(PTMR Preskalirana Vrednost)
Rezolucija = log (2 • TPWM / TCY)
log (2)
SLIKA 15.2.: IVIČNO URAVNATI PWM

Novi Duty ciklus uravnat

PTPER

PTMR
vrednost

Duty ciklus

Period

15.4. Centralno uravnati PWM

Ivično uravnati PWM signali se dobijaju pomoću modula kada je PWM vremenska
baza u Režimu slobodnog rada ili Single Shot režimu. Za ivično uravnate PWM
izlaze, izlaz ima period koji je određen vrednošću u PTPER, a duty ciklus je
određen odgovarajućom vrednošću u registru duty ciklusa (Vidi Sliku 15.2.). Izlaz
PWM-a je doveden u aktivno stanje na početku perioda (PTMR = 0) a neaktivan je
kada se vrednost u registru duty ciklusa poklopi sa PTMR.
Ako je vrednost određenog registra duty ciklusa jednaka nuli, tada je izlaz na
odgovarajućem PWM pinu neaktivna za celi PWM period. Kao dodatak, izlaz na
PWM pinu biće neaktivan za ceo PWM period ako je vrednost registra duty ciklusa
veća nego vrednost koja se čuva u PTPER registru.
TPWM =TCY • (PTPER + 1)
(PTMR Preskalirana Vrednost)
Rezolucija = log (2 • TPWM / TCY)
log (2)

Centralno uravnati PWM signali se dobijaju pomoću modula kada je PWM


vremenska baza u Režimu slobodnog rada (vidi Sliku 15.3.). Izlaz PWM-a je
doveden u aktivno stanje kada se vrednost registra duty ciklusa poklopi sa PTMR i
onda PWM vremenska baza broji unazad (PTDIR = 1). Izlaz PWM-a je neaktivan
MIKROPROCESORI

kada PWM vremenska baza broji unapred (PTDIR = 0) i kada se vrednost duty
ciklusa poklopi sa vrednosšću u registru PTMR.
Ako je vrednost određenog registra duty ciklusa jednaka nuli, tada je izlaz na
odgovarajućem PWM pinu neaktivna za celi PWM period. Kao dodatak, izlaz na
PWM pinu biće aktivan za ceo PWM period ako je vrednost registra duty ciklusa
jednaka vrednosti koja se čuva u PTPER registru.

SLIKA 15.3.: CENTRALNO URAVNATI PWM


Period/2

PTPER

PTMR
vrednost
Duty ciklus

Period

15.5 Jedinice za poređenje PWM Duty ciklusa

Postoje 3 specijalna 16-bitna funkcijska registra (PDC1, PDC2 i PDC3) koji se


koriste da bi odredili vrednosti duty ciklusa za PWM modul. Vrednost u svakom
registru duty ciklusa određuje količinu vremena tokom koga je izlaz PWM-a ju
aktivnom stanju. Registri duty ciklusa su 16 bita široki. LSb bit registra duty ciklusa
određuje da li je se ivica PWM-a događa na početku. Na taj način je rezolucija
PWM-a efektivno udvostručena.

15.5.1 BAFERI REGISTARA DUTY CIKLUSA

Tri registra duty ciklusa PWM su dvostruko baferovani da bi omogućili ažuriranje


PWM izlaza bez gličeva. Za svaki duty ciklus, postoji registar duty ciklusa kojem
korisnik može pristupiti i drugi registar duty ciklusa koji čuva trenutnu poredbenu
vrednost koja se koristi u tekućem PWM periodu. Za ivično uravnate PWM izlaze,
nova vrednost duty ciklusa biće ažurirana kada god se poklopi sa PTPER registrom
i kada je PTMR resetovan. Sadržaj bafera duty ciklusa se automatski učitava u
registre duty ciklusa, kada je PWM vremenska baza deaktivirana (PTEN = 0) i UDIS
bit je resetovan u PWMCON2. Kada je PWM vremenska baza u režimu brojanja
nagore/nadole, ažuriraju se nove vrednosti duty ciklusa kada je vrednost PTMR
registra nula i PWM vremenska baza počinje da broji unapred. Sadržaj bafera duty
ciklusa se automatski učitava u registre duty ciklusa, kada je PWM vremenska baza
deaktivirana (PTEN = 0).
Kada je PWM vremenska baza u režimu brojanja nagore/nadole sa dvostrukim
ažuriranjem, ažuriraju se nove vrednosti duty ciklusa kada je vrednost PTMR
registra nula, i kada se vrednost PTMR registra poklopi sa vrednošću u PTPER
registru. Sadržaj bafera duty ciklusa se automatski učitava u registre duty ciklusa,
kada je PWM vremenska baza deaktivirana (PTEN = 0).

15.6 Komplementarni režim rada PWM

U komplementarnom režimu rada PWM-a, svaki par izlaza iz PWM-a se dobija


putem komplementarnog PWM signala. Može se eventualno ubaciti i mrtvo vreme
tokom svičovanja servisa, kada su oba izlaza neaktivna u toku kratkog vremenskog
perioda. (Pogledati Odeljak 15.7). U komplementarnom režimu rada, jedinice za
upoređivanje duty ciklusa su dodeljene izlazima PWM-a na sledeći način:
• PDC1 registar upravlja PWM1H/PWM1L izlazima
• PDC2 registar upravlja PWM2H/PWM2L izlazima
• PDC3 registar upravlja PWM3H/PWM3L izlazima
Komplementarni režim rada PWM selektuje se za svaki PWM I/O par pinova
resetovanjem odgovarajućeg PMODx bita u PWMCON1 SFR. PWM I/O pinovi su
setovani na komplementarni režim rada po defaultu posle resetovanja uređaja.

15.7 Generatori mrtvog vremena

Generisanje mrtvog vremena može se obezbediti kada bilo koji od PWM I/O para
pinova radi u komplementarnom izlaznom režimu rada. Izlazi PWM-a koriste Push-
Pull pobudna kola. Zbog nemogućnosti strujnih izlaznih uređaja da se svičuju
trenutno, mora se obezbediti izvesni period vremena između događaja isključenja
jednog od izlaza PWM u komplementarnom paru i događaja uključenja drugog
tranzistora.
PWM modul omogućava da se isprogramiraju dva različita mrtva vremena. Ova dva
različita mrtva vremena mogu se iskoristiti na jedan od dva načina (dva metoda)
opisana kasnije, da bi se povećala fleksibilnost korisnika:
• Izlazni signal PWM može se optimizovati za različita vremena isključenja na
tranzistorima na niskoj i visokoj strani, na komplementarnom paru tranzistora. Prvo
mrtvo vreme se umeće između događaja isključenja nižeg tranzistora iz
komplementarnog para i događaja uključenja gornjeg tranzistora. Drugo mrtvo
vreme se umeće između događaja isključenja gornjeg tranzistora iz
komplementarnog para i događaja uključenja donjeg tranzistora.
MIKROPROCESORI

• Mogu se dodeliti dva mrtva vremena pojedinim PWM I/O parovima pinova. Ovaj
režim rada omogućava PWM modulu da pobuđuje različite kombinacije
tranzistora/opterećenja sa svakim komplementarnim PWM I/O parom pinova.

15.7.1 GENERATORI MRTVOG VREMENA

Svaki komplementarni izlazni par za PWM modul ima 6-bitni brojač unazad koji se
koristi da bi proizveo umetanje mrtvog vremena. Kao što je prikazano na Slici 15.4.,
svaka jedinica za vrtvo vreme ima detektor opadajuće i rastuće ivice koji je povezan
sa izlazom poređenja duty ciklusa.

15.7.2 RASPON MRTVIH VREMENA

Količina mrtvog vremena koju obezbeđuje jedinica mrtvog vremena selektuje se


pomoću određivanja vrednosti preskalera ulaznog takta i 6-bitne neoznačene
vrednosti. Za vrednosti preskalera ulaznog takta selekcije su omogućene da bi se
obezbedio odgovarajući raspon mrtvih vremena, zasnovan na frekvenciji na kojoj
radi uređaj. Vrednosti za preskaler takta mrtvih vremena selektuju se korišćenjem
upravljačkih bita DTAPS<1:0> u DTCON1 SFR. Može se selektovati jedna od 4
opcija za takt preskalera (TCY, 2TCY, 4TCY ili 8TCY).
Kada se selektuje vrednost preskalera, mrtvo vreme se prilagođava pomoću
učitavanja 6-bitne neoznačene vrednosti u DTCON1 SFR.
Preskaler jedinice mrtvog vremena se čisti (resetuje) kada se pojavi jedan od
sledećih događaja:
• Na učitavanju donjeg tajmera, zbog pojave ivice poređenja duty ciklusa
• Kod upisa u registar DTCON1
• Kod resetovanja uređaja
Primetiti: korisnik ne bi smeo da modifikuje vrednost DTCON1 dok PWM modul radi
(PTEN = 1). Mogu se pojaviti neočekivani rezultati.

SLIKA15.4.: DIJAGRAM TAJMINGA MRTVIH VREMENA

Duty ciklus generator

PWMxH

PWMxL

Mrtvo vreme A (Aktivno) Mrtvo vreme A (neaktivno)


15.8 Nezavisni PWM izlaz

Režim rada Nezavisnog PWM izlaza je neophodan da bi se pobudili izvesni tipovi


opterećenja. Određeni par izlaza PWM-a je u Režimu rada Nezavisnog PWM izlaza
kada je odgovarajući PMOD bit u PWMCON1 registru setovan. Ne uvodi se nikakvo
upravljanje mrtvim vremenom između susednih PWM I/O pinova kada modul radi u
nezavisnom režimu i oba I/O pina mogu da budu aktivna istovremeno.
U nezavisnom režimu, svaki generator duty ciklusa je povezan za PWM I/O pinove
u izlaznom paru. Korišćenjem asociranog registra duty ciklusa i odgovarajućih bita u
OVDCON registru, korisnik može da selektuje sledeće opcije izlaznog signala za
svaki PWM I/O pin koji radi u Nezavisnom režimu:
• Signal na izlazima I/O pinova PWM
• I/O pin neaktivan
• I/O pin aktivan

15.9 Jednoimpulsni režim rada PWM

PWM modul proizvodi jednoimpulsni izlaz kada su upravljački biti PTCON-a


PTMOD<1:0> = 10. U jednoimpulsnom režimu rada PWM mogu se proizvesti
isključivo izlazi koji su ivično poravnati. U jednoimpulsnom režimu rada PWM I/O
pin(ovi) se dovode u aktivno stanje kada je PTEN bit setovan. Kada se dogodi
poklapanje sa registrom duty ciklusa, PWM I/O pin se dovede u neaktivno stanje.
Kada se dogodi poklapanje sa registrom PTPER, PTMR registar se resetuje, svi
aktivni PWM I/O pinovi se dovode u neaktivno stanje, PTEN bit se resetuje, i
generiše se prekid.

15.10 Premošćenje PWM izlaza

Biti premošćenja PWM izlaza dozvoljavaju korisniku da manuelno podesi PWM I/O
pinove na specifična logička stanja, nezavisno od jedinica za poređenje duty
ciklusa. Svi upravljački biti asocirani sa PWM izlaznom funkcijom premošćavanja se
nalaze sadržani u registru OVDCON register. gornja polovina registra OVDCON
sadrži 6 bita, POVDxH<3:1> i POVDxL<3:1>, koji određuju koji PWM I/O pinovi će
biti premošćeni. Donja polovina registra OVDCON takođe sadrži 6 bita,
POUTxH<3:1> i POUTxL<3:1>, koji određuju stanje PWM I/O pinova kada određeni
izlaz biva premošćen putem POVD bita.

15.10.1 REŽIM KOMPLEMENTARNIH IZLAZA

Kada se PWMxL pin dovede u aktivno stanje preko registra OVDCON, izlazni signal
se silom dovodi na to da bude komplementaran sa odgovarajućim PWMxH pinom u
paru. Umetanje mrtvog vremena se još uvek vrši kada se PWM kanali premošćuju
manuelno.

15.10.2 SINHRONIZACIJA PREMOŠĆAVANJA


MIKROPROCESORI

Ako je OSYNC bit u PWMCON2 registru setovan, sva izlazna premošćaanja koja
su izvršena putem OVDCON registera se sinhronizuju na PWM vremensku bazu.
Sinhrona premošćavanja izlaza se dešavaju u sledećim vremenima:
• Režim ivičnog uravnanja, kada je PTMR nula.
• Režimi centralnog uravnanja, kada je PTMR nula i kada se vrednost PTMR
poklapa sa PTPER.

15.11. Upravljanje polaritetom i izlaz PWM-a

Postoje 3 bita konfiguracije uređaja koji su asocirani sa PWM modulom, i koji


omogućavaju upravljanje pinovima izlaza PWM-a:
• HPOL bit konfiguracije
• LPOL bit konfiguracije
• PWMPIN bit konfiguracije
Ova 3 bita u konfiguracionom registru FPORBOR (vidi Odeljak 21.) rade u
konjunkciji sa 3 bita aktivacije PWM-a (PWMEN<3:1>), koji se nalaze u PWMCON1
SFR. Biti konfiguracije i biti aktivacije PWM-a osiguravaju da PWM pinovi budu u
korektnom stanju pošto se desi resetovanje uređaja. Konfiguracijski osigurač
PWMPIN omogućava da izlazi PWM modula budu opciono aktivirani prilikom
Reseta uređaja. Ako je PWMPIN = 0, izlazi PWM-a će biti dovedeni u svoje
neaktivno stanje prilikom Reseta. Ako je PWMPIN = 1 (po defaultu), izlazi PWM-a
će biti u tri moguća stanja. HPOL bit određuje polaritet za PWMxH izlaze, dok,
LPOL bit određuje polaritet za PWMxL izlaze.

15.11.1 UPRAVLJANJE IZLAZNIM PINOVIMA

Upravljački biti PEN<3:1>H i PEN<3:1>L u PWMCON1 SFR aktiviraju svaki visoki


PWM izlazni pin i svaki niski PWM izlazni pin, respektivno. Ako određeni PWM
izlazni pin nije aktiviran, tretira se kao I/O pin opšte namene.

15.12 PIN GREŠKE PWM

Postoji jedan pin greške, FAULT pin (FLTA) asociran sa PWM modulom. Kada je
asertovan, ovi pinovi mogu biti opciono dovesti svaki od PWM I/O pinova u željeno
definisano stanje.

15.12.1 BITI AKTIVACIJE PINA GREŠKE

FLTACON SFR ima 3 upravljačka bita koja određuju da li određeni par PWM I/O
pinova treba da bude pod upravom FAULT ulaznog pina greške. Da bi se aktivirao
specifični par pinova PWM I/O za premošćenje greške, odgovarajući biti treba da
budu setovani u registru FLTACON. Ako su svi biti aktivacije očišćeni u registru
FLTACON, tada odgovarajući ulazni pin greške nema uticaja na PWM modul i pin
može biti iskorišćen kao pin opšte prekida namene ili I/O pin.
Primedba: logika pina greške može da radi nezavisno od PWM logike. Ako su svi
biti aktivacije očišćeni u registru FLTACON, tada odgovarajući ulazni pin greške
nema uticaja na PWM modul i pin može biti iskorišćen kao pin opšte prekida
namene. Pin greške ima i svoj vektor prekida, bit flega prekida i bite prioriteta
prekida koji su sa njim asocirani.

15.12.2 STANJA GREŠKE

Registar specijalnih funkcija FLTACON ima 6 bita koji određuju stanje svakog PWM
I/O pina kada je ovaj premošćen putem FAULT ulaza. Kada su ovi biti očišćeni
(resetovani), PWM I/O se dovodi u neaktivno stanje.
Ukoliko je bit setovan, PWM I/O pin će biti doveden u aktivno stanje. Aktivno i
neaktivno stanje se referenciraju na polarite definisan za svaki PWM I/O pin (HPOL
i LPOL biti upravljanja polaritetom). Poseban slučaj postoji kada se I/O par PWM
modula nalazi u Komplementarnom režimu a oba pina su programirana tako da
budu aktivna u stanju greške FAULT. PWMxH pin uvek ima prioritet u
komplementarnom režimu, tako da oba I/O pina ne mogu biti dovedena u aktivno
stanje istovremeno.

15.12.3 REŽIMI ULAZA GREŠKE

Pin ulaza greške FAULT ima dva režima rada:


• Latched režim: Kada je pin greške FAULT doveden u nisko stanje, izlazi PWM-a
će otići i u ona stanja definisana u registru FLTACON. PWM izlazi će ostati u ovom
stanju sve dok pin greške FAULT ne bude doveden u visoko stanje i odgovarajući
fleg prekida ne bude sotfverski resetovan. Kada se obe ove stvari dese, izlazi
PWM-a će se vratiti u normalni režim rada na početku sledećeg PWM ciklusa ili na
granici poluciklusa. Ukoliko se fleg prekida resetuje pre nego što se završi stanje
greške FAULT, PWM modul će čekati sve dok pin greške FAULT više nije
asertovan, da bi restaurirao izlaze.
• Režim rada od-ciklusa-do-ciklusa (Cycle-by-Cycle Mode): Kada je pin ulaza
greške FAULT doveden na nizak nivo, izlazi PWM-a ostaju u definisanom FAULT
stanju onoliko dugo koliko se FAULT pin drži na niskom nivou. Pošto se FAULT pin
dovede na visoko stanje, PWM izlazi se vraćaju na normatni režim rada na početku
sledećeg PWM ciklusa ili granici poluciklusa.
Režima rada za ulzani pin greške selektuje se korišćenjem upravljačkog bita
FLTAM u registru specijalnih funkcija FLTACON.
Pinom greške može se upravljati manuelno u softveru..

15.13 Zaključavanje ažuriranja PWM-a

Za složene primene PWM korisniku može biti neophodno da upiše do 3 registara


duty ciklusa i registar vremenske baze, PTPER, u zadatom vremenu. U nekim
aplikacijama, važno je da se u sve bafer registri izvrši upis pre nego što se učita
novi duty ciklus i vrednosti perioda i pre nego što modul počne da ih koristi.
Zaključavanje ažuriranja PWM-a je karakteristika koja aktivira postavljanje na 1
upravljačkog bita UDIS u PWMCON2 SFR. UDIS bit utiče na sve bafer registre duty
MIKROPROCESORI

ciklusa i bafer perioda PWM vremenske baze, PTPER. Nikakva promena duty
ciklusa ili vrednosti perioda neće imati nikakav uticaj sve dok je UDIS = 1.

15.14 Triger specijalnih događaja PWM

PWM modul ima triger specijalnih događaja koji omogućava da A/D konverzije budu
sinhronizovane sa PWM vremenskom bazom. Vreme A/D semplovanja i konverzije
može biti isprogramirano tako da se desi na bilo kojoj tački unutar PWM perioda.
Triger specijalnih događaja PWM omogućava korisniku da minimizira kašnjenje
između vremena kada se dobiju rezultati A/D konverzije i vremena kada se ažurira
vrednost duty ciklusa. Triger specijalnih događaja PWM ima SFR po imenu
SEVTCMP, i 5 upravljačkih bita da upravlja svojim radom. Vrednost PTMR za koju
triger specijalnih događaja PWM treba da reaguje je učitana u SEVTCMP registar.
Kada je PWM vremenska baza u režimu brojanja nagore/nadole, potreban je i
dodatni upravljački bit da bi specificirao fazu brojanja za triger specijalnih događaja.
Faza brojanja se selektuje korišćenjem upravljačkog bita SEVTDIR u SEVTCMP
SFR. Ako je SEVTDIR bit resetovan, triger specijalnih događaja će reagovati
prilikom ciklusa brojanja unapred na PWM vremenskoj bazi. Ako je SEVTDIR bit
setovan, triger specijalnih događaja će reagovati prilikom ciklusa brojanja unazad
na PWM vremenskoj bazi. Upravljački biti SEVTDIR nemaju uticaja osim ukoliko
PWM vremenska baza nije konfigurisana tako da radi u režimu brojanja
nagore/nadole.

15.14.1 POSTSKALER TRIGERA SPECIJALNIH DOGAĐAJA


Triger specijalnih događaja PWM ima postskaler koji omogućava skaliranje u
razmeri 1:1 do 1:16. Postskaler je konfigurisan tako što se upisuju SEVOPS<3:0>
upravljački biti u PWMCON2 SFR.
Postskaler trigera specijalnih događaja PWM se resetuje kada se desi nešto od
navedenog:
• Bilo kakav upis u registar SEVTCMP
• Reset bilo kog uređaja

15.15 Rad PWM tokom Sleep režima CPU-a

Ulazni pin FAULT A ima sposobnost da probudi CPU iz Sleep režima. PWM modul
generiše prekid ako je pin greške FAULT doveden na niski nivo tokom Sleep
režima. is

15.16 Rad PWM tokom Idle režima CPU-a

PTCON SFR sadrži upravljački bit PTSIDL. Ovaj bit određuje da li će PWM modul
will nastaviti da radi ili će se zaustaviti kada uređaj uđe u Idle režim. Ako je PTSIDL
= 0, modul će nastaviti da radi. Ako je PTSIDL = 1, module će prestati sa radom sve
dok CPU ostaje u Idle režimu.

18.2. Aktivacija i postavke UART-a


18.2.1 AKTIVACIJA UART-a

UART modul se aktivira setovanjem UARTEN bita u UxMODE registru (gde je x = 1


ili 2). Jednom kada se aktivira, UxTX i UxRX pinovi se konfigurišu kao izlaz i ulaz,
respektivno, premošćujući postavke TRIS i LATCH Registara za odgovarajuće I/O
port pinove. UxTX pin je nalogičkoj jedinici kada nema transmisije.

18.2.2 DEAKTIVACIJA UART-a

UART modul se aktivira resetovanjem UARTEN bita u UxMODE registru. Ovo je


default stanje posle bilo kog Reseta. Ako je UART deaktiviran, svi I/O pinovi rade
kao port pinovi pod kontrolom latcha a TRIS biti pod kontrolom odgovarajućih port
pinova.
Deaktivacija UART modula resetuje bafere na prazno stanje. Svi karakteri podataka
u baferima se gube, i brojač bod-brzine (baud rate counter) se resetuje. Svi flegovi
greške i statusa prekida asocirani sa UART modulom se resetuju kada je modul
deaktiviran. URXDA, OERR, FERR, PERR, UTXEN, UTXBRK i UTXBF biti se
resetuju, dok se biti RIDLE i TRMT setuju. Drugi upravljački biti, uključujući ADDEN,
URXISEL<1:0>, UTXISEL, kao i UxMODE i UxBRG registre, nisu dotaknuti.
Resetovanje UARTEN bita dok je UART aktivan prekinuće sve tekuće transmisije i
prijeme i resetovaće modul na način koji je definisan kasnije. Ponovna aktivacija
UART-a restartovaće UART sa istom konfužiguracijom.

18.2.3 ALTERNATIVNI I/O

Funkcija alternativnih I/O obezbeđena je setovanjem ALTIO bita (UxMODE<10>).


Ako je ALTIO = 1, UxATX i UxARX pinovi (alternativni transmiterski i atlernativni
prijemni pinovi, respektivno) se koriste u UART modulu umesto UxTX i UxRX
pinova. Ako je ALTIO = 0, u UART modulu se pinovi se koriste pinovi UxTX i UxRX.

18.2.4 SELEKCIJA SETOVANJA BITA PODATAKA, PARNOSTI I STOP BITA

Upravljački biti PDSEL<1:0> u UxMODE registru koriste se da selektuju dužinu


podataka i parnost koja se koristi u transmisiji. Dužina podataka može biti ili 8-bitna,
parna, neparna i li bez parnosti, ili 9-bitna bez parnosti. STSEL bit određuje da li će
jedan ili dva stop bita biti korišćena tokom transmisije podataka. Default (pri stanju
uključeno) postavka UART-a je sa 8 bita, bez parnosti, 1 stop bit (tipično
predstavljeno kao 8, N, 1).

18.3 Transmisija podataka

18.3.1 TRANSMISIJA U 8-BITNOM REŽIMU PODATAKA

Da bi se izvršio prenos 8-bitnog podatka, moraju se izvršiti sledeći koraci:


1. Setuje se UART:
MIKROPROCESORI

Prvo, mora se selektovati dužina podatka, parnost i broj bita zaustavljanja (stop biti)
Onda se moraju aktivirati prekidi transmisije i prijema (Transmit and Receive
Interrupt) i biti prioriteta se setuju u registrima UxMODE i UxSTA. Takođe, mora se
upisati i odgovarajuća bod-brzina u UxBRG registar.
2. Aktivira se UART setovanjem UARTEN bita (UxMODE<15>).
3. Setuje se UTXEN bit (UxSTA<10>), i na taj način se aktivira transmisija.
4. Upisuje se bajt koji se želi preneti u niži bajt UxTXREG. Vrednost će odmah biti
prenesena registru Transmit Shift (UxTSR) i serijski niz bita će biti prenet tokom
sledeće rastuće ivice bod-takta. Alternativno, bajt podataka se može upisati dok je
UTXEN = 0, posle čega korisnik može da setuje UTXEN. Ovo će izazvati da serijski
tok prenosa bita počne odmah, zato što će bod-takt početi od čistog resetovanog
stanja.
5. Prekid transmisije će se generisati zavisno od vrednosti uporavljačkog bita
prekida UTXISEL (UxSTA<15>).

18.3.2 TRANSMISIJA U 9-BITNOM REŽIMU PODATAKA

Sled koraka koji su neophodni za transmisiju 9-bitnih podataka je sličan 8-bitnoj


transmisiji, osim što 16-bitna reč (kod koje su gornjih 7 bita uvek čisti) mora biti
upisana u UxTXREG registar.

18.3.3 TRANSMISIONI BAFER (UXTXB)

Transmisioni bafer je 9 bita širok i 4 karaktera dubok. Uključujući i Transmit Shift


Registar (UxTSR), korisnik ima efektivni FIFO (First In First Out) bafer dubine 5.
UTXBF Statusni bit (UxSTA<9>) daje oznaku da li je transmisioni bafer pun. Ukoliko
korisnik pokuša da upisuje u pun bafer, novi podaci neće biti prihvaćeni u FIFO, i
nikakva pomeranja podataka se neće odigrati unutar bafera. Ovo aktivira restituciju
iz stanja preopterećenja bafera. FIFO se resetuje tokom bilo kog resetovanja
uređaja, ali na njega nema nikakav uticaj to što uređaj ulazi u režim uštede energije,
ili iz njega izlazi.

18.3.4 PREKIDI (INTERAPTI) KOD TRANSMISIJE

Fleg prekida transmisije (U1TXIF i U2TXIF) nalazi se u odgovarajućem registru


flega prekida. Transmiter generiše ivicu da bi setovao bit UxTXIF bit. Uslov za
generisanje prekida zavisi od upravljačkog bita UTXISEL:
a) Ako je UTXISEL = 0, prekid se generiše kada se reč prenosi od transmisionog
bafera u Transmit Shift registar (UxTSR). Ovo implicira da transmisioni bafer ima
barem jednu praznu reč.
b) Ako je UTXISEL = 1 prekid se generiše kada se reč prenosi od transmisionog
bafera u Transmit Shift registar (UxTSR) i transmisioni bafer je prazan.
Svičovanje između dva režima prekida tokom rada je moguće i ponekad nudi više
fleksibilnosti.

18.3.5 PREKIDANJE TRANMISIJE


Setovanje UTXBRK bita (UxSTA<11>) izazvaće da UxTX bude dovedena na
logičku ‘0’. UTXBRK bit premošćuje sve transmisione aktivnosti. Stoga bi korisni
generalno trebao da sačeka da transmiter bude u Idle režimu pre nego što setuje
UTXBRK.
Da bi se poslao karakter prekidanja, UTXBRK bit mora biti setovan softverski i mora
ostati setovan minimalno 13 bod-taktnih ciklusa. UTXBRK bit se onda resetuje
softverski da bi generisao stop bite. Korisnik mora da sačeka onoliko koliko traje
barem jedan ili dva bod-taktna ciklusa da bi osigurao valjane stop bite pre nego što
se ponovo učita UxTXB ili započneo neka druga transmisiona aktivnost. Transmisija
prekidajućeg karaktera ne generiše prekid (interapt) transmisije

18.4 Prijem podataka

18.4.1 PRIJEM U 8-BITNOM i 9-BITNOM REŽIMU PODATAKA

Da bi se izvršio prijem 8-bitnog ili 9-bitnog podatka, moraju se izvršiti sledeći koraci:
1. Setuje se UART:
Prvo, mora se selektovati dužina podatka, parnost i broj bita zaustavljanja (stop biti)
Onda se moraju aktivirati prekidi transmisije i prijema (Transmit and Receive
Interrupt) i biti prioriteta se setuju u registrima UxMODE i UxSTA. Takođe, mora se
upisati i odgovarajuća bod-brzina u UxBRG registar.
2. Aktivira se UART setovanjem UARTEN bita (UxMODE<15>).
3. Generiše se interapt prijema kada se jedan ili više reči podataka prime, zavisno
od postavki prekida (interapta) koje specificiraju biti URXISEL (UxSTA<7:6>).
4. Čita se OERR bit da bi se odredilo da li se desila greška preopterećenja
(overrun). OERR bit mora biti resetovan sofverski.
5. Čita se primljeni podatak iz UxRXREG. Akt čitanja UxRXREG će pomeriti
sledeću reč na vrh prijemnog FIFO-a, a vrednosti PERR i FERR će biti ažurirane.

18.4.2 PRIJEMNI BAFER (UXRXB)

Prijemni bafer je dubok 4 reči. Uključujući i Prijemni Shift Registar (UxTSR), korisnik
ima efektivni FIFO (First In First Out) bafer dubine 5. URXDA (UxSTA<0>) = 1 daje
oznaku da li prijemni bafer ima raspoloživih podataka. URXDA = 0 implicira da je
prijemni bafer prazan. Ukoliko korisnik pokuša da čita iz praznog bafera, pročitaće
stare vrednosti iz bafera i nikakva pomeranja podataka se neće odigrati unutar
bafera. FIFO se resetuje tokom bilo kog resetovanja uređaja, ali na njega nema
nikakav uticaj to što uređaj ulazi u režim uštede energije, ili iz njega izlazi.

18.4.3 PREKID (INTERAPT) KOD PRIJEMA

Fleg prekida prijema (U1RXIF ili U2RXIF) može da se pročita iz odgovarajućeg


registra flega prekida. Fleg prekida se setuje na ivici koju generiše prijemnik. Uslov
za setovanje flega prekida prijema zavisi od prostavki koje specificiraju
URXISEL<1:0> (UxSTA<7:6>) upravljački biti.
MIKROPROCESORI

a) Ako je URXISEL<1:0> = 00 ili 01, prekid se generiše svaki put kada se reč
prenosi od Prijemnog Shift Registra (UxRSR) u prijemni bafer. U prijemnom baferu
se može nalaziti jedan ili više karaktera.
b) Ako je URXISEL<1:0> = 10 prekid se generiše kada se reč prenosi od Prijemnog
Shift Registra (UxRSR) u Prijemni bafer, koji, kao rezultat prenosa, sadrži 3
karaktera.
c) Ako je URXISEL<1:0> = 11, prekid se setuje kada se reč prenosi iz Prijemnog
Shift Registra (UxRSR) u Prijemni bafer, koji, kao rezultat prenosa, sadrži 4
karaktera, tj. postaje pun.
Svičovanje između dva režima prekida tokom rada je moguće, iako u opštem
slučaju nije preporučljivo tokom normalnog rada.

18.5 Rukovanje greškom prijema

18.5.1 GREŠKA PREOPTEREĆENJA PRIJEMNOG BAFERA (RECEIVE BUFFER


OVERRUN ERROR), (OERR BIT)

OERR bit (UxSTA<1>) se setuje ako se poklope sledeći uslovi:


a) Prijemni bafer je pun.
b) Prijemni pomerački (shift) registar je pun, ali nije sposoban da prenese karakter
ka prijemnom baferu.
c) Detektovan je stop bit karaktera u UxRSR indicirajući da UxRSR treba da
prenese karakter do bafera.
Kada se OERR jednom setuje, podaci se više ne pomeraju u UxRSR (sve dok se
ne resetuje OERR bit sotfverski, ili se ne dogodi Reset). Podaci koji se čuvaju u
UxRSR i UxRXREG ostaju validni.

18.5.2 GREŠKA FREJMINGA (FRAMING ERROR) (FERR)

FERR bit (UxSTA<2>) se setuje ako je detektovana ‘0’ umesto stop bita. Ako se
selektuju 2 stop bita, oba stop bita moraju biti ‘1’, inače se setuje FERR. Read-only
FERR bit se baferuje zajedno sa primljenim podacima. On se čisti prilikom svakog
Reseta.

18.5.3 GREŠKA PARNOSTI (PARITY ERROR) (PERR)

PERR bit (UxSTA<3>) se setuje ako je parnost primljene reči neispravna. Ovaj bit
greške primenljiv je samo ako je je selektovan režim parnosti (neparan ili paran).
Read-only PERR bit se baferuje zajedno sa primljenim podacima. On se čisti
prilikom svakog Reseta.

18.5.4 IDLE STATUS

Kada je prijemnik aktivan (tj. između inicijalne detekcije startnog bita i završetka
staop bita), RIDLE bit (UxSTA<4>) je ‘0’. Između detekcije stop bita i detekcije
sledećeg start bita, RIDLE bit je ‘1’, indicirajući da je UART u statusu Idle.
18.5.5 PREKIDANJE PRIJEMA

Prijemnik će brojati i čekati određeni broj vremena bita na osnovu vrednosti koje su
isprogramirane u PDSEL (UxMODE<2:1>) i STSEL (UxMODE<0>) bitima.
Ukoliko je prekidanje prijema duže od 13 vremena bita, prijem se smatra završenim
posle onoliko vremena bita koliko je specificirano u PDSEL i STSEL. URXDA bit se
setuje, FERR se setuje, učitavaju se nule u prijemni FIFO, generišu se prekidi i
setuje se odgovarajući RIDLE bit. Kada modul primi signal dugačkog brejka (pauze,
prekidanja), i prijemnik detektuje start bit, bite podataka i neispravni stop bit (koji
setuje FERR), prijemnik mora da čeka na validni stop bit pre nego što potraži
sledeći start bit. On ne sme da pretpostavi da će uslov prekidanja biti na sledećem
startnom bitu. Brejk (prekidanje) se smatra karakterom koji sadrži sve nule, s tim što
FERR bit setovan. Karakter prekidanja se učitava u bafer. Neće biti daljnjeg prijema
pre nego što se primi stop bit. Primetimo da RIDLE odlazi na visoki nivo kada stop
bit još nije primljen

18.6 Režim detekcije adrese

Setovanje ADDEN bita (UxSTA<5>) omogućava ulazak u ovaj specijalni režim, u


kome vrednost ‘1’ na 9. bitu (URX8) identifikuje primljenu reč pre nego podatke.
Ovaj režim je primenjiv samo na 9-bitnu komunikaciju. Upravljački biti URXISEL
nemaju nikakav uticaj na generisanje prekida u ovom režimu, budući da će prekid
(ukoliko je aktiviran i dopušten) biti generisan svaki put kada primljena reč ima
setovan 9. bit.

18.7 Loopback režim

Setovanje LPBACK bita omogućava ulazak u ovaj specijalni režim, u kome je UxTX
interno povezan sa UxRX pinom. Kada se konfiguriše za loopback režim UxRX pin
se diskonektuje sa interne UART prijemne logike. Međutim UxTX pin još uvek radi
normalno.
Da bi se selektovao ovaj režim treba:
a) Konfigurisati UART za željeni režim rada.
b) Setovati LPBACK = 1 da bi se Loopback režim aktivirao.
c) Aktivirati transmisiju na način definisan u Odeljku 18.3.

18.8 Generator Bod-brzine (Baud Rate Generator)

UART poseduje 16-bit generator bod-brzine da bi omogućio maksimalnu


fleksibilnost prilikom generisanja bod-brzine. U registar generatora bod-brzine
(UxBRG) može se i upisivati i iz njega čitati. Bod-brzina se sračunava na sledeći
način:
BRG = 16-bitna vrednost koja se drži u regsitru UxBRG (0 do 65535)
FCY = Brzina instrukcionog kloka (takta) (1/TCY)
Bod-brzina je data Jednačinom 18.1.
MIKROPROCESORI

JEDNAČINA 18-1: BOD-BRZINA


Stoga, maksimalna moguća bod-brzina iznosi FCY /16 (if BRG = 0), a bod-brzina
iznosi FCY / (16* 65536).
Sa punim 16-bitnim generatorom bod-brzine, pri radu na 30 MIP, minimalna
dobijena bod-brzina je 28.5 bps.
Baud Rate = FCY / (16*(BRG+1))

18.9 Auto Baud podrška

Da bi se sistemu dopustilo da odredi bod-brzine primljenih karaktera, ulaz se može


opciono povezati sa selektovanim capture ulazima (IC1 for UART1, IC2 za UART2).
Da bi se ovaj režim aktivirao, korisnik mora da programira ulazni capture modul da
bi detektovao opadajuću i rastuću ivicu start bita.

18.10 Rad UART-a tokom Sleep i Idle režima CPU-a

18.10.1 RAD UART-A TOKOM SLEEP REŽIMA CPU-A

Kada uređaj uđe u Sleep režim, svi izvori takta koji vode ka modulu se gase i ostaju
na logičkoj ‘0’. Ako se ulazak u Sleep režim dogodi dok je transmisija još uvek u
toku, tada se transmisija obustavlja. UxTX pin se dovodi na logičku ‘1’. Na sličan
način, ako se ulazak u Sleep režim dogodi dok je prijem još uvek u toku, tada se
prijem obustavlja. UxSTA, UxMODE, transmisioni i prijemni registri i baferi i UxBRG
registar nisu dotaknuti Sleep režimom i on na njih nema uticaja. Ako se bit buđenja
(Wake bit), (UxMODE<7>) setuje pre nego što uređaj uđe u Sleep režim, tada će
opadajuća ivica na UxRX pinu generisati prekid prijema. Bit režima selekcije
prekida prijema (Receive Interrupt Select Mode bit (URXISEL) nema uticaja na ovu
funkciju. Ako se aktivira prekid prijema, onda će ovo probuditi uređaj iz režima
Sleep. UARTEN bit mora biti setovan da bi se generisao prekid buđenja.

18.10.2 RAD UART-A TOKOM IDLE REŽIMA CPU-A

Za UART, USIDL bit selektuje da li će modul zaustaviti rad kada uređaj uđe u Idle
režim, ili će modul nastaviti u Idle režimu. Ako je USIDL = 0, modul će nastaviti rad
tokom Idle režima. Ako je USIDL = 1, onda će modul zaustaviti rad kada uređaj uđe
u Idle režim

20.0 10-BITNI MODUL ANALOGNO/DIGITALNOG (A/D) KONVERTORA VELIKE


BRZINE

10-bitni analogno-digitalni (A/D) konvertor velike brzine omogućava konverziju


analognog ulaznog signala u 10-bitni digitalni broj. Ovaj modul se zasniva na
arhitekturi Registra sukcesivnih aproksimacija (Successive Approximation Register
(SAR)) i omogućava maksimalnu brzinu odabiranja od 500 ksps. A/D modul ima 16
analognih ulaza koji se multipleksiraju u 4 sample and hold pojačivača. Izlaz iz
sample/hold-a je ulaz u konvertor, koji generiše rezultat. Analogni referentni naponi
se mogu selektovati softverski bilo na napon napajanja uređaja (AVDD/AVSS) ili
nivo napona na (VREF+/VREF-) pinu. A/D konvertor ima jedinstvenu karaktertistiku
da je sposoban da radi i kada je uređaj u Sleep režimu.
A/D modul ima 16-bitnih registara:
• A/D upravljački registar (Control Register1), (ADCON1)
• A/D upravljački registar (Control Register2), (ADCON2)
• A/D upravljački registar (Control Register3), (ADCON3)
• A/D registar selekcije ulaza (Input Select Register), (ADCHS)
• A/D registar konfiguracije porta (Port Configuration Register), (ADPCFG)
• A/D registar selekcije skeniranja ulaza (Input Scan Selection Register), (ADCSSL)
Registri ADCON1, ADCON2 i ADCON3 upravljaju radom A/D modula. ADCHS
registar selektuje ulazne kanale koje treba konvertovati. ADPCFG registar
konfiguriše port pinove kao analogne ulaze ili kao digitalne I/O. Registar ADCSSL
selektuje ulaze za skeniranje.

20.1 Bafer za A/D rezultate

Modul sadrži read-only bafer sa dualnim portom od 16 reči, koje se zovu


ADCBUF0...ADCBUFF, da bi baferovao A/D rezultate. RAM je širok 10 bita ali čita
16-bitne reči različitih formata. Sadržaj 16 A/D bafer registara za konverzione
rezultate od ADCBUF0 do ADCBUFF, ne može se upisati korisničkim softverom.

20.2 Operacija konverzije

Posle konfigurisanja A/D modula dobavljanje odabirka počinje setovanjem SAMP


bita. Različiti izvori, kao što je programabilni bit, tajm-auti tajmera ili spoljni događaji
prekinuće dobavljanje (akviziciju) odabiraka (semplova) i započeće konverziju.
Kada je A/D konverzija završena, rezultat se učitava u ADCBUF0...ADCBUFF, i A/D
fleg prekida ADIF i DONE bit se setuju posle izvesnog broja odabiraka, koje
određuje bit SMPI.
Sledeći koraci se moraju preduzeti za vršenje A/D konverzije:
1. Konfiguracija A/D modula:
- Konfigurišu se analogni pinovi, referentni naponi i digitalni I/O
- Selektuju se A/D ulazni kanali
- Selektuje se A/D konverzioni takt
- Selektuje se A/D konverzioni triger
- Uključi se A/D modul
2. Konfiguracija A/D prekida (ukoliko je neophodno):
- Resetuje se (očisti) ADIF bit
- Selektuje se A/D prioritet prekida
3. Počinje odabiranje (semplovanje).
4. Čeka se onoliko koliko je zahtevano vreme akvizicije.
5. Trigeruje se kraj akvizicije, i počinje konverzija.
6. Čeka se da se A/D završi, bilo:
- Čekanjem na A/D prekid
MIKROPROCESORI

7. Čitanjem bafera A/D rezultata, a ADIF se čisti, ukoliko je to neophodno.

20.3 Selekcija sekvence konverzije

Nekoliko grupa upravljačkih bita slektuju sekvencu u kojoj A/D povezuje ulaze sa
sample/hold kanalima, upisuje u bafer memoriju i generiše prekide. Sekvencom
upravljaju sempling taktovi. SIMSAM bit upravlja sekvencom dobavljanja (akvizicije)
i konverzije za višestruke kanale. Ako je SIMSAM bit jednak ‘0’, dva od 4
selektovana kanala se dobavljaju i konvertuju sekvencijalno, sa 2 od 4 sempling
takta. Ako je SIMSAM bit jednak ‘1’ dva od 4 selektovana kanala se dobavljanju
istovremeno, sa jednim sempling taktom. Kanali se onda konvertuju sekvencijalno.
Očigledno, ako postoji samo 1 selektovani kanal, SIMSAM bit nije primenljiv..
CHPS biti selektuju koliko će se kanala semplovati. Ovaj broj može da varira od 1, 2
do 4 kanala. Ako CHPS selektuje 1 kanal, CH0 kanal će biti semplovan na sempling
taktu i biće konvertovan. Rezultat se čuva u baferu. Ako CHPS selektuje 2 kanala,
kanali CH0 i CH1 kanali će biti semplovi i konvertovani. Ako CHPS selektuje 2
kanala, CH0, CH1, CH2 and CH3 kanali će biti semplovi i konvertovani.
SMPI biti selektuju broj sekvenci dobavljanja i konverzija koji će bit izvršen pre
nego što se dogodi prekid. Ovo može da varira od 1 odabirka po prekidu, pa sve do
16 odabiraka po prekidu. Korisnik ne može da programira CHPS i SMPI bita koja
specificira više od 16 konverzija po prekidu, ili 8 konverzija po prekidu, zavisno od
BUFM bita. BUFM bit će, kada se setuje, podeliti 16-bitni bafer rezultata
(ADCBUF0...ADCBUFF) u grupe od po 8 reči. Upis u bafer od po 8 reči biće
promenjen prilikom svakog događaja prekida. Korišćenje BUFM bita zavisiće od
toga koliko puta je moguće pomeriti podatke iz bafera posle prekida, na način
određen aplikacijom. Ako procesor može brzo da iščita pun bafer unutar
vremenskog intervala koji je potreban da se dobavi i konvertuje jedan kanal, BUFM
bit će biti jednak ‘0’ i po jednom prekidu se može izvršiti do 16 konverzija. Procesor
će imati jedno vreme odabiranja i konverzije da pomeri 16 konverzija. Ako procesor
ne može da iščita bafer unutar vremenskog intervala koji je potreban da se dobavi i
konvertuje jedan kanal, BUFM bit će biti jednak ‘1’. Na primer, ako je SMPI<3:0>
(ADCON2<5:2>) = 0111, onda će se 8 konverzija učitati u 1/2 bafera, posle čega će
se odigrati prekid. Sledećih 8 konverzija će se učitati u drugu 1/2 bafera. Procesor
će imati celo vreme između prekida da pomeri 8 konverzija.
ALTS bit se može koristiti da izmeni ulaze selektovane tokom sekvence
odabiranja.Ulazni multiplekser ima dva skupa odabiračkih ulaza: MUX A i MUX B.
Ako je ALTS bit ‘0’, samo će ulazi na MUX A biti selektovani za odabiranje. ako je
ALTS bit ‘1’ i SMPI<3:0> = 0000, na prvoj sekvenci dobavljanja i konverzije, ulazi
na MUX A će biti selektovani, a na sledećoj sekvenci dobavljanja i konverzije biće
selektovani ulazi na MUX B.
CSCNA bit (ADCON2<10>) će dopustiti ulazima CH0 kanala da budu naizmenično
skenirani preko selektovanog broja analognih izlaza za grupu MUX A. Ulazi se
selektuju putem registra ADCSSL. Ako je određeni bit u ADCSSL registru jednak
‘1’, odgovarajući ulaz će biti selektovan. Ulazi se uvek skeniraju od nižih ka višima
posle svakog prekida. Ako je broj slektovanih ulaza vreći od broja odabiraka koji se
uzimaju po prekidu, ulazi sa većim brojevima se ne koriste.
20.4 Programiranje starta konverzionog trigera

Konverzioni triger će prekinuti pribavljanje i počeće zahtevanu konverziju.


SSRC<2:0> biti selektuju izvor konverzionog trigera.
SSRC bit obezbeđuje do 5 naizmeničnih izvora konverzionog trigera.
Kada je SSRC<2:0> = 000, konverzioni triger je pod kontrolom softvera. Čišćenje
(resetovanje) SAMP bita izazvaće konverzioni triger.
Kada je SSRC<2:0> = 111 (Auto Start režim), konverzioni triger je pod kontrolom
A/D takta. SAMC biti selektuju broj taktova A/D između početka pribavljanja i
početka konverzije. Ovo omogučava najbržu brzinu konverzije na višestrukim
kanalima.
SAMC mora uvek biti barem 1 ciklus takta. Drugi izvori trigera mogu doći iz modula
tajmera, PWM modula za upravljanje motorom ili od eksternih prekida.

20.5 Obustavljanje konverzije

Resetovanje ADON bita tokom konverzije obustaviće (abort) tekuću konverziju i


zaustaviće sekvenciranje odabiranja. ADCBUF neće biti ažuriran sa delimično
kompletiranim odabirkom A/D konverzije. To jest, ADCBUF će nastaviti da sadrži
vrednost poslednje kompletirane konverzije (ili poslednje vrednosti upisane u
registar ADCBUF).
Ako resetovanje bita ADON koincidira sa auto startom, resetovanje ima viši prioritet.
Posle obustave A/D konverzije, zahteva se 2 TAD čekanje pre nego što sledeće
odabiranje može da počne setovanjem SAMP bita.
Ako se specificira sekvencijalno odabiranje, A/D će nastaviti na sledećem impulsu
odabiranja koji korespondira sa sledećim konverovanim kanalom. Ako se odaberu
istovremeni kanali, A/D će nastaviti sa sledećom multikanalnom grupom
konverzionih sekvenci.

20.6 Odabiranje takta A/D konverzije

A/D konverzija zahteva 12 TAD. Izvor takta The source A/D konverzije se odabira
softverski korišćenjem 6-bitnog brojača. Postoje 64 moguće opcije za TAD.

JEDNAČINA 20.1.: TAKT A/D KONVERZIJE


TAD = TCY * (0.5*(ADCS<5:0> +1))
ADCS<5:0> = 2 – 1
TAD
TCY
Interni oscilator se odabira selekcijom ADRC bita.
Za ispravne A/D konverzije, takt A/D konverzije (TAD) mora biti određen tako da
omogući minimalno TAD vreme od 154 nsec (za VDD = 5V). Konsultovati Odeljak
Električnih specifikacija za minimalni TAD u slučajevima drugačijh uslova rada.
Primer 20.1. prikazuje sračunavanje odabiranja za bite ADCS<5:0>,
pretpostavljajući da je brzina rada 30 MIPS.
MIKROPROCESORI

PRIMER 20.1.: SRAČUNAVANJE TAKTA A/D KONVERZIJE

Minimum TAD = 154 nsec


TCY = 33 nsec (30 MIPS)
________________________________________
ADCS<5:0> = 2 TAD/TCY - 1
= 2 · (154 nsec/33 nsec) - 1
= 8.33

Dakle:
ADCS<5:0> = 9
________________________________________
Aktuelni TAD = TCY/2 (ADCD<5:0> + 1)
= 33 nsec/2 (9+1)
= 165 nsec

20.7 Zahtevi za dobavljanje (akviziciju) tokom A/D

Analogni ulazni model za 10-bitni A/D konvertor prikazan je na Slici 20.2. Ukupno
vreme odabiranja za A/D je funkcija internog vremena smirivanja pojačavača, VDD-
a uređaja i vremena pražnjenja kondenzatora za zadržavanje. Da bi A/D konvertor
dosegao svoju specificiranu tačnost, kondenzatoru za zadržavanje (CHOLD) mora
biti dopupšteno da se potpuno napuni na nivo napona na analognom ulaznom pinu.
impedansa sorsa (RS), impendansa interkonekcije (RIC), i impedansa internog
prekidača odabiranja (RSS) se kombinuju da bi direktno uticale na vreme koje se
zahteva da bi se napunio kondenzator CHOLD. Kombinovana impedansa analognih
izvora mora stoga biti dovoljno mala da bi se kondenzator zadržavanja napunio do
kraja unutar odabranog vremena odabiranja. Da bi se minimizirao efekat curenja na
pinu na tačnost A/D konvertora, maksimalna preporučena impedansa sorsa RS, je
5 k.. Posle selekcije (promene) kanala analognog ulaza, funkcija odabiranja se
mora završiti pre nego što započne konverzija. Interni kondenzator zadržavanja će
biti u stanju pražnjenja pre nego što započne bilo koja operacija odabiranja.
Korisnik mora da dozvoli 1 TAD period vremena odabiranja TSAMP, između
konverzija koji dozvolio, opet, da se svaki odabirak dobavi. Ovo vreme odabiranja
se kontroliše manuelno u softveru, pomoću setovanja ili resetovanja SAMP bita, ili
se njime može automatski upravljati A/D konvertora.
U automatskoj konfiguraciji, korisnik mora da obezbedi dovoljno vremena između
konverzionih trigera tako da se zadovolji minimalno vreme odabiranja. Konsultovati
Odeljak Električnih specifikacija za zahteve u vezi sa TAD-om i vremenom
odabiranja.

SLIKA 20.2.: ANALOGNI ULAZNI MODEL A/D KONVERTORA

20.8 Režim isključenog modula


Modul ima 3 interna režima napajanja, Kada je ADON bit jednak ‘1’, modul se nalazi
u neaktivnom režimu; on je potpuno funckionalan i pod napajanjem. Kada je ADON
jednak‘0’, modul je isključen (Off režim). Digitalni i analogni delovi kola su
deaktivirani zarad maksimalne uštede struje. Da bi se uređaj vratio iz isključenog u
aktivno stranje, korisnik mora da sačeka da ADC kola stabilizuju.

20.9 Rad A/D tokom Sleep i Idle režima CPU-a

20.9.1 RAD A/D TOKOM SLEEP REŽIMA CPU-A

Kada uređaj uđe u Sleep režim, svi izvori takta koji vode u modul su isključeni i
ostaju na logičkoj ‘0’. Ako se u režim Sleep uđe usred konverzije, konverzija se
prekida. Konvertor neće nastaviti sa delimično obavljenom konverzijom kada
jednom izađe Sleep režima.
Na sadržaj registra ne utiče to što uređaj ulazi ili izlazi iz Sleep režima.
A/D modul može da radi tokom Sllep režima ako je izvor takta A/D postavljen na RC
(ADRC = 1). Kada se detektuje izvor takta RC A/D modul čeka jedan instrukcijski
ciklus pre nego što započne konverziju. Ovo omogućava da se izvrši SLEEP
instrukcija, što opet eliminiše sve digitalne signale buke prilikom svičovanja, a koja
nastaje prilikom konverzije.
Kada se konverzija završi, bit Done će biti setovan i rezultat će biti učitan u
ADCBUF.
Ako je aktiviran A/D prekid, uređaj će se probuditi iz Sleep režima. Ako A/D prekid
nije aktiviran, A/D modul će onda biti isključen, iako će ADON bit ostati setovan.

20.9.2 RAD A/D TOKOM IDLE REŽIMA CPU-A

ADSIDL bit određuje da li će se modul zaustaviti na Idle režimu ili će nastaviti na


Idle. Ako je ADSIDL = 0, modul će nastaviti sa radom kada se asertuje Idle režim.
ako je ADSIDL = 1, modul će se zaustaviti na Idle režimu.

20.10 Uticaj Reseta

Reset uređaja prisiljava sve registre da odu u svoje resertovano stanje. Ovo
primorava A/D modul da se isključi, i obustavlja se svaka konverziona i akviziciona
sekvenca. Vrednosti koje se nalaze u ADCBUF registrima se ne menjaju. Registar
A/D rezultata registar će sadržavati nepoznate podatke posle mehaničkog reseta
isključenjem sa napajanja.

20.11 Formati izlaza

Rezultat A/D je širok 10 bita. RAM bafera podataka je takođe širok 10 bita. 10-bitni
podaci se mogu čitati putem jednog od 4 različita formata. Biti FORM<1:0>
selektuju format. Svaki od izlaznih formata prevodi se u 16-bitni rezultat na
magistrali podataka. Ispis podataka će uvek biti u celobrojnom formatu sa desnim
uravnanjem.
MIKROPROCESORI

SLIKA 20.3.: FORMATI IZLAZNIH PODATAKA A/D

20.12 Konfigurisanje analognih Port pinova

Korišćenje registara ADPCFG i TRIS upravlja radom A/D port pinova. Port pinovi
koje želimo za analogne ulaze moraju imati svoje odgovarajuće TRIS bite setovane
(ulaz). Ako je TRIS bit resetovan (izlaz), nivo digitalnog izlaza (VOH i VOL) će biti
konvertovan.
Rad A/D je nezavisan od stanja CH0SA<3:0>/CH0SB<3:0> bita i TRIS bita. Kada
se čita iz PORT registara, svi pinovi konfigurisani kao analogni ulazni kanali biće
pročitani kao da su u resetovanom stanju. Ponovi konfigurisani kako digitalni ulazi
neće konvertovati analogni ulaz. Analogni nivoi bilo kog pina se definišu kao
digitalni ulazi (uključujući ANx pinove), što može izazvati da ulazni bafer konzumira
struju koja prevazilazi specifikacije uređaja.

20.13 Razmatranja konekcija

Analogni ulazi imaju diode na VDD VSS kao ESD zaštitu. Ovo zahteva da analogni
ulaz bude između VDD i VSS. Ako je ulazni napon prevazišao ovaj raspon za više
od 0.3V (u bilo kom smeru), jedna od dioda postaje direkno polarizovana i može
oštetiti uređaj ako se premaši specifikacija uređaja. Unutrašnji RC filter se dodaje
ponekad da bi se inicijalizovao ulazni signal. Treba selektovati R komponentu da bi
se osiguralo da zahtevi za vreme odabiranja budu ispunjeni. Bilo koje eksterne
komponente koje se konektuju (putem visoke impedanse) na analogni ulazni pin
(kondenzator, Cenerova dioda, itd.) trebalo bi da imaju veoma malu struju curenja
na pinu.

22.0 SAŽETAK SKUPA INSTRUKCIJA


Skup instrukcija dsPIC30F pridodaje mnoga obogaćenja prethodnom skupu
instrukcija PICmicro®, dok sa druge strane zadržava lako kretanje kroz skup
instrukcija PICmicro.
Većina instrukcija su u obliku jednostruke programske memorijske reči (24 bita).
Samo 3 instrukcije zahtevaju dve lokacije u programskoj memoriji. Svaka instrukcija
koja se sadrži od jedne reči podeljena je u 8-bitni operacioni kod koji određuje vrstu
instrukcije, i jedan ili više operanada koji dodatno specificiraju rad instrukcije. Skup
instrukcija je veoma ortogonalan i grupisan je u 5 osnovnih kategorija:
• Operacije orijentisane na reči ili bajtove
• Operacije orijentisane na bite
• Doslovne operacije
• DSP operacije
• Upravljačke operacije

Tabela 22.1. prikazuje opšte simbole koji se koriste za opis instrukcija.


Polje Opis
#text Means literal defined by “text“
(text) Means “content of text“
[text] Means “the location addressed by text”
{} Optional field or operation
<n:m> Register bit field
.b Byte mode selection
.d Double-word mode selection
.S Shadow register select
.w Word mode selection (default)
Acc One of two accumulators {A, B}
AWB Accumulator write back destination address register {W13, [W13]+=2}
bit4 4-bit bit selection field (used in word addressed instructions) {0...15}
C, DC, N, OV, Z MCU status bits: Carry, Digit Carry, Negative, Overflow, Zero
Expr Absolute address, label or expression (resolved by the linker)
f File register address {0x0000...0x1FFF}
lit1 1-bit unsigned literal {0,1}
lit4 4-bit unsigned literal {0...15}
lit5 5-bit unsigned literal {0...31}
lit8 8-bit unsigned literal {0...255}
lit10 10-bit unsigned literal {0...255} for Byte mode, {0:1023} for Word mode
lit14 14-bit unsigned literal {0...16384}
lit16 16-bit unsigned literal {0...65535}
lit23 23-bit unsigned literal {0...8388608}; LSB must be 0
None Field does not require an entry, may be blank
OA, OB, SA, SB DSP status bits: AccA Overflow, AccB Overflow, AccA Saturate, AccB
Saturate
PC Program Counter
Slit10 10-bit signed literal {-512...511}
Slit16 16-bit signed literal {-32768...32767}
Slit6 6-bit signed literal {-16...16}
Sažetak dsPIC30F skupa instrukcija se nalazi u Tabeli 22.2 i navodi sve instrukcije
zajedno sa statusnim flegovima na koje utiče svaka instrukcija. Većina instrukcija
orijentisanih na bajtove ili reči u W registru (uključujući instrukcije pomeranja barela)
imaju tri operanda.
MIKROPROCESORI

• Prvi izvorni operand, koji je uobičajeno registar ‘Wb’ bez ikakvog modifikatora
adrese
• Drugi izvorni operand, koji je uobičajeno registar ‘Ws’ bez ikakvog modifikatora
adrese, ili sa njim
• Destinacija rezultata, koja je uobičajeno registar ‘Wd’ bez ikakvog modifikatora
adrese, ili sa njim

Međutim, fajl registri orijentisani na bajtove ili reči obično imaju dva operanda.
• Fajl registar određen vrednošću ‘f’
• Destinaciju, koja može biti bilo fajl registar ‘f’ ili W0 registar, što se označava kao
‘WREG’

Većina instrukcija orijentisanih na bit (uključujući jednostavne instrukcije


rotacije/pomeranja) imaju dva operanda:
• W registar (bez ikakvog modifikatora adrese, ili sa njim) ili fajl registar (određen
vrednošću ‘f’ ili ‘Ws’)
• Bit u W registru ili fajl registru (određen doslovnom vrednošću, ili indirektno putem
sadržaja registra ‘Wb’)

Doslovne instrukcije koje uključuju pomeranje podataka mogu da koriste neke od


sledećih operanada:
• Doslovnu vrednost koja se učitava u W registar ili fajl registar (određena
vrednošću ‘k’)
• W registar ili fajl registar gde treba učitati doslovnu vrednost (određena vrednošću
‘Wb’ ili ‘f’)

Međutim, doslovne instrukcije koje uključuju aritmetičke ili logičke operacije koriste
neke od sledećih operanada:
• Prvi izvorni operand, koji je registar ‘Wb’ bez ikakvog modifikatora adrese
• Drugi izvorni operand, koji je doslovna vrednost
• Destinacija rezultata, (samo ako nije identična kao i prvi izvorni operand) koja je
uobičajeno registar ‘Wd’ bez ikakvog modifikatora adrese, ili sa njim.

MAC klasa DSP instrukcija može da koristi neke od sledećih operanada:


• Akumulator (A ili B) koji će se koristiti (neophodan operand)
• W registri koji će se koristiti kao 2 operanda
• Operacije pretpreuzimanja u X i Y adresnom prostoru
• Destinacije pretpreuzimanja u X i Y adresnom prostoru
• Destinacije pisanja unazad akumulatora
Ostale DSP instrukcije ne uključuju nikakvo množenje, i mogu uključivati:
• Akumulator koji će se koristiti (neophodan operand)
• Izvorni ili odredišni operand (označen kao Wso ili Wdo, respektivno) sa ili bez
modifikatora adrese
• Količina pomeranja, koju određuje W registar ‘Wn’ ili doslovna vrednost
Upravljačke instrukcije mogu da koriste neke od sledećih operanada:
• Adresu programske memorije
• Režim instrukcija čitanja iz tabele i upisa u tabelu

Sve instrukcije su od jedne reči, osim izvesnih instrukcija koje sadrže 2 reči, a one
su načinjene takvima da bi sve neophodne informacije bile sadržane u tih 48-bita. U
drugoj reči, 8 MSb-a su nule. Ako se druga reč izvršava kao instrukcija (sama po
sebi), izvršiće se kao NOP. Većina instrukcija od jedne reči izvrši se u jednom
instrukcionom ciklusu, osim ako uslovni test ne pokaže istinitost, ili se programski
brojač ne promeni kao rezultat instrukcije. U tim slučajevima, izvršenje zahteva 2
instrukciona ciklusa sa dodatnim instrukcionim ciklusom koji se izvršava kao NOP.
Značajni izuzeci su BRA (bezuslovna/sračunata grana), indirektni CALL/GOTO, sva
čitanja iz tabela i upisi u tabele, i instrukcije RETURN/RETFIE koje su instrukcije od
jedne reči, i koje zahtevaju 2 ili 3 ciklusa. Određene instrukcije koje uključuju
preskakanje sledeće instrukcije zatevaju bilo 2, bilo 3 ciklusa, ako se vrši
preskakanje, zavisno od toga da li instrukcija koja se preskače predstavlja jednu reč
ili instrukciju od 2 reči. Nadalje, pokreti dvostrukih reči zahtevaju dva ciklusa.
Instrukcije od dve reči se izvršavaju u dva instrukcijska ciklusa.

TABELA 22-1: SIMBOLI KORIŠĆENI U OPISIMA OPCODE-a


Polje Opis
Wb Base W register {W0..W15}
Wd Destination W register { Wd, [Wd], [Wd++], [Wd--], [++Wd], [--Wd] }
Wdo Destination W register
{ Wnd, [Wnd], [Wnd++], [Wnd--], [++Wnd], [--Wnd], [Wnd+Wb] }
Wm,Wn Dividend, Divisor working register pair (direct addressing)
Wm*Wm Multiplicand and Multiplier working register pair for Square instructions
{W4*W4,W5*W5,W6*W6,W7*W7}
Wm*Wn Multiplicand and Multiplier working register pair for DSP instructions
{W4*W5,W4*W6,W4*W7,W5*W6,W5*W7,W6*W7}
Wn One of 16 working registers {W0..W15}
Wnd One of 16 destination working registers {W0..W15}
Wns One of 16 source working registers {W0..W15}
WREG W0 (working register used in file register instructions)
Ws Source W register { Ws, [Ws], [Ws++], [Ws--], [++Ws], [--Ws] }
Wso Source W register
{ Wns, [Wns], [Wns++], [Wns--], [++Wns], [--Wns], [Wns+Wb] }
Wx X data space pre-fetch address register for DSP instructions
{[W8]+=6, [W8]+=4, [W8]+=2, [W8], [W8]-=6, [W8]-=4, [W8]-=2,
[W9]+=6, [W9]+=4, [W9]+=2, [W9], [W9]-=6, [W9]-=4, [W9]-=2,
[W9+W12],none}
Wxd X data space pre-fetch destination register for DSP instructions {W4..W7}
Wy Y data space pre-fetch address register for DSP instructions
{[W10]+=6, [W10]+=4, [W10]+=2, [W10], [W10]-=6, [W10]-=4, [W10]-=2,
[W11]+=6, [W11]+=4, [W11]+=2, [W11], [W11]-=6, [W11]-=4, [W11]-=2,
[W11+W12], none}
Wyd Y data space pre-fetch destination register for DSP instructions {W4..W7}

Base # of
Assembly # of Status Flags
Instr Assembly Syntax Description cycle
Mnemonic words Affected
# s
MIKROPROCESORI

1 ADD ADD Acc Add Accumulators 1 1 OA,OB,SA,SB


ADD f f = f + WREG 1 1 C,DC,N,OV,Z
ADD f,WREG WREG = f + WREG 1 1 C,DC,N,OV,Z
ADD #lit10,Wn Wd = lit10 + Wd 1 1 C,DC,N,OV,Z
ADD Wb,Ws,Wd Wd = Wb + Ws 1 1 C,DC,N,OV,Z
ADD Wb,#lit5,Wd Wd = Wb + lit5 1 1 C,DC,N,OV,Z
ADD Wso,#Slit4,Acc 16-bit Signed Add to 1 1 OA,OB,SA,SB
Accumulator
2 ADDC ADDC f f = f + WREG + (C) 1 1 C,DC,N,OV,Z
ADDC f,WREG WREG = f + WREG + (C) 1 1 C,DC,N,OV,Z
ADDC #lit10,Wn Wd = lit10 + Wd + (C) 1 1 C,DC,N,OV,Z
ADDC Wb,Ws,Wd Wd = Wb + Ws + (C) 1 1 C,DC,N,OV,Z
ADDC Wb,#lit5,Wd Wd = Wb + lit5 + (C) 1 1 C,DC,N,OV,Z
3 AND AND f f = f .AND. WREG 1 1 N,Z
AND f,WREG WREG = f .AND. WREG 1 1 N,Z
AND #lit10,Wn Wd = lit10 .AND. Wd 1 1 N,Z
AND Wb,Ws,Wd Wd = Wb .AND. Ws 1 1 N,Z
AND Wb,#lit5,Wd Wd = Wb .AND. lit5 1 1 N,Z
4 ASR ASR f f = Arithmetic Right Shift f 1 1 C,N,OV,Z
ASR f,WREG WREG = Arithmetic Right Shift f 1 1 C,N,OV,Z
ASR Ws,Wd Wd = Arithmetic Right Shift Ws 1 1 C,N,OV,Z
ASR Wb,Wns,Wnd Wnd = Arithmetic Right Shift 1 1 N,Z
Wb by Wns
ASR Wb,#lit5,Wnd Wnd = Arithmetic Right Shift 1 1 N,Z
Wb by lit5
5 BCLR BCLR f,#bit4 Bit Clear f 1 1 None
BCLR Ws,#bit4 Bit Clear Ws 1 1 None
6 BRA BRA C,Expr Branch if Carry 1 1 (2) None
BRA GE,Expr Branch if greater than or equal 1 1 (2) None
BRA GEU,Expr Branch if unsigned greater than 1 1 (2) None
or equal
BRA GT,Expr Branch if greater than 1 1 (2) None
BRA GTU,Expr Branch if unsigned greater than 1 1 (2) None
BRA LE,Expr Branch if less than or equal 1 1 (2) None
BRA LEU,Expr Branch if unsigned less than or 1 1 (2) None
equal
BRA LT,Expr Branch if less than 1 1 (2) None
BRA LTU,Expr Branch if unsigned less than 1 1 (2) None
BRA N,Expr Branch if Negative 1 1 (2) None
BRA NC,Expr Branch if Not Carry 1 1 (2) None
BRA NN,Expr Branch if Not Negative 1 1 (2) None
BRA NOV,Expr Branch if Not Overflow 1 1 (2) None
BRA NZ,Expr Branch if Not Zero 1 1 (2) None
BRA OA,Expr Branch if accumulator A 1 1 (2) None
overflow
BRA OB,Expr Branch if accumulator B 1 1 (2) None
overflow
BRA OV,Expr Branch if Overflow 1 1 (2) None
BRA SA,Expr Branch if accumulator A 1 1 (2) None
saturated
BRA SB,Expr Branch if accumulator B 1 1 (2) None
saturated
BRA Expr Branch Unconditionally 1 2 None
BRA Z,Expr Branch if Zero 1 1 (2) None
BRA Wn Computed Branch 1 2 None
7 BSET BSET f,#bit4 Bit Set f 1 1 None
BSET Ws,#bit4 Bit Set Ws 1 1 None
8 BSW BSW.CWs,Wb Write C bit to Ws<Wb> 1 1 None
BSW.Z Ws,Wb Write Z bit to Ws<Wb> 1 1 None
9 BTG BTG f,#bit4 Bit Toggle f 1 1 None
BTG Ws,#bit4 Bit Toggle Ws 1 1 None

TABELA 22-2: Sažetak skupa instrukcija


Base # of
Assembly # of Status Flags
Instr Assembly Syntax Description cycle
Mnemonic words Affected
# s
10 BTSC BTSC f,#bit4 Bit Test f, Skip if Clear 1 1 None
(2 or
3)
BTSC Ws,#bit4 Bit Test Ws, Skip if Clear 1 1 None
(2 or
3)
11 BTSS BTSS f,#bit4 Bit Test f, Skip if Set 1 1 None
(2 or
3)
BTSS Ws,#bit4 Bit Test Ws, Skip if Set 1 1 None
(2 or
3)
12 BTST BTST f,#bit4 Bit Test f 1 1 Z
BTST.C Ws,#bit4 Bit Test Ws to C 1 1 C
BTST.Z Ws,#bit4 Bit Test Ws to Z 1 1 Z
BTST.C Ws,Wb Bit Test Ws<Wb> to C 1 1 C
BTST.Z Ws,Wb Bit Test Ws<Wb> to Z 1 1 Z
13 BTSTS BTSTS f,#bit4 Bit Test then Set f 1 1 Z
BTSTS.C Ws,#bit4 Bit Test Ws to C, then 1 1 C
Set
BTSTS.Z Ws,#bit4 Bit Test Ws to Z, then 1 1 Z
Set
14 CALL CALL lit23 Call subroutine 2 2 None
CALL Wn Call indirect subroutine 1 2 None
15 CLR CLR f f = 0x0000 1 1 None
CLR WREG WREG = 0x0000 1 1 None
CLR Ws Ws = 0x0000 1 1 None
CLR Acc,Wx,Wxd,Wy,Wyd,AWBClear Accumulator 1 1 OA,OB,SA,SB
16 CLRWDT CLRWDT Clear Watchdog Timer 1 1 WDTO,Sleep
17 COM COM f f=f 1 1 N,Z
COM f,WREG WREG = f 1 1 N,Z
COM Ws,Wd Wd = Ws 1 1 N,Z
18 CP CP f Compare f with WREG 1 1 C,DC,N,OV,Z
CP Wb,#lit5 Compare Wb with lit5 1 1 C,DC,N,OV,Z
CP Wb,Ws Compare Wb with Ws 1 1 C,DC,N,OV,Z
(Wb - Ws)
19 CP0 CP0 f Compare f with 0x0000 1 1 C,DC,N,OV,Z
CP0 Ws Compare Ws with 1 1 C,DC,N,OV,Z
0x0000
20 CP1 CP1 f Compare f with 0xFFFF 1 1 C,DC,N,OV,Z
CP1 Ws Compare Ws with 1 1 C,DC,N,OV,Z
0xFFFF
MIKROPROCESORI

21 CPB CPB f Compare f with WREG, 1 1 C,DC,N,OV,Z


with Borrow
CPB Wb,#lit5 Compare Wb with lit5, 1 1 C,DC,N,OV,Z
with Borrow
CPB Wb,Ws Compare Wb with Ws, 1 1 C,DC,N,OV,Z
with Borrow
(Wb - Ws - C)
22 CPSEQ CPSEQ Wb, Wn Compare Wb with Wn, 1 1 None
skip if =
(2 or
3)
23 CPSGT CPSGT Wb, Wn Compare Wb with Wn, 1 1 None
skip if >
(2 or
3)
24 CPSLT CPSLT Wb, Wn Compare Wb with Wn, 1 1 None
skip if <
(2 or
3)
25 CPSNE CPSNE Wb, Wn Compare Wb with Wn, 1 1 None
skip if
(2 or
3)
26 DAW DAW Wn Wn = decimal adjust Wn 1 1 C
27 DEC DEC f f = f -1 1 1 C,DC,N,OV,Z
DEC f,WREG WREG = f -1 1 1 C,DC,N,OV,Z
DEC Ws,Wd Wd = Ws - 1 1 1 C,DC,N,OV,Z
28 DEC2 DEC2 f f = f -2 1 1 C,DC,N,OV,Z
DEC2 f,WREG WREG = f -2 1 1 C,DC,N,OV,Z
DEC2 Ws,Wd Wd = Ws - 2 1 1 C,DC,N,OV,Z

Base # of
Assembly # of Status Flags
Instr Assembly Syntax Description cycle
Mnemonic words Affected
# s
29 DISI DISI #lit14 Disable Interrupts for 1 1 None
k instruction cycles
30 DIV DIV.S Wm,Wn Signed 16/16-bit 1 18 N,Z,C, OV
Integer Divide
DIV.SD Wm,Wn Signed 32/16-bit 1 18 N,Z,C, OV
Integer Divide
DIV.U Wm,Wn Unsigned 16/16-bit 1 18 N,Z,C, OV
Integer Divide
DIV.UD Wm,Wn Unsigned 32/16-bit 1 18 N,Z,C, OV
Integer Divide
31 DIVF DIVF Wm,Wn Signed 16/16-bit 1 18 N,Z,C, OV
Fractional Divide
32 DO DO #lit14,Expr Do code to PC+Expr, 2 2 None
lit14+1 times
DO Wn,Expr Do code to PC+Expr, 2 2 None
(Wn)+1 times
33 ED ED Wm*Wm,Acc,Wx,Wy,Wxd Euclidean Distance ( 1 1 OA,OB,OAB,
no accumulate)
SA,SB,SAB
34 EDAC EDAC Wm*Wm,Acc,Wx,Wy,Wxd Euclidean Distance 1 1 OA,OB,OAB,
SA,SB,SAB
35 EXCH EXCH Wns,Wnd Swap Wns with Wnd 1 1 None
36 FBCL FBCL Ws,Wnd Find Bit Change from 1 1 C
Left (MSb) Side
37 FF1L FF1L Ws,Wnd Find First One from 1 1 C
Left (MSb) Side
38 FF1R FF1R Ws,Wnd Find First One from 1 1 C
Right (LSb) Side
39 GOTO GOTO Expr Go to address 2 2 None
GOTO Wn Go to indirect 1 2 None
40 INC INC f f=f+1 1 1 C,DC,N,OV,Z
INC f,WREG WREG = f + 1 1 1 C,DC,N,OV,Z
INC Ws,Wd Wd = Ws + 1 1 1 C,DC,N,OV,Z
41 INC2 INC2 f f=f+2 1 1 C,DC,N,OV,Z
INC2 f,WREG WREG = f + 2 1 1 C,DC,N,OV,Z
INC2 Ws,Wd Wd = Ws + 2 1 1 C,DC,N,OV,Z
42 IOR IOR f f = f .IOR. WREG 1 1 N,Z
IOR f,WREG WREG = f .IOR. 1 1 N,Z
WREG
IOR #lit10,Wn Wd = lit10 .IOR. Wd 1 1 N,Z
IOR Wb,Ws,Wd Wd = Wb .IOR. Ws 1 1 N,Z
IOR Wb,#lit5,Wd Wd = Wb .IOR. lit5 1 1 N,Z
43 LAC LAC Wso,#Slit4,Acc Load Accumulator 1 1 OA,OB,OAB,
SA,SB,SAB
44 LNK LNK #lit14 Link frame pointer 1 1 None
45 LSR LSR f f = Logical Right Shift 1 1 C,N,OV,Z
f
LSR f,WREG WREG = Logical 1 1 C,N,OV,Z
Right Shift f
LSR Ws,Wd Wd = Logical Right 1 1 C,N,OV,Z
Shift Ws
LSR Wb,Wns,Wnd Wnd = Logical Right 1 1 N,Z
Shift Wb by Wns
LSR Wb,#lit5,Wnd Wnd = Logical Right 1 1 N,Z
Shift Wb by lit5
46 MAC MAC Wm*Wn,Acc,Wx,Wxd,Wy,Wyd,Multiply and 1 1 OA,OB,OAB,
Accumulate
AWB SA,SB,SAB
MAC Wm*Wm,Acc,Wx,Wxd,Wy,WydSquare and 1 1 OA,OB,OAB,
Accumulate
SA,SB,SAB
47 MOV MOV f,Wn Move f to Wn 1 1 None
MOV f Move f to f 1 1 N,Z
MOV f,WREG Move f to WREG 1 1 N,Z
MOV #lit16,Wn Move 16-bit literal to 1 1 None
Wn
MOV.b #lit8,Wn Move 8-bit literal to 1 1 None
Wn
MOV Wn,f Move Wn to f 1 1 None
MOV Wso,Wdo Move Ws to Wd 1 1 None
MOV WREG,f Move WREG to f 1 1 N,Z
MOV.D Wns,Wd Move Double from 1 2 None
W(ns):W(ns+1) to Wd
MOV.D Ws,Wnd Move Double from 1 2 None
Ws to W(nd+1):W(nd)
48 MOVSAC MOVSAC Acc,Wx,Wxd,Wy,Wyd,AWB Pre-fetch and store 1 1 None
MIKROPROCESORI

accumulator
49 MPY MPY Wm*Wn,Acc,Wx,Wxd,Wy,Wyd Multiply Wm by Wn to 1 1 OA,OB,OAB,
Accumulator
SA,SB,SAB
MPY Wm*Wm,Acc,Wx,Wxd,Wy,WydSquare Wm to 1 1 OA,OB,OAB,
Accumulator
SA,SB,SAB
50 MPY.N MPY.N Wm*Wn,Acc,Wx,Wxd,Wy,Wyd -(Multiply Wm by Wn) 1 1 None
to Accumulator

Base # of
Assembly # of Status Flags
Instr Assembly Syntax Description cycle
Mnemonic words Affected
# s
51 MSC MSC Wm*Wm,Acc,Wx,Wxd,Wy,Wyd,Multiply and Subtract 1 1 OA,OB,OAB,
from Accumulator
AWB SA,SB,SAB
52 MUL MUL.SS Wb,Ws,Wnd {Wnd+1, Wnd} = 1 1 None
signed(Wb) *
signed(Ws)
MUL.SU Wb,Ws,Wnd {Wnd+1, Wnd} = 1 1 None
signed(Wb) *
unsigned(Ws)
MUL.US Wb,Ws,Wnd {Wnd+1, Wnd} = 1 1 None
unsigned(Wb) *
signed(Ws)
MUL.UU Wb,Ws,Wnd {Wnd+1, Wnd} = 1 1 None
unsigned(Wb) *
unsigned(Ws)
MUL.SU Wb,#lit5,Wnd {Wnd+1, Wnd} = 1 1 None
signed(Wb) *
unsigned(lit5)
MUL.UU Wb,#lit5,Wnd {Wnd+1, Wnd} = 1 1 None
unsigned(Wb) *
unsigned(lit5)
MUL f W3:W2 = f * WREG 1 1 None
53 NEG NEG Acc Negate Accumulator 1 1 OA,OB,OAB,
SA,SB,SAB
NEG f f=f+1 1 1 C,DC,N,OV,Z
NEG f,WREG WREG = f + 1 1 1 C,DC,N,OV,Z
NEG Ws,Wd Wd = Ws + 1 1 1 C,DC,N,OV,Z
54 NOP NOP No Operation 1 1 None
NOPR No Operation 1 1 None
55 POP POP f Pop f from top-of- 1 1 None
stack (TOS)
POP Wdo Pop from top-of-stack 1 1 None
(TOS) to Wdo
POP.D Wnd Pop from top-of-stack 1 2 None
(TOS) to
W(nd):W(nd+1)
POP.S Pop Shadow 1 1 All
Registers
56 PUSH PUSH f Push f to top-of-stack 1 1 None
(TOS)
PUSH Wso Push Wso to top-of-1 1 None
stack (TOS)
PUSH.D Wns Push W(ns):W(ns+1) 1 2 None
to top-of-stack (TOS)
PUSH.S Push Shadow 1 1 None
Registers
57 PWRSAV PWRSAV #lit1 Go into Sleep or Idle 1 1 WDTO,Sleep
mode
58 RCALL RCALL Expr Relative Call 1 2 None
RCALL Wn Computed Call 1 2 None
59 REPEAT REPEAT #lit14 Repeat Next 1 1 None
Instruction lit14+1
times
REPEAT Wn Repeat Next 1 1 None
Instruction (Wn)+1
times
60 RESET RESET Software device 1 1 None
Reset
61 RETFIE RETFIE Return from interrupt 1 3 (2) None
62 RETLW RETLW #lit10,Wn Return with literal in 1 3 (2) None
Wn
63 RETURN RETURN Return from 1 3 (2) None
Subroutine
64 RLC RLC f f = Rotate Left 1 1 C,N,Z
through Carry f
RLC f,WREG WREG = Rotate Left 1 1 C,N,Z
through Carry f
RLC Ws,Wd Wd = Rotate Left 1 1 C,N,Z
through Carry Ws
65 RLNC RLNC f f = Rotate Left (No 1 1 N,Z
Carry) f
RLNC f,WREG WREG = Rotate Left 1 1 N,Z
(No Carry) f
RLNC Ws,Wd Wd = Rotate Left (No 1 1 N,Z
Carry) Ws
66 RRC RRC f f = Rotate Right 1 1 C,N,Z
through Carry f
RRC f,WREG WREG = Rotate 1 1 C,N,Z
Right through Carry f
RRC Ws,Wd Wd = Rotate Right 1 1 C,N,Z
through Carry Ws
67 RRNC RRNC f f = Rotate Right (No 1 1 N,Z
Carry) f
RRNC f,WREG WREG = Rotate 1 1 N,Z
Right (No Carry) f
RRNC Ws,Wd Wd = Rotate Right 1 1 N,Z
(No Carry) Ws
68 SAC SAC Acc,#Slit4,Wdo Store Accumulator 1 1 None
SAC.R Acc,#Slit4,Wdo Store Rounded 1 1 None
Accumulator
69 SE SE Ws,Wnd Wnd = sign extended 1 1 C,N,Z
Ws
70 SETM SETM f f = 0xFFFF 1 1 None
SETM WREG WREG = 0xFFFF 1 1 None
SETM Ws Ws = 0xFFFF 1 1 None

Base # of
MIKROPROCESORI

Assembly # of Status Flags


Instr Assembly Syntax Description cycle
Mnemonic words Affected
# s
71 SFTAC SFTAC Acc,Wn Arithmetic Shift Accumulator 1 1 OA,OB,OAB,
by (Wn)
SA,SB,SAB
SFTAC Acc,#Slit6 Arithmetic Shift Accumulator 1 1 OA,OB,OAB,
by Slit6
SA,SB,SAB
72 SL SL f f = Left Shift f 1 1 C,N,OV,Z
SL f,WREG WREG = Left Shift f 1 1 C,N,OV,Z
SL Ws,Wd Wd = Left Shift Ws 1 1 C,N,OV,Z
SL Wb,Wns,Wnd Wnd = Left Shift Wb by Wns 1 1 N,Z
SL Wb,#lit5,Wnd Wnd = Left Shift Wb by lit5 1 1 N,Z
73 SUB SUB Acc Subtract Accumulators 1 1 OA,OB,OAB,
SA,SB,SAB
SUB f f = f - WREG 1 1 C,DC,N,OV,Z
SUB f,WREG WREG = f - WREG 1 1 C,DC,N,OV,Z
SUB #lit10,Wn Wn = Wn - lit10 1 1 C,DC,N,OV,Z
SUB Wb,Ws,Wd Wd = Wb - Ws 1 1 C,DC,N,OV,Z
SUB Wb,#lit5,Wd Wd = Wb - lit5 1 1 C,DC,N,OV,Z
74 SUBB SUBB f f = f - WREG - (C) 1 1 C,DC,N,OV,Z
SUBB f,WREG WREG = f - WREG - (C) 1 1 C,DC,N,OV,Z
SUBB #lit10,Wn Wn = Wn - lit10 - (C) 1 1 C,DC,N,OV,Z
SUBB Wb,Ws,Wd Wd = Wb - Ws - (C) 1 1 C,DC,N,OV,Z
SUBB Wb,#lit5,Wd Wd = Wb - lit5 - (C) 1 1 C,DC,N,OV,Z
75 SUBR SUBR f f = WREG - f 1 1 C,DC,N,OV,Z
SUBR f,WREG WREG = WREG - f 1 1 C,DC,N,OV,Z
SUBR Wb,Ws,Wd Wd = Ws - Wb 1 1 C,DC,N,OV,Z
SUBR Wb,#lit5,Wd Wd = lit5 - Wb 1 1 C,DC,N,OV,Z
76 SUBBR SUBBR f f = WREG - f - (C) 1 1 C,DC,N,OV,Z
SUBBR f,WREG WREG = WREG -f - (C) 1 1 C,DC,N,OV,Z
SUBBR Wb,Ws,Wd Wd = Ws - Wb - (C) 1 1 C,DC,N,OV,Z
SUBBR Wb,#lit5,Wd Wd = lit5 - Wb - (C) 1 1 C,DC,N,OV,Z
77 SWAP SWAP.b Wn Wn = nibble swap Wn 1 1 None
SWAP Wn Wn = byte swap Wn 1 1 None
78 TBLRDH TBLRDH Ws,Wd Read Prog<23:16> to 1 2 None
Wd<7:0>
79 TBLRDL TBLRDL Ws,Wd Read Prog<15:0> to Wd 1 2 None
80 TBLWTH TBLWTHWs,Wd Write Ws<7:0> to 1 2 None
Prog<23:16>
81 TBLWTL TBLWTL Ws,Wd Write Ws to Prog<15:0> 1 2 None
82 ULNK ULNK Unlink frame pointer 1 1 None
83 XOR XOR f f = f .XOR. WREG 1 1 N,Z
XOR f,WREG WREG = f .XOR. WREG 1 1 N,Z
XOR #lit10,Wn Wd = lit10 .XOR. Wd 1 1 N,Z
XOR Wb,Ws,Wd Wd = Wb .XOR. Ws 1 1 N,Z
XOR Wb,#lit5,Wd Wd = Wb .XOR. lit5 1 1 N,Z
84 ZE ZE Ws,Wnd Wnd = Zero-Extend Ws 1 1 C,Z,N

You might also like