(toppers-users 3260) Re: Microblaze依存部のコード不具合

Shinya Honda honda @ ertl.jp
2010年 10月 11日 (月) 16:45:34 JST


山下さん

名古屋大学の本田です.

ご報告ありがとうございます.

(2010/10/07 14:28), Yoshinori Yamashita wrote:
> 島津製作所 山下です。
> 
> 今更の返信で大変恐縮ですが、やっと評価用の試作ボードが動き始めたので
> 依頼されていたMicroblaze依存部 Ver.1.3.3の動作確認を行いました。
> 
> その報告と、新たな不具合の報告です。
> 
> 
> asp_arch_microblaze_gcc-1.3.3 にて、
> 
>> 修正点は次の通りです.
>>
>> ・TOPPERS_ISTKPT で,int型のポインタでスタック領域を確保していた問題を
>>   修正.char_t型のポインタへ修正.
> 
> この修正は間違いでは?
> 
> target_config.hにて
>    #define DEFAULT_ISTKSZ    (0x1000U/4U)  /* 4Kbyte */
> のように 1/4 されているので、char_tに変更すると _kernel_istkpt が
> +1Kbyteの位置を指すことにりますよね?
これは,target_config.h の修正忘れです.正しくは,

    #define DEFAULT_ISTKSZ    (0x1000U)  /* 4Kbyte */

です.


>> ・(toppers-users 3123)で指摘された,dispatcher_2:のアイドルループを抜
>>   ける際に,割込みを禁止していない問題を修正.
> 
> こちらは動作確認完了しました。
確認ありがとうございます.


>> 申し訳ないのですが,こちらでは現状コンパイル環境までしかないため,コンパ
>> イルが通ることは確認しましたが,動作確認をしておりません.修正内容の確認
>> と動作確認をしていただければ幸いです.
> 
> 
> 別件ですが、UART関連で不具合を見つけました。
> 
> (1) microblaze.h 内の microblaze_xuartl_init()
> 
>  送受信バッファクリアのための書き込み先が XUART_TX_OFFSET になって
>  いるので、このコードではバッファクリアされず、データ送信されてしま
>  います。
> 
>  書き込み先は XUART_CTRL_OFFSET と思います。
> 
> 
> (2) UART Lite  連続送信が止まる
> 
>  UART Liteの割り込みは、送信割り込みがEdge, 受信割り込みがLevelで
>  割り込みラインは共通なので、割り込みコントローラではEdgeで検出する
>  のが通常だと思います。
>  UART Liteの割り込みハンドラは、ポート数に応じて自動生成され、入り口
>  でi_begin_int(), 出口でi_end_int()が呼ばれ、無条件にi_end_int()内で
>  xintc_ack_int()にて割り込みがクリアされています。
> 
>   →Edgeタイプの割り込みを、ハンドラ出口でクリアしている。
> 
>  ボーレートを115200等高速にすると、sio_isr()内部でTX FIFOに入れた次の
>  送信データの割り込みがi_end_int()コール前に発生することがあり(※)、
>  i_end_int()でこの割り込みがクリアされてしまい、連続データの送信が止
>  まってしまうという現象が発生します。
>  (UART割り込みの優先度をTimer割り込みと同じにすれば現象は発生しない)
> 
>  ※sio_isr()処理中にタイマ割り込み等の優先度の高い割り込みが発生した
>   場合。
> 
>    i_begin_int() / i_end_int()がlevel割り込みにしか対応できていないので、
> 
>   i_begin_int() / i_end_int()を廃止&  configuratorを修正して、
>   sio_isr()入り口で xintc_ack_int()をコールする。
>   
>  あるいは
> 
>   割り込みのタイプ(edge/level)に従って、
>     ・edge割り込み  : i_begin_int() 内でクリア
>      ・level割り込み : i_end_int() 内でクリア
> 
>  のような修正が必要かと思います。
>  
>  ちなみに、私は後者の方法でコード修正して対応しています。
ご指摘通りに,CFG_INTの割込み属性を見て,edge割込みとlevel割込みで割込み
のクリアのタイミングを変更するようにしました.

コードは別途直接お送りします.問題がないようなら,TOPPERSから公開したい
と思います.

以上,よろしくお願いします.
-- 
本田 晋也(Shinya Honda)
名古屋大学 大学院情報科学研究科 附属組込みシステム研究センター 准教授
E-mail  honda @ ertl.jp
WWW     http://www.ertl.jp/~honda/
TEL/FAX 052-789-5888/5889