割り込みハンドラをどうするかは考えればよいとして、SoftDeviceがどの割り込みをどう使っているのかは把握しておきたい。
周辺機器などはよいとして、SWI0~SWI5というのがどう使われているかは、ソースまで見ないとわからない。
でも、資料があるなら見たいです。
それっぽい質問が上がっていた。
how the swi0~swi5 interrupts triggered by softdevice? - Nordic Developer Zone
一番最後の回答に「SoftDevice Specification 2.0を読むとよいよ」とあるので、読んでみた。
S110-SDS / nRF51822(ログインしなくても読めるのかはわからん)
p.37にSWIの用途が書かれていた。
ARMのSWI命令は途中でSVCになったが、このSWIはそれとは別で、内部要因で発生させることができる割込らしい。
よくわからんが、そういうことができるんだろう。
p.36には、それぞれの割込について、アプリにとって制限あり(Restricted)なのか、アプリまでやってこない(Blocked)なのか、自由に使ってよい(Open)なのかが書いてある。
SWI2はRestrictedなので、nRF51 SDKを呼び出すようにするのがよいだろう。
SWI0は、アプリが使ってよいことになっている。
SVCのベクタは14だったと思うが、それとは別に使えるのか?
親切なことに、さっきのQAの人が「nrf_svc.hを見るとよいよ」と書いてくれている。
見ると、SVCALLマクロがそれに当たるようだ。
んー、私のイメージでは、SVCALLマクロを使うとSVC割込(14)が発生して、そのハンドラの中でswitch-caseするのだったのだけど、その0~5についてはSoftDeviceがSWI0~5に変換し、それ以外は自分の中で処理してしまうということかな?
うーむ。
前に悩んでいたSVCの値だが、これはp.38に範囲が書いてあった。
それ以外にも、いろいろ情報が書いてあるので、OSを移植するつもりなら読まないといかんのだろうな。。。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。