-
Notifications
You must be signed in to change notification settings - Fork 0
/
uart.h
75 lines (60 loc) · 3.46 KB
/
uart.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#ifndef __UART_H
#define __UART_H
//==============================================================================
// Uart paramétereket itt lehet beállítani
// - Inicializálás: UartInit()
// - Adás: UartTx(unsigned char ch) (ha a hívás előtt uTxBufFree == 0 -> nem érdemes elküldeni, mert meg van telve)
// - Vétel: ch = UartRx() (csak akkor ad eredményt, ha a hívás előtt uRxLength > 0)
//------------------------------------------------------------------------------
#include "hardwareprofile.h"
// Ha külső hardverprofilt használunk akkor azt itt adhatjuk meg
// - belső hardverprofil esetén kommenteljük ki
// - külső hardverprofil esetén az ott megadott paramétereket ebben a file-ban kommenteljük ki
//------------------------------------------------------------------------------
// Adás puffer mérete (4, 8, 16, 32, 64, 128)
// #define UTXBUFFERSIZE 64
//------------------------------------------------------------------------------
// Vételi puffer mérete (4, 8, 16, 32, 64, 128)
// #define URXBUFFERSIZE 64
//------------------------------------------------------------------------------
// Rendszer órajel (UART osztó beállításához)
// #define SystemClock 48000000
//------------------------------------------------------------------------------
// Soros port kívánt sebessége
// #define BAUDRATE 31250
//------------------------------------------------------------------------------
// Uart lábak I/O beállítása (inicializáláskor történik ez meg)
// #define UARTPININIT TRISCbits.TRISC6 = 0; TRISCbits.TRISC7 = 1
//------------------------------------------------------------------------------
// Teszt (vételi puffer programból is fetölthető lesz, ha engedélyezzük)
// #define UARTDEBUG
//------------------------------------------------------------------------------
// csak PIC18xxx: melyik prioritású megszakítást használja a soros port
// lehetséges értékei:
// - -1 : nincs a többszintű prioritás használva (ilyenkor minden csak a HIGH interruptban megy)
// - 0 : alacsony prioritás
// - 1 : magas prioritás
#define RXPR18 -1
#define TXPR18 -1
//******************************************************************************
// Innentől kezdve nem kell belenyúlni !
//
//==============================================================================
extern volatile unsigned char uRxLength; // vételi pufferban levő byte-ok száma
extern volatile unsigned char uRxBufFree;// vételi pufferben mennyi a szabad hely
extern volatile unsigned char uTxLength; // adás pufferben levő byte-ok száma
extern volatile unsigned char uTxBufFree;// adás pufferben mennyi a szabad hely
void UartInit(void); // inicializálás
unsigned char UartRx(void); // egy karakter vétele (ha van mit)
unsigned char UartRxTop(void); // a vételi puffer legelsőnek berakott eleme, de nem törlődik a pufferből
#ifdef UARTDEBUG
void UartRxWrite(unsigned char ch); // teszteléshez fel lehet tölteni a vételi puffert
#else
#define UartRxWrite(ch) ;
#endif
void UartRxProcess(void); // uart vétel polling vagy megszakítás kiszolgáló függvény
#define UartRxIntProcess() if(PIE1bits.RCIE && PIR1bits.RCIF)UartRxProcess()
void UartTx(unsigned char ch); // egy karakter küldése (pufferelt módon)
void UartTxProcess(void); // uart adás polling vagy megszakítás kiszolgáló függvény
#define UartTxIntProcess() if(PIE1bits.TXIE && PIR1bits.TXIF)UartTxProcess()
#endif // __UART_H