APP 1 S5.

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }