(toppers-users 304) Re: ARM 対応

Shinya Honda honda @ ertl.ics.tut.ac.jp
2001年 10月 26日 (金) 18:25:10 JST


豊橋技術科学大学の本田です.

ARMの1.2対応が遅れており申し訳ございません.
SH版がもう少しで終わりますのでその後に始める予定です.

- "Tsuneo TOMITA" <tomita.tsuneo @ sharp.co.jp>-san writes ---
> 冨田@シャープと申します。
> 
> toppersのARM対応について質問が有ります。
> 
> 現在、toppersのARMパッチをベースに弊社のARM MPUへの移植を
> しております。toppersのARMパッチは割込みのネスティングを
> 許可した実装になっておりますが、割込みコントローラの仕様が
> 違う為、ネスティングを許可しない実装をしております。
> 
> で、sample1.cを動作させると、シリアル入力ハンドラの中で
> isig_semシステムコールを呼んでおり、この中のCHECK_INTCTX_UNL
> マクロでi_sense_locによりCPUロック状態を判別しております。
> このCPUロック状態の判別がARMのcpsrのIRQビットを用いて
> 行われており、割込み状態ではIRQビットが立ったままなので
> E_CTXになってしまいます。
> 

上の文章からARMパッチのi_sense_loc()がそのまま使えない理由としては,


                      ARMパッチ            富田さんの実装
割込み              多重割込み許可          多重割込み不可
割込み状態の判定    interrupt_cout          cpsrのIRQビット
ロック状態の判定    cpsrのIRQビット             ?  

の違いから発生するわけですね.

> 今は、i_sense_locをFALSEリターンするようにしていますが、
> toppersのARMパッチとは処理が違ってしまうので、
> どうしたものか悩んでいます。
> 
> よろしくお願いします。

富田さんのターゲットでは,cpsrのIRQビットを立てる以外に,割込みコント
ローラを操作して全ての割込みを不許可にする方法はないのでしょうか.
(ネスティングが不可能な時点で無いような気はしますが.....)

もしそのような機能があるなら,割込みハンドラ内では,cpsrのIRQビットを'
0'にして,interrupt_count で割込みの判定を行い,ロック状態でcpsrのIRQ
ビットを'1'とすることで,ARMパッチと同じになります.

もし割込みコントローラで全割込みが不可能な場合,考えられる方法として,
CPUロック中は,cprsのFIQビットも"1"とし(cpu_insn.h でCPSR_FIQ_BITとも
or),sense_lock()でIRQ,FIQの両方が立っている場合をCPUロック状態とする
(sense_lock()でCPSR_FIQ_BITともor)方法があります.そして,FIQ 割込み
はカーネルの管轄外で扱わないとすればいいのではないでしょうか.FIQがカー
ネル管轄外でそれをCPUロック状態ではブロックするのもへんな仕様ですが.
(FIQをカーネルで使いたいという要求は一般的にあるのでしょうか...)


ARMは,コア自体に割込みマスクの設定は持っておらず,チップ毎に違いますが,
現在私の手元にはSAMSUNGのチップしかありませんので,ARMパッチ自体がこの
チップに依存した形になっており,依存部がうまく切り放せていません.

本来なら,他のターゲットとは異なり

CPUコア  / チップ  / ターゲットボード

と三階層に分ける方が適切だと考えています.


上で書きましたように,近日中にJSP-1.2版に併せてARM依存部を書き換える予
定ですので,要望等がありましたら,お知らせ下さい.


以上,よろしくお願いします.
-------------------------------------------
豊橋技術科学大学 情報工学専攻 2年 高田研究室   
E-mail  honda @ ertl.ics.tut.ac.jp               
WWW     http://www.ertl.ics.tut.ac.jp/~honda
本田 晋也