登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

44b0+cpld  请高人指点

作者:xurenyi 栏目:ARM技术
44b0+cpld  请高人指点
我现在在44B0的板子上面加了一片CPLD(AETC7128),想在7128里面通过地址译码产生外设的片选,也就是想扩展几个IO口,引了几根地址线,还有GCS2,NWE和NOE,想问能不能实现产生片选,现在在写7128的程序,不知道这条路行得通吗?肯请高人指点一下思路,假设IO32是外设的地址片选,低电平有效,请问这样写可以吗?
  IO32<=NWE OR GCS2 OR ADDR14 OR ADDR12 OR ADDR11 OR ADDR3 OR ADDR2 OR ADDR2 OR ADDR1 OR NOT ADDR0
    这样可以产生地址为0x4000001的扩展IO口吗?
恳请大家给我一点思路或有那位大哥以前就这样做过,那就给小弟一点启发吧!!!!

2楼: >>参与讨论
xurenyi
在线等!!
请大家帮忙!!!

3楼: >>参与讨论
xurenyi
还有一个问题,想请教大家!!
我因为有很多外设是5V的,还加了4245作双向电平转换,不知道为什么当数据线经过4245时,如果4245的方向设置为双向时,那在跑程序时就会跑飞,如果只设置为输出时,就没有什么问题,真的搞不清什么原因,恳切请大家指点!!!

4楼: >>参与讨论
xurenyi
自己顶一下
 
5楼: >>参与讨论
hebeijiang
如果仅仅是扩展io,不如将数据总线接入cpld将cpld直接做成io接口
这样可以直接驱动5v器件,不用4245进行电平转换。

6楼: >>参与讨论
pandafeng

我用的是XILINX的芯片(XC95108)。
因为它的I/O口电压可以用3.3V,应此就免了电平转换。
对于外设的地址片选,当然不会有问题。但我只会用ABLE,不好对
你列出的表达式说对错。
我还用了44b0的nWait引脚,作慢速的i/o读写的同步。


7楼: >>参与讨论
xurenyi
谢谢楼上兄弟的指点!!!
我其实就是想用CPLD扩展几个IO口,来控制几个慢速外设,在CPLD里面要出来这么几个信号:
  1.外部锁存器的片选;
  2.外部锁存器的锁存信号,上升沿锁存;
  3.外部清零信号;
现在在写数据时,可以用示波器看到数据线上有信号,但就是没锁存. 不知道我上面写的
  io32<=NWE OR GCS2 OR ADDR14 OR ADDR12 OR ADDR11 OR ADDR4 OR ADDR3 OR ADDR2 OR ADDR1 OR NOT ADDR0
  是否和楼上那位兄弟所说的还要加上等待 nwait 信号了?才能同步.

8楼: >>参与讨论
xurenyi
请教pandafeng
我想你肯定做过和我相同的事情,不知是否可以再说详细一点,谢谢!!!

9楼: >>参与讨论
whbwang
我的44B0+EPM3128
用于信号隔离,包括数据输入缓冲、输出锁存等。
接口是A0-A3,D0-D7,WE,OE,NGCS2
现在已经可以正常工作

10楼: >>参与讨论
pandafeng
建议
如果io32(锁存信号)写成ABEL 形式是:
io32 = NEW # GCS2 # ADDR14 ... # !ADDR0;
应该没问题。

看看44B的rPCONB有没有设nGCS2
把44B的系统时钟降到最低,去掉芯片速度问题。
写个死循环,用示波器单独观察 NWE OR GCS2 是否正常。

11楼: >>参与讨论
xurenyi
谢谢 pandafeng
非常感谢你的指点,不知能否将你的44B0任何一个用扩展IO口来读写外设的一个工程文件给我参考一下,非常感谢!!!
    xurenyi0@yahoo.com.cn

12楼: >>参与讨论
xurenyi
谢谢 whbwang
不知你能否详细谈一下你用 A0-A3,D0-D7,WE,OE,NGCS2 这些信号怎样得到输出锁存信号的,假若锁存信号为IO32,那么它的表达式您是怎么写的,给我参考一下,好吗?不管是用什么语言写的,非常感谢!!!

13楼: >>参与讨论
littleou
你用的vhdl还是verilog?
奇怪的写法,给你个参考
always @(posedge iowbuf or posedge reset)//wrirte operation
     begin
    if(reset)
      begin
         dout[31:0]<=32'h0000;
      end
    else
      if(CS)
        begin
           case (AddrBus[2:0])
         3'B100 :    dout[7:0]   <= DataBus;
         3'B101 :    dout[15:8]  <= DataBus;    
         3'B110 :    dout[23:16] <= DataBus;    
         3'b111 :    dout[31:24] <= DataBus;
         default :      dout <= dout;
           endcase
      end
     end // always @ (posedge iowbuf or posedge rest)

* - 本贴最后修改时间:2005-1-18 21:27:16 修改者:littleou

14楼: >>参与讨论
pandafeng
例子
锁存器例子:(440写入地址0x0AXXXXX1)
ABEL语法
/////////////////////////////
MODULE DECODE
Title 'DECODE'

Declarations

GPIOW PIN;
GCS5 PIN;
DB7..DB0 PIN; // 连接44B数据总线
DB = [DB7..DB0];
ADDR3..ADDR0 PIN;//44B地址

CS0 NODE ISTYPE 'COM';//地址译码节点

LATCH_Q7..LATCH_Q0 PIN ISTYPE 'REG';//触发器
LATCH = [LATCH_Q7..LATCH_Q0];

Equations

CS0 =!GCS5 & !ADDR3 & !ADDR2 & !ADDR1 & ADDR0;

LATCH.CLK = 0;
LATCH:=0;
LATCH.AP = !GPIOW & CS0 &  DB;
LATCH.AR = !GPIOW & CS0 & !DB;

end DECODE
////////////////////////////////
44b 使用nGCS5
///////////////////////////////
#define pIOBASE    (volatile unsigned CHAR*)0x0a000000
//init nGCS5
rPCONB |= (1<<10); // PB10=nGCS5;
rBWSCON &= ~(3<<20); // bus width = 8;
//rBANKCON5 如有需要,才设置

//写锁存器
*(pIOBASE+1) = 0xaa;


15楼: >>参与讨论
xurenyi
谢谢pandafeng 及楼上各位兄弟的指点
我还有一个问题想请教大家,现在我在FLASH里面写了一个程序,复位以后可以脱机运行了,但我发现当我把其他程序载到RAM里面运行时,程序载完单步运行以后出现下面的情况,
   ENTRY
    b  Resethandler
    b  handlerundef
    .......
它不能进复位中断向量段,跑到 b  handlerundef 那里,但我用写到FLASH里面的工程文件作为模板文件,在SDT2.51里面,把所有的程序和头文件加进来链接所生成的映象文件到RAM里面运行又可以单步跑.我自己觉得好像把其它的程序载进RAM里面运行,按全速运行以后,它好像还是在跑FLASH里面的程序,FLSH里面的程序是控制闪灯的,当把其它的程序载进RAM里面运行按全速运行以后,灯也在闪,而RAM里面载的程序并没有闪灯的程序,请大家帮我分析一下,谢谢!!!


16楼: >>参与讨论
pandafeng
SDT251我只用过几天!
把main改为:
void Main()
{
   while(1);
}
看看正常不?
跟踪一下看哪里产生了Exception。


17楼: >>参与讨论
xurenyi
请大家帮忙
 
参与讨论
昵称:
讨论内容:
 
 
相关帖子
图像采集问题请教。。。
44b0的公板开发板接串口的线是交叉还是直连?
ucos-ii请教
现在的2440开发板最少钱是多少.
有没有替代S1D13806的芯片?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号