[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 メーリングリストの案内