porturi paralele
DESCRIPTION
Porturi paraleleTRANSCRIPT
Capitolul 6
40
PPOORRTTUURRIILLEE PPAARRAALLEELLEE
6.1. Introducere Funcţia principală a porturilor paralele este efectuarea transferului general şi bidirecţional de date (General Purpose Input Output, GPIO). Pe de altă parte, liniile porturilor paralele au şi funcţii alternative deoarece sunt utilizate de blocurile periferice ale microcontrolerului. Numărul porturilor şi dimensiunile acestora depind de varianta de încapsulare a microcontrolerului (48, 52, 80 de pini). În cazul de faţă vom lua în considerare varianta de încapsulare de 80 de pini.
6.2. Descrierea porturilor paralele În varianta de încapsulare de 80 de pini, porturile disponibile şi funcţiile alternative ale acestora sunt următoarele:
- un port T de 8 biţi conectat la blocul TIM (Timer) şi eventual la blocul PWM;
- un port S de 4 biţi conectat la blocul SCI; - un port M de 6 biţi, conectat la blocul MSCAN şi SPI; - un port P de 8 biţi conectat la blocul PWM şi la care se pot genera
întreruperi externe; - un port J de 2 biţi de la care se pot genera întreruperi externe; - un port AD de 8 biţi la care este conectat blocul ATD (convertor analog
numeric); - trei porturi de 8 biţi, porturile A şi B utilizate pentru accesarea memoriilor
externe şi portul E utilizat pentru gestionarea diverselor semnale de control.
6.2.1. Descrierea porturilor paralele T, S, M, P, J şi AD
Modul de conectare a porturilor T, S, M, P şi J cu blocurile periferice aferente este indicat în figura 6.1. Conectarea acestor porturi este controlată de modulul PIM (Port Integration Module) al microcontrolerelor HCS12. Legat de porturile paralele, în primul rând se alege direcţia de comunicaţie (linie de intrare sau ieşire). Pentru liniile selectate ca intrări, se programează:
- posibilitatea de a conecta rezistenţe la sursa VDD (pull-up) sau la masa VSS (pull-down);
- posibilitatea de a se genera întreruperi, pe front pozitiv sau negativ numai pentru liniile porturilor P şi J configurate ca intrări dar şi ca ieşiri.
Pentru liniile selectate ca ieşiri, se programează: - posibilitatea reducerii puterii de comandă;
6.2. Descrierea porturilor paralele
41
- posibilitatea de selectare a ieşirilor cu drena în gol pentru realizarea funcţiei SAU cablat. La aceste ieşiri se pot conecta rezistenţe pull-up (numai pentru liniile porturilor S şi M).
Controlul funcţiilor porturilor paralele amintite anterior se realizează cu ajutorul registrelor ataşate fiecărui port. Aceste registre se pot clasifica în următoarele tipuri:
- registre de stabilire a direcţiei de comunicaţie DDRx (Data Direction Register; x = T, S, M, P, J, AD; de exemplu: registrul DDRT; DDRT_DDRT2=1 – linia PT2 este ieşire; DDRT_DDRT2=0 – linia PT2 este intrare);
AN0 AN1 AN2 AN3 AN4 AN5 AN6 AN7
Port
AD
Blocul ATD
PAD0 PAD1 PAD2 PAD3 PAD4 PAD5 PAD6 PAD7
RXCAN TXCAN
Blocul CAN
MISO /SS
MOSI SCK
Blocul SPI
Port
M
PM0 PM1 PM2 PM3 PM4 PM5
Logică întreru-
re externă
Port
J PJ6 PJ7
Blocul SCI
PP0 PP1 PP2 PP3 PP4 PP5 PP6 PP7
PT0 PT1 PT2 PT3 PT4 PT5 PT6 PT7
RXD TXD
Blocul PWM
PWM0 PWM1 PWM2 PWM3 PWM4 PWM5
IOC0 IOC1 IOC2 IOC3 IOC4 IOC5 IOC6 IOC7
MUX
Logică întreru-
pere externă
Port
T
Port
P
Blocul TIM
Port
S
PS0 PS1 PS2 PS3
Figura 6.1. Modul de conectare a porturilor T, S, M, P şi J.
- registre de intrare şi ieşire PTx (Port I/O Register; x = T, S, M, P, J, AD;
de exemplu: registrul PTT). Printr-o scriere în aceste registre se programează nivelele logice la liniile porturilor definite ca ieşiri. La o citire din aceste registre se obţin nivelele logice de la pinii sau liniile definite ca intrări, pentru liniile definite ca ieşiri se citeşte conţinutul registrului PTx;
- registre de intrare PTIx (Port Input Register; x = T, S, M, P, J, AD; de exemplu: registrul PTIT). Scrierea în acest registru nu are sens. La citire se obţin totdeauna stările logice de la pinii externi sau liniile portului indiferent dacă acestea au fost definite ca intrări sau ieşiri. În cazul citirii ieşirilor, se poate face comparaţia cu conţinutul registrului PTx pentru a depista scurtcircuite sau suprasarcini;
PORTURILE PARALELE
42
- registre de programare a puterii reduse de ieşire RDRx (Reduced Drive Register; x = T, S, M, P, J, AD; de exemplu: registrul RDRT; RDRT_RDRT2=0 – putere maximă de comandă la ieşirea PT2; RDRT_RDRT2=1 – putere de comandă redusă la 1/3 la ieşirea PT2). Programarea cu aceste registre are sens numai pentru liniile definite ca ieşiri;
- registre de selecţie a cuplării rezistenţelor de pull-up sau pull-down PERx (Pull Enable Register, x = T, S, M, P, J, AD; de exemplu: registrul PERT; PERT_PERT2=0 – este invalidată posibilitatea cuplării de rezistenţe up/down; PERT_PERT2=1 – este validată posibilitatea cuplării de rezistenţe up/down). Rezistenţele pull-up şi pull-down se pot conecta la liniile porturilor de finite ca intrări. Rezistenţele pull-up mai pot fi conectate şi la ieşirile care pot realiza funcţiile SAU cablat (liniile porturilor S şi M);
- registre de selectare a polarităţii PPSx (Port Polarity Select Register, x = T, S, M, P, J, AD). Aceste registre au mai multe semnificaţii. Pentru toate porturile, biţii registrelor PPSx (x = T, S, M, P, J, AD) selectează tipurile de rezistenţe care se pot conecta la liniile porturilor definite ca intrări şi pentru care s-a validat, din registrele PERx, posibilitatea de conectare a rezistenţelor (de exemplu: DDRT_DDRT2=0, PERT_PERT2=1, PPST_PPST2=0 – la intrarea PT2 se va cupla o rezistenţă pull-up iar dacă PPST_PPST2=1 o rezistenţă pull-down). De la liniile porturilor J şi P, definite ca intrări sau ieşiri, se pot genera întreruperi mascabile de tip CCR_I. Pentru aceste porturi, biţii registrelor PPSJ şi PPSP mai precizează şi frontul activ care generează întreruperile (de exemplu: PPSJ_PPSJ7=0 – frontul activ este frontul negativ, PPSJ_PPSJ7=1 – frontul activ este frontul pozitiv). Liniile porturilor S şi M, definite ca ieşiri, pot fi configurate cu drena în gol pentru realizarea funcţiei SAU cablat (wired OR). Din registrele PERS şi PERM se poate valida conectarea de rezistenţe. În acest caz, biţii 0 din registrele PPSS şi PPSM indică conectarea rezistenţelor pull-up la aceste ieşiri (de exemplu: DDRM_DDRM3=1, PERM_PERM3=1, PPSM_PPSM3=0, VOM3_VOM3=1 – la ieşirea cu drena în gol PM3 se conectează o rezistenţă pull-up);
- registre de selecţie ieşiri cu drena în gol VOMx (Wired OR Mode Register, x=S, M; de exemplu: registrul VOMS; VOMS_VOMS3=0 – ieşirea PS3 de tip push pull, VOMS_VOMS3=1– ieşirea PS3 de tip cu drena în gol);
- registre de validare întreruperi externe PIEx (Port Interrupt Enable Register, x=J,P; de exemplu: registrul PIEP; PIEP_PIEP7=1 – întreruperea de la linia PP7 este validată, PIEP_PIEP7=0 – întreruperea de la linia PP7 este invalidată);
- registre indicatoare de întrerupere PIFx (Port Interrupt Flag Register, de exemplu: registrul PIFP, PIFP_PIFP7 =1 – a apărut un front activ la pinul PP7, ştergerea acestui bit se realizează prin scrierea unui “1” logic în acest bit).
6.2. Descrierea porturilor paralele
43
- registrul MODRR de asociere a modulului TIM sau PWM la portul T (Module Routing Register, MODRR_[MODRR4÷MODRR0]=00001 – asociere linii PT4÷PT1 la TIM şi PT0 la PWM, stare de resetare -MODRR_[MODRR4÷MODRR0]- 00000).
În tabelul 6.1 este dată starea porturilor după resetare. Tabelul 6.1. Starea porturilor în urma resetării.
Port Starea porturilor după resetare Direcţie
comunicaţie Polarizare Modul putere
redusă ieşire Modul SAU
cablat Modul
întrerupere T Intrare High Z Dezactivat - - S Intrare Pull-up Dezactivat Dezactivat - M Intrare Pull-up Dezactivat Dezactivat - P Intrare High Z Dezactivat - Dezactivat J Intrare High Z Dezactivat - Dezactivat
AD Intrare High Z Dezactivat - -
În ceea ce priveşte generarea întreruperilor externe, pentru fiecare port P şi J este alocat câte un vector de întrerupere. Bitul general de validare a acestor întreruperi este bitul CCR_I. Intrările de întrerupere ale porturilor P şi J sunt prevăzute cu filtre pentru eliminarea impulsurilor scurte (glitch) care pot genera cereri de întrerupere false în modul STOP. Impulsurile mai scurte de 3µs sunt filtrate iar pentru generarea certă a unei întreruperi, durata impulsului trebuie să fie de minim 10µs. În tabelul 6.2 sunt prezentate sintetic efectele biţilor de comandă ale registrelor DDR (direcţie comunicaţie), PT (nivele ieşiri), RDR (putere redusă ieşiri), PER (validare pull-up/pull/down), PPS (selecţie pull-up/pull-down şi front activ întrerupere) şi PIE (validare întrerupere externă). Tabelul 6.2. Efectul biţilor de comandă asupra stării porturilor. DDR PT RDR PER PPS PIE1 Funcţie Polarizare Întrerupere1
0 x x 0 x 0 Intrare High Z Dezactivat 0 x x 1 0 0 Intrare Pull-up Dezactivat 0 x x 1 1 0 Intrare Pull-down Dezactivat 0 x x 0 0 1 Intrare High Z Front negativ 0 x x 0 1 1 Intrare High Z Front pozitiv 0 x x 1 0 1 Intrare Pull-up Front negativ 0 x x 1 1 1 Intrare Pull-down Front pozitiv 1 0 0 x x 0 Ieşire în 0, Pmax2 High Z Dezactivat 1 1 0 x x 0 Ieşire în 1, Pmax2 High Z Dezactivat 1 0 1 x x 0 Ieşire în 0,Predus3 High Z Dezactivat 1 1 1 x x 0 Ieşire în 1,Predus3 High Z Dezactivat 1 0 0 x 0 1 Ieşire în 0, Pmax2 High Z Front negativ 1 1 0 x 1 1 Ieşire în 1, Pmax2 High Z Front pozitiv 1 0 1 x 0 1 Ieşire în 0,Predus3 High Z Front negativ 1 1 1 x 1 1 Ieşire în 1,Predus3 High Z Front pozitiv
1Numai pentru porturile P şi J, 2Putere de comandă maximă la ieşiri, 3Putere de comandă redusă la ieşiri.
PORTURILE PARALELE
44
6.2.2. Descrierea porturilor paralele A, B şi E
Conectarea porturilor A, B şi E este controlată de modulul MEBI (Multiplexed External Bus Interface) al microcontrolerelor HCS12. Modul de conectare a acestor porturi este indicat în figura 6.2.
ADDR0/DATA0 ADDR1/DATA1 ADDR2/DATA2 ADDR3/DATA3 ADDR4/DATA4 ADDR5/DATA5 ADDR6/DATA6 ADDR7/DATA7
Port B
PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7
ADDR8/DATA8 ADDR9/DATA9 ADDR10/DATA10 ADDR11/DATA11 ADDR12/DATA12 ADDR13/DATA13 ADDR14/DATA14 ADDR15/DATA15
Port A
PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7
PE0 PE1 PE2 PE3 PE4 PE5 PE6 PE7
BKGD
Port E
/XIRQ /IRQ
R/ /W /LSTRB/ /TAGLO
ECLK IPIPE0/MODA IPIPE1/MODB
NOACC/ /XCLKS
BKGD/MODC/ /TAGHI
CORE
Figura 6.2. Modul de conectare a porturilor A, B şi E.
Funcţiile alternative ale porturilor de 8 biţi A şi B sunt de accesare a memoriilor externe. Prin acestea se generează adresele şi se efectuează multiplexat transferul datelor. Portul de 8 biţi E gestionează diverse semnale de control necesare atât pentru coordonarea transferului de date cu memoriile externe cât şi pentru coordonarea funcţionării microcontrolerului. Microcontrolerele HCS12 pot funcţiona în mai multe moduri. Aceste moduri se stabilesc în faza de resetare prin eşantionarea nivelelor logice de la pinii MODC, MODB şi MODA. Un mod des utilizat este acela în care microcontrolerele HCS12 funcţionează numai cu memoriile interne – modul Normal Single Chip. Acest mod se obţine dacă în faza de resetare pinii [MODC, MODB, MODA] sunt în starea 100. În modul Normal Single Chip, porturile A, B şi E sunt accesibile şi pot fi folosite ca porturi de intrare şi ieşire de uz general. Registrele de intrare/ieşire şi registrele de control ale direcţiei de comunicaţie, ataşate porturilor A, B şi E sunt: PORTA şi DDRA, PORTB şi DDRB, respectiv, PORTE şi DDRE. Semnificaţiile acestor registre sunt aceleaşi ca şi pentru registrele similare ataşate porturilor T, S, M, P şi J. Menţionăm că de la
portul E liniile XIRQ /PE0 şi IRQ /PE1 se pot folosi numai ca intrări de întrerupere sau ca intrări de date generale. Pentru cuplarea rezistenţelor de polarizare în situaţia în care liniile porturilor sunt definite ca intrări trebuie utilizaţi biţii PUCR_[PUPEE, PUPBE, PUPAE]. De exemplu: PUCR_PUPBE =0/1 – cuplarea rezistenţelor de polarizare la toate liniile de intrare ale portului B este
6.3. Caracteristicile electrice ale porturilor
45
dezactivată/activată. Validarea reducerii puterii de comandă la liniile porturilor definite ca ieşiri se face din biţii RDRIV_[RDPE, RDPB, RDPA]. De exemplu: RDRIV_RDPA =0/1 – este validată puterea maximă/redusă la toate liniile portului
A definite ca ieşiri. Întreruperea externă mascabilă CCR_I de la pinul IRQ /PE1 poate fi activă pe nivel 0 sau front negativ, selecţia se face din bitul IRQCR_IRQE (IRQCR_IRQE=0/1 – întrerupere activă pe nivel 0 /front negativ ). Validarea locală a acestei întreruperi se realizează cu ajutorul bitului IRQCR_IRQEN (IRQCR_IRQEN=0/1 – invalidare /validare întrerupere ). Deoarece portul E este folosit pentru vehicularea diverselor semnale de control, utilizarea acestui port pentru transfer general de date trebuie făcută cu precauţie
6.3. Caracteristicile electrice ale porturilor Pentru porturile paralele sunt prevăzuţi pini speciali de alimentare VDDX şi VSSX. Totuşi diferenţele maxime între potenţialele pinilor VDDX, VDDR şi VDDA, respectiv, VSSX, VSSR şi VSSA nu trebuie să depăşească domeniul ±0,3V. Asta înseamnă că cele trei tensiuni se aleg egale şi eventual fiecare tensiune este filtrată separat. Pentru alimentare sunt standardizate tensiunile de 5V şi 3,3V. Nivelele logice de intrare sunt: VIH = [0,65*VDDX ÷ VDDX + 0,3V] iar VIL = [V SSX – 0,3V ÷ 0,35*VDDX ]. Pentru VDDX = 5V, tensiunea de ieşire VOL nu creşte peste 0,8V pentru curenţi de ieşire IOL de + 2mA (putere redusă) sau + 10mA (putere maximă). La fel, tensiunea de ieşire VOH rămâne în limitele VDDX - 0,8 V pentru curenţi de ieşire IOH de – 2mA (putere redusă) sau – 10mA (putere maximă). Pentru VDDX = 3,3V, tensiunea de ieşire VOL nu creşte peste 0,4V pentru curenţi de ieşire IOL de + 0,9mA (putere redusă) sau + 4,75mA (putere maximă). La fel, tensiunea de ieşire VOH rămâne în limitele VDDX - 0,4V pentru curenţi de ieşire IOH de – 0,75mA (putere redusă) sau – 4mA (putere maximă).
6.4. Registrele ataşate porturilor paralele Se consideră că porturile paralele se utilizează pentru transfer general de date iar microcontrolerul nu utilizează memorie externă ( modul single chip). Modul de utilizare al liniilor porturilor paralele de către blocurile periferice va fi discutat la fiecare bloc periferic în parte. Totuşi la registrele de intrare şi ieşire I/O (Port I/O Register) sunt indicate funcţiile alternative ale liniilor porturilor paralele şi blocurile periferice aferente.
6.4.1. Registrele ataşate portului T PTT PTT70 PTT60 PTT50 PTT40 PTT30 PTT20 PTT10 PTT00
Bloc TIM
IOC7 IOC6 IOC5 IOC4 IOC3 IOC2 IOC1 IOC0
Bloc PWM
PWM4 PWM3 PWM2 PWM1 PWM0
PTIT PTIT7-R PTIT6-R PTIT5-R PTIT4-R PTIT3-R PTIT2-R PTIT1-R PTIT0-R
DDRT DDRT70 DDRT60
DDRT50 DDRT40 DDRT30 DDRT20 DDRT10 DDRT00
PORTURILE PARALELE
46
RDRT RDRT70 RDRT60 RDRT50 RDRT40 RDRT30 RDRT20 RDRT10 RDRT00
PERT PERT70 PERT60 PERT50 PERT40 PERT30 PERT20 PERT10 PERT00
PPST PPST70 PPST60 PPST50 PPST40 PPST30 PPST20 PPST10 PPST00
MODRR x0 x0 x0 MODRR40 MODRR30 MODRR20 MODRR10 MODRR00
6.4.2. Registrele ataşate portului S PTS x0 x0 x0 x0 PTS30 PTS20 PTS10 PTS00
Bloc SCI TXD RXD PTIS x0 x0 x0 x0 PTIS3-R PTITS-R PTITS-R PTIS0-R
DDRS x0 x0
x0 x0 DDRS30 DDRS20 DDRS10 DDRS00
RDRS x0 x0 x0 x0 RDRS30 RDRS20 RDRS10 RDRS00
PERS x0 x0 x0 x0 PERS31 PERS21 PERS11 PERS01
PPSS x0 x0 x0 x0 PPSS30 PPSS20 PPSS10 PPSS00
WOMS x0 x0 x0 x0 WOMS30 WOMS20 WOMS10 WOMS00
6.4.3. Registrele ataşate portului M PTM x0 x0 PTM50 PTM40 PTM30 PTM20 PTM10 PTM00
Bloc MSCAN/SPI
SCK MOSI /SS MISO TXCAN RXCAN
PTIM x0 x0 PTIM5-R PTIM4-R PTIM3-R PTIM2-R PTIM1-R PTIM0-R
DDRM x0 x0
DDRM50 DDRM40 DDRM30 DDRM20 DDRM10 DDRM00
RDRM x0 x0 RDRM50 RDRM40 RDRM30 RDRM20 RDRM10 RDRM00
PERM x0 x0 PERM51 PERM41 PERM31 PERM21 PERM11 PERM01
PPSM x0 x0 PPSM50 PPSM40 PPSM30 PPSM20 PPSM10 PPSM00
WOMM x0 x0 WOMM50 WOMM40 WOMM30 WOMM20 WOMM10 WOMM00
6.4.4. Registrele ataşate portului P PTP PTP70 PTP60 PTP50 PTP40 PTP30 PTP20 PTP10 PTP00
Bloc PWM PWM5 PWM4 PWM3 PWM2 PWM1 PWM0 PTIP PTIP70 PTIP60 PTIP5-R PTIP4-R PTIP3-R PTIP2-R PTIP1-R PTIP0-R
DDRP DDRP70 DDRP60
DDRP50 DDRP40 DDRP30 DDRP20 DDRP10 DDRP00
RDRP RDRP70 RDRP60 RDRP50 RDRP40 RDRP30 RDRP20 RDRP10 RDRP00
PERP PERP70 PERP60 PERP50 PERP40 PERP30 PERP20 PERP10 PERP00
6.4. Registrele ataşate porturilor paralele
47
PPSP PPSP70 PPSP60 PPSP50 PPSP40 PPSP30 PPSP20 PPSP10 PPSP00
PIEP PIEP70 PIEP60 PIEP50 PIEP40 PIEP30 PIEP20 PIEP10 PIEP00
PIFP PIFP70 PIFP60 PIFP50 PIFP40 PIFP30 PIFP20 PIFP10 PIFP00
6.4.5. Registrele ataşate portului J PTJ PTJ70 PTJ60 x0 x0 x0 x0 x0 x0
PTIJ PTIJ7-R PTIJ6-R x0 x0 x0 x0 x0 x0
DDRJ DDRJ70 DDRJ60
x0 x0 x0 x0 x00 x0
RDRJ RDRJ70 RDRJ60 x0 x0 x0 x0 x0 x0
PERJ PERJ70 PERJ60 x0 x0 x0 x0 x0 x0
PPSJ PPSJ70 PPSJ60 x0 x0 x0 x0 x0 x0
PIEJ PIEJ70 PIEJ60 x0 x0 x0 x0 x0 x0
PIFJ PIFJ70 PIFJ60 x0 x0 x0 x0 x0 x0
6.4.6. Registrele ataşate portului AD PTAD PTAD70 PTAD60 PTAD50 PTAD40 PTAD30 PTAD20 PTAD10 PTAD00
PTIAD PTIAD7-R PTAID6-R PTAID5-R PTAID4-R PTAID3-R PTAID2-R PTAID1-R PTAID0-R
DDRAD DDRAD70 DDRAD60
DDRAD50 DDRAD40 DDRAD30 DDRAD20 DDRAD10 DDRAD00
RDRAD RDRAD70 RDRAD60 RDRAD50 RDRAD40 RDRAD30 RDRAD20 RDRAD10 RDRAD00
PERAD PERAD70 PERAD60 PERAD50 PERAD40 PERAD30 PERAD20 PERAD10 PERAD00
PPSAD PPSAD70 PSAD60 PSAD50 PSAD40 PSAD30 PSAD20 PSAD10 PSAD00
6.4.7. Registrele ataşate porturilor A, B şi E PORTA BIT70 BIT60 BIT50 BIT40 BIT30 BIT20 BIT10 BIT00
DDRA BIT70 BIT60 BIT50 BIT40 BIT30 BIT20 BIT10 BIT00
PORTB BIT70 BIT60 BIT50 BIT40 BIT30 BIT20 BIT10 BIT00
DDRB BIT70 BIT60 BIT50 BIT40 BIT30 BIT20 BIT10 BIT00
PORTE BIT70 BIT60 BIT50 BIT40 BIT30 BIT20 BIT1-R BIT0-R
DDRE BIT70 BIT60 BIT50 BIT40 BIT30 BIT20 x0 x0
PUCR PUPKE1 x0 x0 PUPEE1 x0 x0 PUPBE0 PUPAE0
RDRIV RDRK1 x0 x0 RDPE0 x0 x0 RDPB0 RDPA0
PORTURILE PARALELE
48
IRQCR IRQE0 IRQEN1 x0 x0 x0 x0 x0 x0
Legendă:
- notaţia biţilor Bita din registre: Bit – numele bitului, x – bit neimplementat (se citeşte 0 iar scrierea nu are efect); a – valoare de reset, a=- valoare neprecizată; R – bit de tip read only.
6.5. Aplicaţii Dăm un exemplu de iniţializare a porturilor P, B şi T din modulul inDART-HCS12 echipat cu un microcontroler MC9S12C32. La acest modul sunt făcute următoarele conexiuni:
- între liniile PP0, PP1, PP2 şi PP3 ale portului P şi masă, sunt conectate patru butoane bipoziţionale;
- între liniile portului B şi masă, prin intermediul rezistenţelor de limitare, sunt conectate 8 LED-uri cu catozii la masă;
- între liniile portului T şi VDD sunt conectate 8 comutatoare bipoziţionale. Pentru funcţionarea corectă a sistemului porturile trebuie programate astfel:
- liniile PP0, PP1, PP2 şi PP3 ale portului P trebuie definite ca intrări la care trebuie conectate rezistenţe de polarizare pull-up;
- liniile portului B trebuie definite ca ieşiri şi putere de comandă maximă; - liniile portului T trebuie definite ca intrări la care trebuie conectate
rezistenţe de polarizare pull-down. Dăm în continuare secvenţa de programare a celor trei porturi.
void PeriphInit (void) { PERP = 0x0F; // validare conectare rezistenţe la liniile PP0, PP1, PP2 şi PP3 DDRB = 0xFF; // definire linii port B ca ieşiri PTB = 0x00; // nivele 0 la ieşirile port B, LED-uri stinse PERT = 0xFF; // validare conectare rezistenţe la liniile PT7÷PT0 PPST = 0xFF; //selecţie rezistenţe de polarizare pull-down }
Pentru portul P se validează numai posibilitatea de conectare a rezistenţelor de polarizare la liniile PP0÷PP3 ale portului P şi se folosesc valorile de după resetare a registrelor DDRP şi PPSP. La portul B se programează liniile ca ieşiri şi nivelele 0 la ieşiri (LED-uri stinse). Puterea maximă rezultă implicit din starea de după resetare a registrului RDRB. La portul T se validează posibilitatea de conectare a rezistenţelor de polarizare la liniile PT7÷PT0 şi se selectează aceste rezistenţe de tip pull-down. Se foloseşte starea de după resetare a registrului DDRT.
Note bibliografice [1] MC9S12C Family/MC9S12GC Family Reference Manual (Chapter 2 Port Integration Module (PIM9C32) Block Description), Rev 01.24, 05/2010, Freescale Semiconductors.
6.5. Aplicaţii
49
[2] MC9S12C Family/MC9S12GC Family Reference Manual (Chapter 4 Multiplexed External Bus Interface (MEBIV3)), Rev 01.24, 05/2010, Freescale Semiconductors.