cortexm

Cortex-M

ARMのCortexファミリの一種
ハーバードアーキテクチャ

デバッグに記載,Cortex-M4での場合の話が主

プログラムステータスレジスタ.
これは3つのレジスタから構成されている.

  1. アプリケーションプログラムステータスレジスタ(APSR)- 演算結果のフラグ
  2. 割り込みプログラムステータスレジスタ(IPSR) - 割り込み番号
  3. 実行プログラムステータスレジスタ(EPSR) - 実行状態bit

これらのレジスタはまとめてxPSRとしてアクセスも可能.

割り込みプログラムステータスレジスタ
現在の割り込みハンドラの番号が入る.何も割り込みが発生していなければここは0になる.

ARMv6-M Thumb命令セットが実装,
命令セットアーキテクチャ(ISA)はThumb,Thumb-2サブセット(それぞれがいくつか入ってる感じ?)

Cortex-M0 テクニカルリファレンス マニュアル
ARMv6-Mと戯れる 第1号 ~ARMv6-Mと戯れる準備をしよう~
ArmプロセッサはArm命令セットThumb命令セットが使えるらしい
だけどCortex-M3以降はThumb命令セット専用になった模様,正直Cortex-Mプロセッサしか使ってないので,実質Thumb命令のみ感

ARMv7-Mアーキテクチャ
Thumb2命令セットに統一(Arm7はArm命令(32bit長),Thumb命令(16bit長)混在だった)
統合ネスト型ベクタ割り込みコントローラ(NVIC)
リアルタイムOSMOTIC,スケジュールタスクのための統合システムタイマ

ARMv8-Mアーキテクチャを搭載
BaselineとMainlineの2つのサブプロファイルが存在.
Baseline → ARMv6-M, Mainline → ARMv7-Mという対応に近い.
TrustZoneというIoT向けのセキュリティ機能が追加で組み込まれているのが大きなポイント.
ARMv7-Mはスレッド(非特権)モードとハンドラ(特権)モードという2つの動作モードがあるが,ここに非セキュアステートとセキュアステートが追加され,計4つの動作モードを遷移して動作する.
Amazon FeeRTOSはARMv8-Mの事前設定がされたバージョンがすでにリリースされている.
AWS が、Armv8-M 対応 FreeRTOS 向けに事前設定された例をさらにリリース

corecm4.hやcorecm7.hファイルの中に

__STATIC_INLINE uint32_t SCB_GetFPUType(void)

という関数があり、これでFPUの有無、単精度か倍精度かを返してくれる。

割り込みは主優先度と副優先度がある。 STM32の場合、主優先度の中のグループが優先される

  • 割り込みA 主優先度0、副優先度2
  • 割り込みB 主優先度0、副優先度6
  • 割り込みC 主優先度1、副優先度5
  • 割り込みD 主優先度1、副優先度1
  • 割り込みE 主優先度2、副優先度4
  • 割り込みF 主優先度2、副優先度9

という場合

←優先度高 
A>B>D>C>E>F

参考文献

  • cortexm.txt
  • 最終更新: 2025/01/20
  • by yuqlid