System Control Block (SCB) support(scb.h)
システム制御ブロック(SCB)サポート
概要
システム制御ブロック(SCB)サポートをします。
データ型
■ scb_reg_map
システム制御ブロック・レジスター・マップ型
__IO uint32 CPUID CPU ID ベースレジスタ(SCB_CPUID)
__IO uint32 ICSR 割り込み制御ステータス・レジスタ(SCB_ICSR)
__IO uint32 VTOR ベクターテーブル オフセット・レジスタ(SCB_VTOR)
__IO uint32 AIRCR アプリケーション割り込み/リセット制御レジスタ(SCB_AIRCR)
__IO uint32 SCR システムコントロール・レジスタ(SCB_SCR)
__IO uint32 CCR 構成・制御レジスタ(SCB_CCR)
__IO uint8 SHP[12] システムハンドラ優先度レジスタ (4-7, 8-11, 12-15)(SCB_SHPRx)
__IO uint32 SHCSR システムハンドラ制御・ステータス・レジスタ(SCB_SHCSR)
__IO uint32 CFSR 設定可能フォルトステータ・スレジスタ(SCB_CFSR)
__IO uint32 HFSR ハードフォルトステータ・スレジスタ(SCB_HFSR)
__IO uint32 DFSR デバッグフラフステータス・レジスタ
__IO uint32 MMFAR メモリ管理アドレス・レジスタ(SCB_MMFAR)
__IO uint32 BFAR バスフォルトアドレス・レジスタ(SCB_BFAR)
(注意)DFSRはST社のPM0056にて文書化されていませんが(リビジョン4の時点で)、
同ドキュメントのSCBレジスタマップの記載にはそれが属する場所に4バイトの穴があります。
これはARM v7-M ARMでは「常に実装されている」と指定されているので、
その欠如はST社ドキュメントのバグであると思われるが、正式なアナウンスはありません。
デバイス
なし
API関数
なし
レジスタマップベースポインタ
SCB_BASE ((struct scb_reg_map*)0xE000ED00) システム制御ブロックレジスタマップベース
レジスタのビット定義
CPU ID ベースレジスタ(SCB_CPUID)
ビットのマスクの定義
SCB_CPUID_IMPLEMENTER (0xFF << 24) implementer [31:24] :実装者コード
SCB_CPUID_VARIANT (0xF << 20) Variant [23:20]: バリアント番号
SCB_CPUID_CONSTANT (0xF << 16) 定数[19:16]: 0xF
SCB_CPUID_PARTNO (0xFFF << 4) PartNo[15:4]: プロセッサの部品番号(0xC23: = Cortex-M3)
SCB_CPUID_REVISION 0xF Revision[3:0]: 改訂番号
割り込み制御ステータス・レジスタ(SCB_ICSR)
ビットのマスクの定義
SCB_ICSR_NMIPENDSET (1U << 31) NMIPENDSET:NMI保留・設定ビット
SCB_ICSR_PENDSVSET (1U << 28) PENDSVSET: PendSV保留・設定ビット
SCB_ICSR_PENDSVCLR (1U << 27) PENDSVCLR: PendSV保有・クリアビット
SCB_ICSR_PENDSTSET (1U << 26) PENDSTSET: SysTick例外保留・設定ビット
SCB_ICSR_PENDSTCLR (1U << 25) PENDSTCLR: SysTick例外保留 ・クリアビット
SCB_ICSR_ISRPENDING (1U << 22) ISRPENDING: NMIとフォルトを除く割り込み保留フラグ
SCB_ICSR_VECTPENDING (0x3FF << 12) VECTPENDING[9:0]: 保留ベクタ
SCB_ICSR_RETOBASE (1U << 11) RETOBASE: Return to base level
SCB_ICSR_VECTACTIVE 0xFF VECTACTIVE[8:0] Active vector
ベクターテーブル オフセット・レジスタ(SCB_VTOR)
SCB_VTOR_TBLOFF (0x1FFFFF << 9) TBLOFF[29:9]: Vector table base offset field.
アプリケーション割り込み/リセット制御レジスタ(SCB_AIRCR)
SCB_AIRCR_VECTKEYSTAT (0x5FA << 16) VECTKEYSTAT[31:16] Register key
SCB_AIRCR_VECTKEY (0x5FA << 16) VECTKEY[31:16] Register key
SCB_AIRCR_ENDIANNESS (1U << 15) ENDIANESS: データエンディアンビット
SCB_AIRCR_PRIGROUP (0x7 << 8) PRIGROUP[10:8]: Interrupt priority grouping field
SCB_AIRCR_SYSRESETREQ (1U << 2) SYSRESETREQ: System reset request
SCB_AIRCR_VECTCLRACTIVE (1U << 1) VECTCLRACTIVE(デバッグ用のリザーブ)
SCB_AIRCR_VECTRESET (1U << 0) VECTRESET(デバッグ用のリザーブ)
システムコントロール・レジスタ(SCB_SCR)
SCB_SCR_SEVONPEND (1U << 4) SEVEONPEND Send Event on Pending bit
SCB_SCR_SLEEPDEEP (1U << 2) SLEEPDEEP
SCB_SCR_SLEEPONEXIT (1U << 1) SLEEPONEXIT
構成・制御レジスタ(SCB_CCR)
SCB_CCR_STKALIGN (1U << 9) STKALIGN
SCB_CCR_BFHFNMIGN (1U << 8) BFHFNMIGN
SCB_CCR_DIV_0_TRP (1U << 4) DIV_0_TRP
SCB_CCR_UNALIGN_TRP (1U << 3) UNALIGN_ TRP
SCB_CCR_USERSETMPEND (1U << 1) USERSETMPEND
SCB_CCR_NONBASETHRDENA (1U << 0) NONBASETHRDENA
システムハンドラ優先度レジスタ (4-7, 8-11, 12-15)(SCB_SHPRx)
SCB_SHPR1_PRI6 (0xFF << 16) PRI_6(Usage fault)
SCB_SHPR1_PRI5 (0xFF << 8) PRI_5(Bus fault)
SCB_SHPR1_PRI4 0xFF PRI_4(Memory management fault)
SCB_SHPR2_PRI11 (0xFF << 24) PRI_11(SVCall)
SCB_SHPR3_PRI15 (0xFF << 24) PRI_15(SysTick)
SCB_SHPR3_PRI14 (0xFF << 16) PRI_14(PendSV)
システムハンドラ制御・ステータス・レジスタ(SCB_SHCSR)
SCB_SHCSR_USGFAULTENA (1U << 18)
SCB_SHCSR_BUSFAULTENA (1U << 17)
SCB_SHCSR_MEMFAULTENA (1U << 16)
SCB_SHCSR_SVCALLPENDED (1U << 15)
SCB_SHCSR_BUSFAULTPENDED (1U << 14)
SCB_SHCSR_MEMFAULTPENDED (1U << 13)
SCB_SHCSR_USGFAULTPENDED (1U << 12)
SCB_SHCSR_SYSTICKACT (1U << 11)
SCB_SHCSR_PENDSVACT (1U << 10)
SCB_SHCSR_MONITORACT (1U << 8)
SCB_SHCSR_SVCALLACT (1U << 7)
SCB_SHCSR_USGFAULTACT (1U << 3)
SCB_SHCSR_BUSFAULTACT (1U << 1)
SCB_SHCSR_MEMFAULTACT (1U << 0)
設定可能フォルトステータ・スレジスタ(SCB_CFSR)
SCB_CFSR_DIVBYZERO (1U << 25)
SCB_CFSR_UNALIGNED (1U << 24)
SCB_CFSR_NOCP (1U << 19)
SCB_CFSR_INVPC (1U << 18)
SCB_CFSR_INVSTATE (1U << 17)
SCB_CFSR_UNDEFINSTR (1U << 16)
SCB_CFSR_BFARVALID (1U << 15)
SCB_CFSR_STKERR (1U << 12)
SCB_CFSR_UNSTKERR (1U << 11)
SCB_CFSR_IMPRECISERR (1U << 10)
SCB_CFSR_PRECISERR (1U << 9)
SCB_CFSR_IBUSERR (1U << 8)
SCB_CFSR_MMARVALID (1U << 7)
SCB_CFSR_MSTKERR (1U << 4)
SCB_CFSR_MUNSTKERR (1U << 3)
SCB_CFSR_DACCVIOL (1U << 1)
SCB_CFSR_IACCVIOL (1U << 0)
ハードフォルトステータ・スレジスタ(SCB_HFSR)
SCB_HFSR_DEBUG_VT (1U << 31)
SCB_CFSR_FORCED (1U << 30)
SCB_CFSR_VECTTBL (1U << 1)
デバッグフラフステータス・レジスタ
SCB_DFSR_EXTERNAL (1U << 4)
SCB_DFSR_VCATCH (1U << 3)
SCB_DFSR_DWTTRAP (1U << 2)
SCB_DFSR_BKPT (1U << 1)
SCB_DFSR_HALTED (1U << 0)
このドキュメントはleafLabs, LLC.が執筆し、たま吉が翻訳・一部加筆修正したものです。
NAVER、ヤフオク等の営利目的の記事転用、リンク貼りは禁止です。