TLMoto / Nextion

Dependents:   Display

Committer:
franciscodias
Date:
Mon May 04 17:52:49 2020 +0000
Revision:
1:e4163fd9aa4c
1234

Who changed what in which revision?

UserRevisionLine numberNew contents of line
franciscodias 1:e4163fd9aa4c 1 #include "Serial.h"
franciscodias 1:e4163fd9aa4c 2 #include "Utilities.h"
franciscodias 1:e4163fd9aa4c 3
franciscodias 1:e4163fd9aa4c 4 unsigned char rxBuff[64];
franciscodias 1:e4163fd9aa4c 5 char rxHead, rxTail;
franciscodias 1:e4163fd9aa4c 6 void UART1interrupt( iv IVT_UART_1 ilevel 6 ics ICS_AUTO)
franciscodias 1:e4163fd9aa4c 7 {
franciscodias 1:e4163fd9aa4c 8 rxBuff[rxHead++] = UART1_Read(); // read the received data
franciscodias 1:e4163fd9aa4c 9 U1RXIF_bit = 0;
franciscodias 1:e4163fd9aa4c 10 }
franciscodias 1:e4163fd9aa4c 11
franciscodias 1:e4163fd9aa4c 12 void Serial_Init(long baudrate)
franciscodias 1:e4163fd9aa4c 13 {
franciscodias 1:e4163fd9aa4c 14 AD1PCFG = 0xFFFF; // Configure AN pins as digital I/O
franciscodias 1:e4163fd9aa4c 15 UART1_Init(9600);
franciscodias 1:e4163fd9aa4c 16 rxHead = 0;
franciscodias 1:e4163fd9aa4c 17 rxTail = 0;
franciscodias 1:e4163fd9aa4c 18
franciscodias 1:e4163fd9aa4c 19 U1IP0_bit = 0; // Set UART2 interrupt
franciscodias 1:e4163fd9aa4c 20 U1IP1_bit = 1; // Set interrupt priorities
franciscodias 1:e4163fd9aa4c 21 U1IP2_bit = 1; // Set UART2 interrupt to level 6
franciscodias 1:e4163fd9aa4c 22
franciscodias 1:e4163fd9aa4c 23 U1RXIE_bit = 1; // Set UART Receive Interrupt
franciscodias 1:e4163fd9aa4c 24 U1RXIF_bit = 0;
franciscodias 1:e4163fd9aa4c 25 EnableInterrupts(); // Enable interruts as previously set
franciscodias 1:e4163fd9aa4c 26 }
franciscodias 1:e4163fd9aa4c 27
franciscodias 1:e4163fd9aa4c 28 unsigned char Serial_Write(unsigned char c)
franciscodias 1:e4163fd9aa4c 29 {
franciscodias 1:e4163fd9aa4c 30 UART1_Write(c);
franciscodias 1:e4163fd9aa4c 31 return 1;
franciscodias 1:e4163fd9aa4c 32 }
franciscodias 1:e4163fd9aa4c 33
franciscodias 1:e4163fd9aa4c 34 unsigned char Serial_Read()
franciscodias 1:e4163fd9aa4c 35 {
franciscodias 1:e4163fd9aa4c 36 unsigned char c;
franciscodias 1:e4163fd9aa4c 37 if (rxTail < rxHead)
franciscodias 1:e4163fd9aa4c 38 {
franciscodias 1:e4163fd9aa4c 39 c = rxBuff[rxTail++];
franciscodias 1:e4163fd9aa4c 40 if (rxTail == rxHead)
franciscodias 1:e4163fd9aa4c 41 {
franciscodias 1:e4163fd9aa4c 42 rxHead = 0;
franciscodias 1:e4163fd9aa4c 43 rxTail = 0;
franciscodias 1:e4163fd9aa4c 44 }
franciscodias 1:e4163fd9aa4c 45 }
franciscodias 1:e4163fd9aa4c 46 else
franciscodias 1:e4163fd9aa4c 47 {
franciscodias 1:e4163fd9aa4c 48 rxHead = 0;
franciscodias 1:e4163fd9aa4c 49 rxTail = 0;
franciscodias 1:e4163fd9aa4c 50 c = -1;
franciscodias 1:e4163fd9aa4c 51 }
franciscodias 1:e4163fd9aa4c 52 return c;
franciscodias 1:e4163fd9aa4c 53 }
franciscodias 1:e4163fd9aa4c 54
franciscodias 1:e4163fd9aa4c 55 unsigned char Serial_Available()
franciscodias 1:e4163fd9aa4c 56 {
franciscodias 1:e4163fd9aa4c 57 return rxHead - rxTail;
franciscodias 1:e4163fd9aa4c 58 }
franciscodias 1:e4163fd9aa4c 59
franciscodias 1:e4163fd9aa4c 60 unsigned char Serial_ReadBytes(char *buf, unsigned char len)
franciscodias 1:e4163fd9aa4c 61 {
franciscodias 1:e4163fd9aa4c 62 unsigned char cnt = 0;
franciscodias 1:e4163fd9aa4c 63 if (len < rxHead - rxTail)
franciscodias 1:e4163fd9aa4c 64 {
franciscodias 1:e4163fd9aa4c 65 ArrayCopy(buf, &rxBuff[rxTail], len);
franciscodias 1:e4163fd9aa4c 66 rxTail += len;
franciscodias 1:e4163fd9aa4c 67 cnt = len;
franciscodias 1:e4163fd9aa4c 68 }
franciscodias 1:e4163fd9aa4c 69 else if (len == rxHead - rxTail)
franciscodias 1:e4163fd9aa4c 70 {
franciscodias 1:e4163fd9aa4c 71 ArrayCopy(buf, &rxBuff[rxTail], len);
franciscodias 1:e4163fd9aa4c 72 rxTail = 0;
franciscodias 1:e4163fd9aa4c 73 rxHead = 0;
franciscodias 1:e4163fd9aa4c 74 cnt = len;
franciscodias 1:e4163fd9aa4c 75 }
franciscodias 1:e4163fd9aa4c 76 else
franciscodias 1:e4163fd9aa4c 77 {
franciscodias 1:e4163fd9aa4c 78 ArrayCopy(buf, &rxBuff[rxTail], rxHead - rxTail);
franciscodias 1:e4163fd9aa4c 79 cnt = rxHead - rxTail;
franciscodias 1:e4163fd9aa4c 80 rxTail = 0;
franciscodias 1:e4163fd9aa4c 81 rxHead = 0;
franciscodias 1:e4163fd9aa4c 82 }
franciscodias 1:e4163fd9aa4c 83 return cnt;
franciscodias 1:e4163fd9aa4c 84 }
franciscodias 1:e4163fd9aa4c 85
franciscodias 1:e4163fd9aa4c 86 void Serial_Print(unsigned char *txt)
franciscodias 1:e4163fd9aa4c 87 {
franciscodias 1:e4163fd9aa4c 88 short i = strlen(txt);
franciscodias 1:e4163fd9aa4c 89 while (1)
franciscodias 1:e4163fd9aa4c 90 {
franciscodias 1:e4163fd9aa4c 91 UART1_Write(*txt);
franciscodias 1:e4163fd9aa4c 92 ++txt;
franciscodias 1:e4163fd9aa4c 93 --i;
franciscodias 1:e4163fd9aa4c 94 if (i == 0)
franciscodias 1:e4163fd9aa4c 95 {
franciscodias 1:e4163fd9aa4c 96 break;
franciscodias 1:e4163fd9aa4c 97 }
franciscodias 1:e4163fd9aa4c 98 }
franciscodias 1:e4163fd9aa4c 99 }