00001 #ifndef UART1_H 00002 #define UART1_H 00003 00004 // TXSTA: transmit status and control register 00005 #define UART_MASTER 0x80 // master/slave(1/0)...for synchronous serial tx 00006 #define UART_NINEBIT 0x40 // 9th bit for tx 00007 #define UART_TXEN 0x20 // tx function 00008 #define UART_SYNC 0x10 // synchronous 00009 #define UART_SENDB 0x08 // send break char 00010 #define UART_BEGH 0x04 // high baudrate select 00011 #define UART_TRMT 0x02 // tx register status empty/full(1/0) 00012 #define UART_TX9D 0x01 // 9th bit 00013 // RCSTA: receive status and control register 00014 #define UART_SPEN 0x80 // serial port enable 00015 #define UART_RX9 0x40 // 9th bit rx enable 00016 #define UART_SREN 0x20 // single receive enable 00017 #define UART_CREN 0x10 // continuous receive enable bit 00018 #define UART_ADDEN 0x08 // address detect enable 00019 #define UART_FERR 0x04 // frame error bit 00020 #define UART_OERR 0x02 // overrun error bit 00021 #define UART_RX9D 0x01 // 9th bit of rx data 00022 // BAUDCON 00023 #define UART_ABDOVF 0x80 // auto baudrateacquisition rollover status 00024 #define UART_RCIDL 0x40 // receive operation idle status bit 00025 #define UART_SCKP 0x10 // synchronous clock parity select 00026 #define UART_BRG16 0x08 // 16 bit baudrate register enable 00027 #define UART_WUE 0x02 // wake up enable 00028 #define UART_ABDEN 0x01 // auto baud detect enable 00029 00030 #define UART1_BAUDRATE_1 115200 00031 //#define FOSC 10000000L 00032 //#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1)) // pic18f8722 p.252 00033 //#define NINE_BITS 0x40 00034 //#define HIGH_SPEED 0x04 00035 00036 // SYNC=0,BRG16=1,BRGH=1...baudrate=Fosc/[4*(n+1)] //pic18f87j10.pdf p.242 00037 // 24.42mhx 00038 /*#if (UART1_BAUDRATE_1==9600) 00039 #define _SPBREG1_DEF 635 // 24.42 mhz... 635=1040*(24.42mhz/40mhz) 00040 #elif (UART1_BAUDRATE_1==19200) 00041 #define _SPBREG1_DEF 317 // 24.42 mhz... 317=520*(24.42mhz/40mhz) 00042 #elif (UART1_BAUDRATE_1==38400) 00043 #define _SPBREG1_DEF 158 // 24.42 mhz... 158=259*(24.42mhz/40mhz) 00044 #elif (UART1_BAUDRATE_1==57600) 00045 #define _SPBREG1_DEF 105 // 24.42 mhz... 105=172*(24.42mhz/40mhz) 00046 #elif (UART1_BAUDRATE_1==115200) 00047 #define _SPBREG1_DEF 52 // 24.42 mhz... 52=86*(24.42mhz/40mhz) 00048 #endif 00049 */ 00050 // 40mhx 00051 #if (UART1_BAUDRATE_1==9600) 00052 #define UART1_SPBREG1_DEF 1040 // 40mhz 00053 #elif (UART1_BAUDRATE_1==19200) 00054 #define UART1_SPBREG1_DEF 520 // 40mhz 00055 #elif (UART1_BAUDRATE_1==38400) 00056 #define UART1_SPBREG1_DEF 259 // 40mhz 00057 #elif (UART1_BAUDRATE_1==57600) 00058 #define UART1_SPBREG1_DEF 172 // 40mhz 00059 #elif (UART1_BAUDRATE_1==115200) 00060 #define UART1_SPBREG1_DEF 86 // 40mhz 00061 #endif 00062 #define UART1_SPBREG1_HB (UART1_SPBREG1_DEF / 256) 00063 #define UART1_SPBREG1_LB (UART1_SPBREG1_DEF % 256) 00064 00065 //#define UART1_MAX_BUFFER_SIZE 100 00066 #define UART1_MAX_BUFFER_SIZE 200 00067 typedef struct{ 00068 INT32U Put; 00069 INT32U Get; 00070 INT8U Data[UART1_MAX_BUFFER_SIZE]; 00071 }UART1_BUFFER_CONTROL; 00072 00073 typedef struct{ 00074 INT8U State; 00075 INT8U Status; 00076 INT32U UartTxTransmit; 00077 INT32U TxState; 00078 UART1_BUFFER_CONTROL TxBuffer; 00079 INT32U RxState; 00080 INT32U HasInput; // TRUE, FALSE 00081 INT32U ActionType; // read,write,execute 00082 INT32U Item; // 0~0xff 00083 INT32U ItemData; // 0~0xff 00084 INT32U Input1; 00085 INT32U Input2; 00086 UART1_BUFFER_CONTROL RxBuffer; 00087 }UART1_CONTROL; 00088 00089 extern UART1_CONTROL Uart1Ctrl; 00090 void Uart1Init(void); 00091 void Uart1CharPut(char); 00092 void Uart1RxIsr(void); 00093 void Uart1TxIsr(void); 00094 void Uart1Svc(void); 00095 void Uart1BufferReset(void); 00096 void Uart1RxBufferPut(INT8U Data); 00097 INT8U Uart1RxBufferGet(void); 00098 void Uart1RxBufferPut(INT8U Data); 00099 INT8U Uart1TxBufferGet(void); 00100 void Uart1TxBufferPut(INT8U Data); 00101 INT8U Uart1TxBufferCheck(void); 00102 INT8U Uart1RxBufferCheck(void); 00103 void Uart1CharTx(char Data); 00104 void Uart1StringTx(const char *pString); 00105 00106 #endif