Vincent Belanger
/
APP
APP 1 S5.
UART.cpp@8:e38cd9e16055, 2016-01-11 (annotated)
- Committer:
- vinbel93
- Date:
- Mon Jan 11 01:25:29 2016 +0000
- Revision:
- 8:e38cd9e16055
- Parent:
- 6:ccdbd5923e37
Almost done
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vinbel93 | 8:e38cd9e16055 | 1 | #include <stdint.h> |
vinbel93 | 8:e38cd9e16055 | 2 | #include "mbed.h" |
vinbel93 | 8:e38cd9e16055 | 3 | |
vinbel93 | 6:ccdbd5923e37 | 4 | #include "UART.h" |
vinbel93 | 6:ccdbd5923e37 | 5 | #include "APP.h" |
vinbel93 | 6:ccdbd5923e37 | 6 | |
vinbel93 | 8:e38cd9e16055 | 7 | static Serial pc(USBTX, USBRX); |
IC_Blood | 5:c6f70b61aea5 | 8 | |
vinbel93 | 6:ccdbd5923e37 | 9 | void UARTInit(uint32_t baudrate) |
IC_Blood | 5:c6f70b61aea5 | 10 | { |
vinbel93 | 6:ccdbd5923e37 | 11 | uint32_t Fdiv; |
vinbel93 | 6:ccdbd5923e37 | 12 | uint32_t pclkdiv, pclk; |
vinbel93 | 6:ccdbd5923e37 | 13 | |
vinbel93 | 8:e38cd9e16055 | 14 | unsigned int volatile* pconp = PCONP_REGISTER; |
vinbel93 | 8:e38cd9e16055 | 15 | unsigned int volatile* pclksel1 = PCLKSEL1_REGISTER; |
vinbel93 | 8:e38cd9e16055 | 16 | unsigned int volatile* pinsel0 = PINSEL0_REGISTER; |
vinbel93 | 8:e38cd9e16055 | 17 | unsigned int volatile* u3lcr = U3LCR_REGISTER; |
vinbel93 | 8:e38cd9e16055 | 18 | unsigned int volatile* u3dll = U3DLL_REGISTER; |
vinbel93 | 8:e38cd9e16055 | 19 | unsigned int volatile* u3dlm = U3DLM_REGISTER; |
vinbel93 | 8:e38cd9e16055 | 20 | |
vinbel93 | 8:e38cd9e16055 | 21 | *pconp |= 1 << 25; // Activate UART3 in PCONP register. |
vinbel93 | 8:e38cd9e16055 | 22 | pclkdiv = (*pclksel1 >> 18) & 0x03; // Bits 18~19 are for UART3 |
vinbel93 | 8:e38cd9e16055 | 23 | |
vinbel93 | 6:ccdbd5923e37 | 24 | switch (pclkdiv) |
vinbel93 | 6:ccdbd5923e37 | 25 | { |
vinbel93 | 6:ccdbd5923e37 | 26 | case 0x00: |
vinbel93 | 6:ccdbd5923e37 | 27 | default: |
vinbel93 | 6:ccdbd5923e37 | 28 | pclk = SYSTEM_CLOCK_FREQUENCY/4; |
vinbel93 | 6:ccdbd5923e37 | 29 | break; |
vinbel93 | 6:ccdbd5923e37 | 30 | case 0x01: |
vinbel93 | 6:ccdbd5923e37 | 31 | pclk = SYSTEM_CLOCK_FREQUENCY; |
vinbel93 | 6:ccdbd5923e37 | 32 | break; |
vinbel93 | 6:ccdbd5923e37 | 33 | case 0x02: |
vinbel93 | 6:ccdbd5923e37 | 34 | pclk = SYSTEM_CLOCK_FREQUENCY/2; |
vinbel93 | 6:ccdbd5923e37 | 35 | break; |
vinbel93 | 6:ccdbd5923e37 | 36 | case 0x03: |
vinbel93 | 6:ccdbd5923e37 | 37 | pclk = SYSTEM_CLOCK_FREQUENCY/8; |
vinbel93 | 6:ccdbd5923e37 | 38 | break; |
vinbel93 | 6:ccdbd5923e37 | 39 | } |
vinbel93 | 6:ccdbd5923e37 | 40 | |
vinbel93 | 8:e38cd9e16055 | 41 | *pinsel0 &= ~0x00000003; |
vinbel93 | 8:e38cd9e16055 | 42 | *pinsel0 |= 0x00000002; |
vinbel93 | 8:e38cd9e16055 | 43 | |
vinbel93 | 8:e38cd9e16055 | 44 | *u3lcr = 0x83; // 8 bits, no Parity, 1 Stop bit, DLAB = 1 |
vinbel93 | 6:ccdbd5923e37 | 45 | Fdiv = (pclk / 16) / baudrate; // baud rate |
vinbel93 | 8:e38cd9e16055 | 46 | *u3dlm = Fdiv / 256; |
vinbel93 | 8:e38cd9e16055 | 47 | *u3dll = Fdiv % 256; |
vinbel93 | 8:e38cd9e16055 | 48 | *u3lcr = 0x03; // DLAB = 0 |
vinbel93 | 6:ccdbd5923e37 | 49 | } |
vinbel93 | 6:ccdbd5923e37 | 50 | |
vinbel93 | 6:ccdbd5923e37 | 51 | void UARTSend(uint8_t byte) |
vinbel93 | 6:ccdbd5923e37 | 52 | { |
vinbel93 | 8:e38cd9e16055 | 53 | unsigned int volatile* u3thr = U3THR_REGISTER; |
vinbel93 | 8:e38cd9e16055 | 54 | *u3thr = byte; |
vinbel93 | 8:e38cd9e16055 | 55 | |
vinbel93 | 8:e38cd9e16055 | 56 | pc.printf("%c ", byte); |
vinbel93 | 6:ccdbd5923e37 | 57 | } |
vinbel93 | 6:ccdbd5923e37 | 58 | |
vinbel93 | 6:ccdbd5923e37 | 59 | void UARTSend(uint8_t *buffer, uint32_t length) |
vinbel93 | 6:ccdbd5923e37 | 60 | { |
vinbel93 | 8:e38cd9e16055 | 61 | unsigned int volatile* u3thr = U3THR_REGISTER; |
vinbel93 | 8:e38cd9e16055 | 62 | |
vinbel93 | 6:ccdbd5923e37 | 63 | while (length != 0) |
vinbel93 | 6:ccdbd5923e37 | 64 | { |
vinbel93 | 8:e38cd9e16055 | 65 | // pc.printf("%c ", *buffer); |
vinbel93 | 8:e38cd9e16055 | 66 | *u3thr = *buffer; |
vinbel93 | 6:ccdbd5923e37 | 67 | buffer++; |
vinbel93 | 6:ccdbd5923e37 | 68 | length--; |
vinbel93 | 6:ccdbd5923e37 | 69 | } |
vinbel93 | 8:e38cd9e16055 | 70 | |
vinbel93 | 8:e38cd9e16055 | 71 | // pc.printf("\r\n"); |
vinbel93 | 6:ccdbd5923e37 | 72 | } |