通业开发人论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 438|回复: 1

『案例』MVB初始化失败

[复制链接]
发表于 2015-9-6 15:38:41 | 显示全部楼层 |阅读模式
  1. retWert = ClearMvb();
  2. retWert &= ConfigMvbDevice(0, 0);
  3. for (node = port_list.list.next; node != &port_list.list; node = node->next)
  4. {
  5.     port = rt_list_entry(node, PORT_LIST, list);
  6.     switch (port->length)
  7.     {
  8.         case 2:fcode = 0; break;
  9.         case 4:fcode = 1; break;
  10.         case 8:fcode = 2; break;
  11.         case 16:fcode = 3; break;
  12.         case 32:fcode = 4; break;
  13.         default:retWert = FALSE; break;
  14.     }
  15.     retWert &= ConfigMvbPort(port->port_address, port->id, port->type, fcode);
  16.     retWert &= ConfigMvbCheck(port->port_address, port->id, port->type, fcode);
  17.     min_cycle_time = min_cycle_time > port->cycle_time ? port->cycle_time : min_cycle_time;
  18. }
  19. StarMvb();
  20. return(retWert);
复制代码

MVB进行reset后,初始化校验始终无法通过,返回retWert值为fault。
考虑到MVB电源及RESET GPIO管脚配置已经完成并可以用示波器采集到信号,继续分析代码问题。
经逐步分析,第01行就已经没有通过。
进一步跟踪至驱动层

  1. u8        CheckUartStauts()
  2. {
  3.     u8        LSR;
  4.     LSR = Uart_RD(UART_LSR);  
  5.     if ((LSR&0x9e) == 0x90)  return(TRUE);
  6.     else  return(FALSE);  
  7. }
复制代码

第04行读取的寄存器数据与期望不符,检查UAET_LSR寄存器地址后发现不同的网卡的寄存器地址不同却未作修改
  1. #define                UART_RBR      (0x68000000 + (0x0201f8))
  2. #define                UART_THR      (0x68000000 + (0x0201f8))     //0x680201f8
  3. #define                UART_TEST     (0x68000000 + (0x0201fa))     //0x680201fa
  4. #define                UART_LSR      (0x68000000 + (0x0201fd))     //0x680201fd
复制代码

修改后MVB初始化通过







回复

使用道具 举报

发表于 2016-5-17 14:20:20 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|TongYe R&D Inc.

GMT+8, 2024-4-28 23:40 , Processed in 0.116007 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2000-2022, Tongye. 粤ICP备17061194号

快速回复 返回顶部 返回列表