(toppers-users 305) Re: ARM 対応

Tsuneo TOMITA tomita.tsuneo @ sharp.co.jp
2001年 10月 26日 (金) 19:19:46 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ビット             ?  
>
>の違いから発生するわけですね.
正確に言うと以下のようになっています。
                      ARMパッチ            富田さんの実装
割込み              多重割込み許可          多重割込み不可
割込み状態の判定    interrupt_cout          interrupt_cout
ロック状態の判定    cpsrのIRQビット         cpsrのIRQビット  

一応、interrupt_countは実装しています。^^

>> 今は、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の場合、IRQモードでもFIQ割込みは受け付けるので、この機構を使って
多重割込み的な対応が可能になっています。
#私は、実際そういう風に使っています。
ですから、IRQとFIQビットを組合わせた使い方というのは好ましくないような
気がします。

割込みのネスティングを許さない実装する場合、どのような対応をするのが
いいのでしょうか?

>
>ARMは,コア自体に割込みマスクの設定は持っておらず,チップ毎に違いますが,
>現在私の手元にはSAMSUNGのチップしかありませんので,ARMパッチ自体がこの
>チップに依存した形になっており,依存部がうまく切り放せていません.
>
>本来なら,他のターゲットとは異なり
>
>CPUコア  / チップ  / ターゲットボード
>
>と三階層に分ける方が適切だと考えています.
はい、そう思います。

>
>上で書きましたように,近日中にJSP-1.2版に併せてARM依存部を書き換える予
>定ですので,要望等がありましたら,お知らせ下さい.
IRQハンドラ(FIQハンドラ)は、cpu_support.Sよりはsys_support.Sの
方で定義する方が好ましいです。
例外ハンドラもネスティングが許されているようですが、必要でしょうか?
移植の際に、いくつか気になったことが有ったのですが、今すぐ
出てきません。また、整理がついたらメールします。

よろしくお願いします。
-------------------------------------------------------------
冨田常雄
シャープ株式会社 IC開発本部 設計技術開発センタ 第1開発室
奈良県天理市櫟本町2613-1, TEL:0743-65-3746, FAX:0743-65-3814
E-MAIL:tomita.tsuneo @ sharp.co.jp(メールアドレス変わりました)
-------------------------------------------------------------