私はTM4C123GH6PM7で動作するようにSysTick割り込みを取得しようとしています。これは皮質m4ベースのマイクロコントローラです。 Keilデバッガを使用すると、Systick割り込みがint NVICで保留中であることがわかりますが、ハンドラは実行されません。他の例外は有効になっておらず、私はPRIMASKレジスタをクリアしています。以下のコードは、割り込みを初期化する方法です。SysTick割り込みは保留中ですが、実行されません。デバッグ割り込みマスクの問題?
systck_init LDR R0,=NVIC_ST_CTRL_R
LDR R1,=NVIC_ST_RELOAD_R
LDR R2,=NVIC_ST_CURRENT_R
MOV R3,#0
STR R3,[R0]
STR R3,[R2]
MOV R3,#0x000020
STR R3,[R1]
MOV R3,#7
STR R3,[R0]
LDR R3,=NVIC_EN0_R
LDR R4,[R3]
ORR R4,#0x00008000
STR R4,[R3]
CPSIE I
MOV R3,#0x3
MSR CONTROL,R3
多くの検索の結果、すべての割り込みをマスクするデバッガであることがわかりました。これを制御するビットは、デバッグ停止ステータスおよび制御レジスタと呼ばれるレジスタ内にあります。私はそれをデバッガで見ることも、デバッグコマンドで読み書きすることもできません。
Keilが提供するStartup.sを使用しましたが、ベクトル/ラベルが正しいことが分かります。
はい、わかりました。なぜ組み立てるのが面倒なのか?
アイデアをいただければ幸いです。初めて:)
助けてくれてありがとう! systickがNVICを介して結合されていない場合は例外ですので、ハードウェア割り込みによってプリエンプトできませんか? すべてのコードを投稿していただきありがとうございますが、たくさんあります。しかし、私はPSPを別の場所にセットアップします。私はちょうどそれがハンドラにまっすぐにジャンプするために0x20を使用しました 今日私はkeilシミュレータを使用し、ハンドラは正しく実行されますが、私はまだインサーキットデバッガで動作するようにそれを得る。 – MHilton
'SCB'の' SHP'レジスタを使って、Systick(および他のシステム割り込み)の優先度を設定することができます。 –
私はコードをすばやく読んだだけで間違っているかもしれませんが(コードにコメントしてください!)、開始する前にカウンタをクリアしていないようです。私はカウンタの値が起動時に定義されていないと思う(しかし、エミュレータはそれをゼロにするかもしれない)。カウンタが0x21で、リロードを0x20に設定した場合、起動する前にラップアラウンドするまで待つ必要があります。それは、SysTickカウンタがたった24ビットである限り、それほど長くはないと言いました。 –