common/core_timer.h
common/core_unrename.h
common/core_user.txt
+common/core_user_cm4f.txt
common/Makefile.core
common/start.S
#if defined(__ARM_ARCH_7EM__) & !defined(__SOFTFP__)
tst r3,#FP_EXC_FRAME /* r3はLR。例外フレームには浮動小数点コンテキストを含んでいるか */
- it eq /* 含まれている場合の処理 */
+ it eq /* 含まれている場合の処理。0ならば含まれている */
vstmdbeq r2!,{s16-s31} /* preserved FPレジスタを保存。ここでlazystackingは解消される */
/* 共通処理 */
stmfd r2!,{r3} /* LRは、後でsvc_handlerから擬似リターンするときに使う */
stmfd r2!,{r3} /* アライメントのために2度プッシュ */
- it eq /* 含まれている場合の処理 */
- orreq r3,#FP_EXC_FRAME /* r3はLR。EXC_RETURNをFPなしフレームに強制する */
+ orr r3,#FP_EXC_FRAME /* r3はLR。EXC_RETURNをFPなしフレームに強制する */
/* この先はショート例外フレームである */
#endif /* defined(__ARM_ARCH_7EM__) & !defined(__SOFTFP__)*/
add r0, #EXC_FRAME_SIZE /* スタックを捨てる */
#if defined(__ARM_ARCH_7EM__) & !defined(__SOFTFP__)
ldmfd r0!,{lr}
- ldmfd r0!,{lr} /* LRã\83\95ã\83¬ã\83¼ã\83 ã\81¯ã\82¢ã\83©ã\82¤ã\83¡ã\83³ã\83\88のために二度積まれている */
+ ldmfd r0!,{lr} /* LRã\81¯ã\82¢ã\83©ã\82¤ã\83¡ã\83³ã\83\88ç¶æ\8c\81のために二度積まれている */
tst lr,#FP_EXC_FRAME /* 例外フレームには浮動小数点コンテキストを含んでいるか */
- it eq /* å½\93該ã\83\93ã\83\83ã\83\88ã\81\8c0ã\81ªã\82\89å\90«ã\82\93ã\81§ã\81\84ã\81ªã\82\8b */
- vldmiaeq r0!,{s16-s31} /* 含んでいるならpreserved FPレジスタを復帰する */
+ it eq /* 当該ビットが0なら含んでいる */
+ vldmiaeq r0!,{s16-s31} /* 含んでいるならpreserved FPレジスタを復帰する */
#endif /* defined(__ARM_ARCH_7EM__) & !defined(__SOFTFP__)*/
msr psp, r0
mov r0, #0
--- /dev/null
+=====================================================================
+ CORTEX-M4対応プロセッサ依存部
+ Last Modified: 2012 Oct 21
+=====================================================================
+
+
+(1) 対応しているターゲットシステムの種類・構成
+
+TOPPERSプロジェクト公式ARM-M依存部1.7に、CORTEX-M4F対応コードを追加した。
+
+
+(2) 使用する開発環境と動作検証した条件(バージョン,オプション等)
+
+カーネルはGCCを用いてコンパイルする.動作確認したバージョンは各ターゲ
+ット依存部のドキュメントに記載する.
+
+GCCを使ってCORTEX-M4Fの浮動小数点レジスタを使うには、-mcpu=cortex-m4
+-mfpu=fpv4-sp-d16 -mfloat-abi=softfp を指定する。この場合、pre-defined Macro
+として__ARM_ARCH_7EM__が定義され、__SOFTFP__が未定義となる。追加コードはこの条件が
+満たされる場合のみコンパイルされる。
+
+コードは以下の部分に追加されている。すべて core_support.S の中である。
+
+dispatch:
+タスク切り替え処理において、現行タスクのFPUコンテキストを保存する必要がある場合には
+保存する。必要性はcontrolレジスタのbit2で行う。dispatch_rでの判断のため、control
+レジスタの値をスタックに保存する。
+
+dispatch_r:
+タスク切り替え処理において、新たにCPUを割り当てられたタスクのためにFPUコンテキストを
+復帰する必要がある場合には、復帰する。判断はスタック上に保存されているcontrolレジスタの
+値を使う。
+
+ret_int:
+割り込み出口処理において、浮動小数点コンテキストが例外フレームに含まれている場合に
+S16-S31を追加保存する。svc_handlerのために、lrレジスタ値を保存する。
+
+svc_handler:
+割り込み出口処理でCPU資源を奪われたタスクに復帰するさい、必要に応じてS16-S31を復帰する。
+
+start_r:
+新たなタスクを割り当てる際には、controlのビット2をクリアして、浮動小数点実行履歴を
+クリアしておく。
/**
* \brief システムログの低レベル出力のための文字出力
* \details
- * ターゲット依存の方法で,文字cを表示/出力/保存する.LPC17XXの実装では、
+ * ターゲット依存の方法で,文字cを表示/出力/保存する.LPC18XXの実装では、
* pdic/uartのポーリングによる出力ルーチンを呼ぶ。
*
* このルーチンを呼ぶ前に、初期化として #target_uart_init()を一度呼ばなければ
cmsis/LPC43xx.h
cmsis/core_cm4.h
cmsis/core_cmFunc.h
-cmsis/core_cm4Instr.h
+cmsis/core_cmInstr.h
cmsis/core_cm4_simd.h
cmsis/system_LPC43xx.h
MANIFEST
chip_timer.cfg
chip_timer.h
chip_user.txt
-lpc1800.h
+lpc4300.h
chip_rename.def
chip_rename.h
chip_unrename.h
/**
* \brief ターゲットを識別するためのマクロの定義
* \details
- * 各種のチップに対応可能なコードの中で、LPC18xxに依存する部分がある場合は
+ * 各種のチップに対応可能なコードの中で、LPC43xxに依存する部分がある場合は
* このマクロによる条件コンパイルにする。
*
* ターゲット依存部とはっきり区別するため、チップ依存部の識別名の前にTOPPERS_CHIP_を
/**
* \file chip_syssvc.h
- * \brief システムサービスのチップ依存部(NXP LPC18xx用)
+ * \brief システムサービスのチップ依存部(NXP LPC43xx用)
* \details
* システムサービスのターゲット依存部のインクルードファイル.このファ
* イルの内容は,コンポーネント記述ファイルに記述され,このファイルは
/**
* \brief UARTへの入力クロック
* \details
- * 内蔵UARTのクロック周波数を指定する。単位はHz。LPC18xxはそれぞれのUARTに対して
+ * 内蔵UARTのクロック周波数を指定する。単位はHz。LPC43xxはそれぞれのUARTに対して
* 独立した周波数を入力できるが、今回の実装ではtarget_serial.cはすべてのUARTに
* 同じクロックが入力されれると仮定している。
*
/**
* \brief システムログの低レベル出力のための文字出力
* \details
- * ターゲット依存の方法で,文字cを表示/出力/保存する.LPC17XXの実装では、
+ * ターゲット依存の方法で,文字cを表示/出力/保存する.LPC43XXの実装では、
* pdic/uartのポーリングによる出力ルーチンを呼ぶ。
*
* このルーチンを呼ぶ前に、初期化として #target_uart_init()を一度呼ばなければ
/**
* \file chip_timer.h
- * \brief タイマドライバ(NXP LPC18XX汎用)
+ * \brief タイマドライバ(NXP LPC43XX汎用)
*/
#ifndef TOPPERS_CHIP_TIMER_H
*/
/**
* \file lpc4300.h
- * \details NXP LPC1800シリーズのハードウェア宣言
+ * \details NXP LPC4300シリーズのハードウェア宣言
*/
#ifndef TOPPERS_CHIP_LPC4300_H
#define TOPPERS_CHIP_LPC4300_H
* CORTEX-M4のNVIC割り込みコントローラは任意個の割り込み源を持つ。このマクロは、
* 最大の割り込み番号の値を表す。
*/
-#define TMAX_INTNO (16 + 53) // LPC1830の最大割り込み番号は16+53
+#define TMAX_INTNO (16 + 53) // LPC4330の最大割り込み番号は16+53
/**
* \brief 割込み優先度のビット幅
* ビルドするには、次のコマンドを実行してコンフィギュレータをビルドする。
* \code
* $ cd asp/cfg
- * $ .configure
+ * $ ./configure
* $ make
* \endcode
*
(13) ライセンス上の注意
LDファイルはCodeSourcery社のLDファイルに手を加えているため、同社のライセンスにしたがう。
+また、cmsisサブディレクトリ内のファイルはARM/NXP社のものを使用している。
(14) バージョン履歴
* ビルドするには、次のコマンドを実行してコンフィギュレータをビルドする。
* \code
* $ cd asp/cfg
- * $ .configure
+ * $ ./configure
* $ make
* \endcode
*
=====================================================================
LPC1830 GENERICターゲット依存部 (asp-1.7対応)
- Last Modified: 2012/Oct/06
+ Last Modified: 2012/Oct/21
=====================================================================
(1) 対応しているターゲットシステムの種類・構成,バージョン番号
・デバッグ環境
GNU gdb (Sourcery G++ Lite 2010q1-188) 7.0.50.20100218-cvs
- Open On-Chip Debugger 0.4.0 (2010-08-12-22:40)
+ Open On-Chip Debugger 0.6.1
HJ/LINK USB
LPC1830 Xplorer
(13) ライセンス上の注意
LDファイルはCodeSourcery社のLDファイルに手を加えているため、同社のライセンスにしたがう。
+また、cmsisサブディレクトリ内のファイルはARM/NXP社のものを使用している。
(14) バージョン履歴
-2012/Oct/6
+2012/Oct/21
ver 1.7.1
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project.
-PROJECT_NAME = "LPC1830 Generic dependent part"
+PROJECT_NAME = "LPC4330 Generic dependent part"
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or
# directories like "/usr/src/myproject". Separate the files or directories
# with spaces.
-INPUT = . ../../arch/arm_m_gcc/lpc1800_gcc ../../arch/arm_m_gcc/lpc1800_gcc/cmsis ../../pdic/uart ../../arch/arm_m_gcc/common
+INPUT = . ../../arch/arm_m_gcc/lpc4300_gcc ../../arch/arm_m_gcc/lpc4300_gcc/cmsis ../../pdic/uart ../../arch/arm_m_gcc/common
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
* ビルドするには、次のコマンドを実行してコンフィギュレータをビルドする。
* \code
* $ cd asp/cfg
- * $ .configure
+ * $ ./configure
* $ make
* \endcode
*
/**
* \brief 内蔵クロックの発信周波数
* \details
- * 内蔵発振器のクロック周波数[Hz]。SYS_CLOCKが参照する。LPC1830の場合は12MHzである。
+ * 内蔵発振器のクロック周波数[Hz]。SYS_CLOCKが参照する。LPC4330の場合は12MHzである。
*/
-#define INTERNAL_CLOCK (12000000) // 内蔵発振器は4MHz
+#define INTERNAL_CLOCK (12000000) // 内蔵発振器は12MHz
#define PLL_MULTIPLYER 1
/**
* \brief コア・クロック周波数
* \details
- * CORTEX-M3コアに入力する動作クロックの周波数[Hz]。
+ * CORTEX-M4Fコアに入力する動作クロックの周波数[Hz]。
*/
-#define SYS_CLOCK (INTERNAL_CLOCK * PLL_MULTIPLYER) // コアに入力するクロック 100MHz
+#define SYS_CLOCK (INTERNAL_CLOCK * PLL_MULTIPLYER) // コアに入力するクロック
#ifndef TOPPERS_MACRO_ONLY
*/
chip_initialize();
- /* Flash Accelerator はLPC1830には存在しない */
+ /* Flash Accelerator はLPC4330には存在しない */
// LPC_SC->FLASHCFG = 0x403a;
/*
/**
* \file target_config.h
- * \brief カーネル実装のターゲット依存部モジュール(NXP LPC1830用)
+ * \brief カーネル実装のターゲット依存部モジュール(NXP LPC4330用)
* \details
* カーネルのターゲット依存部のインクルードファイル.kernel_impl.hのター
* ゲット依存部の位置付けとなす.
/**
* \file target_timer.h
- * \brief タイマドライバ(NXP LPC1830汎用)
+ * \brief タイマドライバ(NXP LPC4330汎用)
*/
#ifndef TOPPERS_TARGET_TIMER_H
=====================================================================
- LPC1830 GENERICターゲット依存部 (asp-1.7対応)
- Last Modified: 2012/Oct/06
+ LPC4330 GENERICターゲット依存部 (asp-1.7対応)
+ Last Modified: 2012/Oct/21
=====================================================================
(1) 対応しているターゲットシステムの種類・構成,バージョン番号
・ターゲットハードウェア(ボード等)の名称と対応している構成
- NXP製LPC1830を使用したボード一般。発振器は内蔵発振器を使う。
+ NXP製LPC4330を使用したボード一般。発振器は内蔵発振器を使う。
・ターゲット略称
- lpc1830_generic_gcc
+ lpc4330_generic_gcc
・ターゲット非依存部のバージョン番号
1.7
・デバッグ環境
GNU gdb (Sourcery G++ Lite 2010q1-188) 7.0.50.20100218-cvs
- Open On-Chip Debugger 0.4.0 (2010-08-12-22:40)
+ Open On-Chip Debugger 0.6.1
HJ/LINK USB
LPC1830 Xplorer
(10) ターゲットシステム固有の注意事項
(10) 類似のターゲットにポーティングする開発者向けの参考情報
- LPC1830を使った他のボードにポーティングする場合には、以下のオブジェクトを修正する
+ LPC4330を使った他のボードにポーティングする場合には、以下のオブジェクトを修正する
- lpc1830_generic.h (名前をターゲット識別名に変更する)
+ lpc4330_generic.h (名前をターゲット識別名に変更する)
SYS_CLOCK CPUコアへの入力周波数[Hz]
target_config.h
target_initialize() PLLやピンの初期化を行う。
target_stddef.h
- TOPPERS_LPC1830_GENERIC ターゲット識別マクロ。ターゲット識別名を大文字にし、頭に
+ TOPPERS_LPC4330_GENERIC ターゲット識別マクロ。ターゲット識別名を大文字にし、頭に
TOPPERS_をつける。
target_syssvc.h
SIO_BAUD_RATE_DEFAULT ボーレートを変更したい場合
TARGET_COPYRIGHT 著作権表示文字列
- LPC1800シリーズの他のプロセッサにポーティングするには、上の修正に加えてターゲットのLDファイルの
- MEMORY宣言を変更する。一般にLPC1800シリーズはメモリ構成以外のプログラミングモデルは同じである。
+ LPC4300シリーズの他のプロセッサにポーティングするには、上の修正に加えてターゲットのLDファイルの
+ MEMORY宣言を変更する。一般にLPC4300シリーズはメモリ構成以外のプログラミングモデルは同じである。
(12) ディレクトリ構成・ファイル構成
asp:
prc_user_annex.txt
start.S
chip:
- lpc1800_gcc:
+ lpc4300_gcc:
MANIFEST
Makefile.chip
chip.tf
chip_unrename.h
chip_user.txt
cmsis
- lpc1800.h
+ lpc4300.h
cmsis:
- LPC18xx.h
- core_cm3.h
- system_LPC18xx.h
+ LPC43xx.h
+ core_cm4.h
+ core_cm4_simd.h
+ core_cmFunc.h
+ core_cmInstr.h
+ system_LPC43xx.h
pdic:
uart:
asp.doxyfile
doxygen.css
html
- lpc1830_generic.h
- lpc1830_sram.ld
+ lpc4330_generic.h
+ lpc4330_sram.ld
target.tf
target_cfg1_out.h
target_check.tf
(13) ライセンス上の注意
LDファイルはCodeSourcery社のLDファイルに手を加えているため、同社のライセンスにしたがう。
+また、cmsisサブディレクトリ内のファイルはARM/NXP社のものを使用している。
(14) バージョン履歴
-2012/Oct/6
+2012/Oct/21
ver 1.7.1