You are on page 1of 21

Bi 2: GIAO TIP UART

Sasuke- Etechclub.net

Ni dung:
C s l thuyt UART Cc thanh ghi ca UART Khi to code vision

I. C s l thuyt

Thut ng USART trong ting anh l vit tt ca cm t: Universal Synchronous & Asynchronous serial Reveiver and Transmitter, ngha l b truyn nhn ni tip ng b v khng ng b. Cn ch rng khi nim USART (hay UART nu ch ni n b truyn nhn khng ng b) thng ch thit b phn cng (device, hardware), khng phi ch mt chun giao tip. USART hay UART cn phi kt hp vi mt thit b chuyn i mc in p to ra mt chun giao tip no . V d, chun RS232 (hay COM) trn cc my tnh c nhn l s kt hp ca chip UART v chip chuyn i mc in p. Tn hiu t chip UART thng theo mc TTL: mc logic high l 5, mc low l 0V. Trong khi , tn hiu theo chun RS232 trn my tnh c nhn thng l 12V cho mc logic high v +12 cho mc low (tham kho hnh 1). Ch l cc gii thch trong ti liu ny theo mc logic TTL ca USART, khng theo RS232 Truyn thng ni tip: gi s bn ang xy dng mt ng dng phc tp cn s dng nhiu vi iu khin (hoc vi iu khin v my tnh) kt ni vi nhau. Trong qu trnh lm vic cc vi iu khin cn trao i d liu cho nhau, v d tnh hung Master truyn lnh cho Slaver hoc Slaver gi tn hiu thu thp c v Master x lGi s d liu cn trao i l cc m c chiu di 8 bits, bn c th

s ngh n cch kt ni n gin nht l kt ni 1 PORT (8 bit) ca mi vi iu khin vi nhau, mi line trn PORT s chu trch nhim truyn/nhn 1 bit d liu. y gi l cch giao tip song song, cch ny l cch n gin nht v d liu c xut v nhn trc tip khng thng qua bt k mt gii thut bin i no v v th tc truyn cng rt nhanh. Tuy nhin, nh bn thy, nhc im ca cch truyn ny l s ng truyn qu nhiu, bn hy tng tng nu d liu ca bn c gi tr cng ln th s ng truyn cng s nhiu thm. H thng truyn thng song song thng rt cng knh v v th km hiu qu. Truyn thng ni tip s gii quyt vn ny, trong tuyn thng ni tip d liu c truyn tng bit trn 1 (hoc mt t) ng truyn. V l do ny, cho d d liu ca bn c ln n u bn cng ch dng rt t ng truyn. Hnh 2 m t s so snh gia 2 cch truyn song song v ni tip trong vic truyn con s 187 thp phn (tc 10111011 nh phn).

Truyn 8 bit theo phng php song song v ni tip. Mt hn ch rt d nhn thy khi truyn ni tip so vi song song l tc truyn v chnh xc ca d liu khi truyn v nhn. V d liu cn c chia nh thnh tng bit khi truyn/nhn, tc truyn s b gim. Mt khc, m bo tnh chnh xc ca d liu, b truyn v b nhn cn c nhng tha hip hay nhng tiu chun nht nh. Phn tip theo trong chng ny gii thiu cc tiu

chun trong truyn thng ni tip khng ng b. Khi nim ng b ch s bo trc trong qu trnh truyn. Ly v d thit b 1 (tb1) kt vi vi thit b 2 (tb2) bi 2 ng, mt ng d liu v 1 ng xung nhp. C mi ln tb1 mun send 1 bit d liu, tb1 iu khin ng xung nhp chuyn t mc thp ln mc cao bo cho tb2 sn sng nhn mt bit. Bng cch bo trc ny tt c cc bit d liu c th truyn/nhn d dng vi t ri ro trong qu trnh truyn. Tuy nhin, cch truyn ny i hi t nht 2 ng truyn cho 1 qu trnh (send or receive). Giao tip gia my tnh v cc bn phm (tr bn phm kt ni theo chun USB) l mt v d ca cch truyn thng ni tip ng b. Khc vi cch truyn ng b, truyn thng khng ng b ch cn mt ng truyn cho mt qu trnh. Khung d liu c chun ha bi cc thit b nn khng cn ng xung nhp bo trc d liu n. V d 2 thit b ang giao tip vi nhau theo phng php ny, chng c tha thun vi nhau rng c 1ms th s c 1 bit d liu truyn n, nh th thit b nhn ch cn kim tra v c ng truyn mi mili-giy c cc bit d liu v sau kt hp chng li thnh d liu c ngha. Truyn thng ni tip khng ng b v th hiu qu hn truyn thng ng b (khng cn nhiu lines truyn). Tuy nhin, qu trnh truyn thnh cng th vic tun th cc tiu chun truyn l ht sc quan trng. Chng ta s bt u tm hiu cc khi nim quan trng trong phng php truyn thng ny. Baud rate (tc Baud): nh trong v d trn v vic truyn 1 bit trong 1ms, bn thy rng vic truyn v nhn khng ng b xy ra thnh cng th cc thit b tham gia phi thng nht nhau v khong thi dnh cho 1 bit truyn, hay ni cch khc tc truyn phi c ci t nh nhau trc, tc ny gi l tc Baud. Theo nh ngha, tc baud l s bit truyn trong 1 giy. V d nu tc baud c t l 19200 th thi gian dnh cho 1 bit truyn l 1/19200 ~ 52.083us.

Frame (khung truyn): do truyn thng ni tip m nht l ni tip khng ng b rt d mt hoc sai lch d liu, qu trnh truyn thng theo kiu ny phi tun theo mt s quy cch nht nh. Bn cnh tc baud, khung truyn l mt yu tc quan trng to nn s thnh cng khi truyn v nhn. Khung truyn bao gm cc quy nh v s bit trong mi ln truyn, cc bit bo nh bit Start v bit Stop, cc bit kim tra nh Parity, ngoi ra s lng cc bit trong mt data cng c quy nh bi khung truyn. Hnh 1 l mt v d ca mt khung truyn theo UART, khung truyn ny c bt u bng mt start bit, tip theo l 8 bit data, sau l 1 bit parity dng kim tra d liu v cui cng l 2 bits stop. Start bit: start l bit u tin c truyn trong mt frame truyn, bit ny c chc nng bo cho thit b nhn bit rng c mt gi d liu sp c truyn ti. module USART trong AVR, ng truyn lun trng thi cao khi ngh (Idle), nu mt chip AVR mun thc hin vic truyn d liu n s gi mt bit start bng cch ko ng truyn xung mc 0. Nh vy, vi AVR bit start l mang gi tr 0 v c gi tr in p 0V (vi chun RS232 gi tr in p ca bit start l ngc li). start l bit bt buc phi c trong khung truyn. Data: data hay d liu cn truyn l thng tin chnh m chng ta cn gi v nhn. Data khng nht thit phi l gi 8 bit, vi AVR bn c th quy nh s lng bit ca data l 5, 6, 7, 8 hoc 9 (tng t cho hu ht cc thit b h tr UART khc). Trong truyn thng ni tip UART, bit c nh hng nh nht (LSB Least Significant Bit, bit bn phi) ca data s c truyn trc v cui cng l bit c nh hng ln nht (MSB Most Significant Bit, bit bn tri). Parity bit: parity l bit dng kim tra d liu truyn ng khng (mt cch tng i). C 2 loi parity l parity chn (even parity) v parity l (odd parity). Parity chn ngha l s lng s 1 trong d liu bao gm bit parity lun l s chn. Ngc li tng s lng cc s 1 trong parity l lun l s l. V d, nu d liu ca bn l 10111011 nh phn, c tt c 6 s 1 trong d liu ny, nu parity chn

c dng, bit parity s mang gi tr 0 m bo tng cc s 1 l s chn (6 s 1). Nu parity l c yu cu th gi tr ca parity bit l 1. Hnh 1 m t v d ny vi parity chn c s dng. Parity bit khng phi l bit bt buc v v th chng ta c th loi bit ny khi khung truyn (cc v d trong bi ny ti khng dng bit parity). Stop bits: stop bits l mt hoc cc bit bo cho thit b nhn rng mt gi d liu c gi xong. Sau khi nhn c stop bits, thit b nhn s tin hnh kim tra khung truyn m bo tnh chnh xc ca d liu. Stop bits l cc bits bt buc xut hin trong khung truyn, trong AVR USART c th l 1 hoc 2 bits (Trong cc thit b khc Stop bits c th l 2.5 bits). Trong v d hnh 1, c 2 stop bits c dng cho khung truyn.Gi tr ca stop bit lun l gi tr ngh (Idle) v l ngc vi gi tr ca start bit, gi tr stop bit trong AVR lun l mc cao (5V). (Ch v gi : khung truyn ph bin nht l : start bit+ 8 bit data+1 stop bit) Sau khi nm bt cc khi nim v truyn thng ni tip, phn tip theo chng ta s kho st cch thc hin phng php truyn thng ny trn chip AVR (c th l chip Atmega32).
II. Cc thanh ghi ca USART

Biu hot ng ca khi USART

Cng nh cc thit b khc trn AVR, tt c hot ng v trng thi ca module USART c iu khin v quan st thng qua cc thanh ghi trong vng nh I/O. C 5 thanh ghi c thit k ring cho hot ng v iu khin ca USART, l:

UDR: hay thanh ghi d liu, l 1 thanh ghi 8 bit cha gi tr nhn c v pht i ca USART. Thc cht thanh ghi ny c th coi nh 2 thanh ghi TXB (Transmit

data Buffer) v RXB (Reveive data Buffer) c chung a ch. c UDR thu c gi tr thanh ghi m d liu nhn, vit gi tr vo UDR tng ng t gi tr vo thanh ghi m pht, chun b gi i. Ch trong cc khung truyn s dng 5, 6 hoc 7 bit d liu, cc bit cao ca thanh ghi UDR s khng c s dng

UCSRA (USART Control and Status Register A): l 1 trong 3 thanh ghi iu khin hot ng ca module USART.

Thanh ghi UCSRA ch yu cha cc bit trng thi nh bit bo qu trnh nhn kt thc (RXC), truyn kt thc (TXC), bo thanh ghi d liu trng (UDRE), khung truyn c li (FE), d liu trn (DOR), kim tra parity c li (PE)Bn ch mt s bit quan trng ca thanh ghi ny: * UDRE (USART Data Register Empty) khi bit by bng 1 ngha l thanh ghi d liu UDR ang trng v sn sng cho mt nhim v truyn hay nhn tip theo. V th nu bn mun truyn d liu u tin bn phi kim tra xem bit UDRE c bng 1 hay khng, sau khi chc chn rng UDRE=1 hy vit d liu vo thanh ghi UDR truyn i. * U2X l bit ch nh gp i tc truyn, khi bit ny c set ln 1, tc truyn so cao gp 2 ln so vi khi bit ny mang gi tr 0. * MPCM l bit chn ch hot ng a x l (multi-processor).

UCSRB (USART Control and Status Register B): y l thanh ghi quan trng iu khin USART. V th chng ta s kho st chi tit tng bit ca thanh ghi ny.

* RXCIE (Receive Complete Interrupt Enable) l bit cho php ngt khi qu trnh nhn kt thc. Vic nhn d liu truyn bng phng php ni tip khng ng b thng c thc hin thng qua ngt, v th bit ny thng c set bng 1 khi USART c dung nhn d liu. * TXCIE (Transmit Complete Interrupt Enable) bit cho php ngt khi qu trnh truyn kt thc. * UDRIE (USART Data Register Empty Interrupt Enable) l bit cho php ngt khi thanh ghi d liu UDR trng. * RXEN (Receiver Enable) l mt bit quan trng iu khin b nhn ca USART, kch hot chc nng nhn d liu bn phi set bit ny ln 1. * TXEN (Transmitter Enable) l bit iu khin b pht. Set bit ny ln 1 bn s khi ng b pht ca USART. * UCSZ2 (Chracter size) bit ny kt hp vi 2 bit khc trong thanh ghi UCSRC quy nh di ca d liu truyn/nhn. Chng ta s kho st chi tit khi tm hiu thanh ghi UCSRC. * RXB8 (Receive Data Bit 8) gi l bit d liu 8. Bn nh li rng USART trong AVR c h tr truyn d liu c di ti a 9 bit, trong khi thanh ghi d liu l thanh ghi 8 bit. Do , khi c gi d liu 9 bit c nhn, 8 bit u s cha trong thanh ghi UDR, cn c 1 bit khc ng vai tr bit th chn, RXD8 l bit th chn ny. Bn ch l cc bit c nh s t 0, v th bit th chn s c ch s l 8, v l m bit ny c tn l RXD8 (khng phi RXD9).

* TXB8 (Transmit Data Bit 8), tng t nh bit RXD8, bit TXB8 cng ng vai tr bit th 9 truyn thng, nhng bit ny c dung trong lc truyn d liu.

Ngt l g : Cc bn nghe thut ng ny nhiu, nhng thc s trong VK


ngt l g? Interrupts, thng c gi l ngt, l mt tn hiu khn cp gi n b x l, yu cu b x l tm ngng tc khc cc hot ng hin ti nhy n mt ni khc thc hin mt nhim v khn cp no , nhim v ny gi l trnh phc v ngt isr (interrupt service routine ). Sau khi kt thc nhim v trong isr, b m chng trnh s c tr v gi tr trc b x l quay v thc hin tip cc nhim v cn dang d. Nh vy, ngt c mc u tin x l cao nht, ngt thng c dng x l cc s kin bt ng nhng khng tn qu nhiu thi gian. Cc tn hiu dn n ngt c th xut pht t cc thit b bn trong chip (ngt bo b m timer/counter trn, ngt bo qu trnh gi d liu bng RS232 kt thc) hay do cc tc nhn bn ngoi (ngt bo c 1 button c nhn, ngt bo c 1 gi d liu c nhn). VD Main {khoi tao; Hien thi; Ngt; Chy ch } Ngt {

Abc..... } Ngha l, trong chng trnh chnh cc bn s lm rt nhiu lnh, nhng khi c c ngt bo th VK s u tin x l ngt trc, nh thc hin abc.. g khi thc hin xong th s tr li main x l tip Do trong UART chng ta s s dng ngt nhn v truyn d liu bng cc thanh ghi RXCIE v TXCIE, v sao li dng em n, nh gii thch trn, khi nhn v truyn d liu kt thc c ngt thanh ghi s bo 1, v sau chng trnh s nhy ra va thc hin ngt(nhn or gi d liu ri lm g ....). Nu khng dng ngt c khng, Oki c ch, gi s bn i nhn d liu t my tnh truyn cho VK, hm nhn k t s ch ti khi c k t ti VK, sau n s x l vng lnh tip theo, cn khng c k t gi xung th sao, th VK s b treo ch ny, khi no c k t th thi. Lc bn khng lm g c.Nn chng ta dng ngt l vy y, v khi nhn or gi kt thc em n mi x l, cn bnh thng th VK s lm vic ca mnh.

UCSRC (USART Control and Status Register C): thanh ghi ny ch yu quy nh khung truyn v ch truyn. Tuy nhin, c mt rc ri nho nh l thanh ghi ny li c cng a ch vi thanh ghi UBRRH (thanh ghi cha byte cao dng xc lp tc baud), ni mt cch khc 2 thanh ghi ny l 1. V th bit 7 trong thanh ghi ny, tc bit URSEL l bit chn thanh ghi. Khi URSEL=1, thanh ghi ny c chip AVR hiu l thanh ghi iu khin UCSRC, nhng nu bit URSEL=0 th thanh ghi UBRRH s c s dng.

Cc bit cn li trong thanh ghi UCSRC c m t nh sau: * UMSEL (USART Mode Select) l bit la chn gia 2 ch truyn thng ng b v khng ng b. Nu UMSEL=0, ch khng ng b c chn, ngc li nu UMSEL=1, ch ng b c kch hot. * Hai bit UPM1 v UPM0( Parity Mode) c dng quy nh kim tra pariry. Nu UPM1:0=00, parity khng c s dng (mode ny kh thng dng), UPM1:0=01 khng c s dng, UPM1:0=10 th parity chn c dng, UPM1:0=11 parity l c s dng (xem thm bng 1). Bng 1: chn kim tra parity.

* USBS (Stop bit Select), bit Stop trong khung truyn bng AVR USART c th l 1 hoc 2 bit, nu USBS=0 th Stop bit ch l 1 bit trong khi USBS=1 s c 2 Stop bit c dng. * Hai bit UCSZ1 v UCSZ2 (Character Size) kt hp vi bit UCSZ2 trong thanh ghi UCSRB to thnh 3 bit quy nh di d liu truyn. Bng 2 tm tt cc gi tr c th c ca t hp 3 bit ny v di d liu truyn tng ng. Bng 2: di d liu truyn.

* UCPOL (Clock Pority) l bit ch cc ca xung kch trong ch truyn thng ng b. nu UCPOL=0, d liu s thay i thay i cnh ln ca xung nhp, nu UCPOL=1, d liu thay i cnh xung xung nhp. Nu bn s dng ch truyn thng khng ng b, hy set bit ny bng 0..

UBRRL v UBRRH (USART Baud Rate Register): 2 thanh ghi thp v cao quy nh tc baud.

Nhc li l thanh ghi UBRRH dng chung a ch thanh ghi UCSRC, bn phi set bit ny bng 0 nu mun s dng thanh ghi UBRRH. Nh bn quan st trong hnh trn, ch c 4 bit thp ca UBRRH c dng, 4 bit ny kt hp vi 8 bit trong thanh ghi UBRRL to thnh thanh ghi 12 bit quy nh tc baud. Ch l nu bn vit gi tr vo thanh ghi UBRRL, tc baud s tc th c cp nht, v th bn phi vit gi tr vo thanh ghi UBRRH trc khi vit vo thanh ghi UBRRL. Gi tr gn cho thanh ghi UBRR khng phi l tc baud, n ch c USART dng tnh tc baud. Bng 3 hng dn cch tnh tc baud da vo gi tr ca thanh ghi UBRR v ngc li, cch tnh gi tr cn thit gn cho thanh ghi UBRR khi bit tc baud. Bng 3: tnh tc baud.

Trong cc cng thc trong bng 3, fOSC l tc tn s xung nhp ca h thng (thch anh hay ngun xung ni). tin cho bn theo di, ti nh km bng v d cch t gi tr cho UBRR theo tc baud mu. Bng 4: mt s tc baud mu.

III. -

Khi to dng Codevision Phn cng: m bo cc kt ni trong s nguyn l ging nh thit k, chn TXD v RXD l chn 14,15 ca VK Atmega32
U2 P1 1 6 2 7 3 8 4 9 5 14 13 7 8 1 3 4 5 1UF C16 CONNECTOR DB9 MAX232_1 T1OUT R1IN T2OUT R2IN C1+ C1GND VCC

T1IN R1OUT T2IN R2OUT V+ V-

11 12 10 9 2 6

TXD RXD VCC C13 1uF

C15 1UF

C2+ C2-

15

16

VCC

C14 1UF

C12

UART MODULE
-

104

Phn mm: bi trc hng dn s dng codevision dng CodeWizard ri, nn sau khi khi to xong chng ta chn tab thit lp Chip, Ports xong, cc bn chn tab USART, v click chn nh hnh di, l cc bn s dng interrupt cho gi v nhn d liu lun ri y, ch : nh chn Baud Rate cho VK nh, cc bn c th chn 19200 or ty thch.

Sau khi generate xong cc bn t tn ging nh bi trc hng dn cch t tn y. Sau khi generate xong th tngoi hm main() s xut hin cc function truyn v nhn d liu sau: Cc hm thc hin chc nng nhp/xut trong qu trnh truyn thng ni tip getchar, putchar. Vi cc ngt c s dng trong qu trnh truyn thng ni tip, CodeWizardAVR s t ng nh ngha li cc hm getchar v putchar. B m nhn c thc thi s dng gi tr ton cc mng rx_buffer. Gi tr ton cc rx_wr_index trong ch mc ca mng rx_buffer cho php vit k t nhn trong b m. Gi tr ton cc rx_rd _index trong ch mc ca mng rx_buffer cho php c k t nhn trong b m vi hm getchar. Gi tr ton cc rx_counter cha s k t nhn trong rx_buffer. Nu b m bn nhn b trn th gi tr ton cc rx_buffer_overflow c set. B m truyn c thc thi s dng gi tr ton cc mng tx_buffer.

Gi tr ton cc tx_wr_index trong ch mc ca mng tx_buffer cho php vit k t nhn trong b m. Gi tr ton cc tx_rd _index trong ch mc ca mng tx_buffer cho php ck t nhn trong b m vi hm getchar. Gi tr ton cc tx_counter cha s k t nhn trong tx_buffer. Vi thit b s dng 2 UARTs,tng ng vi 2 USARTs,vi 2 tab c trnh by :UART0 v UART1,tng ng vi USART0 v USART1. Thc ra cng khng cn hiu r cc hm ny lm g v codevision generate cho cc ban cc function i, by gi ch n gin l gi ra dng thi, nhng c 1 vi trng hp c bit phi hiu cc function thc s mi lp trnh nh mnh mong mun, nhng vic hiu ntn th phi da vo trnh ca cc bn v C ntn v kh nng c datasheet na.

y l code m codevision define cc thanh ghi gim bn ri y USCRA=0x00 xem li l thuyt nh. USCRB=0xDB=1101 1000. Cc thanh ghi RXCIE, TXCIE, RXEN, TXEN, tng ng vi v tr 7,6,4,3 ca USCR c xt ln 1, cc thanh ghi ny dc khi to dng truyn, pht d liu v s dng truyn pht dng interrupt(xem l thuyt r hn vy) USRC= 0x86=1000 0110. Cc thanh ghi URSEL, UCSZ1,UCSZ0 tng ng cc bit 7,2,1 c xt ln 1, Cc thanh ghi ny thit lp ch truyn ng b v s dng rng k t(character size) l 8. UBRRL=0x33 tng ng vi bng tc baud rate mu(xem bng cui cng nh ). S dng thch anh 16Mhz and baud rate chn khi generate l 19200 th tra bng s ra s 51= 0x33. V thch anh ny chia ra trong cc thanh ghi khi tnh baudrate ls l(Cch tnh nn c l thuyt nh) nn s c error, nhng nu xi thch anh 11.0592Mhz th t l error l 0%, v khi tnh baudrate s ny

l s chn, nn y l thch anh m nhiu ngi s dng khi tnh baudrate v t l error thp, n cn dng trong b timer tnh time.

y l code ti vit trong hm main v while() Hm putchar(a) dng xut d liu t VK ln my tnh Hm kitu=getchar() dng nhn k t t my tnh, sau k t nhn c lu li trong bin kitu(bin khai bo kiu char ngoi hm main), putchar(kitu) dng xut k t va nhn c t my tnh v hin ln Hyper. Sau build v np ging nh bi 1.

y l board sau khi hon thnh

Kt ni board vi my tnh dng cable RS232. send k t a ln my tnh lm c cc bn phi sm: 1 dy RS232 connect UART vi my tnh, download driver v (http://www.mediafire.com/?5y4i71bc0lit2b8) sau khi ci driver cho cable. Cc bn v properties ca my computer hardware device manager xem cable ci driver xong l com my ca my tnh. Sau m hyper terminal ln(win xp th v accessoriescommunication hyper terminal)

Hin ln ca s sau, chn tn g cng c, click ok

Chn com port ok

Set up port sitting nh hnh trn, lu set baudrate ca hyper phi ging vi board avr, click apply ok Sau cc bn test code l c ri, nhn reset xem c k t a xut ln hyper khng, v dng keyboard nh cc k t bt k v xem hyper c hin cc k t khng. Chc cc bn thnh cng

You might also like