在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4198|回复: 8

[求助] mc8051 IP 中如何用px_i口和px_o口组成px_io双向口

[复制链接]
发表于 2012-11-9 11:56:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
eetop_提问.png
图中的p2_o和p2_i组成p2_io,输出丁点没问题,只是读时,读回的值好像是p2_o输出的值!?
单片机程序是:




  1.         OE = 1;
  2.         SD = reg;
  3.         AEN = 0;
  4.         CMD = 0;
  5.         IOR = 1;
  6.         IOW = 0;
  7.        
  8.         AEN = 1;
  9.         IOW = 1;
  10.         printf("read reg op you write: %02bx\r", SD);
  11.        
  12.         /* read data from reg */
  13.         AEN = 0;
  14.         CMD = 1;
  15.         IOR = 0;
  16.         IOW = 1;

  17.         OE = 0;
  18.         udata = SD;
  19.        
  20.         AEN = 1;
  21.         IOR = 1;

  22.         printf("read reg op you read: %02bx\r", udata);
  23. //        putchar(udata);               

  24.         return udata;
  25. }


复制代码



两次输出的都是一个值...

那位大神给瞅瞅啊!感激涕零啊
发表于 2012-11-9 16:14:16 | 显示全部楼层
这个是驱动能力问题。
那个TRI当OEN无效时,确定输出是z吗?也就是低驱动能力输出?
不知道你的这个部分是怎么实现的?是在PCB上用了个芯片?还是在FPGA或者Asic里实现的?
发表于 2012-11-9 20:47:47 | 显示全部楼层
mc8051 是标准 8051,功能很烂,看看就好,没有学习的必要..
 楼主| 发表于 2012-11-15 17:00:54 | 显示全部楼层
回复 2# majia123qwe

感谢您的关注!是在FPGA里实现的,直接用的tri;这种使法对么?
 楼主| 发表于 2012-11-15 17:01:47 | 显示全部楼层
回复 3# nono2000
感谢您的关注!只是问题就在这放着,不是不太好么?
发表于 2012-11-15 18:28:26 | 显示全部楼层
FPGA部分的代码怎么写的?
 楼主| 发表于 2012-11-15 19:55:52 | 显示全部楼层
回复 6# majia123qwe
您好!这部分就是用原理图搭的,生成的代码是:



  1. module mc8051_test(
  2.         clock,
  3.         reset,
  4.         int0_i,
  5.         int1_i,
  6.         t0_i,
  7.         t1_i,
  8.         OE,
  9.         rxd_i,
  10.         p0_i,
  11.         p1_i,
  12.         p3_i,
  13.         rxdwr_o,
  14.         rxd_o,
  15.         txd_o,
  16.         p0_o,
  17.         p1_o,
  18.         p2_io,
  19.         p3_o
  20. );


  21. input        clock;
  22. input        reset;
  23. input        int0_i;
  24. input        int1_i;
  25. input        t0_i;
  26. input        t1_i;
  27. input        OE;
  28. input        rxd_i;
  29. input        [7:0] p0_i;
  30. input        [7:0] p1_i;
  31. input        [7:0] p3_i;
  32. output        rxdwr_o;
  33. output        rxd_o;
  34. output        txd_o;
  35. output        [7:0] p0_o;
  36. output        [7:0] p1_o;
  37. inout        [7:0] p2_io;
  38. output        [7:0] p3_o;

  39. wire        SYNTHESIZED_WIRE_0;
  40. wire        SYNTHESIZED_WIRE_1;
  41. wire        [7:0] SYNTHESIZED_WIRE_2;





  42. mc8051_top        b2v_inst(
  43.         .clk(SYNTHESIZED_WIRE_0),
  44.         .reset(SYNTHESIZED_WIRE_1),
  45.         .all_rxd_i(rxd_i),
  46.         .all_t0_i(t0_i),
  47.         .all_t1_i(t1_i),
  48.         .int0_i(int0_i),
  49.         .int1_i(int1_i),
  50.         .p0_i(p0_i),
  51.         .p1_i(p1_i),
  52.         .p2_i(p2_io),
  53.         .p3_i(p3_i),
  54.         .all_rxd_o(rxd_o),
  55.         .all_rxdwr_o(rxdwr_o),
  56.         .all_txd_o(txd_o),
  57.         .p0_o(p0_o),
  58.         .p1_o(p1_o),
  59.         .p2_o(SYNTHESIZED_WIRE_2),
  60.         .p3_o(p3_o));

  61. assign        SYNTHESIZED_WIRE_1 =  ~reset;

  62. assign        p2_io[7] = OE ? SYNTHESIZED_WIRE_2[7] : 1'bz;
  63. assign        p2_io[6] = OE ? SYNTHESIZED_WIRE_2[6] : 1'bz;
  64. assign        p2_io[5] = OE ? SYNTHESIZED_WIRE_2[5] : 1'bz;
  65. assign        p2_io[4] = OE ? SYNTHESIZED_WIRE_2[4] : 1'bz;
  66. assign        p2_io[3] = OE ? SYNTHESIZED_WIRE_2[3] : 1'bz;
  67. assign        p2_io[2] = OE ? SYNTHESIZED_WIRE_2[2] : 1'bz;
  68. assign        p2_io[1] = OE ? SYNTHESIZED_WIRE_2[1] : 1'bz;
  69. assign        p2_io[0] = OE ? SYNTHESIZED_WIRE_2[0] : 1'bz;


  70. pll        b2v_inst4(
  71.         .inclk0(clock),
  72.         .c0(SYNTHESIZED_WIRE_0));


  73. endmodule


复制代码

或者,我应该怎样才能将只能输入(p2_i)和只能输出口(p2_o)组装成可输入、可输出口(p2_io)呢?
发表于 2012-11-16 10:43:11 | 显示全部楼层
从代码来看没有发现问题,你确认当作为输入的时候,OE信号为低电平吗?

假如你提供的代码是真实的,那么当OE=0的时候,P2_io应该就是从外部输入的信号。
                                                OE=1的时候,P2_io应该就是SYNTHESIZED_WIRE_2的信号。
需要注意,当OE=1的时候,外部不能有信号输入,否则可能会把cell打坏的。

会不会cell已经坏了?
发表于 2015-9-22 10:17:04 | 显示全部楼层
努力学习中~谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-22 17:43 , Processed in 0.040722 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表