Conf. univ. dr. ing. Sorin Nicola Iulie 2017 CRAIOVA ii UNIVERSITATEA DIN CRAIOVA FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ DEPARTAMENTUL… [623892]
UNIVERSITATEA DIN CRAIOVA
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI
ELECTRONICĂ
DEPARTAMENTUL DE AUTOMATICĂ ȘI ELECTRONICĂ
PROIECT DE DIPLOMĂ
Mihaela -Lavinia Nedeianu
COORDONATOR ȘTIINȚIFIC
Conf. univ. dr. ing. Sorin Nicola
Iulie 2017
CRAIOVA
ii
UNIVERSITATEA DIN CRAIOVA
FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI
ELECTRONICĂ
DEPARTAMENTUL DE AUTOMATICĂ ȘI ELECTRONICĂ
Aplicații automotive cu familia de microcontrolere Renesas RX63N
Mihaela -Lavinia Nedeianu
COORDONATOR ȘTIINȚIF IC
Conf.univ.dr.ing. Sorin Nicola
Iulie 2017
CRAIOVA
iii
„O parte a virtuții constă în învățătură, alta în exercițiu. Trebuie pe de o parte să înveți, pe de alta să
întărești prin practică ce ai învățat..”
Lucius Annaeus Senaca
iv
DECLA RAȚIE DE ORIGINALITATE
Subsemnatul Nedeianu Mihaela Lavinia, student: [anonimizat], Calculatoare și Electronică a Universității din Craiova, certific prin
prezenta că am luat la cunoș tință de cele prezentate mai jos și că îmi asum, în acest context,
originalitatea proiectului meu de licență:
• cu titlul Aplicații automotive cu familia de microcontrolere Renesas RX63N,
• coordonată de Conf.univ.dr.ing. Sorina Nicola,
• prezentată în sesiun ea Iulie 2017.
La elaborarea proiectului de licență, se consideră plagiat una dintre următoarele acțiuni:
• reproducerea exactă a cuvintelor unui alt autor, dintr -o altă lucrare, în limba română sau prin
traducere dintr -o altă limbă, dacă se omit ghilimele și referința precisă,
• redarea cu alte cuvinte, reformularea prin cuvinte proprii sau rezumarea ideilor din alte
lucrări, dacă nu se indică sursa bibliografică,
• prezentarea unor date experimentale obținute sau a unor aplicații realizate de alți autori făr ă
menționarea corectă a acestor surse,
• însușirea totală sau parțială a unei lucrări în care regulile de mai sus sunt respectate, dar care
are alt autor.
Pentru evitarea acestor situații neplăcute se recomandă:
• plasarea între ghilimele a citatelor direct e și indicarea referinței într -o listă corespunzătoare la
sfărșitul lucrării,
• indicarea în text a reformulării unei idei, opinii sau teorii și corespunzător în lista de referințe
a sursei originale de la care s -a făcut preluarea,
• precizarea sursei de la care s -au preluat date experimentale, descrieri tehnice, figuri, imagini,
statistici, tabele et caetera,
• precizarea referințelor poate fi omisă dacă se folosesc informații sau teorii arhicunoscute, a
căror paternitate este unanim cunoscută și acceptată.
Data, Semnătura candidat: [anonimizat],
v
UNIVERSITATEA DIN CRAIOVA
Facultatea de Automatică, Calculatoare și Electronică
Departamentul de Automatică și Electronică
Aprobat la data de
…………………
Șef de departament,
Prof. dr. ing.
Emil PETRE
PROIECTU L DE DIPLOMĂ
Numele și prenumele student: [anonimizat]/ -ei:
Nedeianu Mihaela -Lavinia
Enunțul temei:
Aplicații automotive cu familia de microcontrolere Renesas
RX63N
Datele de pornire:
Studierea caracteristicelor microcontrolerelor Renesas
RX63N
Conțin utul proiectului:
Introducere
Arhitectura de unitate centrală renesas 32 biți RX600
Familia de microcontrolere RX63N
Descrierea sistemului de dezvoltare Renesas Demonstration
Kit for RX63N
Medii de dezvoltare și testare a aplicațiilor
Aplicații demonstr ative cu Renesas Demonstration Kit for
RX63N
Concluzii
Bibliografie
Referințe Web
Codul sursă
vi
CD/DVD
Material grafic obligatoriu:
Da
Consultații:
Periodice
Conducătorul științific
(titlul, nume și prenume, semnătura): Conf.univ.dr.ing. Sorin Nicola
Data eliberării temei:
15.10.2016
Termenul estimat de predare a
proiectului:
29.06.2017
Data predării proiectului de către
student și semnătura acestuia:
vii
UNIVERSITATEA DIN CRAIOVA
Facultatea de Automatică, Calculatoare și Electronică
Depar tamentul de Automatică și Electronică
REFERATUL CONDUCĂTORULUI ȘTIINȚIFIC
Numele și prenumele candidatului/ -ei: Nedeianu Mihaela Lavinia
Specializarea: Ingineria Sistemelor Multimedia
Titlul proiectului: Aplicații automotive cu familia de microcontr olere Renesas
RX63N
Locația în care s -a realizat practica de
documentare (se bifează una sau mai
multe din opțiunile din dreapta): În facultate □
În producție □
În cercetare □
Altă locație: [ se detaliază ]
În urma analizei lucrării candidatul ui au fost constatate următoarele:
Nivelul documentării Insuficient
□ Satisfăcător
□ Bine
□ Foarte bine
□
Tipul proiectului Cercetare
□ Proiectare
□ Realizare
practică □ Altul
[se detaliază ]
Aparatul matematic utilizat Simplu
□ Mediu
□ Complex
□ Absent
□
Utilitate Contract de
cercetare □ Cercetare
internă □ Utilare
□ Altul
[se detaliază ]
Redactarea lucrării Insuficient
□ Satisfăcător
□ Bine
□ Foarte bine
□
Partea grafică, desene Insuficientă
□ Satisfăcătoare
□ Bună
□ Foarte bună
□
Realizarea
practică Contribuția autorului Insuficientă
□ Satisfăcătoare
□ Mare
□ Foarte mare
□
Complexitatea
temei Simplă
□ Medie
□ Mare
□ Complexă
□
Analiza cerințelor Insuficient
□ Satisfăcător
□ Bine
□ Foarte bine
□
Arhitectura Simp lă
□ Medie
□ Mare
□ Complexă
□
viii
Întocmirea
specificațiilor
funcționale Insuficientă
□ Satisfăcătoare
□ Bună
□ Foarte bună
□
Implementarea Insuficientă
□ Satisfăcătoare
□ Bună
□ Foarte bună
□
Testarea Insuficientă
□ Satisfăcătoare
□ Bună
□ Foarte bună
□
Funcționarea Da
□ Parțială
□ Nu
□
Rezultate experimentale Experiment propriu
□ Preluare din bibliografie
□
Bibliografie Cărți
Reviste
Articole
Referințe web
Comentarii
și
observații
În concluzie, se propune:
ADMITEREA PROIECTULUI
□ RESPINGEREA PROIECTULUI
□
Data, Semnătura conducătorului știi nțific,
ix
REZUMATUL PROIECTULUI
În lucrarea de licență cu tema „Aplic ații automotive cu familia de microcontrolere Renesas
RX63N” sunt prezentate caracteristicile microcontrolerelor din familia Renesas RX63N, dar și ale
sistemului de dezvoltare RDK pentru acestea. Pe lânga aceste caracteristici sunt realizate și explicate
două exemple de programe pentru acest sistem de dezvoltare, respectiv comutarea stării unui LED la
o întarziere generată de un sistem de ceas, dar și comunicația serială pentru calcularea unei sume de
control CRC pentru verificarea unității CRC a sistemului .
Prin realizarea acestui proiect s -a urmărit aprofundarea cunoștințelor legate de
microcontrolere și microprocesoare, dar și dezvoltarea aptitudinilor pentru programarea embedded.
Termenii cheie : Renesas, microcontroler , microprocesor , serial , CRC, RX63N
x
MULȚUMIRI
Adresez mulțumiri pentru contribuția si ajutorul venit din partea coordonatorului științific fără
de care nu aș fi putut duce la bun sfârșit această lucrare.
Doresc să mulțumesc și colegilor și apropiaților care m -au încurajat și motivat în ela borarea
acestui proiect.
xi
CUPRINS
1. INTRODUCERE ………………………….. ………………………….. ………………………….. ………………………….. ……… 1
1.1 SCOPUL ………………………….. ………………………….. ………………………….. ………………………….. ……………… 1
1.2 MOTIVAȚIA ………………………….. ………………………….. ………………………….. ………………………….. …………… 1
1.3 MICROCONTROLERE SI MI CROPROCESOARE , SISTEME ÎNCORPORATE ………………………….. ………………………….. ….. 1
2. ARHITECTURA DE UNITA TE CENTRALĂ RENESAS 32 BIȚI RX6 00 ………………………….. …………………………. 4
2.1 GENERALITĂȚI ………………………….. ………………………….. ………………………….. ………………………….. ……….. 4
2.2 REGIȘTRII ………………………….. ………………………….. ………………………….. ………………………….. ……………… 5
2.2.1 Regiștrii de uz ge neral ………………………….. ………………………….. ………………………….. ………………….. 5
2.2.2 Regiștrii de control ………………………….. ………………………….. ………………………….. ………………………. 5
2.2.3 Registru asociat cu instrucțiuni DSP ………………………….. ………………………….. ………………………….. .. 5
2.3 MEMORII INTERNE ………………………….. ………………………….. ………………………….. ………………………….. ….. 5
2.4 MAGISTRALE ………………………….. ………………………….. ………………………….. ………………………….. …………. 7
2.4.1 Magistrala CAN(Controller Area Network) ………………………….. ………………………….. ………………….. 8
2.4.2 Magistrala LIN(Local Interconnect Network) ………………………….. ………………………….. ……………….. 9
2.4.3 Magistrala I2C(Inter Integrated Circuits) ………………………….. ………………………….. …………………… 10
2.4.4 Magistrala SPI(Serial Peripheral Interface) ………………………….. ………………………….. ………………… 11
2.4.5 Magistrala SCI(Serial Communications Interface) ………………………….. ………………………….. ………. 12
2.5 ÎNTRERUPERI ………………………….. ………………………….. ………………………….. ………………………….. ……….. 12
2.6 DMA (DIRECT MEMORY ACCESS ) ………………………….. ………………………….. ………………………….. …………… 13
2.7 SISTEMUL DE GENERARE A CEASULUI ………………………….. ………………………….. ………………………….. ………… 13
2.8 DISPOZITIVE DE I/O ………………………….. ………………………….. ………………………….. ………………………….. .. 15
3. FAMILIA DE MICROCONT ROLERE RX63N ………………………….. ………………………….. …………………………. 17
3.1 PORTURI DE INTRARE /IEȘIRE ………………………….. ………………………….. ………………………….. ………………….. 17
3.2 SISTEM DE CEAS ………………………….. ………………………….. ………………………….. ………………………….. ……. 18
3.2.1 Unitate de ceas cu pulsație(TPU) ………………………….. ………………………….. ………………………….. …. 18
3.2.2 Generator programabil de impulsuri(PPG) ………………………….. ………………………….. ………………… 19
3.2.3 Ceas pe 8 biți(TMR) ………………………….. ………………………….. ………………………….. ……………………. 19
3.2.4 Ceas de tipul comparare(CMT) ………………………….. ………………………….. ………………………….. ……. 20
3.2.5 Ceas de timp real(RTC) ………………………….. ………………………….. ………………………….. ……………….. 20
3.2.6 Ceas de gardă(WDT) ………………………….. ………………………….. ………………………….. ………………….. 21
3.2.7 Ceas de gardă i ndependent(IWDT) ………………………….. ………………………….. ………………………….. . 21
3.3 MAGISTRALE ………………………….. ………………………….. ………………………….. ………………………….. ……….. 21
3.4 CONVERTOR ANALOG -NUMERIC ………………………….. ………………………….. ………………………….. ……………… 22
xii
3.4.1 Convertor analog -numeric pe 12 biți ………………………….. ………………………….. ………………………… 22
3.4.2 Convertor analog -numeric pe 10 biți ………………………….. ………………………….. ………………………… 22
3.5 CONVERTOR NUMERIC -ANALOGIC ………………………….. ………………………….. ………………………….. ……………. 22
3.6 MEMORIE ………………………….. ………………………….. ………………………….. ………………………….. …………… 23
3.6.1 SRAM(Static Random Access Memory) ………………………….. ………………………….. ……………………… 23
3.6.2 Memoria Fl ash ………………………….. ………………………….. ………………………….. ………………………….. 24
3.6.3 Calculator CRC ………………………….. ………………………….. ………………………….. ………………………….. . 24
4. DESCRIEREA SISTEMULU I DE DEZVOLTARE RENE SAS DEMONSTRATION KI T FOR RX63N ………………….. 27
4.1 DIAGRAMA BLOC ………………………….. ………………………….. ………………………….. ………………………….. …… 28
4.2 COMUTATOARE TIP BUTON ………………………….. ………………………….. ………………………….. …………………… 28
4.3 LEDURI ………………………….. ………………………….. ………………………….. ………………………….. ………………. 28
4.4 SENZOR DE TEMPERATURĂ DIGITAL ………………………….. ………………………….. ………………………….. ………….. 29
4.5 ACCELEROMETRU PE 3 AXE ………………………….. ………………………….. ………………………….. ……………………. 30
4.6 LCD GRAFIC ………………………….. ………………………….. ………………………….. ………………………….. ………… 31
4.7 POTENȚIOMETRU ………………………….. ………………………….. ………………………….. ………………………….. ….. 32
4.8 PORT SERIAL ………………………….. ………………………….. ………………………….. ………………………….. ………… 32
4.9 METODE DE PROGRAMARE ………………………….. ………………………….. ………………………….. ……………………. 32
5. MEDII DE DEZVOLTARE ȘI TESTARE A APLICAȚI ILOR ………………………….. ………………………….. ………….. 33
5.1 MEDII DE DEZVOLTARE Ș I TESTARE A APLICAȚI ILOR………………………….. ………………………….. ……………………… 33
5.1.1 HEW(High Performance Embedded Workshop) ………………………….. ………………………….. ………….. 33
5.1.2 Renesas E2Studio ………………………….. ………………………….. ………………………….. ………………………. 35
5.1.3 IAR EW(IAR Embedded Workbench) ………………………….. ………………………….. …………………………. 37
6. APLICAȚII DEMONSTRAT IVE CU RENESAS DEMON STRATION KIT FOR RX6 3N ………………………….. …….. 40
6.1 CONTROLAREA STĂRII UN UI LED ………………………….. ………………………….. ………………………….. …………….. 40
6.2 COMUNICAȚIE SERIALĂ ………………………….. ………………………….. ………………………….. ………………………… 45
6.3 CONTROL REDUNDANT CICLIC(CRC) ………………………….. ………………………….. ………………………….. ………… 47
6.4 CALCULATOR CRC ………………………….. ………………………….. ………………………….. ………………………….. …. 48
7. CONCLUZII ………………………….. ………………………….. ………………………….. ………………………….. …………. 60
8. BIBLIOGRAFIE ………………………….. ………………………….. ………………………….. ………………………….. …….. 61
A. CODUL SURSĂ ………………………….. ………………………….. ………………………….. ………………………….. …….. 63
B. CD / DVD ………………………….. ………………………….. ………………………….. ………………………….. …………… 77
INDEX ………………………….. ………………………….. ………………………….. ………………………….. ………………………. 78
xiii
LISTA FIGURILOR
FIGURA 1. STRUCTURA SIMPLIFICAT Ă A UNUI MICROCONTRO LER ………………………….. ………………………….. …………………….. 3
FIGURA 2. HARTA DE MEMORIE ………………………….. ………………………….. ………………………….. ………………………….. …… 7
FIGURA 3. DIAGRAMA BLOC A MODUL ULUI CAN ………………………….. ………………………….. ………………………….. …………… 9
FIGURA 4. CONFIGURAȚIA MAGISTRA LEI SPI CU UN SINGUR DISPOZ ITIV SLAVE ………………………….. ………………………….. ……. 11
FIGURA 5. DIAGRAMA BLOC A MAGISTR ALEI SCI ………………………….. ………………………….. ………………………….. ………….. 12
FIGURA 6. CONFIGURAȚIE PINI DE INTRARE /IEȘIRE ………………………….. ………………………….. ………………………….. ………… 18
FIGURA 7. DIAGRAMA BLOC A CONVE RTORULUI NUMERI C-ANALOGIC ………………………….. ………………………….. ……………… 23
FIGURA 8. DIAGRAMA BLOC ROM/E2 DATAFLASH ………………………….. ………………………….. ………………………….. ……… 24
FIGURA 9. DIAGRAMA BLOC A CALCU LATORULUI CRC ………………………….. ………………………….. ………………………….. ……. 25
FIGURA 10. DISPUNEREA COMPONENTE LOR PE SISTEMUL DE D EZVOLTARE ………………………….. ………………………….. ………… 27
FIGURA 11. DIAGRAMA BLOC A SISTE MULUI DE DEZVOLTARE ………………………….. ………………………….. ………………………… 28
FIGURA 12. DIAGRAMA BLOC A ACCEL EROMETRULUI PE 3 AXE ………………………….. ………………………….. ………………………. 31
FIGURA 13. DIAGRAMA BLOC A ECRAN ULUI(LCD) ………………………….. ………………………….. ………………………….. ………… 31
FIGURA 14. FERESTRELE PRINCIPALE ALE MEDIULUI DE DEZ VOLTARE HEW ………………………….. ………………………….. ………… 34
FIGURA 15. ANTETURILE DIN BARA D E MENIU A MEDIULUI D E DEZVOLTARE HEW ………………………….. ………………………….. .. 34
FIGURA 16. INTERFAȚA MEDIULUI DE DEZVOLTARE E2S TUDIO ………………………….. ………………………….. ………………………. 35
FIGURA 17. PERSPECTIVA C/C++ A MEDIULUI DE DEZVO LTARE E2S TUDIO ………………………….. ………………………….. ………… 36
FIGURA 18. PERSPECTIVA DE DEPANA RE A MEDIULUI DE DEZ VOLTARE E2S TUDIO ………………………….. ………………………….. … 37
FIGURA 19. INTERFAȚA MEDIULUI DE DEZVOLTARE IAR EW ………………………….. ………………………….. …………………………. 38
FIGURA 20. CREAREA UNUI PROIECT NOU ÎN E2S TUDIO ………………………….. ………………………….. ………………………….. …. 40
FIGURA 21. FUNCȚIA DE COMUTARE A STĂRII LED-ULUI 10 ………………………….. ………………………….. …………………………. 41
FIGURA 22. FUNCȚIA PRINCIPALĂ PE NTRU STAREA LED-ULUI ………………………….. ………………………….. ……………………….. 41
FIGURA 23. ACCESAREA MENIULUI DE CONFIGURARE A DEPAN ĂRII ………………………….. ………………………….. …………………. 42
FIGURA 24. MENIUL DE CON FIGURARE A DEPANĂRII ………………………….. ………………………….. ………………………….. ……… 43
FIGURA 25. PORNIREA RULĂRII ………………………….. ………………………….. ………………………….. ………………………….. …. 43
FIGURA 26. OPRIREA RULĂRII ………………………….. ………………………….. ………………………….. ………………………….. …… 44
FIGURA 27. LED-UL 10 STINS ………………………….. ………………………….. ………………………….. ………………………….. …… 44
FIGURA 28. LED-UL 10 APRINS ………………………….. ………………………….. ………………………….. ………………………….. …. 45
FIGURA 29. DIAGRAMA FUNCȚIONALĂ UART ………………………….. ………………………….. ………………………….. …………….. 46
FIGURA 30. CONECTAREA SISTEMULUI DE DEZVOLTARE LA CA LCULATOR ………………………….. ………………………….. …………… 47
FIGURA 31. DIAGRAMA DE FUNCȚIONA RE A APLICAȚIEI ………………………….. ………………………….. ………………………….. ….. 49
FIGURA 32. CONECTARE LA TERMINAL UL TERATERM ………………………….. ………………………….. ………………………….. …….. 50
FIGURA 33. ACCESAREA MENIULUI DE CONFIGURARE A PORTU LUI SERIAL ………………………….. ………………………….. ………….. 51
FIGURA 34. SETĂRILE CORESPUNZĂTO ARE PORTULUI SERIAL AL SISTEMULUI DE DEZ VOLTARE ………………………….. ……………….. 52
FIGURA 35. SETAREA PORTURILOR ȘI PINILOR DE INTRARE /IEȘIRE AI INTERFEȚEI UART(SCI) ………………………….. ………………… 52
xiv
FIGURA 36. FUNCȚIA DE ACTIVARE A ÎNTRERUPERII PENTRU EMISIE ………………………….. ………………………….. …………………. 53
FIGURA 37. FUNCȚIA DE CITIRE ………………………….. ………………………….. ………………………….. ………………………….. …. 53
FIGURA 38. FUNCȚIA DE SCRIERE ÎN TERMINAL ………………………….. ………………………….. ………………………….. ……………. 54
FIGURA 39. FUNCȚIA DE DEZACTIVAR E A ÎNTRERUPERII PEN TRU EMISIE ………………………….. ………………………….. …………….. 54
FIGURA 40. DEFINIȚII DE TIPURI D E DATE ………………………….. ………………………….. ………………………….. …………………… 55
FIGURA 41. FUNCȚIA DE CONFIGURAR E A UNITĂȚII CRC ………………………….. ………………………….. ………………………….. …. 55
FIGURA 44. SCRIEREA MESAJULUI ÎN TERMINAL ………………………….. ………………………….. ………………………….. …………… 57
xv
LISTA TABELELOR
TABEL 1. TERMENII IMPLICAȚI ÎN FUNCȚIONAREA MAGIST RALEI I2C ………………………….. ………………………….. ………………… 11
TABEL 2. BIȚII REGISTRULUI DE CONTROL AL CALCULATO RULUI CRC ………………………….. ………………………….. ………………… 25
TABEL 3. ALOCAREA PINILOR PENT RU BUTOANE ………………………….. ………………………….. ………………………….. …………… 28
TABEL 4. DISPUN EREA LED-URILOR PE SISTEMUL D E DEZVOLTARE ………………………….. ………………………….. ………………….. 29
TABEL 5. BIȚII REGISTRULUI DE CONTROL AL SENZORULU I DE TEMPERATURĂ ………………………….. ………………………….. ………. 30
TABEL 6. PINII INTERFEȚEI DE COMU NICAȚIE SERIALĂ ………………………….. ………………………….. ………………………….. …….. 32
1
1. INTRODUCERE
1.1 SCOPUL
Comunicarea serială cu sistemul de dezvoltare și realizarea unui calculator CRC pentru a
verifica dacă pachetele de date transmise sunt corecte.
1.2 Motivația
Motivația pentru realizarea acestui proiect a constat în dorința de a dobândi cunoștințe în lumea
embedded și aprofundarea cunoștințelor în ceea ce privește microcontrolerele si microprocesoarele și
programarea în limbajul C.
1.3 Microcontrolere si mi croprocesoare, sisteme încorporate
La modul general un controler este, actualmente, o structură electronică destinată controlului
unui proces sau, mai general, unei interacțiuni caracteristice cu mediul exterior, fără să fie necesară
intervenția operatorului uman. Primele controlere au fost realizate în tehnologii pur analogice,
folosind componente electronice discrete și/sau compon ente electromecanice (de exemplu relee). Cele
care fac apel la tehnica numerică modernă au fost realizate inițial pe baza logicii cablate și a unei
electronici analogice uneori complexe, motiv pentru care "străluceau" prin dimensiuni mari, consum
energetic pe măsură și, nu de puține ori, o fiabilitate care lăsa de dorit.
Apariția și utilizarea microprocesoarelor de uz general a dus la o reducere consistentă a
costurilor, dimensiunilor, consumului și o îmbunătățire a fiabilității.
Un microcontroler (MC, MCU) este alcătuit dintr -o unitate centrală(CPU) căreia i s -a adăugat,
pe același microcircuit(on -chip), în primul rând memorie si apoi o gama largă de dispozitive
periferice, specializate/orientate si pe interfata/interactiunea cu mediul exterior.
Resursele i ntegrate la nivelul micro circuitului ar trebui sa includă , tipic, urmatoarele
componente :
• O unitate centrală (CPU), cu un oscilator intern pentru ceasul de sistem
• O memorie locală de tip ROM/PROM/EPROM/FLASH ș i eventual una de tip RAM
• Un sistem de î ntrerup eri
• I/O – intrări/ieș iri numerice(de tip port paralel)
2
• Un port serial de tip asincron ș i/sau sincron, programabil
• Un sistem de tempori zatoare/ numără toare(timere) programabile
Arhitectura unității centrale de calcul (CPU) este unul din elementele cele mai importante care
trebuie avut în vedere în analiza oricărui sistem de calcul. Principalele concepte luate în considerare și
întâlnite aici sunt următoarele:
➢ Arhitecturi de tip "Harvard"
La această arhitectură există spații de memorie separate pentru program și date. În
consecință ar trebui să existe și magistrale separate (de adrese și date) pentru codul
instrucțiunilor și respectiv pentru date.
➢ CISC
Aproape toate microcontrolerele au la baza realizării CPU conceptul CISC (Complex
Instruction Set Computer). Aceasta înseamnă un set uzual de peste 80 instrucțiuni, multe din ele foarte
puternice și specializate.
➢ RISC
RISC (Reduced Instruction Set Computer) este un concept de realizare a CPU care a început să
fie utilizat cu succes de ceva timp și la realizarea m icrocontrolerelor. Prin implementarea unui set
redus de instrucțiuni care se pot executa foarte rapid și eficient, se obține o reducere a complexității
microcircuitului, suprafața disponibilizată putând fi utilizată în alte scopuri.
În programarea sistemel or, o întrerupere este un semnal că tre microprocesor emis de partea
hardware sau software ce indică un ev eniment care are nevoie de atenție imediată. O întrerupere
alertează procesorul despre o condiție cu prioritate ridicată ce necesită î ntreruperea codul ui current
executa t de processor. Procesorul reacționează prin oprirea activităților curente, salvâ nd starea și
executând funcția numită întrerupere de rutină pentru a se ocupa de eveniment. Această întrerupere
este temporară , iar l a finalul rutinei, proce sorul își reia activitătile. Există două tipuri de întrerupere:
întreruperi hardware si î ntreruperi software.
Un port serial este o interfață de comunicare serial ă prin care informația transmisă sau
recepționată bit cu bit. În timp ce interfeț e precum Ethe rnet, FireWire si USB trimit informaț ii ca un
flux serial, termenul “port serial” de obicei se indentifică din punct de vede re hardware mai mult sau
mai puț in cu standardul RS -232, realizat pentru o interfață cu un modem sau cu un dispozitiv de
comunicare similar.
3
Calculatoarele moderne fără porturi seriale au nevoie de un convertor serial -USB pentru a
permite com pabilitatea dispozitivelor seriale RS -232. P orturile seriale sunt folosite în aplicaț ii cum ar
fi sisteme ind ustriale automate, instrumente știi nțifice. Calculatoarele de tip server pot fo losi un port
serial ca o consolă de control pentru diagnosticare. Echipamentele de internet deseori folosesc console
seriale pentru configur are. Porturile seriale sunt incă folosite în aceste domenii pentru că su nt simple,
ieftine si funcțiile sunt standardizate ș i cunoscute. Un port serial are nevoie de foarte puțin su port
software de la sistemul central.
Toate aplicațiile în care se utilizează microcontrolere fac parte din categoria așa ziselor sisteme
încapsulate -integrate (“embedded systems ”), la care existența unui sistem de calcul incorporat este
(aproape) transparentă pentru utilizator.
Ca un exemplu din industria de automobile (automotive industry), u nde numai la nivelul anului
1999, un BMW seria 7 utiliza 65 de microcontrolere, iar un Mercedes din clasa S utiliza 63 de
microcontrolere. Practic, deși am prezentat ca exemple concrete numai sisteme robotice și
mecatronice, este foarte greu de găsit un do meniu de aplicații în care să nu se utilizeze
microcontrolerele.
Figura 1. Structura simplificată a unui microcontroler
4
2. ARHITECTURA D E UNITATE CENTRALĂ R ENESAS 32
BIȚI RX600
2.1 Generalități
Arhitectura RX este orientată către viit or și are caracteristici multiple. Este realizat de
tehnologia de mapare Renesas care se axează pe mediul global și anticipează castiguri enorme î n
performanț a produselor ba zate pe microcontrolere atinse î n urmatorii 10 -20 de ani. Fam ilia RX de
microcontro lere oferă performanț e superioare d in punct de vedere al performanței de procesare,
eficiența codului și puterea consumată . Un portofoliu vast al semnalelor per iferice integrate este
valabil și o memorie flash de viteză mare este incorporată . Flash -ul perm ite performanț e maxime al e
procesorului, oferind instrucțiuni fără întâ rziere a procesorului RX pe 32 de biț i. Accel erarea memoriei
nu este necesară , iar aceasta oferă performanț e predictibile.
Micro controlerele RX Renesas dezvoltă procese Flash î ncorporate de 90 nm ce este la
momentul actual cel mai rapid din industrie cu t impul de citire maxim de 10 ns ș i este proiectat pentru
optimizarea puterii con sumate până la nivelul maxim d e operare de 100 MH z.
Peste 300 de produse sunt valabile din anul 2011, ofer ind memorie Flash de la 32 KB până la 2
MB, iar capsule de la 48 până la 177 de pini.
Microcontrolerele RX oferă un vast suport pentru sistemul de dez voltare, incluzând o gamă
largă de pl ăci uș or de utilizat de la Renesas si alți producători, cuprinzâ nd un s istem bogat de produse
pentru accelerarea progresului î n ciclurile de dezvoltare.
Procesorul RX combină viteza arhitecturii RISC cu o flexibilitate și o eficiență a codului ale
arhite cturii CISC. Procesorul interacționează cu memoria Flash ș i cu cea SRAM p rin construcția
îmbunătățită Harvard.
Procesorul cu ar hitectura CISC are un avantaj mărit față de procesoarel e RISC din punct de
vedere al mă rimii codului, cu o gamă variabilă a lungimii instrucț iunilor de la 8 biți la 64 biți,
permițând compilatorului să selecteze exact instrucțiunea pentru a realiza cerinț a.
Multe m iscocontrolere RISC au doar două lungimi ale instrucțiunilor, 16 biți și 32 de biț i, astfel
încât compilatorul trebuie să facă compromisuri.
Procesoarele RX suportă 10 tipuri de adrese ce opti mizează manipularea ș i transferul de date.
Codul compilat de RX s -a stabilit a fi cu 28% mai mic decât acelaș i cod compilat de un
microcontroler obi șnuit RISC.
5
2.2 Regiștrii
Microcontrolerul RX are 16 regiștrii de uz general, 9 regiștrii de control si un acumu lator
pentru instrucțiunile DSP.
2.2.1 Regiștrii de uz general
Acest procesor dispune de 16 regiștrii de uz general, de la R0 la R15. Regiștrii de la R1 la
R15 pot fi folosiți ca regiștrii de date sau regiștrii de adrese. R0, functioneaza și ca pointer de
stiva( SP).
2.2.2 Regiștrii de control
Avem 9 regiștrii de control:
• Interrupt stack pointer(ISP)
• User stack pointer(USP)
• Interrupt table register(INTB)
• Program counter(PC)
• Processor status word(PSW)
• Backup PC(BPC)
• Backup PSW(BPSW)
• Fast interrupt vector register(FINTV)
• Floating -point status word(FPSW)
2.2.3 Registru asociat cu instrucțiuni DSP
Acesta este un registru pe 64 de biți folosit pentru intrucțiunile DSP. Este folosit
deasemenea si pentru a înmulți si pentru a înmulți și acumula instrucțiuni.
Se folosesc instrucțiuni le MVTACHI și MVTACLO pentru a scrie în registru, respectiv
MVFACHI și MVFACMI pentru a citi date din registru.
2.3 Memorii interne
6
Microcontrolerele folosesc diferite tipuri de informații, care sunt stocate în diferite tipuri de
memorii. Instrucțiunile care c ontrolează funcționarea microcontrolerelor trebuie stocate într -o
memorie nevolatilă, unde informațiile se păstrează și după oprirea si repornirea sursei de alimentare.
Rezultatele intermediare și variabilele pot fi înscrise într -o memorie volatilă, la ace stea este important
să se poa tă face scrierea/citirea rapid ș i simplu în timpul funcționării.
Memoria RAM(Random Access Memory) este o memorie volatilă care poate fi citită sau scrisă
de unitatea centrală. Locațiile din RAM pot fi accesibile în orice ordin e. De aceea un microcontroler
include de obicei puțin RAM. Memoria RAM static alimentată de la baterie se folosește pentru
stocarea nevolatilă a cantităților mari de date, la o viteză de acces mare si cu un număr nelimitat de
ștergeri și reînscrieri.
Memor ia ROM(Read Only Memory) este cea mai simplă memorie și se folosește la stocarea
programelor în faza de fabricație. Unitatea centrală poate doar să citească informațiile dar nu le poate
șterge sau modifica spre deosebire de RAM.
Memoria PROM(Programmable R ead Only Memory) este similară cu memoria ROM, dar ea
poate fi programată. Aceasta poate fi:
• Memoria EPROM(Erasable Programmable Read Only Memory) care se poate șterge
prin expunere la ultraviolete. Se poate șterge doar informația întreagă, nu numai
fragme nte.
• EEPROM(Electrivally Erasable Programable Read Only Memory) poate fi ștearsă
electric de către unitatea centrală, în timpul funcționării. Ștergerea este selectivă.
Această memorie este lentă și numărul de ștergeri/scrieri este limitat.
• Memoria FLASH es te o memorie asemănătoare EPROM si EEPROM (poate fi
ștearsă și reprogramată în sistemul în care este folosită. Ea poate fi ștearsă și
programată electric. Nu permite ștergerea individuală de locații, utilizatorul poate să
șteargă doar întregul conținut.
Microcontrolerele din familia Renesas RX600 au încorporat: RAM, ROM și FLASH.
7
Figura 2. Harta de memorie
2.4 Magistrale
O magistrală (bus) defineș te setul de reguli după care inf ormația circulă î n int eriorul unui
sistem de calcul, î ntre ma i multe sisteme de calcul sau între sisteme de calcul ș i echipamente
specializate. Un standar d de magistrală conț ine mai multe tipuri de specificaț ii:
• mecanice – conectorii, cablurile, topologia de cuplare;
8
• electric e – nivelele de tensiune, curenții , impedanț e;
• funcționale – descrierea semnalelor.
Unele calculatoare au impu s un standard de magistrală prin popularitatea lor. Uneori
standardele s unt create de grupuri de producători care au interese co mune. Un astfel de standard este
SCSI (Small Compute r Interface System).
Magistralele realizează legatura electrica î ntre proce sor, memorie, dispozitive I/O și definește
cel mai mic nivel pentru u n protocol de comunicaț ie. Mag istrala este o cale de comunicație folosită în
comun de mai multe blocuri funcțion ale și este realizată fizic de un set de fire conductoare.
Folosirea unei m agistrale poate fi dezavantajoasă datorită limitărilor de viteză de transfer a
datelor (throughput) pe care aceasta le poate crea. Viteza la care poate lucra o magistrală este impus ă
în primul râ nd de factori fizici ca: lungimea traseelor și numă rul dispoz itivelor ataș ate.
O magistrală este organizată î n grupe de semnale care au aceeași funcț ionalitate:
• un set de semnale de control;
• un set de semnale de date.
Semnalele de control sun t folosite pentru a indica cereri, acceptă ri sau pentru a indica tipul
informației de pe liniile de date. Setul semnalelor de date este folo sit pentru a transporta informația
între blocurile funcț ional e ale calculatorului de la sursă la destinație. Informa ția poate fi date, comenzi
sau adrese. Adesea magistralele de date sunt des părțite în două seturi pentru ca datele și adresele să
poată fi vehiculate într -o singură tranzacție de la sursă la destinaț ie.
Procesorul RX folosește un numă r mare de magistrale p aralele pentru a p utea transfera simultan
informația î ntre procesor, memori a Flash, memoria SRAM și periferice. Șas e magistrale periferice
diferi te permit distribuirea flexibilă î ncet sau rapid a perifericelor pentru un transfer optimizat. O
magistrală ext ernă cu un DMA indepen dent poate sa transfere informaț ia direct de la un dispozitiv
extern la un alt dispozitiv extern.
2.4.1 Magistrala CAN (Controller Area Network)
CAN este un protocol serial de comunicație care suportă controlul în timp real cu un nivel
de securitate ridicat. Domeniul de utilizare se întinde de la rețele de viteză foarte mare (până la 1
Mbit) la cele de cost redus și este utilizată în electronica auto, în controlul motoarelor, senzori,
sisteme antiderapaj, etc.
9
CAN are o structură pe 3 n ivele:
• Nivelul fizic definește modul cum sunt transmise semnalele. El cuprinde mediul de
transmisie, nivelele semnalelor și reprezentarea biților, dar nu permite optimizarea
acestora pentru o anumită aplicație.
• Nivelul de transfer reprezintă nucleul (kerne l) protocolului CAN. Acesta prezintă
mesajele recepționate și acceptă mesajele de transmis de la nivelul obiect. Tot acest
nivel este responsabil pentru rata de transmisie și sincronizare, pentru încadrarea
mesajelor, arbitraj, confirmare, detecție de eror i, semnalizare și reținerea defectelor.
• Nivelul obiect se ocupă de filtrarea mesajelor, precum și de starea și manipularea
acestora.
Figura 3. Diagrama bloc a modulului CAN
2.4.2 Magistrala LIN (Local Interconnect Network)
Standardul LI N conține specificațiile protocolului de transmisie, a mediului de transmisie.
Interfața pentru programare software si interfața dintre diferitele unelte de dezvoltare LIN
garantează interoperabilitatea nodurilor rețelei din punct de vedere hardware și sof tware, și o
comportare EMC predictibilă.
Principalele proprietăți ale protocolului LIN sunt:
10
• Organizare single -master/multiple -slave (fără arbitrare pe bus)
• Garantarea timpilor de latență pentru transmiterea semnalelor
• Lungime variabilă a mesajelor: 2, 4, 8 octeți
• Configurație flexibilă
• Auto -sincronizare, nu are nevoie de quartz sau rezonatoare ceramise în nodurile slave
• Detecția nodurilor defecte din rețea
• Implementare de cost scăzut
• Viteze de până la 20 kbit/sec
2.4.3 Magistrala I2C (Inter Integrated Circuits)
Interfața I2C a apărut din necesitatea de a realiza sisteme ieftine cu microcontrolere
destinate în principal conducerii proceselor industriale.
Realizarea unui sistem I2C presupune interconectarea unor circuite integrate prin numai trei
linii: două de sem nal și una de masă. Cele două linii de semnal sunt denumite "serial data" (SDA)
și "serial clock" (SCL). Fiecare circuit integrat are o adresă unică și poate funcționa fie ca
transmițător, fie ca receptor, în funcție de tipul circuitului. De exemplu, un ci rcuit pentru comanda
unui afișaj cu cristale lichide poate fi numai receptor, în timp ce un circuit de memorie RAM poate
fi atât transmițător cât și receptor (evident, nu simultan).
Structura I2C este o structură multi -coordonator, adică se pot interconect a mai multe circuite
care pot avea rolul de coordonator. Termenii implicați în descrierea funcționării interfeței I2C,
precum și semnificația acestor a sunt prezentate în tabelul următor :
Termenul Descrierea termenului
Transmițător Dispozitivul care pune datele pe magistrală
Receptor Dispozitivul care preia datele de pe magistrală
Coordonator Dispozitivul care inițiază un transfer, genereaza semnalele de tact si
termină transferul
11
Subordonat Dispozitiv adresat de către coordonator
Multi –
coordonator Există mai multe dispozitive care pot cere simultan funcția de coordonator
fără sa modifice mesajul aflat pe magistrală
Arbitraj Procedura prin care, fără sa vicieze mesajul aflat pe magistrală, se declară
un singur câștigător atunci când există mai multe di spozitive care solicită
simultan funcția de coordonator
Sincronizare Procedură prin care se sincronizează semnalul de tact funcție de viteza de
transfer acceptată de dispozitivele implicate in transfer
Tabel 1. Termenii implicați în funcționarea magistralei I2C
2.4.4 Magistrala SPI (Serial Peripheral Interface)
SPI este un stardard sincron ce operează în mod full -duplex(transferul de date se face în
ambele direcții simultan). Dispozitivele comunică folosind o relație de tipul master/multi -slave,
master -ul fiind cel care inițiază structurile de date.
Semnalele magistralei:
• SCLK(Serial Clock)
• MOSI(Master Output, Slave Input)
• MISO(Master Input, Slave Output)
• nSS(Slave Select)
Figura 4. Configurația magistralei SPI c u un singur dispozitiv slave
Pentru a începe comunicația, master -ul trebuie să seteze o frecventă de ceas cel mult egală
cu frecvența suportată de slave. În timpul unui siclu SPI, transmisia este full -duplex:
• Master -ul transmite un bit pe linia MOSI, iar s lave-ul îl citește de pe aceeași linie
• Slave -ul transmite un bit pe linia MISO, iar master -ul îl citește de pe aceeași linie
12
2.4.5 Magistrala SCI (Serial Communications Interface )
SCI este un subsistem I/O serial in dependent, de tipul full duplex asincron. Se ma i numește
și UART(Universal Asynchronous Receiver Transmitter). Poate fi folosit pentru co municații între
microcontroler ș i un terminal, un calculator sau un alt microcontroler. Rata transferului este
controlată de un generator propriu, care furnizează fre cvențe pentru rate de transfer standard,
folosind oscilatorul microcontrolerului.
UART utilizează două fire, unul de transmisie (TXD) si unul de recepție (RXD), pentru
comunicație full -duplex sau half -duplex.
Figura 5. Diagrama b loc a magistralei SCI
2.5 Întreruperi
Există opț iuni flexibile pen tru a atinge un minim timp de ră spuns pentru diferite scenarii:
• Întreruperile normale reacționeaza î n ma i puț in de 7 ci cluri de ceas de la eveniment
până când se declanșează î ntreruperea.
13
• Întrer uperile rapide pot fi al ocate dinamic pentru orice sursă de întrerupere,
reacționând î n 5 cicluri de ceas, folosind regiștrii dedicați pentru a salva ș i restaura
starea procesorului.
• Toate rutinele de î ntrerupere pot fi scurtate de dicând 4 regiș trii genera li pentru a fi
folosiți doar pentru întreruperi, eliminând necesitatea de a adăuga și a elimina regiștrii
din stivă .
2.6 DMA (Direct Memory Access)
Accesul direct al memo riei este o caracteristică a sistemelor de calculatoare car e permite
anumitor subsisteme h ardware să acces ese memoria de sistem principală (RAM), independent d e
unitatea de procesare centrală. Fără DMA, câ nd unitatea de procesare centrală foloseș te intr ări/ieșiri
programate, este în general ocupat pentru întreaga durată a operației de citire sa u scriere ș i este
indisponib il pentru a realiza alte atribuț ii.
Familia de microcontrolere RX600 utilizează un controler DMA care î ncorporeaza 4 canale
denumit Direct Memory Access Controller (DMAC). Acesta este un m odul pentru a transfera
informațiile făr ă ajutorul procesorului. Când DMA generează o cerere de transfer, controlerul
transferă informația înmagazinată de la adresa surse i de transfer la adresa destinaț iei de transfer.
Acesta poate transfera informații fie în șiruri de biți a câte 8, 16 sau 32 d e biți, fie î n blocuri de
la 1 la 1024 de biț i.
Există 3 tipuri de transfer:
• Modul normal de transfer
• Modul de transfer repetat
• Modul de transfer î n bloc
2.7 Sistemul de generare a ceasului
Sistemul de ceas (timer) este utilizat pentru a mă sura timpul ș i pentr u a produce semnale cu
perioade și frecvenț e dorite. Timerel e nu sunt doar circuite cu funcții de temporizare. Î ntr-un modul
timer sunt implementate câ teva mecanis me care pun la dispoziția utilizatorului funcț iile specifice.
Mecanismul de comparare la ieș ire permi te controlul unor semnale de ieșire, mecanismul de
captură la intrare permite monitorizar ea unor semnale de intrare. Numără toarele interne permit
generare a de referințe de timp interne, necesare în bucla de întâ rziere, multiplexarea diferitelor sa rcini
14
software. Timerul poate fi fo losit practic pentru orice funcț ie de timp, inclu siv generarea unor forme
de undă sau conversii D/A simple.
Familia de microcont rolere RX600 are î ncorporate urmatoarele tipuri de timer:
• MTU2 (Multi -Function Timer Pulse Un it 2)
MTU2 est e un timer cu multiple scopuri și multiple canale, cu intră ri de ceas configurabile.
Canalele î mpar t resursele hardware, dar numără torul este indepen dent. Hardware -ul MTU2 suportă 5
canale numerotate de la 0 la 4.
• TPU (Timer Pulse Unit)
• PPG (Programmable Pulse Generator)
Generează pulsații la ieșiri folosind timerul TPU și MTU2 ca un timp de bază .
• TMR (Timer)
Familia RX600 are 2 unităț i de timere pe 8 biți î ncorpora te care cuprind 2 canale de numărare
pe 8 biți, în total avâ nd 4 c anale. Modul ul de timer pe 8 biți poate fi folosit pentru a număra
evenimente externe ș i poate f i folosit ca un timer multifuncțional într -o varietate de aplicaț ii cum ar fi
generarea de resetare a numărătorului, cereri de întrerupere si pulsații la ieșire cu un ciclu de sarcină
dorită folosind un semnal cu 2 regiș trii.
• CMT (Compare Match Timer)
Familia d e microcontrolere RX600 are două unităti CMT, fiecare având două canale de timer
pe 16 biți. Acest timer are un numărător pe 16 biți și poate genera întreruperi la un timp setat, având
posibilitatea de a intra î ntr-o stare de consum redus.
• WQT
• I-WDT (Independent Watchdog Timer)
Acest timer este folosit independent ca un timer wa tchdog convenț ional pentru a detecta
programe care rulează fără a respecta condițiile. Acesta are un numărător invers pe 14 biți, ș i poate fi
setat ca microcontrolerul să fie resetat de către o sursă externă când numărătoarea inversă de la
valoarea iniț ială cauzează o supraîncărcare a numărătorului. Când timerul este în modul de pornire
automată, numărătoarea este restartată automat după resetare sau după cererea de î ntrerupere.
• RTC (Realtime Clock)
15
Acest ceas este capabil de a numara 100 de ani pornind de la anul 00 până la anul 99. Ordinea
de sute ș i de mii sunt considerate ca 20 și anii bisecți de la anul 2000 până la anul 2099 sunt automat
corectaț i.
2.8 Dispozitive de I/O
Pentru a economisi, simplifica sistemul de dezvoltare, reducerea totală a consumului de putere
și a permite implementarea de caracteristici de valoare adăugată, o gamă largă de f uncții periferice
încorporate sunt grupate î n jurul procesorului microcontrolerelor RX. Clasificate în linii mari în
funcț ii ana logice, de ceas, de comunicare ș i de sistem , aceste numeroase periferice măresc
performantă . Multitudinea de tipuri diferi te a m icrocontrolerelor RX oferă diverse seturi de funcții,
astfel încât capabilitățile ș i costurile lor se potrivesc cu nevoile aplicaț iilor.
În familia RX600 există două tipuri de periferice :
• Periferice avansate
o Ethernet
o USB
o CAN
o ExDMA
o ADC 12 biț i
o MTU3
o GPT
• Periferice de baza
o Flash
o SRAM
o Data Flash
o ADC 10 biț i
o DAC 10 biț i
o ADC 12 biț i
o Senzor de temperatură
o MTU2
o TPU
o PPG
o TMR
o CMT
o WQT
16
o I-WDT
o RTC
o I2C
o SCI
o ExBus
o SPI
o LIN
17
3. FAMILIA DE MICROCONT ROLERE RX63N
RX63N est e un microcontroler pe 32 de biț i realizat de firma Renesas . Acesta are o frecvență
de funcționare de maxim 100 MHz. În ceea ce privește memoria, are o memorie RAM de maxim 256
KB, memoria Flash pentru program de maxim 2 MB și memoria Flash pentru date de maxim 32 KB.
3.1 Porturi de intrare/ieșire
Porturile de intra re/ieșire al e unui microcontroler reprezintă legătura cu lumea exterioară prin
care acesta poate să trimită și să primească semnale.
Pinii unui port de intrare/ieșire funcționează ca pini de intrare/ieșire universali, ca pini pentru
module periferice, ca p ini de intrare pentru întrerupere sau ca pini de control a magistralei. Toți pinii
funcționează ca pini de intrare imediat după o resetare și funcțiile pinilor sunt schimbate de setările
regiștrilor. Setarea fiecărui pin este specificat de regiștrii pentru corespondența porturilor de
intrare/ieșire si modulele periferice.
Fiecare port are un registru de direcție(PDR) care selectează direcția de intrare sau ieșire, un
registru pentru datele de ieșire(PODR) care reține informația pentru iesire, registru de in trare(PIDR)
care indică stările pinilor, registru de control al canalului deschis(ODRy, y = 0, 1) care selectează tipul
de ieșire a fiecărui pin, registru de control a rezistenței de pull -up(PCR) care controlează
pornirea/oprirea intrării pull -up, regist ru de control a capacității de comandă(DSCR) care selectează
capacitatea de comandă și registru pentru modul portului(PMR) care specifică funcția pinului pentru
fiecare port.
18
Figura 6. Configurație pini de intrare/ieșire
3.2 Sistem d e ceas
Microcontrolerele Renesas RX63N dețin mai multe tipuri de ceasuri.
3.2.1 Unitate de ceas cu pulsație(TPU)
Microcontrolerul Renesas RX63N are două unități de acest tip integrate, unitatea 0 și
unitatea 1, fiecare conținând 6 canale. Prin urmare, acest ceas include 12 canale(de la TPU0 la
TPU11).
• Pulsație de intrare/ieșire – maxim 32 (16 pentru unitatea 0 și 16 pentru unitatea 1)
19
• Ceas de numărare – 7 sau 8 tipuri sunt asigurate pentru fiecare canal
• Canalele 0, 3, 6 și 9 – operația de amortizare poate fi setată
• Canalele 1, 2, 4, 5, 7, 8, 10 și 11 – modul de numărare poate fi setat
• Sursă de întrerupere – 52 de surse (26 pentru unitatea 0 și 26 pentru unitatea 1)
• Funcția de consum mic al puterii – modulul de oprire al stării poate fi setat pentru
fiecare un itate
3.2.2 Generator programabil de impulsuri (PPG)
Acest generator programabil de impulsuri generează impulsuri la ieșire folosind ceasul pe 16
biți(TPU) și unitatea de cea s cu impulsuri multi -funcțional ca un timp de bază.
Microcontrolerul RX63N are 2 unități de acest tip, fiecare dintre ele controlând peste 16 pini
de impulsuri. Impulsurile din unitatea de ceas este divizată în 4 grupuri care pot funcționa toate
simultan și independent.
• Numărul de biți de ieșire – peste 32 de biți
• Impulsurile de ieșire:
o 2 unități, fiecare capabilă de ieșire prin 4 grupuri de pini
o Semnalele declanșatoare de la ieșire pot fi selectate
o Ieșirea inversată poate fi aleasă
• Funcția de reducere a consumului de putere – modulul de oprire al stării poate fi setat
3.2.3 Ceas pe 8 biți(TMR)
RX63N are 2 unități de acest tip, fiecare având două canale de numărare pe 8 biți, în total 4
canale. Modulul de ceas pe 8 biți poate fi folosit pentru a număra evenimentele externe și
deasemenea poate fi folosit ca un ceas multifuncțional într -o varietate de a plicații.
Unitatea 0 și unitatea 1 poate genera o rată de semnal de ceas pentru SCI și să aibă aceleași
funcții.
20
3.2.4 Ceas de tipul comparare (CMT)
RX63N are încorporat două unități de acest fel (unitatea 0 și unitatea 1) fiecare conținând 2
ceasuria câte 2 canal e(un total de 4 canale). Această unitate de ceas are un numărător pe 16 biți și
poate genera întreruperi la intervale stabilite.
• Ceas de numărare – 4 ceasuri de împărțire a frecvenței (Un ceas poate fi selectat
individual pentru fiecare canal)
• Întreruperi – o întrerupere specifică poate fi cerută individual pentru fiecare canal)
• Funcții de reducere a consumului de putere – fiecare unitate poate fi plasat într -un
modul de oprire a stării
3.2.5 Ceas de timp real(RTC)
Ceasul de timp real este capabil de a număra 100 de ani de la anul 00 până la anul 99.
Ordinea sutelor și miilor sunt presupuse a fi 20 și anii bisecți de la anul 2000 până la anul 2099
sunt corectați automat.
Sursa către unitatea de numărare a contorilor de timp este poate fi selectată ca un sub -ceas
sau ca ceas principal. Cu sursa de numărare prescalată pentru a produce un semnal de ceas de 128
Hz ca un ceas de bază, ciclurile acestui semnal sunt considerate ani, luni, date, zile ale săptămânii,
ore, minute, secunde și 1/128 unități de secunde.
• Ceas ș i funcții calendaristice
o Indică starea pentru 1, 2, 4, 8, 16, 32 sau 64 Hz în binar
o Alegerea modului de 12 sau 24 de ore
o Funcție de pornire și oprire
o Ajustări de 30 de secunde(30 de secunde sau mai putin sunt rotunjite la 0 și 30 de
secunde sau mai mult su nt rotunjite la 1 minut)
o Ajustarea automată a anului bisect
o Funcție de ajustare a erorilor de timp
• Întreruperi
21
o Întrerupere tip alarmă( Anul, luna, data, ziua săptămânii, orele, minutele și
secundele pot fi selectate precum condiții pentru întreruperea de ti p alarmă )
o Întrerupere periodică(2 secunde, 1 secundă, ½ secunde, ¼ secunde, 1/8 secunde,
1/16 secunde, 1/32 secunde, 1/64 secunde sau 1/256 secunde pot fi selectate ca o
perioadă de întrerupere)
o Revenirea din modul de așteptare a programului sau modul prof und de așteptare
a programului poate fi executat de o întrerupere tip alarmă sau o întrerupere
periodică
3.2.6 Ceas de gardă(WDT)
Ceasul de gardă are un numărător invers pe 14 biți și poate fi setat astfel încât cipul să fie
resetat de o resetare de ieșire când numărătoarea inversă de la valoarea inițială ajunge la o valoare
atât de mică încât nu poate fi reprezentată de contor.
Ceasul de gardă are 2 stări de pornire: modul de pornire automată, în care numărarea
automată începe după eliberarea din starea de reset are și un modul de pornire prin registru, în care
numărarea începe prin reîncărcarea ceasului de gardă(scriind în registru).
În modul de pornire automată, setările necesare ar trebui făcute în registrul de selecție a
funcției opțiunii înainte de eliberarea din starea de resetare.În modul de pornire prin registru,
setările necesare ar trebui făcute în regiștrii respectivi înainte ca numărătorul să înceapă prin
reîmprospătare după eliberarea din starea de resetare.
3.2.7 Ceas de gardă independent(IWDT)
Ceasul de ga rdă independent este folosit independent de ceasul de gardă obișnuit pentru a
detecta programe care intră fără a respecta condițiile.
3.3 Magistrale
RX63N dispune de mai multe magistrale:
• Interfețe de comunicație serială(SCI)
Acest microcontroler are 13 canale independente pentru interfețele de comunicație serială.
Această interfață este ca modul SCIc(de la SCI0 până la SCI11) și SCd(SCI12).
• Magistrala I2C
22
• Modulul rețea de control(CAN)
• Interfața periferică serială(RSPI)
3.4 Convertor analog -numeric
3.4.1 Convertor analog -numeric pe 12 biți
RX63N include o aproximarea succesivă de 12 biți a convertorului analog -numeric . Peste 21
de canale de intrare analogice, ieșiri ale senzorului de temperatură sau o referintă internă de volți
analog -numerică pot fi selectate.
Convertoru l analog -numeric are două moduri de operare: modul de explorare unic în care
intrarea analogică ale celor peste 21 de canale este convertit ă pentru o singură dată în ordine
crescătoare a canalelor și modul continuu de explorare în care intrările analogice ale celor peste 21
de canale selectate arbitrar sunt convertite continuu în ordine crescătoare a canalelor.
Conversia analog -numerică a ieșirii senzorului de temperatură sau a referinței internă de
voltaj este independent realizată .
3.4.2 Convertor analog -numeri c pe 10 biți
RX63N include o singură unitate de aproximare succesivă a convertorului analog -numeric
pe 10 biți. Unitatea perm ite ca peste 8 canale de intrări analogice (de la AN0 la AN7) și un canal
de intrare analogic ă extins să fie selectate.
Convertorul analog -numeric pe 10 biți are 2 moduri de funcționare: modul unui singur canal
care convertește intrarea analogică a canalului specificat sau o intrare analogică extinsă o singură
dată și modul de explorare care convertește continuu intrările analogice al e canalelor specificate.
3.5 Convertor numeric -analogic
RX63N include 2 canale ale convertorului numeric -analogic.
23
Figura 7. Diagrama bloc a co nvertorului numeric -analogic
3.6 Memorie
3.6.1 SRAM(Static Random Access Memory)
RX63N are încorpor ată o memorie RAM statică de mare viteză.
Capacitate RAM:
• 64 KB (RAM0: 64 KB)
• 128 KB (RAM0:64 KB, RAM1: 64 KB)
• 192 KB (RAM0:64 KB, RAM1: 128 KB)
• 256 KB (RAM0:64 KB, RAM1: 192 KB)
Acces:
• Accesul într -un singur ciclu este posibil și pentru citire și pentru s criere
• Funcționarea RAM poate fi permisă sau nu
24
3.6.2 Memoria Flash
RX63N are o memorie Flash de maxim 2 MB pentru stocarea codului (ROM) și o memorie
Flash de 32 KB pentru stocarea datelor (E2 DataFlash).
Figura 8. Diagrama bloc ROM/E2 DataFlash
3.6.3 Calculator CRC
Microcontrolerul RX63N are încorporată o unitate CRC care generează calculul CRC pentru
blocurile de date transmise.
Pentru calculul CRC trebuie ales unul din următoarele polinoame:
• CRC pe 8 biți
o X8 + X2 + X +1
• CRC pe 16 biți
o X16 + X15 + X2 + 1
o X16 + X12 + X5 + 1
25
Figura 9. Diagrama bloc a calculatorului CRC
Această unitate are 3 regiștrii: unul de control(CRCC R), unul de date de intrare (CRCDIR) și
unul de date de ieșire(CRCDOR) .
Bit Nume Descri ere
b1, b0 Schimbare polinom de calcul b1 b0
0 0: Nu calculează nimic
0 1: X8 + X2 + X + 1
1 0: X16 + X15 + X2 + 1
1 1: X16 + X12 + X5 + 1
b2 Schimbare mod de calcul 0: Se realizează calculul pentru
comunicarea cu primul bit LSB
1: Se realize ază calculul pentru
comunicarea cu primul bit
MSB
b6:b3 Rezervat Acești biți sunt citiți ca 0.
Valoarea de scriere ar trebui să
fie 0.
b7 Golire registru CRCDOR Golește registrul CRCDOR.
Acest bit este citit ca 0.
Tabel 2. Biții registrului de control al calculatorului CRC
26
În funcție de configurarea biților din Tabelul 2 se realizeaza calcului sumei de control, se
alege polinomul de calcul, modul de citire din registru, dar se realizează și golirea registrului de
date de ieșire CR CDOR.
Registrul CRCDIR este un registru pe 8 biți în care se poate scrie și din care se poate citi. În
acesta se scriu octeții folosiți în calculul CRC.
Registrul CRCDOR este un registru pe 16 biți care conține rezultatul calculului CRC. În
general valoarea este 0 dacă nu există nicio eroare CRC în momentul în care codul calculat CRC se
potrivește cu codul care este în continuare verificat, din datele transferate.
Dacă algoritmul de calcul CRC este pe 8 biți, în registrul CRCDOR se scrie de la bitul 0
până la bitul 7, ceilalți biți rămânând nemodificați.
27
4. DESCRIEREA SISTEMULU I DE DEZVOLTARE RENE SAS
DEMONSTRATION KIT FO R RX63N
Figura 10. Dispunerea componentelor pe sistemul de dezvoltare
28
4.1 Diagrama bloc
Figura 11. Diagrama bloc a sistemului de dezvoltare
4.2 Comutatoare tip buton
Exista 5 comutatoare tip buton pe placa. Următorul table conține funcțiile fiecărui buton și
conexiunilor acestora pe placa.
Buton Funcție Conexiune
SW1 Conecteaza l a o linie IRQ pentru
controlul utilizatorului. P40, IRQ8 -DS, pinul 95
SW2 Conecteaza la o linie IRQ pentru
controlul utilizatorului. P41, IRQ9 -DS, pinul 93
SW3 Conecteaza la o linie IRQ pentru
controlul utilizatorului. P44, IRQ12 -DS, pinul 90
SW4(reseta re) Când este apăsat, microcontrolerul și
circuitul J -Link sunt resetate. RES#, pinul 10
Tabel 3. Alocarea pinilor pentru butoane
4.3 Leduri
Există 17 leduri pe placa :
• Ledul de alimentare verde(LED3) luminează când placa este alimentat ă.
29
• Ledul pentru interfața depanatorului Segger J -Link lumineaza când interfața este
conectată la un calculator .
• Sunt 12 leduri ale utilizatorului care sunt conectare la porturile de intrare/ieșire.
Fiecare led va lumina când pinul de pe portul lui corespun zător este setat 0. Cele 12
leduri ale utilizatorului sunt aranjate astfel încât să arate fazele de rotire ale unui
circuit de control al unui motorul.
• Cele 2 leduri rămase sunt specifice Ethernet și nu pot fi accesate direct din
microcontroler.
Referință LED Culoare Numele circuitului Conexiune
LED1
(Viteză ENET) Verde – –
LED2
(1PPS ENET) Roșu – –
LED3 (Alimentare) Verde – –
LED4 Verde LED PD5, pinul 81
LED5 Verde LED PE3, pinul 75
LED6 Roșu LED PD2, pinul 84
LED7 Roșu LED PE0, pinul 78
LED8 Verde LED PD4, pinul 82
LED9 Verde LED PE2, pinul 76
LED10 Roșu LED PD1, pinul 85
LED11 Roșu LED PD7, pinul 79
LED12 Verde LED PD3, pinul 83
LED13 Verde LED PE1, pinul 7 7
LED14 Roșu LED PD0, pinul 86
LED15 Roșu LED PD6, pinul 80
LED16 Verde – –
D5 Verde – –
Tabel 4. Dispunerea LED -urilor pe sistemul de dezvoltare
4.4 Senzor de temperatură digital
Sistemul de dezvoltare are încorporat și un senzor de temperatură. Senzorul de temperatură are
ca ieșire o tensiune care variază o dată cu temperatu ra. Convertorul analog -numeric poate converti
valoa rea dată într -o valoare numerică . Utilizatorul poate obține temperatura din jurul
microcontrolerului convertind valoarea în temperatură.
Senzorul de temperatură poate fi controlat prin registrul d e control al său(TSCR).
Bit Simbol Nume Descriere
b3 : b0 – Rezervat Acești biți sunt citiți ca 0. Valoarea de
30
scriere ar trebui sa fie 0.
b4 TSOE Activare ieșire senzor 0:Dezactiveaza ieșirea din senzor că tre
convertorul analog -numeric pe 12 biți.
1:Act ivează ieșirea din senzor că tre
convertorul analog -numeric pe 12 biți.
b6, b5 – Rezervat Acești biți sunt citiți ca 0. Valoarea de
scriere ar trebui sa fie 0.
b7 TSEN Activare senzor 0:Oprește senzorul de temperatură.
1:Pornește senzorul de temperatură.
Tabel 5. Biții registrului de control al senzorului de temperatură
4.5 Accelerometru pe 3 axe
Sistemul de dezvoltare are încorporat un accelerometru pe 3 axe digital(ADXL345), cu un
consum mic de energie, de rezoluție mare(13 biți).
Datele digitale de ieșire sunt pachete de 16 biți convertite în complement față de 2 și pot fi
accesate printr -o interfață serială, fie SPI, fie I2C.
Dispune de mai multe funcții de detectare. Detectează activitatea și inactivitatea prezenței sau
lipsei miș cării comparând accelerația de pe oricare dintre cele 3 axe. Simțul lovirii detectează două
lovituri în orice direcție. Simțul căderii detectează dacă dispozitivul se află în cădere. Aceste funcții
pot fi folosite individual la oricare doi pini de ieșire a le întreruperii. Un buffer cu 32 de nivele
integrat, poate fi folosit pentru stocarea datelor pentru a micșora intervenția procesorului gazdă.
31
Figura 12. Diagrama bloc a accelerometrului pe 3 axe
4.6 LCD Grafic
LCD -ul grafic de pe pl acă este un LCD cu iluminare din spate, cu o rezoluție de 96×64 puncte,
funcționează la o temperatură cuprinsă între -20℃ și 70℃.
Figura 13. Diagrama bloc a ecranului(LCD)
32
4.7 Potențiometru
Potențiometrul este un dispozitiv utilizat frecvent ca și divizor de tensiune reglabil. În
componența sa are un rezistor cu un element mobil poziționat cu ajutorul unei manete.
Un potențiometru rotativ este conectat la canalul AN002 al convertorului analog -numeric al
microcontrolerului. Acesta poa te fi folosit pentru a varia valoarea tensiunii de intrare analogică la
acest pin între 3V3A și Ground.
Potențiometrul poate fi folosit deasemenea și pentru a controla volumul prin program. Acesta
este montat pentru a oferi o cale ușoară pentru alimentare a unei variabile de intrare analogică la
microcontroler.
4.8 Port serial
Modulul serial permite microcontrolerului să comunice cu un calculator prin conectorul RS –
232, J5, folosind RS232Rx și RS232Tx. Portul serial este configurat în modul DCE permițând
conexi unea directă cu un calculator fără un modem nul. Modulul serial poate deasemenea să fie
folosit ca un port de depanare serial.
Descriere Funcție Pin
microcontroler Pin de conexiune
TXD2 Pin de transmisie serială 44 J5.2
RXD2 Pin de recepție serială 42 J5.3
Tabel 6. Pinii interfeței de comunicație serială
4.9 Metode de programare
Pentru Renesas Demonstration Kit se pot folosi mai multe medii de dezvoltare a aplicațiilor
cum ar fi HEW, IAR, KPIT Eclipse IDE. Placa include un depanator S egger J -Link OB. Depanatorul
poate fi dezactivat mutând un jumper la pinul 2 al J -Link -ului. Interfața Jlink este pre -programată la
testul final al fabricației și se poate actualiza singur mai târziu daca sunt disponibile versiuni mai noi.
33
5. MEDII DE DEZVOL TARE ȘI TESTARE A AP LICAȚIILOR
5.1 Medii de dezvoltare și testare a aplicațiilor
5.1.1 HEW(High Performance Embedded Workshop)
Mediul de dezvoltare HEW este un mediu puternic de dezvoltare pentru aplicațiile încorporate
vizate pentru microcontrolerele Renesas. Princ ipalele caracteristici sunt:
• Un motor de construcție configurabil care permite setarea opțiunilor compilatorului,
montatorului și linker -ului folosind o interfață grafica pentru utilizatori(GUI).
• Un editor de text integrat cu colorarea sintaxelor personali zabil pentru a îmbunătăți
lizibilitatea codului.
• Un mediu configurabil, care permite folosirea propriilor unelte.
• Un depanator integrat, care permite construirea si depanarea în aceeași aplicație.
• Suport de control al versiunii.
Mediul de dezvoltare HEW ar e un concept pentru „Spațiul de lucru” și „Proiect” .
Spațiul de lucru este o unitate mare pentru programele realizate cu HEW. Spațiul de lucru poate
avea un număr mare de proiecte. Când se creează un spațiu de lucru, mai mult de un proiect este
necesar și un proiect se creează automat cand este creat spațiul de lucru.
În ceea ce privește proiectul, uneori la realizarea programului se creează o funcție ca o
bibliotecă și se fac nivele ierarhice între mai multe module. În astfel de cazuri, se pot crea bibliot eci
pentru proiecte și apoi introduse în spațiul de lucru.
Acest mediu de dezvoltare are 3 ferestre principale:
• Fereastra spațiului de lucru
• Fereastra editorului
• Fereastra de ieșire
34
Figura 14. Ferestrele principale ale mediului d e dezvoltare HEW
Fereastra spațiului de lucru indică proiectele și fișierele care se află în acel moment în spațiul de
lucru.
Fereastra editorului asigură vizualizarea fișierului și editarea facilităților.
Fereastra de ieșire indică rezultatele a unei vari etăți de procese(de exemplu construirea,
comenzile de control ale versiunii).
Bara de titlu afișează numele fișierului și proiectului activ în acel moment. Conține deasemenea
și butoanele de minimalizare, maximalizare și închidere.
Bara de meniu conține 1 1 meniuri: File(Fișier), Edit(Editare), Project(Proiect),
Build(Con struire), Debug(Depanare), Setup(Setări), Tools(Unelte), Test(Testare), Window(Fereastră)
și Help(Ajutor). Toate opțiunile meniurilor sunt grupate logic sub aceste anteturi.
Figura 15. Anteturile din bara de meniu a mediului de dezvoltare HEW
Bările de instrumente asigură comenzi rapide pentru opțiunile care sunt folosite cel mai
frecvent. Sunt 12 bări de instrumente implicite: Editor(Editor), Search(Căutare),
Templates( Șabloane), Bookmarks(Semne de carte), Default Window(Fereastră implicită),
35
Standard(Standard), Version Control(Controlul versiunii), Map(Hartă), Macros(Macro -uri),
Debug(Depanare), Debug Run(Rulare depanare) și System Tools(Instrumente de sistem).
5.1.2 Renesas E2Studio
Renesas E2Studio este un mediu de dezvoltare bazat pe mediul de dezvoltare integrat Eclipse și
plug-inuri pentru dezvoltarea C/C++. E2Studio este un mediu de dezvoltare integrat care suportă
microcontrolerele si microprocesoarele Renesas.
Figura 16. Interfața mediului de dezvoltare E2Studio
Compilatoarele din lista următoare pot fi folosiți împreună cu E2St udio pentru a construi
proiecte:
• Compilator C/C++ Renesas
• Compilator GNU KPIT
• IAR Embedded Workbench de la Sis teme IAR
Generatorul de cod permit generarea codului sursă pentru a controla funcțiile periferice ale
dispozitivel or(Ceas, UART, Convertor analog -numeric și așa mai departe) ale microcontrolerelor
Renesas, doar făcând setările într -o interfață grafică pent ru utilizatori. Se pot specifica funcțiile pinilor
multiplexați într -un tabel de pini și apoi făcută revizuirea setărilor într -o diagramă atribuită pinilor.
36
Depanatorul asigură funcționalitatea de bază ca registru de afișare, manipularea memoriei,
setarea într-un punct de oprire și rularea programelor. Pentru aceste funții de baza ale depanării
E2Studio adaugă funcții avansate pentru programele realizate pentru microcontrolerele Renesas,
incluzând afișarea memoriei în timp real, urmărire în timp real, afișa rea registrului periferic și setarea
întreruperilor de către evenimente folosind componente. Acestea pot fi folosite cu produse emulatoare
ca E2, E1 și E20.
Mediul de dezvoltare E2Studio este compus din două perspective: perspectiva C/C++ și
perspectiva de depanare.
Perspectiva C/C++ este utilizată pentru crearea și modificarea proiectelor, iar perspectiva de
depanare este utilizată pentru urmărirea depanării programelor în timp real.
Figura 17. Perspectiva C/C++ a mediului de dez voltare E2Studio
37
Figura 18. Perspectiva de depanare a mediului de dezvoltare E2Studio
E2Studio are o interfață pentru utilizarea tehnologiei de integrare a programelor
încorporate(FIT).
FIT este un concept creat pentru simplifica rea încorporării modulelor periferice și a îmbunătăți
portabilitatea dintre microcontrolerele RX cu scopul de a ușura povara de a dezvolta programe și a
administra resursele programelor în dezvoltare folosind familia RX.
Această tehnologie este utilizată p entru a crea programe încorporate într -un proiect în care sunt
inițializate funcțiile periferice dorite ale microcontrolerului.
În E2Studio există o interfață dedicată pentru această tehnologie, putând astfel să fie adăugată
și configurată cu ușurință.
5.1.3 IAR EW (IAR Embedded Workbench)
Acest mediu de dezvoltare permite dezvol tatorilor să scrie cel mai compact și cel mai rapid cod
posibil.
Mediul de dezvoltare integrat conține:
• Instrumente ale mediulu de dezvoltare
o Editor
38
o Project manager(Administrator de proie ct)
o Library builder(Constructor de bibliotecă)
o Librarian
• Instrumente de construcție
o IAR C/C++ Compiler(Compilator C/C++)
o Assembler(Montator)
o Linker
• Depanator IAR C -SPY
o Simulator driver(Motor de simulare)
o Hardware system drivers(Motoare pentru sistemul de c omponente)
o Power debugging(Depanare de putere)
o RTOS plug -ins(Conectori RTOS)
Figura 19. Interfața mediului de dezvoltare IAR EW
39
Spațiul de lucru al acestui mediu de dezvoltare poate avea mai multe proiecte, fiecare
aparținând une i arhitecturi diferite Renesas.
40
6. APLICAȚII DEMONSTRAT IVE CU RENESAS
DEMONSTRATION KIT FO R RX63N
6.1 Controlarea stării unui LED
Pentru crearea unui nou proiect în E2Studio trebuie înainte de toate să se creeze un spațiu de
lucru, acest lucru se realizează în momentul în care aplicația este deschisă din interfața care apare.
Figura 20. Crearea unui proiect nou în E2Studio
După alegerea tipului de proiect, apare un nou meniu în care avem posibilitatea de a da un
nume proiectului, de a alege locația în care să se salveze și de a alege tipul de instrumente care să fie
folosite pentru depanarea programului.
• Funcționalitatea codului
41
Figura 21. Funcția de comutare a stării LED -ului 10
Această funcție verifică stare a LED -ului 10, apoi îl comută în felul următor: dacă LED -ul este
stins, îl aprinde, iar dacă este aprins îl stinge.
Figura 22. Funcția principală pentru starea LED -ului
În funcția principală se inițializează starea LED -ului apoi se apelează o funcție a ceasului în
care este apelată funcția de comutare a LED -ului într -o perioadă de 0.5 secunde. Se creează o buclă
infinită în care starea LED -ului este comutată la fiecare 0.5 secunde.
Pentru încărcarea programului pe sistemul de dezv oltare se intră în meniul Run din bara de
meniuri și apoi se accesează submeniul Debug Configurations.
42
Figura 23. Accesarea meniului de configurare a depanării
Din meniul de configurare a depanării se alege proiectul dorit pentru încărcarea pe placa din
lista de depanare hardware a depanatorului Renesas.
43
Figura 24. Meniul de configurare a depanării
După ce s -a incărcat programul pe plăcuță se trece automat la perspectiva de depanare a
mediului de dezvolt are E2Studio. Pentru rularea programului pe plăcuță se accesează din bara de
instrumente butonul Resume.
Figura 25. Pornirea rulării
44
Figura 26. Oprirea rulării
• Funcționalitatea hardware
Figura 27. LED -ul 10 stins
45
Figura 28. LED -ul 10 aprins
6.2 Comunicați e serială
Interfața de comunicații seriale(SCI sau UART ) este o interfață de comunicație asincron ă care
utilizează două fire(transmisie TXD și recepție RXD) .
Transferul serial de intrare/ieșire cu ajutorul acestei interfețe se realizează pe un singur fir
pentru fiecare direcție, interfețele transmițător convertesc datele paralele într -un flux binar se rial, iar
receptorii fac conversia inversă.
Această interfață este asincronă pentru ca nu se transmite semnal de ceas prin linia de date
serială, iar receptorul poate recunoaște valorile binare individuale fără o linie comună de ceas.
Receptorul(Rx) conver tește un flux serial de biți în cuvinte pentru microprocesor, iar
transmițătorul(Tx) convertește cuvintele de la microprocesor într -un flux serial de biți pentru
transmisie.
Interfața UART asigură și informația de stare, cum ar fi că datele au ajuns sau că o transmisie
în curs s -a terminat.
46
Figura 29. Diagrama funcțională UART
Formatul datelor transmise utilizează la începutul transmisiei pentru fiecare caracter un bit de
start și la sfârșit unul sau doi biți de stop . Receptorul își sincronizează ceasul după recepționarea
bitului de start și spoi eșantionează biții de date, dacă receptorul nu primește secvența de stop se
consideră că ceasul este defazat și se declară o eroare de cadru. Această eroare este rezolvată de
program.
RS-232 este un standard de interfață de comunicație serială, aceasta a apărut încă din anii ’60.
RS-232 este folosită pentru interfațarea dispozitivelor seriale printr -un cablu cu lungime de maxim 25
m și o rată maximă de 38.4 kbps.
Acest standard folosește te nsiuni referite față de masă: Un semnal „logic high” este un semnal
cu tensiunea între -5 și -15 V, iar un semnal „logic low” are domeniul între +5 și +15V.
Pentru comunicația serială este utilizat un adaptor RS232 -USB și un cablu serial RS232.
47
Figura 30. Conectarea sistemului de dezvoltare la calculator
6.3 Control R edundant Ciclic(CRC)
Controlul Redundant Ciclic(CRC) este o metodă matematică utilizată pentru verificarea
integrității datelor. Acesta este o forma de sumă de control c are se bazează pe teoria polinoamelor de
lungime maximă. Chiar dacă această metodă este mai sigură decât metoda bazată pe o sumă simplă de
control, nu oferă o adevărată securitate criptografică. CRC este o tehnică folosită pentru detecția
erorilor de trans misie, pentru detecția și corectarea erorilor, există un registru în care se stochează
suma de control a datelor transferate. Această sumă de control se compară cu suma de control
calculată și se elimină astfel posibilele erori. Tehnica aceasta este folosi tă doar pentru detectarea
posibilelor probleme privind integritatea datelor transferate pe magistrală, dar nu și pentru a
îmbunătăți integritatea datelor stocate pe discurile hard.
Pentru a realiza o aplicație software pentru calculul CRC există mai multe metode de
implementare, acestea sunt în funcție de:
• Dimensiunea polinomului generator
• Dimensiunea și structura mesajului pentru care se calculează CRC -ul
48
• Performanțele procesorului de calcul
• Dimensiunea spațiului de stocare alocat
• Ipotezele de la care se p ornește calculul
• Timpul în care se generează CRC -ul
Pentru implementarea unui astfel de algoritm trebuie realizată implementarea împărțirii în binar
folosite de aritmetica CRC. Instrucțiunea de împărțire a unui calculator nu poate fi utilizată deoarece
împărțirea CRC nu este același lucru cu împărțirea normală și datorită dimensiunii mesajului, întrucât
poate ajunge la dimensiuni de ordinul MB, iar procesoarele actuale nu folosesc regiștrii atât de mari.
Pentru implementare trebuie să existe un registru de deplasare, având dimensiunea egală cu gradul
polinomului generator în care să se afle biții mesajului. Prelucrarea mesajului se va face bit cu bit.
Implementarea hardware a CRC sub forma unui sistem ce are la bază un microcontroler are mai
multe avantaje: permite modificarea cu ușurință a metodei de calcul, permite o introducere și
prelucrare simplă a datelor înainte de a fi supuse calculului, permite comunicația cu diferite periferice,
permite comunicația cu calculatorul prin intermediul porturilor cum ar fi cel serial.
6.4 Calculator CRC
Aplicația este realizată pentru calculul sumei de control pe 16 biți. Configurarea biților din
registrul de control este realizată astfel încât polinomul utilizat pentru calcul să fie:
X16 + X15 + X2 +1
49
Figura 31. Diagrama de funcționare a aplicației
Pentru această aplicație se utilizează un terminal cu aj utorul căruia se face comunicarea serială.
Terminalul utilizat este TeraTerm, acesta este un program pentru simularea unui terminal.
Pentru a comu nica serial prin intermediul TeraTerm -ului, la accesarea acestuia trebuie aleasă
opțiunea Serial și portul pe care se dorește să comunice.
50
Figura 32. Conectare la terminalul TeraTerm
După conectare trebuie configurat portul seria l pe care comunică sistemul de dezvoltare. Pentru
a face acest lucru se accesează meniul „Setup” din bara de meniuri apoi se accesează „Serial port…”.
51
Figura 33. Accesarea meniului de configurare a portului serial
Din acest men iu se fac următoarele setări:
• Portul
• Rata baud
• Lungimea de date
• Paritatea
• Numărul biților de stop
• Controlul fluxului
52
Figura 34. Setările corespunzătoare portului serial al sistemului de dezvoltare
După finalizarea setărilor și încărcarea programului pe sistemul de dezvoltare se poate începe
comunicația cu terminalul.
• Funcționalitatea codului :
Figura 35. Setarea porturilor și pinilor de intrare/ieșire ai interfeței UART(SCI)
Se setează porturile și pinii interfeței SCI corespunzător pentru transmisia serială, astfel că se
setează canalul Tx ca ieșire(transmițător) atribuind portului său valoarea „1” și canalul Rx ca
intrare( receptor) atribuind portului său valoarea „0”.
53
Figura 36. Funcția de activare a întreruperii pentru emisie
Funcția din Figura 36 activează întreruperea pentru emisie(TX) pe canalul 2 SCI, similar se
realizează activarea și pentru întreruperea pentru recepție(RX) pe același canal.
Figura 37. Funcția de citire
Această funcție transferă un octet de la buffer -ul de primire care a fost încărcat în urma tratării
întreruperii portului serial de recepție.
54
Figura 38. Funcția de scriere în terminal
Scrie un octet pe portul serial. Folosește buffer -ul de ieșire pentru o latență scăzută. Dacă există
spațiu în buffer, datele sunt copiate și funcția returnează imediat. Datele acumulate în buffer vor fi
scrise la ieșire în tratarea întreruperii pentru TX. Dacă buffer -ul este plin, această funcție se blochează
până când este spațiu disponibil.
Figura 39. Funcția de dezactivare a întreruperii pentru emisie
55
Această funcție dezactivează întreruperea pentru emisie(TX) pe canalul 2 SCI, similar se
realizează și dezactivarea întreruperii pentru recepție(RX) pe același canal .
Figura 40. Definiții de tipuri de date
Figura 41. Funcția de configurare a unității CRC
În cadrul funcției din Figura 41 se fac operațiile necesare pentru configurarea unității CRC
pentru a face calculel e standard ale sumei de control, având parametri de tipul crc_algorithm_t și
crc_bit_order_t definiți în Figura 40.
56
Figura 42. Citirea caracterelor de pe serial
În bucla din Figu ra 42 se citește câte un caracter de pe serial, se verifică dacă acesta este
hexazecimal, iar în caz afirmativ se trimite înapoi la terminal. Această buclă se încheie dacă se apasă
tasta Enter sau dacă se umple buffer -ul.
Figura 43. Scrierea mesajului pe ecran
În funcția principală se inițializează LCD -ul(lcd_initialize()) și se golește (lcd_clear()) , apoi se
afișează un mesaj cu ajutorul funcției lcd_display () în care avem c a parametri numărul liniei pe care
scriem și mesajul dorit.
Funcțiile folosite pe ntru LCD: lcd_initialize(), lcd_clear() și lcd_display () sunt funcții definite
în programele încorporate ale sistemului de dezvoltare.
57
Figura 424. Scrierea mesajului în terminal
Afișarea mesajului în terminal se face cu ajutorul f uncției sci_put_string() (Figura 45) în care se
apelează funcția sci_put_char() definită în Figura 38 .
Figura 45. Afișarea unui mesaj în terminal
Tot în cadrul funcției principale se inițializează interfața de comunicație serială și se activează
întrerup erile pentru canalele acesteia de comunicație, respectiv TX pentru transmisie și RX pentru
recepție.
58
• Funcționalitatea hardware :
Figura 46. Afișarea mesajului pe ecran
59
Figura 47. Afișarea mesajului în terminal
În Figura 44 se observă afișarea mesajului în terminalul TeraTerm, dar și rezultatul calculării
sumei de control pentru valoarea „00000”.
60
7. CONCLUZII
Prin această lucrare de licență intitulată „Aplicații automotive cu familia de microcontrolere
Renesas RX63N” am dorit să -mi ap rofundez cunoștințele despre microcontrolere și microprocesoare
și despre familia de microcontrolere Renesas, dar și întărirea cunoștințelor despre programare în
limbajul C și punerea acestora în practică.
Prin dezvoltarea și studierea aplicațiilor cu sistemul de dezvoltare ut ilizat am înțeles cu
adevărat ce înseamnă lumea „Embedded”, dar și utilitatea microcontrolerelor în industria Automotive.
61
8. BIBLIOGRAFIE
[NIC05] – Sorin Nicola, Microcontrolere. Aplicații î n Mecatronic ă, Editura Universitaria,
2005
[JER54] – J.P.Jerebotov, Electrotehnică Elementară , Editura Energetica de Stat, 1954
62
Referințe web
• http://www2.renesas.eu/_pdf/R01CL0015ED0200.PDF
• https://www.kernel.org/doc/Documentation/devicetree/bindings/timer/renesas%2Cmt
u2.txt
• http://vega.unitbv.ro/~ogrutan/ti/ cap3.pdf
• https://en.wikipedia.org/wiki/Direct_memory_access
• http://users.utcluj.ro/~baruch/media/sie/curs/ SIE-Magistrale -4.pdf
• https://www.renesas.com/en –
us/doc/products/tool/doc/001/r20ut0372ej0100_hew_409u.pdf
• http://www.analog.com/media/en/technical -documentation/data -sheets/ADXL345.pdf
• http://andrei.clubcisco.ro/cursuri/3pm/lab6.pdf
• http://www.meo.etc.upt.ro/materii/cursuri/ISMT/10.pdf
• http://www.meo.etc.upt.ro/materii/cursuri/ISMT/5.pdf
• http://vega.unitbv.ro/~romanca/psci/4 -PSCI -Interf -Comm -MC-4spp.pdf
• http://andrei.clubcisco.ro/cursuri/3pm/lab6.pdf
• https://en.wikipedia.org/wiki/Serial_port
• https://en.wikipedia.org/wiki/Interrupt
• http://processors.wiki.ti.com/images/a/a2/02_ -_IAR_Embedded_Workbench.pdf
• http://www.byte.ro/byte97 -10/dma.htm
63
A. CODUL SURSĂ
Codul sursă pentru configurarea interfeței UART :
#include <stdint .h>
#include <stdbool.h>
#include <machine.h>
#include "platform.h"
#include "uart.h"
/******************************************************************************
Definitii MACRO
************************************************************************ ******/
#define TX_BUF_LEN 128
#define RX_BUF_LEN 128
#define BAUDRATE 115200 /* exemple: 9600, 19200, 38400 */
#define SCI2_INT_LVL 3
/******************************************************************************
Variabile si functii globale private
******************************************************************************/
volatile uint8_t g_tx_buffer[TX_BUF_LEN];
volatile uint8_t g_rx_buffer[RX_BUF_LEN];
volatile uint32_t g_tx_count = 0;
volatile uint32_t g_tx_in_index = 0;
volatile uint32 _t g_tx_out_index = 0;
/* Pastreaza urmele datelor neprocesate ramase in buffer -ul de citire */
volatile uint32_t g_rx_count = 0;
/* Citeste pozitia buffer -ului la care se vor stoca datele sosite */
volatile uint32_t g_rx_in_index = 0;
/* Citeste po zitia buffer -ului din care datele au fost procesate */
volatile uint32_t g_rx_out_index = 0;
/* Un steag care indica starea lui TX */
volatile bool g_uart_tx_ready = false;
/***************************************************************************** *
* Nume Functie : sci_uart_init
* Descriere : Initializeaza SCI2 ca UART asincron
* Argumente : nici unul
* Valoare returnata : nici una
*******************************************************************************/
void sci_uart_init(void)
{
uint1 6_t i; /* pentru intarzierea numaratorului */
#ifdef PLATFORM_BOARD_RDKRX63N
64
SYSTEM.PRCR.WORD = 0xA50B; /* Anulare protectie */
#endif
/* goleste bitul ACSE(Toate modulele de ceas din modul de oprire se activeaza) */
SYSTEM.MSTPCRA.BIT.AC SE = 0;
/* Anuleaza starea de oprire a perifericului SCI2 pentru a se putea scrie in el */
MSTP(SCI2) = 0;
#ifdef PLATFORM_BOARD_RDKRX63N
SYSTEM.PRCR.WORD = 0xA500; /* Porneste protectia */
#endif
/* Goleste bitii T IE, RIE, RE si TEIE din SCR. Seteaza CKE ca intern. */
SCI2.SCR.BYTE = 0x00;
/* Setarea porturilor si pinilor de intrare/iesire ai interfetei UART */
MPC.P50PFS.BYTE = 0x4A; /* P50 este TxD2 */
MPC.P52PFS.BYTE = 0x4A; /* P52 este RxD2 */
PORT5.PDR.BIT.B0 = 1; /* TxD2 setat ca iesire */
PORT5.PDR.BIT.B2 = 0; /* RxD2 setat ca intrare */
PORT5.PMR.BIT.B0 = 1; /* TxD2 este periferic */
PORT5.PMR.BIT.B2 = 1; /* RxD2 este periferic */
/* Setarea formatului de tran sfer in registrul modului serial(SMR)*/
/* -Modul asincron
-8 biti
-fara paritate
-1 bit de stop
-PCLK ceas (n = 0) */
SCI2.SMR.BYTE = 0x00;
SCI2.SCMR.BIT.SMIF = 0; /* Setat ca 0 pentru modul interfetei de comunicatii serial e */
/* Setarea registrului pentru rata baud
Exemplu: seteaza 115200 baud
N = (PCLK Frecventa) / (64 * 2^(2*n – 1) * Rata de biti) – 1
N = (48,000,000) / (64 * 2^(2*0 – 1) * 115200) – 1
N = 12 */
SCI2.BRR = 48 000000 / ((64/2) * BAUDRATE) – 1; /* SCI2.BRR = 12; 12 este pentru
115200 */
/* Asteapta pentru cel putin un interval de un bit */
for (i = 0; i < 200; i++) /* O mica intarziere */
{
}
/* Activeaza intreruperile RXI si TXI in SCI */
SCI2.SC R.BIT.RIE = 1; /* Seteaza intreruperea pentru primire ca activa(Memoria tampon
este plina RX). */
65
SCI2.SCR.BIT.TIE = 1; /* Seteaza intreruperea pentru trimitere ca activa(Registrul de date
TX este gol). */
SCI2.SCR.BIT.TEIE = 1; /* Seteaza int reruperea pentru sfarsitul trimiterii ca activa. */
/* Goleste bitii IR pentru TIE si RIE */
IR(SCI2, RXI2) = 0;
IR(SCI2, TXI2) = 0;
/* Seteata intreruperea prio pentru SCI. */
IPR(SCI2, TXI2) = SCI2_INT_LVL;
IPR(SCI2, RXI2) = SC I2_INT_LVL;
/* Activeaza Tx/Rx */
SCI2.SCR.BYTE |= 0x30;
/* Initializeaza variabilele de intrare iesire memorate. */
g_tx_out_index = 0;
g_tx_in_index = 0;
g_tx_count = 0;
g_rx_out_index = 0;
g_rx_in_index = 0;
g_rx_count = 0;
} /* Sfarsitul functiei sci_uart_init */
/******************************************************************************
* Nume Functie : sci_put_char
* Descriere : Scrie un octet pe portul serial. Foloseste buffer -ul de ie sire
* : pentru o latenta scazuta. Daca exista spatiu in memoria tampon,
* : datele sunt copiate si functia returneaza imediat. Datele
* : acumulate in memoria tampon vor fi scrise la iesire in tratarea
* : intreruperii pentru TX. Daca memoria tampon este plina atunci aceasta
* : functie o blocheaza pana cand este spatiu disponibil. Ajusteaza
* : rata baud si/sau marimea memoriei tampon ceruta de aplicatie pentru
* : a mi csora timpul de asteptare.
*
* Argumente : write_data –
* Octetul pentru scriere
* Valoare returnata : nici una
*******************************************************************************/
void sci_put_char(uint8_t write_data)
{
IEN(SCI2, TXI2) = 1; /* Activeaza intreruperile pentru trimitere in ICU */
while (g_tx_count >= TX_BUF_LEN) /* RX ISR creeaza spatiu pentru a trimite date */
{
}
/* Dezactiveaza intreruperile pentru trimitere pentru a evita co nflictele globalelor */
IEN(SCI2, TXI2) = 0;
66
if (g_uart_tx_ready) /* Nu s -a trimis niciun caracter inca */
{
SCI2.SCR.BIT.TEIE = 1; /* Activeaza trimiterea completa a cererii intreruperii. */
SCI2.SCR.BIT.TIE = 1; /* Activeaza trimiterea cererii de intrerupere. */
SCI2.TDR = write_data;
g_uart_tx_ready = false; /* Goleste steagul "pregatit" pentru a indica starea de "ocupat". */
}
else /* Caracterele au fost de ja trimise, le adauga in memoria tampon. */
{
g_tx_buffer[g_tx_in_index] = write_data; /* Pune caracterul in buffer -ul de iesire */
g_tx_in_index++;
if (g_tx_in_index >= TX_BUF_LEN)
{
g_tx_in_index = 0; /* Se intoarce la inceputul buffer -ului */
}
g_tx_count++;
}
IEN(SCI2, TXI2) = 1; /* Reactiveaza intreruperea pentru buffer -ul TX gol. */
IEN(SCI2, TEI2) = 1; /* Trimite completarea intreruperii. */
} /* Sfarsitul functiei sci_put_char */
/******************************************************************************
* Nume Functie : sci_get_char
* Descriere : Transfera un octet de la memoria tampon de primire care a fost
* : completata de tratarea intrerupe rii portului serial de primire.
* Argumente : nici unul
* Valoare returnata : read_data –
* octetul citit
*******************************************************************************/
uint8_t sci_get_char(void)
{
uint8_t read _data = 0;
if (g_rx_count > 0)
{
/* Dezactiveaza intreruperile pentru primire pentru a evita conflictele globalelor */
while (IEN(SCI2, RXI2) != 0) /* Bucla daca este necesara pentru a trata latenta */
{
IEN( SCI2, RXI2) = 0;
}
read_data = g_rx_buffer[g_rx_out_index];
g_rx_out_index++;
if(g_rx_out_index >= RX_BUF_LEN)
{
g_rx_out_index = 0; /* S -a ajuns la sfarsitul buffe r-ului. Se intoarce la inceput */
}
67
g_rx_count – ;
IEN(SCI2, RXI2) = 1; /* Reactiveaza intreruperile RX */
}
return (read_data);
} /* Sfarsitul functiei sci_get_char */
/***************************** *************************************************
* Nume Functie : sci_put_string
* Descriere : Trimite la iesire un sir nul incheiat de la portul serial
* Argumente : source_string –
* Pointer la sirul care trebuie trimis
* Valoare returnata : nici una
*******************************************************************************/
void sci_put_string(uint8_t *source_string)
{
do
{
sci_put_char(*source_string);
source_string++;
} while (0 != *source_strin g);
sci_put_char(*source_string); /* scrie null la final */
} /* Sfarsitul functiei sci_put_string */
/******************************************************************************
* Nume Functie : sci_read_count_get
* Descriere : Obtine suma curenta de date neprocesate in memoria tampon de citire.
* Argumente : nici unul
* Valoare returnata : Numarul de octeti.
*******************************************************************************/
uint32_t sci_read_count_get(void)
{
uint32_t count;
/* Dezactiveaza intreruperile RX pentru a evita conflictele globalelor. */
IEN(SCI2, RXI2) = 0;
if(IEN(SCI2, RXI2))
{
/* Citire fictiva pentru a trata lantenta scrierii la intrare/iesire. */
}
count = g_rx_count;
IEN(SCI2, RXI2) = 1; /* Reactiveaza intreruperile RX */
return count;
} /* Sfarsitul functiei sci_read_count_get */
68
/******************************************************************************
* Nume Functi e : sci_tx_int_enable
* Descriere : Activeaza tratarea intreruperii lui TX din canalul 2 al SCI.
* Argumente : nici unul
* Valoare returnata : nici una
*******************************************************************************/
void sci_tx_int_ena ble(void)
{
IEN(SCI2, TXI2) = 1;
} /* Sfarsitul functiei sci_tx_int_enable */
/******************************************************************************
* Nume Functie : sci_rx_int_enable
* Descriere : Activeaza tratarea intreruperii lui RX din canalul 2 al SCI.
* Argumente : nici unul
* Valoare returnata : nici una
*******************************************************************************/
void sci_rx_int_enable(void)
{
IEN(SCI2, RXI2) = 1;
} /* Sfarsitul functiei sci_rx_int_enabl e */
/******************************************************************************
* Nume Functie : sci_tx_int_disable
* Descriere : Dezactiveaza tratarea intreruperii lui TX din canalul 2 al SCI.
* Argumente : nici unul
* Valoare returnata : nici una
*******************************************************************************/
void sci_tx_int_disable(void)
{
IEN(SCI2, TXI2) = 0;
if(IEN(SCI2, TXI2))
{
}
} /* Sfarsitul functiei sci_tx_int_disable */
/***************** *************************************************************
* Nume Functie : sci_rx_int_disable
* Descriere : Dezactiveaza tratarea intreruperii lui RX din canalul 2 al SCI.
* Argumente : nici unul
* Valoare returnata : nici una
********************* **********************************************************/
void sci_rx_int_disable(void)
{
IEN(SCI2, RXI2) = 0;
if(IEN(SCI2, RXI2))
69
{
}
} /* Sfarsitul functiei sci_rx_int_disable */
/*********************************************** *******************************
* Nume Functie : SCI2_TXI2_isr
* Descriere : SCI2 trimite rutina de intrerupere pentru memoria tampon goala
* Argumente : nici unul
* Valoare returnata : nici una
********************************************************* **********************/
#pragma interrupt SCI2_TXI2_isr(vect = VECT_SCI2_TXI2, enable)
static void SCI2_TXI2_isr(void)
{
if (g_tx_count)
{
g_uart_tx_ready = false; /* Goleste steagul "pregatit" pentru a indica starea de "ocupat". */
SCI2.TDR = g_tx_buffer[g_tx_out_index];
g_tx_out_index++;
if (g_tx_out_index >= TX_BUF_LEN)
{
g_tx_out_index = 0;
}
g_tx_count –; /* Decrementeaza numarul d e octeti pentru scriere. */
}
else
{
SCI2.SCR.BIT.TIE = 0;
IEN(SCI2, TXI2) = 0; /* Dezactiveaza trimiterea de intreruperi. */
g_uart_tx_ready = true; /* Steag pentru buffer -ul TX ca este disponibil. */
}
} /* Sfarsitul functiei SCI2_TXI2_isr */
/******************************************************************************
* Nume Functie : SCI2_RXI2_isr
* Descriere : SCI2 primeste rutina de intrerupere pentru memoria tampon plina
* Argumente : nici unul
* Valoare returnata : nici una
*******************************************************************************/
#pragma interrupt SCI2_RXI2_isr(vect = VECT_SCI2_RXI2, enable)
static void SCI2_RXI2_isr(void)
{
uint8_t read_byte;
read_b yte = SCI2.RDR; /* Citeste un byte din registrul de date al UART */
while(SCI2.SSR.BIT.ORER) /* Verificare pentru eroarea de depasire. */
{
SCI2.SSR.BIT.ORER = 0; /* Elimina eroarea de depasire. Se repeta pana cand
conditia este eliminata. */
70
}
if (g_rx_in_index < RX_BUF_LEN)
{
g_rx_buffer[g_rx_in_index] = read_byte;
}
else /* Trimite la inceput daca este buffer -ul plin. */
{
g_rx_in_index = 0;
g_rx_buffer[g_rx_in_index] = re ad_byte;
}
g_rx_in_index++;
g_rx_count++; /* Incrementeaza numarul de date neprocesate. Se decrementeaza cand este
procesata. */
} /* Sfarsitul functiei SCI2_RXI2_isr */
/***************************************** *************************************
* Nume Functie : SCI2_TEI2_isr
* Descriere : SCI2 trimite rutina de intrerupere completa
* Argumente : nici unul
* Valoare returnata : nici una
********************************************************************** *********/
#pragma interrupt SCI2_TEI2_isr(vect = VECT(SCI2, TEI2))
static void SCI2_TEI2_isr(void)
{
SCI2.SCR.BIT.TEIE = 0;
IEN(SCI2, TEI2) = 0; /* Dezactiveaza intreruperea de sfarsit de transmisie. */
g_uart_tx_ready = true; /* Steag pentru TX ca este disponibil */
} /* Sfar situl functiei SCI2_TEI2_isr */
/* Sfarsitul fisierului uart.c */
Codul sursă pentru configurarea unității CRC și calculul sumei de control:
#include <stdint.h>
#include <stdio.h>
#include <stdboo l.h>
#include "platform.h"
#include "crc_demo.h"
#include "uart.h"
bool is_hex_char(uint8_t ascii_char);
uint8_t hex_to_int(uint8_t* hex_char_pair);
/*******************************************************************************
* Nume Functie: crc_ini t
* Descriere : Aceasta functie configureaza unitatea CRC pentru a realiza
71
* calculele standard ale sumei de control pe 16 biti.
* Argumente : none
* Valoare returnata : none
************************************************************* ******************/
void crc_init(crc_algorithm_t algorithm, crc_bit_order_t bit_order)
{
#ifdef PLATFORM_BOARD_RDKRX63N
SYSTEM.PRCR.WORD = 0xA50B; /* Anularea protectiei */
#endif
/* Anuleaza starea de oprire a modulului CRC */
MSTP(CRC) = 0;
#ifdef PLATFORM_BOARD_RDKRX63N
SYSTEM.PRCR.WORD = 0xA500; /* Activeaza protectia */
#endif
/* Selecteaza polinomul de generare CRC */
CRC.CRCCR.BIT.GPS = algorithm;
/* Selecteaza ordinea de biti dorita. LSB sau MSB primul * /
CRC.CRCCR.BIT.LMS = bit_order;
CRC.CRCCR.BIT.DORCLR = 1; /* Goleste registrul CRCDOR. */
} /* Sfarsitul functiei crc_init */
/*******************************************************************************
* Nume Functie: calculate_crc_range
* Descriere : Calculeaza CRC -ul pentru o gama continua de memorie si returneaza
* rezultatul. Algoritmul folosit va depinde de felul in care unitatea
* CRC a fost configurata la initializare.
* Argumente : start_addr –
* Pointer catre primul octet al registrului de memorie.
* end_addr –
* Pointer catre ultimul octet al registrului de memorie.
* Trebuie sa fie mai mare sau egal cu st art_addr.
* Valoare returnata : uint16_t –
* Suma de control de iesire pe 16 biti.
*******************************************************************************/
uint16_t calculate_crc_range (uint8_t* start_addr, uint8_t* end_addr)
{
uint32_t i;
uint16_t crc_result;
for (i = 0; i <= (end_addr – start_addr); i++)
{
/* Copiaza un octet in registrul de date de intrare al CRC. */
CRC.CRCDIR = *(start_addr + i);
}
crc_result = CRC.CRCDOR ; /* Obtine rezultatul din registrul de date de iesire al CRC. */
72
return crc_result;
}
/*******************************************************************************
* Nume Functie: crc_demo
* Descriere : O secventa de mai multe de 64 de caractere ASCII sunt primite prin
* portul serial. Fiecare caracter este testat daca este valoare
* hexazecimala si numai aceste valori sunt pastrate si puse intr -o
* memorie tampon temporara. Secventa de carac tere este convertita
* in valori intregi si memorate in alta memorie tampon. In final,
* suma de control este calculata peste intervalul de valori si
* rezultatul este transmis la portul serial ca un sir hexazec imal.
* Argumente : nici unul
* Valoare returnata : nici una
*******************************************************************************/
#define CBUFSIZE 64 /* Spatiu pentru 64 de caractere */
#define IBUFSIZE 32 /* Spatiu pentru 32 de oct eti */
void crc_demo(void)
{
uint16_t checksum = 0x0000;
uint8_t received_char;
uint8_t char_buffer[CBUFSIZE] = {0};
uint8_t int_buffer[IBUFSIZE] = {0};
uint8_t char_count = 0; /* Numarul de caractere ASCII hexazecimale primite validate. */
uint8_t int_count = 0; /* Numarul de caractere convertite in intreg. */
uint8_t hex_str[7] = {0}; /* Spatiu pentru stocarea sirului de reprezentare a sumei de control. */
sci_put_string(" \r\n"); /* Trimite CRLF la ter minal */
/*Citeste caractere pe serial pana cand primeste return sau se umple buffer -ul */
do
{
if(sci_read_count_get()) /* Verifica daca exista date noi. */
{
received_char = sci_get_char(); /* Obtine ca racterul care asteapta in buffer -ul RX. */
if (is_hex_char(received_char)) /* Verifica daca este un caracter hexazecimal. Daca nu este il
ignora. */
{
char_buffer[char_count++] = received_char;
sci_put_char(received_char); /* Trimite caracterul inapoi la terminal. */
}
}
} while(((0x0d != received_char) && (char_count < CBUFSIZE)) || (char_count < 2));
/* Toate datele au fost primite. Sunt conver tite in intreg si stocate in int_buffer. */
for (int_count = 0; int_count < (char_count/2); int_count++)
{
int_buffer[int_count] = hex_to_int(&char_buffer[int_count * 2]);
}
73
sci_put_string(" \r\n"); /* Trimite CRLF la terminal * /
/* Calculeaza CRC. */
checksum = calculate_crc_range(int_buffer, &int_buffer[int_count -1]);
CRC.CRCCR.BIT.DORCLR = 1; /* Goleste registrul CRCDOR pentru urmatoarea utilizare */
sprintf((char *)hex_str, "0x%04X", c hecksum);
sci_put_string(hex_str);
} /* Sfarsitul functiei crc_demo */
/*******************************************************************************
* Nume Functie: is_hex_char
* Descriere : Verifica daca un caracter este in gama hexazeci mala
* 0 -9, A-F, a-f
* Argumente : hex_char_pair –
* pointer la un vector de doua caractere ASCII codificate hexazecimal
* Valoare returnata : uint8_t –
* Valoarea intreaga convertita
************** *****************************************************************/
bool is_hex_char(uint8_t ascii_char)
{
if ( (0x0d != ascii_char) &&
(((ascii_char >= 0x30) && (ascii_char <= 0x39)) ||
((ascii_char >= 0x41) && (ascii_char <= 0x46 )) ||
((ascii_char >= 0x61) && (ascii_char <= 0x66)))
)
{
return true;
}
else
{
return false;
}
}
/*******************************************************************************
* Nume Functie: hex_to_int
* Descriere : Converteste o pereche de caractere ASCII hexazecimale intr -o valoare
* intreaga pe un singur octet.
* Argumente : hex_char_pair –
* pointer la un vector de doua caractere ASCII codificate hexa zecimal
* Valoare returnata : uint8_t –
* Valoarea intreaga convertita
*******************************************************************************/
uint8_t hex_to_int(uint8_t* hex_char_pair)
{
uint8_t int_value = 0;
uint8_t c ;
74
c = hex_char_pair[0];
if ((c >= 0x30) && (c <= 0x39)) /* 0 -9 */
{
int_value = (c – 0x30);
}
else if ((c >= 0x41) && (c <= 0x46)) /* A -F */
{
int_value = (c – 0x37);
}
else if ((c >= 0x6 1) && (c <= 0x66)) /* a -f */
{
int_value = (c – 0x57);
}
else
{
while(1) /* eroare. date de intrare invalide. */
{
}
}
int_value <<= 4;
c = hex_char_pair[1];
if ((c >= 0x 30) && (c <= 0x39)) /* 0 -9 */
{
int_value |= (c – 0x30);
}
else if ((c >= 0x41) && (c <= 0x46)) /* A -F */
{
int_value |= (c – 0x37);
}
else if ((c >= 0x61) && (c <= 0x66)) /* a -f */
{
int_va lue |= (c – 0x57);
}
else
{
while(1) /* eroare. Date de intrare invalide. */
{
}
}
return int_value;
}
/* sfarsit crc.c */
Codul sursă al funcției principale:
75
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include <machine.h>
#include "platform.h"
#include "crc_demo.h"
#include "uart.h"
/******************************************************************************
* Nume Functie : main
* Descriere : Functia programului pri ncipal. Aceasta functie la inceput initializeaza
* ecranul(LCD) si afiseaza un mesaj pe acesta. In continuare apeleaza
* functia de initializare init_crc, care configureaza unitatile
* SCI si CRC. Cand microc ontrolerul se intoarce la functia main,
* intra intr -o bucla infinita.
* Argumente : nici unul
* Valoare returnata : nici una
******************************************************************************/
void main (void)
{
/* Initiali zare LCD */
lcd_initialize();
/* Golire LCD -ul */
lcd_clear();
/* Afisare mesaj pe LCD */
lcd_display(LCD_LINE1, "NEDEIANU ");
lcd_display(LCD_LINE2, "MIHAELA ");
lcd_display(LCD_LINE3, "LAVINIA ");
lcd_display(LCD_LINE4, " Calculator ");
lcd_display(LCD_LINE5, " CRC ");
lcd_display(LCD_LINE6, " Licenta ");
lcd_display(LCD_LINE7, " Iulie ");
lcd_display(LCD_LINE8, " 2017 ");
/* Initializare interfata de comun icatie SCI */
sci_uart_init();
/* Activare canale de comunicatie */
sci_tx_int_enable();
sci_rx_int_enable();
/* Trimitere mesaje catre terminal */
sci_put_string(" \r\n\nRenesas YRDKRX63N CRC Calculator \r\n");
sci_put_string ("Introdu de la tastatura un numar hexazecimal(0 -9, A-F)\r\n");
sci_put_string("Apasa enter la final. \r\n");
sci_put_string("O suma de control este calculata si afisata in terminal. \r\n");
sci_put_string(" ––––––––––––– ––––––––- |\r");
76
/* Pregatirea calculatorului CRC pentru utilizare. */
crc_init( ANSI_CRC_16 , MSB_FIRST );
/* Aceasta este bucla infini ta.Repeta apelarea functiei crc_ demo() la infinit. */
while (1)
{
crc_demo();
}
} /* Sfarsitul functiei main */
77
B. CD / DVD
78
INDEX
B
Bibliografie, 72
C
CUPRINSUL, xii L
LISTA FIGURILOR, xiii
LISTA TABELELOR, xv
R
Referințe web, 73
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Conf. univ. dr. ing. Sorin Nicola Iulie 2017 CRAIOVA ii UNIVERSITATEA DIN CRAIOVA FACULTATEA DE AUTOMATICĂ, CALCULATOARE ȘI ELECTRONICĂ DEPARTAMENTUL… [623892] (ID: 623892)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
