source: ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_support.S@ 421

Last change on this file since 421 was 421, checked in by nmir-saito, 4 years ago

Merge branch 'rubycfg' to trunk

  • Property svn:executable set to *
  • Property svn:mime-type set to text/plain; charset=utf-8
File size: 6.3 KB
Line 
1/*
2 * TOPPERS/SSP Kernel
3 * Smallest Set Profile Kernel
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2007 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 * Copyright (C) 2012 by Meika Sugimoto
10 * Copyright (C) 2013-2015 by Naoki Saito
11 * Nagoya Municipal Industrial Research Institute, JAPAN
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/*
45 * ターゲット依存部 アセンブリ言語(LPCXPRESSO-LPC812用)
46 */
47
48#define TOPPERS_MACRO_ONLY
49#define UINT_C(val) (val)
50#define ULONG_C(val) (val)
51#include "kernel_impl.h"
52#include "lpcxpresso_lpc812.h"
53
54/*
55 * 低レベルのターゲット依存の初期化
56 *
57 * メモリ初期化の前に呼び出される
58 */
59 .globl hardware_init_hook
60
61 .text
62 .align 2
63 .syntax unified
64 .code 16
65 .thumb
66 .type hardware_init_hook, function
67hardware_init_hook:
68 // SWM, IOCON のクロックON
69 ldr r3, .L6+4 // TADR_SYSAHBCLKCTRL
70 ldr r1, .L6+8 // TVALUE_SYSAHBCLKCTRL
71 ldr r2, [r3]
72 orrs r2, r2, r1
73 str r2, [r3]
74
75#ifdef USE_SYSTEM_PLL
76#ifdef USE_EXTERNAL_OSCILLATOR
77 // PIO0_8, PIO0_9 を非活性に
78 ldr r3, .L6+16 // TADR_IOCON_BASE
79
80 movs r1, #TBITPTN_IOCON_PIOx_MODE
81 mvns r1, r1
82 ldr r2, [r3, #TOFFSET_IOCON_PIO0_8]
83 ands r2, r2, r1
84 str r2, [r3, #TOFFSET_IOCON_PIO0_8]
85
86 ldr r2, [r3, #TOFFSET_IOCON_PIO0_9]
87 ands r2, r2, r1
88 str r2, [r3, #TOFFSET_IOCON_PIO0_9]
89
90 // XTALIN, XTALOUT 端子を有効に
91 ldr r3, .L6+20 // TADR_PINENABLE0
92 movs r1, #(TBITPTN_SWM_PINENABLE0_XTALINEN | TBITPTN_SWM_PINENABLE0_XTALOUTEN)
93 mvns r1, r1
94 ldr r2, [r3]
95 ands r2, r2, r1
96 str r2, [r3]
97
98 // 水晶発信器 power on
99 ldr r3, .L6+12 // TADR_PDRUNCFG
100 movs r1, #TBITPTN_SYSCON_PDRUNCFG_SYSOSCPD
101 mvns r1, r1
102 ldr r2, [r3]
103 ands r2, r2, r1
104 str r2, [r3]
105
106 // システムオシレータの設定
107 ldr r3, .L6 // TADR_SYSCON_BASE
108 movs r2, #TVALUE_SYSCON_SYSOSCCTRL
109 str r2, [r3, #TOFFSET_SYSCON_SYSOSCCTRL]
110
111 // ちょっと待つ
112 movs r1, #0
113.L1:
114 str r1, [sp, #4]
115 cmp r1, #199
116 bhi .L2
117 nop
118 adds r1, #1
119 b .L1
120#endif /* USE_EXTERNAL_OSCILLATOR */
121
122.L2:
123 // System PLL クロックの選択 (XTALまたはIRCオシレータ)
124 ldr r3, .L6 // TADR_SYSCON_BASE
125 movs r2, #TVALUE_SYSCON_SYSPLLCLKSEL
126 str r2, [r3, #TOFFSET_SYSCON_SYSPLLCLKSEL]
127
128 // クロックソースの更新
129 movs r2, #TBITPTN_SYSCON_SYSPLLCLKUEN_ENA
130 str r2, [r3, #TOFFSET_SYSCON_SYSPLLCLKUEN]
131
132 // 更新されるまで待つ
133.L3:
134 ldr r1, [r3, #TOFFSET_SYSCON_SYSPLLCLKUEN]
135 ands r1, r2 // r1 <-- r1(=SYSPLLCLKUEN) & r2(=TBITPTN_SYSPLLCLKUEN_ENA)
136 beq .L3 // if(r1 == 0) goto .L3
137
138 // PLLの逓倍率の設定
139 movs r2, #TVALUE_SYSCON_SYSPLLCTRL
140 str r2, [r3, #TOFFSET_SYSCON_SYSPLLCTRL]
141
142 // System PLL 電源ON
143 ldr r3, .L6+12 // TADR_PDRUNCFG
144 movs r1, #TBITPTN_SYSCON_PDRUNCFG_SYSPLLPD
145 mvns r1, r1
146 ldr r2, [r3]
147 ands r2, r2, r1
148 str r2, [r3]
149
150 // PLLロック待ち
151 ldr r3, .L6 // TADR_SYSCON_BASE
152 movs r2, #TBITPTN_SYSCON_SYSPLLSTAT_LOCK
153.L4:
154 ldr r1, [r3, #TOFFSET_SYSCON_SYSPLLSTAT]
155 ands r1, r2 // r1 <-- r1(=SYSPLLSTAT) & r2(=TBITPTN_SYSPLLSTAT_LOCK)
156 beq .L4 // if(r1 == 0) goto .L4
157#endif /* USE_SYSTEM_PLL */
158
159 // メインクロック出力の選択
160 ldr r3, .L6 // TADR_SYSCON_BASE
161 movs r2, #TVALUE_SYSCON_MAINCLKSEL
162 str r2, [r3, #TOFFSET_SYSCON_MAINCLKSEL]
163
164 // メインクロックソースの更新
165 movs r2, #TBITPTN_SYSCON_MAINCLKUEN_ENA
166 str r2, [r3, #TOFFSET_SYSCON_MAINCLKUEN]
167
168 // 更新されるまで待つ
169.L5:
170 ldr r1, [r3, #TOFFSET_SYSCON_MAINCLKUEN]
171 ands r1, r2 // r1 <-- r1(=MAINCLKUEN) & r2(=TBITPTN_MAINCLKUEN_ENA)
172 beq .L5 // if(r1 == 0) goto .L5
173
174 // システムクロックの分周比設定
175 movs r2, #TVALUE_SYSCON_SYSAHBCLKDIV
176 str r2, [r3, #TOFFSET_SYSCON_SYSAHBCLKDIV]
177
178 // トレースクロックの設定(必要なら.Not Yet)
179
180 bx lr
181
182 .align 2
183.L6:
184 .word TADR_SYSCON_BASE
185 .word TADR_SYSCON_SYSAHBCLKCTRL
186 .word TVALUE_SYSCON_SYSAHBCLKCTRL
187 .word TADR_SYSCON_PDRUNCFG
188 .word TADR_IOCON_BASE
189 .word TADR_SWM_PINENABLE0
Note: See TracBrowser for help on using the repository browser.