(toppers-users 4474) GR-SAKURA「TOPPERS/ECNL」 S12AD→DMAC でUnre

柴田正 tshibata.snw @ gmail.com
2016年 1月 4日 (月) 22:54:38 JST


 はじめまして。柴田と申します。

以下の環境で、S12ADの結果をDMACで取得するプログラムを実装しています。
1) マイコン: GR-SAKURA(RX63N:http://sakuraboard.net/gr-sakura.html)
2) IDE: CubeSuite+ 1.02.01
3) JTAG: E1
4) ビルドツール: CC-RX v1.02.01

割込みハンドラで再度割込みを要求(※)すると、以下のメッセージが
syslogに出力され、DMACの割込みが発生しないようになります。
”Unregistered Interrupt occurs.”

※このエラーが発生する直接の原因は、time_event.cのsignal_time関数の
    下記コードで呼出され先でBRKコマンドが実行され、
    おそらく、無条件トラップ割込みで
    __kernel_default_int_handler_entryが呼ばれ、
    syslogに出力しています。


S12AD→DMACのコードは、Renesasのサンプルコード(※)を、
Toppersに移植したもので、私が影響あると考える部分だけを
下記に抜粋しました。
お手数とは思いますが、どなたか、対策/不具合調査方法を教えてください。
よろしくお願いします。

#現在は、1CHですが、将来的には、AD、DMAC共に、2チャンネルにする予定です。
#当たり前かも知れませんが、dmaca_dmac1_handler2関数内のコードを
   コメントアウトすると、それ以降、割込みが発生しないため、
   エラーが発生しません。

---- cfgファイル ----
ATT_INI({ TA_HLNG, 0, init_task });
CFG_INT(199, {0, -1});
DEF_INH(199, {TA_HLNG, dmaca_dmac1_handler2});

---- ソース ----
void init_task(VP_INT exinf) {
    dis_int(199);
    Init_Adc();
    ena_int(199);
}

void Init_Adc(void) {
     mtu_init();
     s12ad_init();
     dmac_init();
}

void dmaca_dmac1_handler2(void) {
    DMAC1.DMCNT.BIT.DTE = 1;
}

※http://japan.renesas.com/support/downloads/download_results/C1000000-C9999999/mpumcu/rx/an_r01an1265jj_rx63n_numerical_lib.jsp

以上です。よろしくお願いします。