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
11 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
43 * ターゲット依存モジュール(CQ-STARM用)
45 #include "kernel_impl.h"
48 #include "target_serial.h"
49 #include "target_syssvc.h"
55 Inline void set_cr_mode(uint32_t reg, uint_t p, int_t v)
58 sil_andw((void*)GPIO_CRL(reg), ~CR_MODE_MASK(p));
59 sil_orw((void*)GPIO_CRL(reg), CR_MODE(p, v));
60 } else if (8 <= p && p < 16) {
61 sil_andw((void*)GPIO_CRH(reg), ~CR_MODE_MASK(p - 8));
62 sil_orw((void*)GPIO_CRH(reg), CR_MODE(p - 8, v));
66 Inline void set_cr_cnf(uint32_t reg, uint_t p, int_t v)
69 sil_andw((void*)GPIO_CRL(reg), ~CR_CNF_MASK(p));
70 sil_orw((void*)GPIO_CRL(reg), CR_CNF(p, v));
71 } else if (8 <= p && p < 16) {
72 sil_andw((void*)GPIO_CRH(reg), ~CR_CNF_MASK(p - 8));
73 sil_orw((void*)GPIO_CRH(reg), CR_CNF(p - 8, v));
77 Inline void set_port_pull(uint32_t reg, uint_t p, bool_t up)
80 sil_wrw_mem((void*)GPIO_BSRR(reg), 0x01 << p);
82 sil_wrw_mem((void*)GPIO_BRR(reg), 0x01 << p);
89 void target_initialize(void)
95 sil_orw((void*)RCC_CR, CR_HSE_ON);
98 while ((sil_rew_mem((void*)RCC_CR) & CR_HSE_RDY) == 0) ;
100 /* FLASH ROMは2wait待ち */
101 sil_andw((void*)FLASH_ACR, ~ACR_LATENCY_MASK);
102 sil_orw((void*)FLASH_ACR, ACR_LATENCY_TWO);
104 /* HCLK = SYSCLK, PCLK2 = HCLK, PCLK1 = HCLK/2 */
105 sil_orw((void*)RCC_CFGR, 0x00 | (0x00 << 11) | (0x04 << 8));
107 /* PLLCLK = 8MHz x 9 = 72MHz, HSE as PLL clock */
108 sil_orw((void*)RCC_CFGR, 0x07 << 18);
109 sil_orw((void*)RCC_CFGR, CFGR_PLL_SRC);
112 sil_orw((void*)RCC_CR, CR_PLL_ON);
115 while ((sil_rew_mem((void*)RCC_CR) & CR_PLL_RDY) == 0) ;
117 /* PLLをシステムクロックに選択 */
118 sil_orw((void*)RCC_CFGR, CFGR_SW_PLL);
120 /* PLLのシステムクロック選択待ち */
121 while ((sil_rew_mem((void*)RCC_CFGR) & CFGR_SWS_MASK) != (CFGR_SW_PLL << 2)) ;
132 sil_orw((void*)RCC_APB2ENR, APB2ENR_USART1_EN | APB2ENR_IOPA_EN |
133 APB2ENR_IOPC_EN | APB2ENR_AFIO_EN);
135 sil_orw((void*)RCC_APB2ENR, APB2ENR_IOPD_EN);
136 sil_orw((void*)RCC_APB1ENR, APB1ENR_USART2_EN);
141 /* USART1(RX) プルアップ */
142 set_cr_mode(GPIOA_BASE, 10, MODE_INPUT);
143 set_cr_cnf(GPIOA_BASE, 10, CNF_IN_FLOATING);
146 set_cr_mode(GPIOA_BASE, 9, MODE_OUTPUT_50MHZ);
147 set_cr_cnf(GPIOA_BASE, 9, CNF_OUT_AF_PP);
150 /* USART2(RX) プルアップ */
151 set_cr_mode(GPIOD_BASE, 6, MODE_INPUT);
152 set_cr_cnf(GPIOD_BASE, 6, CNF_IN_FLOATING);
155 set_cr_mode(GPIOD_BASE, 5, MODE_OUTPUT_50MHZ);
156 set_cr_cnf(GPIOD_BASE, 5, CNF_OUT_AF_PP);
158 /* USART2ポートのリマップ(PD5,6) */
159 sil_orw((void*)AFIO_MAPR, MAPR_USART2_REMAP);
162 set_cr_mode(GPIOC_BASE, 6, MODE_OUTPUT_50MHZ);
163 set_cr_cnf(GPIOC_BASE, 6, CNF_OUT_GP_PP);
168 target_usart_init(SIO_PORTID);
174 void target_exit(void)
181 * システムログの低レベル出力のための文字出力
183 void target_fput_log(char_t c)
186 sio_pol_snd_chr('\r', SIO_PORTID);
188 sio_pol_snd_chr(c, SIO_PORTID);