[Armadillo:08641] Re: シリアル受信読出が途中で止まる

Yasuhisa Nakamura email@hidden
2013年 2月 27日 (水) 00:56:38 JST


風間さん、
中村です。

[Armadillo:08638]
> ハッキリしたら報告しますが、なんとなく手がかりが
> つかめた感じです。

[Armadillo:08631]で書いた"謎"は解決しました。
Ageing Character Detect という機能を使って、
一定時間経過してもRxFIFOに規定のバイト数が
たまらないときにも割り込みを発生させてました。
割り込み許可フラグは、UCR2のATENです。

で、何らかの原因でAGTIM(AgeingTimer)の割り込みが
発生しなくなると、データがRxFIFOにと残されるます。

AGTIMの割り込み許可フラグ(ATEN)が落ちるか、
割り込み処理の手順の問題か何かが理由で、この割り込みが
発生しない条件になってしまうか、のどちらかのようです。

自分のところで再現できるといいのすが、無理そうなので、
風間さん、次の試験をしていただくことは可能でしょうか?

ソースはオリジナルの状態で、mxcuart_int()の出口との
ところに、条件によるprintkを追加して、データが上がって
こなくなったときにその表示がされるかどうか、です。

static irqreturn_t mxcuart_int(int irq, void *dev_id)
{
    ....
    ....

    if (umxc->port.line == 2) {
        cr = readl(umxc->port.membase + MXC_UARTUCR2);
        if (cr & MXC_UARTUCR2_ATEN == 0) {
            printk("** ATEN == 0 **\n");
        }
    }

    handled = 1;
    return IRQ_RETVAL(handled);
}

umxc->port.line == 2 のところは、使っているポートの
番号に変更してください。

お手数をおかけしますが、よろしくお願いします。

-- 
なかむら




armadillo メーリングリストの案内