OSDN Git Service

2f716bd62754c7f5fc132b41e961dd60d0581a8b
[toppersasp4lpc/asp.git] / asp / chip / lpc1700_gcc / chip_config.c
1 /*
2  *  TOPPERS/ASP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Advanced Standard Profile Kernel
5  * 
6  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7  *                              Toyohashi Univ. of Technology, JAPAN
8  *  Copyright (C) 2005-2007 by Embedded and Real-Time Systems Laboratory
9  *              Graduate School of Information Science, Nagoya Univ., JAPAN
10  *  Copyright (C) 2010 by TOPPERS/ASP for LPC project
11  *              http://sourceforge.jp/projects/toppersasp4lpc/
12  * 
13  *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
14  *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
15  *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
16  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18  *      スコード中に含まれていること.
19  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
22  *      の無保証規定を掲載すること.
23  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
25  *      と.
26  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
28  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
29  *        報告すること.
30  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
32  *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
33  *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
34  *      免責すること.
35  * 
36  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
37  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
38  *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
39  *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
40  *  の責任を負わない.
41  * 
42  */
43 /**
44  * \addtogroup TOPPERS_CHIP
45  * \{
46  */
47 /**
48  * \file chip_config.c
49  * \brief カーネル実装のチップ依存モジュール(LPC17xx汎用)
50  */
51 #include "kernel_impl.h"
52 #include <sil.h>
53 #include "lpc1700.h"
54 #include "target_serial.h"
55 #include "target_syssvc.h"
56
57
58
59 void chip_initialize(void)
60 {
61
62         /*
63          *  プロセッサ依存部の初期化
64          */
65         core_initialize();
66
67 }
68
69 extern void initPLL0(
70                 pllClockSource_type     clkSrc,
71                 unsigned int                    isMainOsc20MHzMore,
72                 unsigned int                    N,
73                 unsigned int                    M,
74                 unsigned int                    cpuClkDiv
75         )
76 {
77
78         if ( clkSrc == eMainOsc )
79         {
80                         // メインオシレータを使う場合には、周波数レンジに応じてSCSの設定を変える。
81                 if ( isMainOsc20MHzMore )
82                         LPC_SC->SCS = 1<<5;
83                 else
84                         LPC_SC->SCS = 1<<5 | 1<<4;
85
86                 while
87                         ((LPC_SC->SCS & (1<<6)) == 0);  /* 発振器の準備が整うまで待つ   */
88         }
89
90         LPC_SC->CCLKCFG   = cpuClkDiv-1;        /* CPUクロックデバイダの設定    */
91         LPC_SC->CLKSRCSEL = clkSrc;                     /* PLLに入力するクロック源の設定   */
92
93         LPC_SC->PLL0CFG   = (N-1) <<16 | (M-1); /* 分周比と低倍比の設定 */
94         LPC_SC->PLL0FEED  = 0xAA;
95         LPC_SC->PLL0FEED  = 0x55;
96
97         LPC_SC->PLL0CON   = 0x01;               /* PLL0 イネーブル   */
98         LPC_SC->PLL0FEED  = 0xAA;
99         LPC_SC->PLL0FEED  = 0x55;
100         while
101           (!(LPC_SC->PLL0STAT & (1<<26)));              /* PLLの準備が整うまで待つ  */
102
103         LPC_SC->PLL0CON   = 0x03;             /* PLL0 をクロックとして使う  */
104         LPC_SC->PLL0FEED  = 0xAA;
105         LPC_SC->PLL0FEED  = 0x55;
106         while
107           (!(LPC_SC->PLL0STAT & ((1<<25) | (1<<24))));/* PLLの準備が整うまで待つ */
108
109
110 }
111
112 void chip_exit(void)
113 {
114         /* チップ依存部の終了処理 */
115         core_terminate();
116 }
117
118
119
120 void chip_fput_log(char_t c)
121 {
122         /* Newlineなら、CRも追加する */
123         if (c == '\n') {
124                 sio_pol_snd_chr('\r', SIO_PORTID);
125         }
126         sio_pol_snd_chr(c, SIO_PORTID);
127 }
128
129 /**
130  * \brief 低レベルのターゲット依存の初期化
131  * \details
132  * メモリ初期化の前に呼び出される
133  * CCRのSTKALIGNビットをクリアする
134  * このビットはCORTEX-M3コアがR1からR2に変化する過程で"1"に変更された。クリアしないと
135  * TOPPERS/ASPはクラッシュする。
136  */
137 void hardware_init_hook()
138 {
139         SCB->CCR &= ~SCB_CCR_STKALIGN_Msk;
140 }
141
142 /**
143  * \}
144  */
145
146