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