Sunteți pe pagina 1din 4

SISTEME IN TIMP REAL Laborator 2

Kitul de dezvoltare MCBSTR9


Scopul laboratorului
Scopul acestui laborator este reprezentat de familiarizarea cu kitul de dezvol-
tare MCBSTR9, cu afiorul LCD si ieirile digitale puse la dispoziie de acest kit de
dezvoltare.

1 MCBSTR9
Kitul de dezvoltare MCBSTR91 (vezi Figura 1) este construit in jurul microcon-
trolerului STR912FAW442 produs de compania ST Microelectronics. Acest microcon-
troler este bazat pe arhitectura ARM966E-S3 (arhitectur RISC pe 32 bii). Microcon-
trolerul are 512KB+32KB memorie flash, 96KB memorie RAM i ceas cu PLL 4
(Phase-Locked Loop) pn la 96MHz. Ca periferice integrate, acest microcontroler
dispune de un controler pentru vectorul de ntreruperi, DMA, interfa pentru memo-
rie extern, interfa Ethernet 10/100Mb, interfa USB2.0, port CAN 2.0B5, 3 porturi
seriale, 2 porturi I2C6, 2 canale pentru SPI7/Microwire8, 4 timere pe 16 bii, ceas de
timp real, timer watchdog9, 8 canale analogic-digital pe 10 bii, controler pentru motor
de inducie cu 3 faze, 80 de pini pentru intrri/ieiri.

Figura 1. Kitul de dezvoltate MCBSTR9

1
http://www.keil.com/mcbstr9/
2
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/CD00159308.pdf
3
http://infocenter.arm.com/help/topic/com.arm.doc.ddi0213e/ARM966E-S_TRM.pdf
4
http://en.wikipedia.org/wiki/Phase-locked_loop
5
http://en.wikipedia.org/wiki/CAN_bus
6
http://en.wikipedia.org/wiki/I2C
7
http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus
8
http://en.wikipedia.org/wiki/Microwire
9
http://en.wikipedia.org/wiki/Watchdog_timer

1
SISTEME IN TIMP REAL Laborator 2

Descrierea detaliat a kitului de dezvoltare MCBSTR9 si a modului de pro-


gramare/depanare folosind Keil Vision4 mpreun cu interfaa KEIL ULINK2 se afl
la adresa: http://www.keil.com/mcbstr9/ . Trebuie menionat c acest kit are un afior
LCD 2x20,iar 8 ieiri digitale sunt conectate la 8 LED-uri (ncercuite cu rou n Figura
1).

2 Lucrul cu afiorul LCD


Afiorul LCD este conectat la port GPIO8 pentru date (LCD-ul folosete 8 pini
de port pentru date) i 3 pini de pe portul GPIO9 pentru control (GPIO9.0, GPIO9.1 i
GPIO9.2). Pentru a putea lucra cu LCD-ul, aceste linii de port trebuie s fie setate ca
ieiri digitale. Acest lucru este realizat cu ajutorul registrelor DDR (Data Direction
Register) asociate porturilor GPIO8 i GPIO9. Pentru a realiza acest lucru, in pro-
gramul nostru trebuie s scriem urmtoarele linii de cod:

GPIO8->DDR = 0xFF;
GPIO9->DDR |= 0x07;

Pentru a putea pune aceste linii de cod in codul nostru surs, trebuie s inclu-
dem fiierul header 91x_lib.h. O descriere detaliat a registrelor DDR (Data Direction
Register) poate fi gsit n manualul microcontrolerului de la adresa:
http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/reference_manual/CD00166390.pdf

Acum trebuie s includem in proiectul nostru fiierele care implementeaz lu-


crul cu LCD-ul. Astfel, trebuie s copiem din directorul
C:\Keil\ARM\Boards\Keil\MCBSTR9\Blinky (se consider ca Keil Vision4 a fost in-
stalat in directorul C:\Keil), 3 fiiere surs: LCD.c, LCD.h i UserFont.c. Dup ce am
inclus aceste fiiere in codul nostru, vom iniializa afiorul LCD prin apelul funciei:

void lcd_init() (void);

tergerea ecranului LCD se realizeaz prin apelul funciei:

void lcd_clear (void);

Poziionarea cursorului la o anumit poziie se realizeaz prin apelul funciei


(column reprezint poziia pe linie cu valori de la o la 19, iar line reprezint linia cu
valorile 0 sau 1):

void set_cursor (unsigned char column, unsigned char line);

Afiarea unui ir de caractere pe LCD se realizeaz prin apelul funciei (afiarea


este realizat ncepnd cu poziia curent a cursorului):

void lcd_print (unsigned char const *string);

Afiarea unui caracter pe LCD se realizeaz prin apelul funciei (afiarea este reali-
zat ncepnd cu poziia curent a cursorului):
void lcd_putchar (char c);

2
SISTEME IN TIMP REAL Laborator 2

Toate aceste funcii sunt implementate n fiierul LCD.c iar prototipurile lor se
regsesc in fiierul LCD.h (pe care trebuie s l includem in fiierul de unde se ape-
leaz funciile).

3 Lucrul cu ieirile digitale conectate la LED-uri


In cadrul kitului de dezvoltare MCBSTR9, cei 8 pini ai portului GPIO7 sunt co-
nectai la 8 leduri (in Figura 1 cele 8 leduri sunt ncercuite cu rou). LA fel ca i in ca-
zul afiorului LCD, trebuie s iniializm portul GPIO7 ca ieiri digitale. Acest lucru se
realizeaz prin urmtoarele linii de cod (SCU este System Control Unit, iar GPIOOUT
sunt regitri de ieire asocitate porturilor de intrare/ieiri digitale - o descriere detaliat
a acestor regitri se resesc n manualul microcontrolerului):

SCU->GPIOOUT[7] = 0x5555;
GPIO7->DDR = 0xFF;

Dac dorim s setm valoarea 1 sau 0 pe o linie de port (aprindem sau


stingem led-ul asociat) vom apela funcia:

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, u8 GPIO_Pin, BitAction BitVal);

GPIOx in cazul nostru va avea tot timpul valoarea GPIO7.


GPIO_Pin linia pe care dorim s scriem o valoare, poate avea valorile
GPIO_Pin_0, GPIO_Pin_1, , GPIO_Pin_7.
BitVal valoarea pe care o scriem pe port, poate avea valorile Bit_RESET
pentru a stinge ledul sau Bit_SET pentru a aprinde ledul.

Dac dorim s setm valorile pentru toate cele 8 linii de port (toate cele 8 le-
duri) vom apela funcia:
void GPIO_Write(GPIO_TypeDef* GPIOx, u8 PortVal);

GPIOx in cazul nostru va avea tot timpul valoarea GPIO7.


PortVal o valoare pe 8 bii in care valoarea fiecrui bit corespunde unei linii
de port (unui led).

Pentru a putea apela aceste funcii, trebuie s includem fiierul header 91x_lib.h
n fiierul surs unde sunt apelate funciile.

4 Desfurarea lucrrii
1. Deschidei proiectele din directorul c:\Keil\ARM\Boards\Keil\MCBSTR9\, anali-
zai codul surs i executaile pe kitul de dezvoltate MCBSTR9.
2. Realizai o aplicaie n care o variabil pe 8 bii este incrementat periodic
(temporizarea se va realiza cu o funcie sleep). Afiai pe LCD (in binar si ze-
cimal) i pe cele 8 leduri valoarea variabilei (fiecare LED reprezint un bit a
valori). Deoarece nu avei o funcie de sleep, putei include in proiect urm-
toarea funcie (in funcie de parametrul pe care l transmitei, timpul de atep-
tare poate fi mai mic sau mai mare):

3
SISTEME IN TIMP REAL Laborator 2

void sleep(unsigned long Intarziere)


{
while(Intarziere --);
}