OSDN Git Service

6315b655e540d9b89dbebe5e772f72c4b16d9aa6
[bluetank/bluetank.git] / firm / bare_metal / common / uart.c
1 /**
2  * @file uart.c
3  * @author Copyright(C) 2012 Shinichiro Nakamura
4  * @brief BlueTank ACB-BF592 Application Sample Codes.
5  */
6
7 /*
8  * ===============================================================
9  *  BlueTank
10  * ===============================================================
11  * Copyright (c) 2012 Shinichiro Nakamura
12  *
13  * Permission is hereby granted, free of charge, to any person
14  * obtaining a copy of this software and associated documentation
15  * files (the "Software"), to deal in the Software without
16  * restriction, including without limitation the rights to use,
17  * copy, modify, merge, publish, distribute, sublicense, and/or
18  * sell copies of the Software, and to permit persons to whom the
19  * Software is furnished to do so, subject to the following
20  * conditions:
21  *
22  * The above copyright notice and this permission notice shall be
23  * included in all copies or substantial portions of the Software.
24  *
25  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
27  * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
29  * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
30  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
31  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
32  * OTHER DEALINGS IN THE SOFTWARE.
33  * ===============================================================
34  */
35
36 #include <cdefBF592-A.h>
37 #include <builtins.h>
38 #include "uart.h"
39
40 /* システムクロック(98.304MHz) */
41 #define SCLOCK_HZ       (98304000)
42
43 /* ボーレート(115200bps) */
44 #define UART0_BAUDRATE  (115200)
45
46 /* UART0_DLL/UART0_DLHの設定値 */
47 #define UART0_DIVISOR   (SCLOCK_HZ / 16 / UART0_BAUDRATE)
48
49 void uart_init(void)
50 {
51     /* UARTイネーブル */
52     *pUART0_GCTL = 1;
53
54     /* UART分周比の設定 */
55     *pUART0_LCR |= DLAB;
56     *pUART0_DLL = UART0_DIVISOR & 0xFF;
57     *pUART0_DLH = UART0_DIVISOR >> 8;
58     *pUART0_LCR &= ~DLAB;
59
60     /* UARTモード設定 パリティ無し 8bit 1ストップビット */
61     *pUART0_LCR = WLS(8);
62
63     /* UART割込み禁止 */
64     *pUART0_IER = 0;
65
66     /* PF11/PF12ピンをUARTに割り振る */
67     *pPORTF_MUX &= ~(PF11 | PF12);  /* PF11,PF12を0にする */
68     *pPORTF_FER |= PF11 | PF12;     /* PF11,PF12をUART0に割り振る */
69 }
70
71 void uart_putc(char ch)
72 {
73     /* UART0 LSRのTHREが1になるまで待つ。1ならば送信レジスタ空き */
74     while (0 == (*pUART0_LSR & THRE)) {
75         ssync();
76     }
77     *pUART0_THR = ch;   /* 一文字送信 */
78     ssync();
79 }
80