API UART: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
d
 
(13 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených)
Riadok 1: Riadok 1:
[[Category:Mikroprocesorové systémy]]
+
[[Kategória:Konfigurovateľné mikroprocesorové systémy]]
 +
[[Kategória:Sériová asynchrónna komunikácia - UART ]]
 
__NOTOC__
 
__NOTOC__
{{Draft}}
+
{{sablona_mikroprocoserove_systemy|Sériová asynchrónna komunikácia - UART|Historický vývoj UART|Štandard RS232|Štandard RS485|Blok UART|API UART|Protokol MODBUS/uBUS|Popis protokolu MODBUS/uBUS|Implementácia protokolu MODBUS/uBUS}}
 +
Programové aplikačné rozhranie (API) bloku UART pozostáva z dvoch častí, ''Low Level API'' a voliteľného ''High Level API'', ktoré môžete aktivovať pri konfigurácii bloku UART. Kompletný popis aplikačného rozhrania modulu UART môžete nájsť v literatúre<ref>http://www.cypress.com/?docID=19130</ref> spolu s parametrami volania funkcií.
  
== Aplikačné rozhranie bloku UART ==
+
* ''Low Level API'' - je určené pre riadenie bloku a základnú znakovú komunikáciu, funkcie API sú priamo volateľné z ASM M8C
Kompletný popis aplikačného rozhrania modulu UART môžete nájsť v literatúre<ref>http://www.cypress.com/?docID=19130</ref>. API bloku UART pozostáva z dvoch častí
+
* ''High Level API'' - je určené pre komplexnú prácu s reťazcom znakov reprezentujúcich povel s parametrami. Funkcie API sú určené pre volanie z jazyka C.
  
* '''Low Level API''' - je určené pre riadenie bloku a základnú znakovú komunikáciu, funkcie API sú priamo volateľné z ASM M8C
+
Základné funkcie ''Low Level API''
* '''High Level API''' - je určené pre komplexnú prácu s reťazcom znakov reprezentujúcich povel s parametrami. Funkcie API sú určené pre volanie z jazyka C. 
 
  
* '''UART_Start''' Enable user module and set parity.
+
{| class=wikitable border=1 cellpadding=5
* '''UART_Stop''' Disable user module.
+
| '''UART_Start'''
* '''UART_EnableInt'''  Enable both RX and TX interrupts.   
+
| Povolenie modulu a nastavenie parity. Prenosová rýchlosť sa nastavuje frekvenciou hodín na vstupe ''Clock'', ktorá je 8x vyššia ako požadovaná prenosová rýchlosť.
* '''UART_DisableInt'''  Disable both RX and TX interrupts.   
+
|-
* '''UART_SetTxIntMode'''  Set the source of the Tx interrupt.   
+
| '''UART_Stop'''  
* '''UART_SendData'''  Send byte without checking TX status.   
+
| Zakázanie modulu.
* '''UART_bReadTxStatus''' Return status of TX Status register.
+
|-
* '''UART_bReadRxData''' Return data in RX Data register without checking status of character is valid.   
+
| '''UART_EnableInt'''   
* '''UART_bReadRxStatus'''  Check status of RX Status register.
+
| Povolenie Rx a Tx prerušení.   
 +
|-
 +
| '''UART_DisableInt'''   
 +
| Zakázanie Rx a Tx prerušení.
 +
|-
 +
| '''UART_SetTxIntMode'''   
 +
| Nastavenie zdroja Tx prerušenia.   
 +
|-
 +
| '''UART_SendData'''   
 +
| Pošle byte bez kontroly stavu TX stavového registra. Opakované odoslanie dát bez kontroly Tx stavového registra môže spôsobiť chybu prenosu (overrun error).
 +
|-  
 +
| '''UART_bReadTxStatus'''  
 +
| Vráti hodnotu TX stavového registra.  
 +
|-
 +
| '''UART_bReadRxData'''  
 +
| Vráti data v RX registri bez kontroly ich platnosti.   
 +
|-
 +
| '''UART_bReadRxStatus'''   
 +
| Vráti hodnotu RX stavového registra.
 +
|-
 +
|}
 +
 
 +
Parametrom ''RxCmdBuffer'' pri konfigurácii bloku môžeme povoliť používanie ''High Level API''. Pre použitie v ASM sú niektoré užitočné funkcie dostupné aj bez povoleného ''High Level API''.
 +
 
 +
{| class=wikitable border=1 cellpadding=5
 +
| '''UART_PutChar'''
 +
| Vyslanie znaku s kontrolou Tx stavového registra. Funkcia čaká na vyprázdnenie Tx registra, odošle data a počká na odoslanie dát.
 +
|-
 +
| '''UART_PutString''' 
 +
| Vyslanie reťazca z RAM pamäte.
 +
|-
 +
| '''UART_CPutString''' 
 +
| Vyslanie reťazca z ROM pamäte.
 +
|-
 +
|  '''UART_PutSHexByte''' 
 +
| Vyslanie 2 byte reprezentujúcich HEX hodnotu byte.
 +
|-
 +
| '''UART_PutSHexInt''' 
 +
| Vyslanie 4 byte reprezentujúcich HEX hodnotu int (word).
 +
|- 
 +
| '''UART_PutCRLF'''
 +
| Vyslanie dvojice znakov CR a LF
 +
|-
 +
|}
  
 
== Príklady použitia API UART==
 
== Príklady použitia API UART==
Riadok 38: Riadok 82:
  
 
   WaitForData:                        ; cakanie na prichod znaku     
 
   WaitForData:                        ; cakanie na prichod znaku     
         call  UART_bReadRxStatus  
+
         call  UART_bReadRxStatus       ; ncitanie stavu Rx stavoveho registra
         and  A, UART_RX_COMPLETE  
+
         and  A, UART_RX_COMPLETE       ; kontrola na prichod znaku
         jz    WaitForData        
+
         jz    WaitForData               ; ak znak neprisiel, navrat na slucku cakania
         call  UART_bReadRxData          ; nacitanie znaku       
+
         call  UART_bReadRxData          ; znak prisiel, nacitanie znaku       
 
      
 
      
 
  cmp A,'x'                      ; skok na aktivitu 'x'
 
  cmp A,'x'                      ; skok na aktivitu 'x'
Riadok 58: Riadok 102:
 
         jmp  WaitForData
 
         jmp  WaitForData
 
</source>
 
</source>
Ďaľšie príklady k modulu UART nájdete na stránkach <ref>http://www.cypress.com/?rID=38167</ref>
+
Ďaľšie príklady k modulu UART nájdete na stránkach <ref>http://www.cypress.com/psocexampleprojects</ref><ref>http://www.cypress.com/?rID=38167</ref>.
  
 
== Odkazy a literatúra ==
 
== Odkazy a literatúra ==
 
<references/>
 
<references/>

Aktuálna revízia z 09:55, 21. marec 2013


Predmet

Konfigurovateľné mikroprocesorové systémy
Tématická časť:
Sériová asynchrónna komunikácia - UART

Programové aplikačné rozhranie (API) bloku UART pozostáva z dvoch častí, Low Level API a voliteľného High Level API, ktoré môžete aktivovať pri konfigurácii bloku UART. Kompletný popis aplikačného rozhrania modulu UART môžete nájsť v literatúre[1] spolu s parametrami volania funkcií.

  • Low Level API - je určené pre riadenie bloku a základnú znakovú komunikáciu, funkcie API sú priamo volateľné z ASM M8C
  • High Level API - je určené pre komplexnú prácu s reťazcom znakov reprezentujúcich povel s parametrami. Funkcie API sú určené pre volanie z jazyka C.

Základné funkcie Low Level API

UART_Start Povolenie modulu a nastavenie parity. Prenosová rýchlosť sa nastavuje frekvenciou hodín na vstupe Clock, ktorá je 8x vyššia ako požadovaná prenosová rýchlosť.
UART_Stop Zakázanie modulu.
UART_EnableInt Povolenie Rx a Tx prerušení.
UART_DisableInt Zakázanie Rx a Tx prerušení.
UART_SetTxIntMode Nastavenie zdroja Tx prerušenia.
UART_SendData Pošle byte bez kontroly stavu TX stavového registra. Opakované odoslanie dát bez kontroly Tx stavového registra môže spôsobiť chybu prenosu (overrun error).
UART_bReadTxStatus Vráti hodnotu TX stavového registra.
UART_bReadRxData Vráti data v RX registri bez kontroly ich platnosti.
UART_bReadRxStatus Vráti hodnotu RX stavového registra.

Parametrom RxCmdBuffer pri konfigurácii bloku môžeme povoliť používanie High Level API. Pre použitie v ASM sú niektoré užitočné funkcie dostupné aj bez povoleného High Level API.

UART_PutChar Vyslanie znaku s kontrolou Tx stavového registra. Funkcia čaká na vyprázdnenie Tx registra, odošle data a počká na odoslanie dát.
UART_PutString Vyslanie reťazca z RAM pamäte.
UART_CPutString Vyslanie reťazca z ROM pamäte.
UART_PutSHexByte Vyslanie 2 byte reprezentujúcich HEX hodnotu byte.
UART_PutSHexInt Vyslanie 4 byte reprezentujúcich HEX hodnotu int (word).
UART_PutCRLF Vyslanie dvojice znakov CR a LF

Príklady použitia API UART

Pre rôzne testy zariadení a overenie funkcionality častí programov často potrebujeme jednoduchý program, ktorý po príjme znaku zo sériového rozhrania vykoná naprogramovanú aktivitu. Na takýto program sa môžeme pozerať aj ako na primitívny udalosťami riadený operačný systém. Vývojový diagram takéhoto programu ukazuje nasledujúci obrázok.

Uart example 1.png
Vývojový diagram príkladu

Zdrojový kód príkladu je uvedený nižšie. Program po inicializácii čaká v slučke na príchod znaku, po príchode znaku ho načíta z buffra UART a podľa významu znaku vykonáva predvolenú aktivitu. Po ukončení aktivity sa vráti do slučky čakania na príchod znaku.

_main:	
        mov   A,UART_PARITY_NONE        ; inicializacia serioveho rozhrania  
        call  UART_Start         
	M8C_EnableGInt   

   WaitForData:                         ; cakanie na prichod znaku     
        call  UART_bReadRxStatus        ; ncitanie stavu Rx stavoveho registra
        and   A, UART_RX_COMPLETE       ; kontrola na prichod znaku
        jz    WaitForData               ; ak znak neprisiel, navrat na slucku cakania
        call  UART_bReadRxData          ; znak prisiel, nacitanie znaku      
    
 	cmp A,'x'                       ; skok na aktivitu 'x'
 	jz state_x
 	
 	cmp A,'y'			; skok na aktivitu 'y'
 	jz state_y
        jmp   WaitForData               ; navrat do slucky cakania na novy znak

state_x:   
        ; implementacia aktivity 'x'
        jmp   WaitForData

state_y:   
        ; implementacia aktivity 'y'
        jmp   WaitForData

Ďaľšie príklady k modulu UART nájdete na stránkach [2][3].

Odkazy a literatúra