Vincent Belanger
/
APP
APP 1 S5.
UART.cpp@6:ccdbd5923e37, 2016-01-10 (annotated)
- Committer:
- vinbel93
- Date:
- Sun Jan 10 22:24:00 2016 +0000
- Revision:
- 6:ccdbd5923e37
- Parent:
- 5:c6f70b61aea5
- Child:
- 8:e38cd9e16055
- Child:
- 9:f35a5cde61a3
UART without mbed
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vinbel93 | 6:ccdbd5923e37 | 1 | #include "UART.h" |
vinbel93 | 6:ccdbd5923e37 | 2 | #include "APP.h" |
vinbel93 | 6:ccdbd5923e37 | 3 | |
IC_Blood | 5:c6f70b61aea5 | 4 | |
vinbel93 | 6:ccdbd5923e37 | 5 | void UARTInit(uint32_t baudrate) |
IC_Blood | 5:c6f70b61aea5 | 6 | { |
vinbel93 | 6:ccdbd5923e37 | 7 | uint32_t Fdiv; |
vinbel93 | 6:ccdbd5923e37 | 8 | uint32_t pclkdiv, pclk; |
vinbel93 | 6:ccdbd5923e37 | 9 | |
vinbel93 | 6:ccdbd5923e37 | 10 | LPC_SC->PCONP |= 1 << 25; // Activate UART3 in PCONP register. |
vinbel93 | 6:ccdbd5923e37 | 11 | pclkdiv = (LPC_SC->PCLKSEL1 >> 18) & 0x03; // Bits 18~19 are for UART3 |
IC_Blood | 5:c6f70b61aea5 | 12 | |
vinbel93 | 6:ccdbd5923e37 | 13 | switch (pclkdiv) |
vinbel93 | 6:ccdbd5923e37 | 14 | { |
vinbel93 | 6:ccdbd5923e37 | 15 | case 0x00: |
vinbel93 | 6:ccdbd5923e37 | 16 | default: |
vinbel93 | 6:ccdbd5923e37 | 17 | pclk = SYSTEM_CLOCK_FREQUENCY/4; |
vinbel93 | 6:ccdbd5923e37 | 18 | break; |
vinbel93 | 6:ccdbd5923e37 | 19 | case 0x01: |
vinbel93 | 6:ccdbd5923e37 | 20 | pclk = SYSTEM_CLOCK_FREQUENCY; |
vinbel93 | 6:ccdbd5923e37 | 21 | break; |
vinbel93 | 6:ccdbd5923e37 | 22 | case 0x02: |
vinbel93 | 6:ccdbd5923e37 | 23 | pclk = SYSTEM_CLOCK_FREQUENCY/2; |
vinbel93 | 6:ccdbd5923e37 | 24 | break; |
vinbel93 | 6:ccdbd5923e37 | 25 | case 0x03: |
vinbel93 | 6:ccdbd5923e37 | 26 | pclk = SYSTEM_CLOCK_FREQUENCY/8; |
vinbel93 | 6:ccdbd5923e37 | 27 | break; |
vinbel93 | 6:ccdbd5923e37 | 28 | } |
vinbel93 | 6:ccdbd5923e37 | 29 | |
vinbel93 | 6:ccdbd5923e37 | 30 | LPC_PINCON->PINSEL0 &= ~0x00000003; |
vinbel93 | 6:ccdbd5923e37 | 31 | LPC_PINCON->PINSEL0 |= 0x00000002; |
IC_Blood | 5:c6f70b61aea5 | 32 | |
vinbel93 | 6:ccdbd5923e37 | 33 | LPC_UART3->LCR = 0x83; // 8 bits, no Parity, 1 Stop bit, DLAB = 1 |
vinbel93 | 6:ccdbd5923e37 | 34 | Fdiv = (pclk / 16) / baudrate; // baud rate |
vinbel93 | 6:ccdbd5923e37 | 35 | LPC_UART3->DLM = Fdiv / 256; |
vinbel93 | 6:ccdbd5923e37 | 36 | LPC_UART3->DLL = Fdiv % 256; |
vinbel93 | 6:ccdbd5923e37 | 37 | LPC_UART3->LCR = 0x03; // DLAB = 0 |
vinbel93 | 6:ccdbd5923e37 | 38 | } |
vinbel93 | 6:ccdbd5923e37 | 39 | |
vinbel93 | 6:ccdbd5923e37 | 40 | void UARTSend(uint8_t byte) |
vinbel93 | 6:ccdbd5923e37 | 41 | { |
vinbel93 | 6:ccdbd5923e37 | 42 | LPC_UART3->THR = byte; |
vinbel93 | 6:ccdbd5923e37 | 43 | } |
vinbel93 | 6:ccdbd5923e37 | 44 | |
vinbel93 | 6:ccdbd5923e37 | 45 | void UARTSend(uint8_t *buffer, uint32_t length) |
vinbel93 | 6:ccdbd5923e37 | 46 | { |
vinbel93 | 6:ccdbd5923e37 | 47 | while (length != 0) |
vinbel93 | 6:ccdbd5923e37 | 48 | { |
vinbel93 | 6:ccdbd5923e37 | 49 | LPC_UART3->THR = *buffer; |
vinbel93 | 6:ccdbd5923e37 | 50 | buffer++; |
vinbel93 | 6:ccdbd5923e37 | 51 | length--; |
vinbel93 | 6:ccdbd5923e37 | 52 | } |
vinbel93 | 6:ccdbd5923e37 | 53 | } |