3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
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/
13 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
15 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
26 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
28 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
30 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
32 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
33 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
36 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
37 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
38 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
39 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
44 * \addtogroup TOPPERS_CHIP
49 * \brief カーネル実装のチップ依存モジュール(LPC18xx汎用)
51 #include "kernel_impl.h"
54 #include "target_serial.h"
55 #include "target_syssvc.h"
59 void chip_initialize(void)
69 extern void initPLL1( unsigned int Hz )
72 LPC_CGU->BASE_M3_CLK = 0x01000800; // select IRC as cortex-m4 input, auto hold
74 // Set PLL1 frequency to 96MHz
76 1 << 24 | // 28:24, clock sel = 1 (IRC)
77 23 << 16 | // 23:16, MSEL = 23 ( multiply by (MSEL+1) )
78 2 << 12 | // 13:12, NSEL = 2 ( pre division by (NSEL+1) )
79 1 << 11 | // 11, AUTOBLOCK = 1
80 1 << 8 | // 9:8, PSEL = 1 ( post division by (PSEL+1))
81 1 << 7 | // 7, DIRECT=1 ( 1 : bypass PSEL, 0 : use PSEL )
82 0 << 6 | // 6, FBSEL=0 ( 1 : output, 0 : CCO )
83 0 << 1 | // 1, BYPASS=0 ( 1 : input, 0 : CCO )
84 0; // 0, PD = 0 ( 1 : power down, 0 active );
86 while ( ! LPC_CGU->PLL1_STAT )
88 // Set PLL1 frequency to desired
89 // PLL reference is 4MHz (12MHz/3). So, the multiplier have to be ( desired freq / 4 )-1
91 1 << 24 | // 28:24, clock sel = 1 (IRC)
92 (Hz/4000000-1) << 16 | // 23:16, MSEL = 47 ( multiply by (MSEL+1) )
93 2 << 12 | // 13:12, NSEL = 2 ( pre division by (NSEL+1) )
94 1 << 11 | // 11, AUTOBLOCK = 1
95 1 << 8 | // 9:8, PSEL = 1 ( post division by (PSEL+1))
96 1 << 7 | // 7, DIRECT=1 ( 1 : bypass PSEL, 0 : use PSEL )
97 0 << 6 | // 6, FBSEL=0 ( 1 : output, 0 : CCO )
98 0 << 1 | // 1, BYPASS=0 ( 1 : input, 0 : CCO )
99 0; // 0, PD = 0 ( 1 : power down, 0 active );
101 while ( ! LPC_CGU->PLL1_STAT )
103 LPC_CGU->BASE_M3_CLK = 0x09000800; // select PLL1, auto hold
116 void chip_fput_log(char_t c)
118 /* Newlineなら、CRも追加する */
120 sio_pol_snd_chr('\r', LOGTASK_PORTID);
122 sio_pol_snd_chr(c, LOGTASK_PORTID);
125 //Todo : これが必要かどうか慎重にチェックすること。
127 * \brief 低レベルのターゲット依存の初期化
130 * CCRのSTKALIGNビットをクリアする
131 * このビットはCORTEX-M3コアがR1からR2に変化する過程で"1"に変更された。クリアしないと
132 * TOPPERS/ASPはクラッシュする。
134 void hardware_init_hook()
136 SCB->CCR &= ~SCB_CCR_STKALIGN_Msk;