00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "includes.h"
00011
00012 void F_Uart0Initial(void){
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 HandleUART0=(INT32U)F_IsrUart0;
00025 Uart0Ctrl.pUart0Register=(UART0_REGISTER *)0x50000000;
00026 Uart0Ctrl.pUart0Register->ULCON=0x00000003;
00027 Uart0Ctrl.pUart0Register->UCON=0x00000045;
00028 Uart0Ctrl.pUart0Register->UFCON=0x00000000;
00029 Uart0Ctrl.pUart0Register->UMCON=0x00000000;
00030 Uart0Ctrl.pUart0Register->UTRSTAT=0x00000006;
00031 Uart0Ctrl.pUart0Register->UBRDIV=((int)(50000000/(16.*19200)+0.5)-1);
00032
00033
00034
00035
00036
00037
00038 Uart0Ctrl.TxBuffer.Get=0;
00039 Uart0Ctrl.TxBuffer.Put=0;
00040 Uart0Ctrl.RxBuffer.Get=0;
00041 Uart0Ctrl.RxBuffer.Put=0;
00042 Uart0Ctrl.UartTxTransmit=0;
00043
00044
00045 }
00046 void F_Uart0BufferReset(void){
00047 Uart0Ctrl.TxBuffer.Get=0;
00048 Uart0Ctrl.TxBuffer.Put=0;
00049 Uart0Ctrl.RxBuffer.Get=0;
00050 Uart0Ctrl.RxBuffer.Put=0;
00051 }
00052 INT8U F_Uart0RxBufferCheck(void){
00053 if(Uart0Ctrl.RxBuffer.Put!=Uart0Ctrl.RxBuffer.Get){
00054 if(Uart0Ctrl.RxBuffer.Put==(UART0_MAX_BUFFER_SIZE-1)){
00055 if(Uart0Ctrl.RxBuffer.Get==0) return UART0_BUFFER_FULL;
00056 else return UART0_BUFFER_NOT_EMPTY;
00057 }
00058 else{
00059 if((Uart0Ctrl.RxBuffer.Put+1)==Uart0Ctrl.RxBuffer.Get) return UART0_BUFFER_FULL;
00060 else return UART0_BUFFER_NOT_EMPTY;
00061 }
00062 }
00063 else return UART0_BUFFER_EMPTY;
00064 }
00065 INT8U F_Uart0RxBufferCheckIsr(void){
00066 if(Uart0Ctrl.RxBuffer.Put!=Uart0Ctrl.RxBuffer.Get){
00067 if(Uart0Ctrl.RxBuffer.Put==(UART0_MAX_BUFFER_SIZE-1)){
00068 if(Uart0Ctrl.RxBuffer.Get==0) return UART0_BUFFER_FULL;
00069 else return UART0_BUFFER_NOT_EMPTY;
00070 }
00071 else{
00072 if((Uart0Ctrl.RxBuffer.Put+1)==Uart0Ctrl.RxBuffer.Get) return UART0_BUFFER_FULL;
00073 else return UART0_BUFFER_NOT_EMPTY;
00074 }
00075 }
00076 else return UART0_BUFFER_EMPTY;
00077 }
00078 void F_Uart0RxBufferPut(INT8U Data){
00079 if(F_Uart0RxBufferCheck()==UART0_BUFFER_FULL) return;
00080 if(Uart0Ctrl.RxBuffer.Put==(UART0_MAX_BUFFER_SIZE-1)){
00081 Uart0Ctrl.RxBuffer.Data[Uart0Ctrl.RxBuffer.Put]=Data;
00082 Uart0Ctrl.RxBuffer.Put=0;
00083 }
00084 else{
00085 Uart0Ctrl.RxBuffer.Data[Uart0Ctrl.RxBuffer.Put]=Data;
00086 Uart0Ctrl.RxBuffer.Put++;
00087 }
00088 }
00089 void F_Uart0RxBufferPutIsr(INT8U Data){
00090 if(F_Uart0RxBufferCheckIsr()==UART0_BUFFER_FULL) return;
00091 if(Uart0Ctrl.RxBuffer.Put==(UART0_MAX_BUFFER_SIZE-1)){
00092 Uart0Ctrl.RxBuffer.Data[Uart0Ctrl.RxBuffer.Put]=Data;
00093 Uart0Ctrl.RxBuffer.Put=0;
00094 }
00095 else{
00096 Uart0Ctrl.RxBuffer.Data[Uart0Ctrl.RxBuffer.Put]=Data;
00097 Uart0Ctrl.RxBuffer.Put++;
00098 }
00099 }
00100 INT8U F_Uart0RxBufferGet(void){
00101 INT8U Data;
00102
00103 if(F_Uart0RxBufferCheck()==UART0_BUFFER_EMPTY) return 0;
00104 if(Uart0Ctrl.RxBuffer.Get==(UART0_MAX_BUFFER_SIZE-1)){
00105 Data=Uart0Ctrl.RxBuffer.Data[Uart0Ctrl.RxBuffer.Get];
00106 Uart0Ctrl.RxBuffer.Get=0;
00107 }
00108 else{
00109 Data=Uart0Ctrl.RxBuffer.Data[Uart0Ctrl.RxBuffer.Get];
00110 Uart0Ctrl.RxBuffer.Get++;
00111 }
00112 return Data;
00113 }
00114 INT8U F_Uart0TxBufferCheckIsr(void){
00115 if(Uart0Ctrl.TxBuffer.Put!=Uart0Ctrl.TxBuffer.Get){
00116 if(Uart0Ctrl.TxBuffer.Put==(UART0_MAX_BUFFER_SIZE-1)){
00117 if(Uart0Ctrl.TxBuffer.Get==0) return UART0_BUFFER_FULL;
00118 else return UART0_BUFFER_NOT_EMPTY;
00119 }
00120 else{
00121 if((Uart0Ctrl.TxBuffer.Put+1)==Uart0Ctrl.TxBuffer.Get) return UART0_BUFFER_FULL;
00122 else return UART0_BUFFER_NOT_EMPTY;
00123 }
00124 }
00125 else return UART0_BUFFER_EMPTY;
00126 }
00127 INT8U F_Uart0TxBufferCheck(void){
00128 if(Uart0Ctrl.TxBuffer.Put!=Uart0Ctrl.TxBuffer.Get){
00129 if(Uart0Ctrl.TxBuffer.Put==(UART0_MAX_BUFFER_SIZE-1)){
00130 if(Uart0Ctrl.TxBuffer.Get==0) return UART0_BUFFER_FULL;
00131 else return UART0_BUFFER_NOT_EMPTY;
00132 }
00133 else{
00134 if((Uart0Ctrl.TxBuffer.Put+1)==Uart0Ctrl.TxBuffer.Get) return UART0_BUFFER_FULL;
00135 else return UART0_BUFFER_NOT_EMPTY;
00136 }
00137 }
00138 else return UART0_BUFFER_EMPTY;
00139 }
00140 void F_Uart0TxBufferPut(INT8U Data){
00141 if(F_Uart0TxBufferCheck()==UART0_BUFFER_FULL) return;
00142 if(Uart0Ctrl.TxBuffer.Put==(UART0_MAX_BUFFER_SIZE-1)){
00143 Uart0Ctrl.TxBuffer.Data[Uart0Ctrl.TxBuffer.Put]=Data;
00144 Uart0Ctrl.TxBuffer.Put=0;
00145 }
00146 else{
00147 Uart0Ctrl.TxBuffer.Data[Uart0Ctrl.TxBuffer.Put]=Data;
00148 Uart0Ctrl.TxBuffer.Put++;
00149 }
00150 }
00151 INT8U F_Uart0TxBufferGet(void){
00152 INT8U Data;
00153
00154 if(F_Uart0TxBufferCheck()==UART0_BUFFER_EMPTY) return 0;
00155 if(Uart0Ctrl.TxBuffer.Get==(UART0_MAX_BUFFER_SIZE-1)){
00156 Data=Uart0Ctrl.TxBuffer.Data[Uart0Ctrl.TxBuffer.Get];
00157 Uart0Ctrl.TxBuffer.Get=0;
00158 }
00159 else{
00160 Data=Uart0Ctrl.TxBuffer.Data[Uart0Ctrl.TxBuffer.Get];
00161 Uart0Ctrl.TxBuffer.Get++;
00162 }
00163 return Data;
00164 }
00165 INT8U F_Uart0TxBufferGetIsr(void){
00166 INT8U Data;
00167
00168 if(F_Uart0TxBufferCheckIsr()==UART0_BUFFER_EMPTY) return 0;
00169 if(Uart0Ctrl.TxBuffer.Get==(UART0_MAX_BUFFER_SIZE-1)){
00170 Data=Uart0Ctrl.TxBuffer.Data[Uart0Ctrl.TxBuffer.Get];
00171 Uart0Ctrl.TxBuffer.Get=0;
00172 }
00173 else{
00174 Data=Uart0Ctrl.TxBuffer.Data[Uart0Ctrl.TxBuffer.Get];
00175 Uart0Ctrl.TxBuffer.Get++;
00176 }
00177 return Data;
00178 }
00179 void F_Uart0BaudrateSet(INT32U Baudrate){
00180 Uart0Ctrl.pUart0Register->UBRDIV =50000000/(16*Baudrate);
00181
00182 }
00183 void F_Uart0IsrHook(void){
00184 INT8U Data;
00185
00186 ClearSubPending(BIT_SUB_RXD0|BIT_SUB_TXD0|BIT_SUB_ERR0);
00187 ClearPending(BIT_UART0);
00188 if(rUTRSTAT0&UART0_UTRSTAT0_TX){
00189
00190
00191
00192
00193
00194
00195
00196 Uart0Ctrl.UartTxTransmit=0;
00197 }
00198 if(rUTRSTAT0&UART0_UTRSTAT0_RX){
00199 Data=SERIAL_READ_CHAR();
00200 F_Uart0RxBufferPutIsr(Data);
00201 }
00202 if(rUERSTAT0&0x0f){
00203
00204 }
00205 }
00206
00207 void F_Uart0CharTx(INT8 Data){
00208
00209 F_Uart0TxBufferPut((INT8U)Data);
00210 }
00211 INT8 F_Uart0RxCheck(void){
00212 if(F_Uart0RxBufferCheck()!=UART0_BUFFER_EMPTY) return TRUE;
00213 else return FALSE;
00214 }
00215 INT8 F_Uart0CharRx(void){
00216 INT8U Data;
00217
00218 if(F_Uart0RxBufferCheck()!=UART0_BUFFER_EMPTY){
00219 Data=F_Uart0RxBufferGet();
00220 return (INT8)Data;
00221 }
00222 return 0;
00223 }
00224 void F_Uart0StringTx(INT8 *pString){
00225 while(*pString!=0) F_Uart0CharTx(*pString++);
00226 }
00227
00228 INT8 kbhit(void){
00229 if(F_Uart0RxCheck()==TRUE) return 1;
00230 else return 0;
00231 }
00232 INT8 getkey(void){
00233 INT8 Data;
00234
00235 Data=F_Uart0CharRx();
00236 return Data;
00237 }
00238 INT8 getc(void){
00239 INT8 key;
00240
00241 while(1){
00242 key=getkey();
00243 if(key!=0) return key;
00244 F_Uart0Svc();
00245 }
00246 }
00247 void putc(INT8 Data){
00248 F_Uart0CharTx(Data);
00249 }
00250 char putch(INT8 Data){
00251 F_Uart0CharTx(Data);
00252 return Data;
00253 }
00254 void puts(INT8 *pString){
00255 F_Uart0StringTx(pString);
00256 }
00257 INT8 getch(void){
00258 INT8 key;
00259
00260 while(1){
00261 key=getkey();
00262 if(key!=0) return key;
00263 F_Uart0Svc();
00264 }
00265 }
00266 INT32 strlen(const char *String){
00267 INT32U Length;
00268
00269 Length=0;
00270 for(;*String!=0;String++) Length++;
00271 return Length;
00272 }
00273
00274 void F_StringPut(const char *String){
00275
00276 }
00277
00278 void F_Uart0Svc2(void){
00279 INT8U Data;
00280 INT32U Status;
00281
00282 if(SERIAL_READ_READY()){
00283 Data=SERIAL_READ_CHAR();
00284 Status=SERIAL_READ_STATUS();
00285 F_Uart0RxBufferPut(Data);
00286 }
00287 if(F_Uart0TxBufferCheck()!=UART0_BUFFER_EMPTY){
00288 if(SERIAL_WRITE_READY()==0) return;
00289 Data=F_Uart0TxBufferGet();
00290 SERIAL_WRITE_CHAR(Data);
00291 }
00292 }
00293
00294 void F_Uart0Svc(void){
00295 INT8U Data;
00296
00297 if(Uart0Ctrl.UartTxTransmit==1) return;
00298 if(F_Uart0TxBufferCheck()==UART0_BUFFER_EMPTY) return;;
00299 Data=F_Uart0TxBufferGet();
00300 Uart0Ctrl.UartTxTransmit=1;
00301 SERIAL_WRITE_CHAR(Data);
00302 }
00303
00304
00305