skyeye中的44b0x uart驱动错误
最近一直在搞用skyeye模拟44b0x跑uclinux,发现一些问题,在arm板上跑的好好的,可到skyeye上就有些问题。其中uart有个问题,就是输入的字符不会回显,要uclinux主动打印信息时,才会打点出来。查看skyeye的44b0x驱动发现,有些问题。1、当从uart收到字符时,只更新了UFSTAT中的Rx FIFO Count而没有更新UTRSTAT中的Receive buffer data ready位。
2、关于Tx中断就更奇怪了,Tx中断有下面两种情况:
1)、0 = Pulse (Interrupt is requested the instant Tx buffer becomes empty)
2)、1 = Level (Interrupt is requested while Tx buffer is empty)
说白了,都是针对Tx FIFO 为空的情况下发interrupt的,可skyeye里。
while ((count = ((*pUfstat & 0xf0) >> 4)) > 0 && (*pUcon & 0xc) != 0x0) { /* handling TX FIFO */
if (pUfifo->txcnt > 0) {
pUfifo->txcnt -= 1;
break;
}
if (*pUfstat & 0x200) count++;
tmp_count = skyeye_uart_write(read_uart0 ? 0 : 1, &pUfifo->tx, count, NULL);
if (tmp_count <= 0) break;
count -= tmp_count;
*pUfstat &= ~0x2f0;
if (count > 0) {
*pUfstat |= (count << 4);
memmove(&pUfifo->tx, &pUfifo->tx, (size_t)count);
} else {
pUfifo->txcnt = 64;
}
/* Transmit Mode: Interrupt request or polling mode */
if ((*pUcon & 0xc) == 0x4) {
s3c44b0x_set_interrupt(read_uart0 ? INT_UTXD0 : INT_UTXD1);
}
}
其中first就用Tx FIFO中的数据个数做条件,那FIFO个数为0时,根本就不会进去,也就更不会发empty中断了啊!也更没有分上面的两种情况分别发中断。
希望skyeye越来越完整,稳定。
[ 本帖最后由 yymusic 于 2008-1-23 13:41 编辑 ] You are right. Most of simulation probably only support interrupt mode of uart.
回复 #1 yymusic 的帖子
I will check it once I'm free, thanks. 呵呵,tks!
页:
[1]