|
- retWert = ClearMvb();
- retWert &= ConfigMvbDevice(0, 0);
- for (node = port_list.list.next; node != &port_list.list; node = node->next)
- {
- port = rt_list_entry(node, PORT_LIST, list);
- switch (port->length)
- {
- case 2:fcode = 0; break;
- case 4:fcode = 1; break;
- case 8:fcode = 2; break;
- case 16:fcode = 3; break;
- case 32:fcode = 4; break;
- default:retWert = FALSE; break;
- }
- retWert &= ConfigMvbPort(port->port_address, port->id, port->type, fcode);
- retWert &= ConfigMvbCheck(port->port_address, port->id, port->type, fcode);
- min_cycle_time = min_cycle_time > port->cycle_time ? port->cycle_time : min_cycle_time;
- }
- StarMvb();
- return(retWert);
复制代码
MVB进行reset后,初始化校验始终无法通过,返回retWert值为fault。
考虑到MVB电源及RESET GPIO管脚配置已经完成并可以用示波器采集到信号,继续分析代码问题。
经逐步分析,第01行就已经没有通过。
进一步跟踪至驱动层
- u8 CheckUartStauts()
- {
- u8 LSR;
- LSR = Uart_RD(UART_LSR);
- if ((LSR&0x9e) == 0x90) return(TRUE);
- else return(FALSE);
- }
复制代码
第04行读取的寄存器数据与期望不符,检查UAET_LSR寄存器地址后发现不同的网卡的寄存器地址不同却未作修改
- #define UART_RBR (0x68000000 + (0x0201f8))
- #define UART_THR (0x68000000 + (0x0201f8)) //0x680201f8
- #define UART_TEST (0x68000000 + (0x0201fa)) //0x680201fa
- #define UART_LSR (0x68000000 + (0x0201fd)) //0x680201fd
复制代码
修改后MVB初始化通过
|
|