• R/O
  • HTTP
  • SSH
  • HTTPS

asp: Commit

ASPカーネルツリーのリポジトリ


Commit MetaInfo

Revision8d47eda3e882e933b6f93d8e73875e0bee8413a4 (tree)
Time2012-10-22 23:53:54
Authorsuikan <suikan@user...>
Commitersuikan

Log Message

コメントの修正及びPLL設定ルーチンの記述。

Change Summary

Incremental Difference

--- a/asp/arch/arm_m_gcc/lpc1800_gcc/chip_config.c
+++ b/asp/arch/arm_m_gcc/lpc1800_gcc/chip_config.c
@@ -66,28 +66,45 @@ void chip_initialize(void)
6666
6767 }
6868
69-// Todo:ビルドは通るがPLLの設定が正しいか確認
70-extern void initPLL1(
71- pllClockSource_type clkSrc,
72- unsigned int N,
73- unsigned int M,
74- unsigned int cpuClkDiv
75- )
69+extern void initPLL1( unsigned int Hz )
7670 {
7771
78- // Set PLL
79- LPC_CGU->PLL1_CTRL = ((M-1)<<CGU_PLL1_CTRL_MSEL_Pos) // Multiplier
80- | ((N-1)<<CGU_PLL1_CTRL_NSEL_Pos) // Pre-PLL div
81- | ((clkSrc-1)<<CGU_PLL1_CTRL_CLK_SEL_Pos) // clock source
82- | CGU_PLL1_CTRL_AUTOBLOCK_Msk;
83- while
84- (!(LPC_CGU->PLL1_STAT & CGU_PLL1_STAT_LOCK_Msk)); /* PLLの準備が整うまで待つ */
85-
86- // select PLL1 as input for M3 core
87- LPC_CGU->BASE_M3_CLK = CGU_BASE_M3_CLK_AUTOBLOCK_Msk | (0x09 << CGU_BASE_M3_CLK_CLK_SEL_Pos);
72+ LPC_CGU->BASE_M3_CLK = 0x01000800; // select IRC as cortex-m4 input, auto hold
73+
74+ // Set PLL1 frequency to 96MHz
75+ LPC_CGU->PLL1_CTRL =
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 );
85+ // wait for lock
86+ while ( ! LPC_CGU->PLL1_STAT )
87+ ;
88+ // Set PLL1 frequency to desired
89+ // PLL reference is 4MHz (12MHz/3). So, the multiplier have to be ( desired freq / 4 )-1
90+ LPC_CGU->PLL1_CTRL =
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 );
100+ // wait for lock
101+ while ( ! LPC_CGU->PLL1_STAT )
102+ ;
103+ LPC_CGU->BASE_M3_CLK = 0x09000800; // select PLL1, auto hold
88104
89105 }
90106
107+
91108 void chip_exit(void)
92109 {
93110 /* チップ依存部の終了処理 */
--- a/asp/arch/arm_m_gcc/lpc1800_gcc/chip_config.h
+++ b/asp/arch/arm_m_gcc/lpc1800_gcc/chip_config.h
@@ -101,30 +101,15 @@
101101 typedef enum { eIrc, eMainOsc, eRtcOsc} pllClockSource_type;
102102
103103 /**
104- * @param clkSrc PLLのソースとなるクロック。0から0x10のうち一つを指定する。PLL1CTRLレジスタの解説参照
105- * @param M 逓倍比を決める整数。1から256が許される。
106- * @param N PLLのリファレンス入力の分周比を決める整数。1から4が許される
107- * @param pSel PLLの出力の分周器。1から4が許される。
104+ * @param Hz PLLの出力周波数。Hz単位。4の倍数が許される。
108105 * @details
109- * PLL0の周波数を設定する。クロックソースとなる発振器、その周波数、PLLのデバイダ、PLL後のデバイダを
110- * 指定する。生成するクロックの周波数は以下の通りとなる。CCLKがCPUのコアクロックである。
111- * @code
112- * PLLCLK = (2 × M × FIN) / N
113- * CCLK = PLLCLK / cpuClkDiv
114- * @endcode
115- * LPC1768のPLLに関しては次のような物理上限値がNXPによって定められている
116- * - 入力は32kHz - 50MHz (UM10360, section 5.1)
117- * - PLL出力は 275MHz - 550MHz (同上)
118- * - CCLKは最大100MHz (データシート)
119- *
120- * このプログラムはNXP社のCMSIS中のルーチンをコピーし、改良したものである。
106+ * PLL1の周波数を設定する。クロックソースとなる発振器はIRC(12Mhz)で、それを元に
107+ * PLL1を設定する。周波数は任意のものを与えてよいが、設定されるのは4MHzの倍数である。
121108 */
122109 extern void initPLL1(
123- pllClockSource_type clkSrc,
124- unsigned int N,
125- unsigned int M,
126- unsigned int pSel
127- );
110+ unsigned int Hz
111+ );
112+
128113
129114
130115 /**
--- a/asp/arch/arm_m_gcc/lpc4300_gcc/chip_config.c
+++ b/asp/arch/arm_m_gcc/lpc4300_gcc/chip_config.c
@@ -66,25 +66,41 @@ void chip_initialize(void)
6666
6767 }
6868
69-// Todo:ビルドは通るがPLLの設定が正しいか確認
70-extern void initPLL1(
71- pllClockSource_type clkSrc,
72- unsigned int N,
73- unsigned int M,
74- unsigned int cpuClkDiv
75- )
69+extern void initPLL1( unsigned int Hz )
7670 {
7771
78- // Set PLL
79- LPC_CGU->PLL1_CTRL = ((M-1)<<CGU_PLL1_CTRL_MSEL_Pos) // Multiplier
80- | ((N-1)<<CGU_PLL1_CTRL_NSEL_Pos) // Pre-PLL div
81- | ((clkSrc-1)<<CGU_PLL1_CTRL_CLK_SEL_Pos) // clock source
82- | CGU_PLL1_CTRL_AUTOBLOCK_Msk;
83- while
84- (!(LPC_CGU->PLL1_STAT & CGU_PLL1_STAT_LOCK_Msk)); /* PLLの準備が整うまで待つ */
85-
86- // select PLL1 as input for M3 core
87- LPC_CGU->BASE_M4_CLK = CGU_BASE_M4_CLK_AUTOBLOCK_Msk | (0x09 << CGU_BASE_M4_CLK_CLK_SEL_Pos);
72+ LPC_CGU->BASE_M4_CLK = 0x01000800; // select IRC as cortex-m4 input, auto hold
73+
74+ // Set PLL1 frequency to 96MHz
75+ LPC_CGU->PLL1_CTRL =
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 );
85+ // wait for lock
86+ while ( ! LPC_CGU->PLL1_STAT )
87+ ;
88+ // Set PLL1 frequency to desired
89+ // PLL reference is 4MHz (12MHz/3). So, the multiplier have to be ( desired freq / 4 )-1
90+ LPC_CGU->PLL1_CTRL =
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 );
100+ // wait for lock
101+ while ( ! LPC_CGU->PLL1_STAT )
102+ ;
103+ LPC_CGU->BASE_M4_CLK = 0x09000800; // select PLL1, auto hold
88104
89105 }
90106
--- a/asp/arch/arm_m_gcc/lpc4300_gcc/chip_config.h
+++ b/asp/arch/arm_m_gcc/lpc4300_gcc/chip_config.h
@@ -101,29 +101,13 @@
101101 typedef enum { eIrc, eMainOsc, eRtcOsc} pllClockSource_type;
102102
103103 /**
104- * @param clkSrc PLLのソースとなるクロック。0から0x10のうち一つを指定する。PLL1CTRLレジスタの解説参照
105- * @param M 逓倍比を決める整数。1から256が許される。
106- * @param N PLLのリファレンス入力の分周比を決める整数。1から4が許される
107- * @param pSel PLLの出力の分周器。1から4が許される。
104+ * @param Hz PLLの出力周波数。Hz単位。4の倍数が許される。
108105 * @details
109- * PLL0の周波数を設定する。クロックソースとなる発振器、その周波数、PLLのデバイダ、PLL後のデバイダを
110- * 指定する。生成するクロックの周波数は以下の通りとなる。CCLKがCPUのコアクロックである。
111- * @code
112- * PLLCLK = (2 × M × FIN) / N
113- * CCLK = PLLCLK / cpuClkDiv
114- * @endcode
115- * LPC1768のPLLに関しては次のような物理上限値がNXPによって定められている
116- * - 入力は32kHz - 50MHz (UM10360, section 5.1)
117- * - PLL出力は 275MHz - 550MHz (同上)
118- * - CCLKは最大100MHz (データシート)
119- *
120- * このプログラムはNXP社のCMSIS中のルーチンをコピーし、改良したものである。
106+ * PLL1の周波数を設定する。クロックソースとなる発振器はIRC(12Mhz)で、それを元に
107+ * PLL1を設定する。周波数は任意のものを与えてよいが、設定されるのは4MHzの倍数である。
121108 */
122109 extern void initPLL1(
123- pllClockSource_type clkSrc,
124- unsigned int N,
125- unsigned int M,
126- unsigned int pSel
110+ unsigned int Hz
127111 );
128112
129113
--- a/asp/target/lpc1768_generic_gcc/lpc1768_generic.h
+++ b/asp/target/lpc1768_generic_gcc/lpc1768_generic.h
@@ -98,7 +98,7 @@
9898 * \details
9999 * CORTEX-M3コアに入力する動作クロックの周波数[Hz]。
100100 */
101-#define SYS_CLOCK (INTERNAL_CLOCK * 25) // コアに入力するクロック 100MHz
101+#define SYS_CLOCK (180000000) // コアに入力するクロック 180MHz
102102
103103
104104 #ifndef TOPPERS_MACRO_ONLY
--- a/asp/target/lpc1830_generic_gcc/target_config.c
+++ b/asp/target/lpc1830_generic_gcc/target_config.c
@@ -72,25 +72,11 @@ void target_initialize(void)
7272 */
7373 chip_initialize();
7474
75- /* Flash Accelerator はLPC1830には存在しない */
76-// LPC_SC->FLASHCFG = 0x403a;
75+ initPLL1(SYS_CLOCK); // Set coreclock to desired frequency
7776
78- /*
79- * プロセッサクロックの初期化
80- */
81- // PLLの設定 (15 * 12MHz) = 180MHz
82-/*
83- initPLL1(
84- 1, // pllClockSource_type IRC,
85- 1, // unsigned int N,
86- PLL_MULTIPLYER, // unsigned int M,
87- 1 // unsigned int cpuClkDiv
88- );
89-
90-*/
77+ // USART0のピンの設定
9178 LPC_SCU->SFSP6_4 = 2; // TXD0 : Mode 2
9279 LPC_SCU->SFSP6_5 = 2 | (1<<4) | (1<<6) ; // RXD0 : Mode 2, EPUN, EZI
93- // USART0は自動的にリセットにピンが割り当てられるので、何もしない。
9480
9581 /*
9682 * バナー出力用のシリアル初期化
--- a/asp/target/lpc4330_generic_gcc/lpc4330_generic.h
+++ b/asp/target/lpc4330_generic_gcc/lpc4330_generic.h
@@ -97,9 +97,9 @@
9797 /**
9898 * \brief コア・クロック周波数
9999 * \details
100- * CORTEX-M4Fコアに入力する動作クロックの周波数[Hz]。
100+ * CORTEX-M4Fコアに入力する動作クロックの周波数[Hz]。現在のチップ依存部の制限により、周波数は4の倍数にする。
101101 */
102-#define SYS_CLOCK (INTERNAL_CLOCK * PLL_MULTIPLYER) // コアに入力するクロック
102+#define SYS_CLOCK 192000000 // コアに入力するクロック
103103
104104
105105 #ifndef TOPPERS_MACRO_ONLY
--- a/asp/target/lpc4330_generic_gcc/target_config.c
+++ b/asp/target/lpc4330_generic_gcc/target_config.c
@@ -72,22 +72,8 @@ void target_initialize(void)
7272 */
7373 chip_initialize();
7474
75- /* Flash Accelerator はLPC4330には存在しない */
76-// LPC_SC->FLASHCFG = 0x403a;
7775
78- /*
79- * プロセッサクロックの初期化
80- */
81- // PLLの設定 (15 * 12MHz) = 180MHz
82-/*
83- initPLL1(
84- 1, // pllClockSource_type IRC,
85- 1, // unsigned int N,
86- PLL_MULTIPLYER, // unsigned int M,
87- 1 // unsigned int cpuClkDiv
88- );
89-
90-*/
76+ initPLL1(SYS_CLOCK); // Set coreclock to desired frequency
9177
9278 // USART0ピン割り当て
9379 LPC_SCU->SFSP6_4 = 2; // TXD0 : Mode 2
Show on old repository browser