Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Serial.cpp@1:e4163fd9aa4c, 2020-05-04 (annotated)
- Committer:
- franciscodias
- Date:
- Mon May 04 17:52:49 2020 +0000
- Revision:
- 1:e4163fd9aa4c
1234
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |