===================================================================== ST32F(GCC)プロセッサ依存部 Last Modified:2015 Nov 14 17:35:26 ===================================================================== ○概要 STM32Fターゲット依存部は,ST社のST32Fシリーズをサポートしている.現状 では,一部のSTM32Fシリーズのみをサポートしている.今後サポートチップを 増やす予定である.ST32Fシリーズを確認済みのチップで動作された方は,連 絡をいただけると幸いです. ○確認済みのチップ ・STM32F103VB(Cortex-M3) ○カーネルの使用リソース カーネルは以下のリソースを使用する. ・ROM コードを配置する. 使用量は使用するAPIの数に依存する. ・RAM データを配置する. 使用量はオブジェクト数に依存する. ・SysTick カーネル内部のティックの生成に用いる. ○コンパイラ GCC 4.4.1 (Sourcery G++ Lite 2010q1-188) で動作確認を行った. ○割込み優先度 割込み優先度として指定可能な範囲は,-15 ~ -1 である. ○ターゲットボード依存部の作成方法 以下の内容をターゲットボード依存部に追加すること.STBEE(GCC)ターゲット 依存部の内容をコピーして変更すると作成が容易である. ●初期化処理 以下の初期化ルーチンにターゲット毎の初期化を追加する.STM32Fターゲット 依存部ではプロセッサクロック(RCC)やI/Oポートの初期化は行わないため,タ ーゲットボード依存部で初期化を行うこと. ・target_initialize() : target_config.c ターゲット依存部の初期化(C言語) ・_hardware_init_hook : target_support.S(必要な場合) 低レベルのターゲット依存の初期化 スタートアップモジュールの中で,メモリの初期化の前に呼び出される ●Makefile.target の設定項目 ボード名, チップ名,コア名,開発環境名の定義 ・BOARD ボード名を設定 ・CHIP "stm32f"を設定 ・PRC "arm_m"を設定 ・TOOL "gcc"を設定 GNU開発環境のターゲットアーキテクチャの定義 ・GCC_TARGET 使用するコンパイラのプリフィックスを追加. コンパイルオプション ・INCLUDES インクルード指定 ・COPTS Cコンパイラへのオプション ・LDFLAGS リンカへのオプション 標準ライブラリをリンクしない場合は"-nostdlib"を指定する. カーネルに関する定義 ・KERNEL_DIR カーネルディレクトリの指定. ・KERNEL_ASMOBJS カーネルアセンブラオブジェクトの指定 ・KERNEL_COBJS カーネルCオブジェクトの指定 ・KERNEL_CFLAGS カーネルオブジェクトコンパイル時のCコンパイラへのオプション システムサービスに関する定義 ・SYSSVC_DIR システムサービスのディレクトリの指定 ・SYSSVC_COBJS システムサービスのオブジェクトの指定 stm32fプロセッサ依存部のUSARTのドライバを使用する場合は,usart.oを指 定する. リンカスクリプトの定義 ・LDSCRIPT 使用するリンカスクリプトを指定する. スタートアップモジュールに関する定義 ・HIDDEN_OBJS スタートアップモジュールの指定 ARM_Mプロセッサ依存部のスタートアップルーチンを用いる場合には, start.oを指定. ・スタートアップモジュールの生成ルール 以下の内容を追加する. --------------------------------------------------------------- $(HIDDEN_OBJS): %.o: %.S $(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $< $(HIDDEN_OBJS:.o=.d): %.d: %.S @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) \ -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend --------------------------------------------------------------- チップ依存部のインクルード ・以下の内容を追加する. include $(SRCDIR)/arch/$(PRC)_$(TOOL)/$(CHIP)/Makefile.chip ●target_config.h の設定項目 ・DEFAULT_ISTKSZ ディフォルトの非タスクコンテキスト用のスタックサイズ ・SIL_DLY_TIM1/2 微少時間待ちのための定義 ・SIO_PORTID 使用するシリアルポートID ・IDLE処理の定義(オプション) アイドル時の処理を変更したい場合に定義. ・chip_config.h のインクルード ●target_config.c の設定項目 ・初期化関数の定義 target_initialize() ・終了処理関数の定義 target_exit() ・システムログの低レベル出力のための文字出力 target_fput_log() ●target_syssvc.h の設定項目 ・TARGET_NAME 起動メッセージのターゲットシステム名 ・TNUM_PORT/TNUM_SIOP シリアルポート数の定義 ・LOGTASK_PORTID ログタスクが使用するポートIDの指定 ・BPS_SETTING コンソールに使用するポートのボーレート ・chip_syssvc.h のインクルード ●target_timer.h の設定項目 ・TIMER_CLOCK タイマ値の内部表現とミリ秒単位との変換 ・INTPRI_TIMER タイマ割込みの割込み優先度 ・INTATR_TIMER タイマ割込みの割込み属性 ●target_timer.cfg の設定項目 ・コア依存部のコンフィギュレーションファイルのインクルード. INCLUDE("arm_m_gcc/common/core_timer.cfg"); ●target_stddef.h の設定項目 ・システム略称の定義 ・chip_stddef.hのインクルード ●target_serial.h の設定項目 ・INTPRI_SIO シリアルポートの優先度 ・INTATR_SIO シリアルポートの割り込み属性 ●target_serial.cfgの設定項目 ・初期化ルーチンの登録 ATT_INI({ TA_NULL, 0, sio_initialize }); ・割込みサービスルーチンの登録 ATT_ISR({ TA_NULL, SIO_PORTID, INTNO_SIO, sio_isr, 1 }); ・割込み要求ラインのコンフィギュレーション CFG_INT(INTNO_SIO, { TA_ENAINT|INTATR_SIO, INTPRI_SIO }); ●target_kernel.h ・chip_kernel.hのインクルード ●target_check.tf ・chip_check.t のインクルード. ●target_cfg1_out.h ・chip_cfg1_out.h のインクルード ●target_asm.inc ・chip_cfg1_out.hのインクルード ●target.tf ・chip.tfのインクルード ●target_test.h ・STACK_SIZE(オプション) サンプルプログラムのディフォルトのスタックサイズの変更. ○変更履歴 2015/11/14 ・chip_sil.h/stm32f.h ・core_sil.hでTBITW_IPRIを参照するため,定義場所をstm32f.hから chip_sio.hに移動. 2015/11/04 ・Makefile.chip ・アーキテクチャーを指定するように変更 2012/10/17 ・1.8.0対応のため,char_t の箇所を他の型に変更. 2012/06/18 ・xxx_stddef.h を相対パスではなくファイル名のみで指定するように変更. どのファイルを用いるかは他のファイルと同様にコンパイラへのインクルー ド指定の順序とする. 2012/02/23 ・uart.h ・SIO_PORTIDをSIO_PORIDと記述していた問題を修正. 2011/11/28 ・新規追加