跪求大侠赐教:C8051F040的外部存储接口配置(已解决)

[复制链接]
3403|10
 楼主| geergeer 发表于 2008-9-20 19:38 | 显示全部楼层 |阅读模式
首先对浏览帖子的大侠表示深深的感谢!
C8051F040的外部存储器接口配置代码如下所示(用低口作存储器接口,非复用方式,有块选择的分片模式,使用了串口0和外部中断0)
void Config_IO (void)
{
    SFRPAGE  = EMI0_PAGE;
    EMI0CF   = 0X18;
    EMI0CN   = 0X80;
    EMI0TC   = 0X83;

    SFRPAGE  = CONFIG_PAGE; //Port SFR's on Configuration page
    P0MDOUT  = 0XFF;
    P1MDOUT  = 0XFF;
    P2MDOUT  = 0XFF;
    P3MDOUT  = 0XFF;    
    XBR0     = 0X04;
    XBR1     = 0X04;
    XBR2     = 0X42;
    P0       = 0XC0;
    P1       = 0X00;
    P2       = 0X00;
    P3       = 0X00;
}
初始化好之后,我用仿真器单步执行程序,每次对外部存储单元(例如0X8010)寻址时,即执行指令MOVX @DPTR A时,用示波器无法抓到地址线(P1,P2口)上的电平变化(芯片工作在11M频率,示波器调到10NS级),说明地址线没有工作啊,这是为什么呢?
恳请大侠们赐教,再次感激!
 楼主| geergeer 发表于 2008-9-22 08:25 | 显示全部楼层

大家帮帮忙啊

lnskngdc 发表于 2008-9-22 09:18 | 显示全部楼层

hoho

对外部RAM操作前,要加上  SFRPAGE  = CONFIG_PAGE; 
你试试看,呵呵
 楼主| geergeer 发表于 2008-9-22 09:34 | 显示全部楼层

多谢lnskngdc的回复

我已经在外部寻址的函数里加了SFRPAGE = CONFIG_PAGE,如下:

 功能:向端口发送数据
void outportb(unsigned int DataOrCmd, unsigned char Data)
{
    SFRPAGE  = CONFIG_PAGE;
    *((volatile unsigned char *) DataOrCmd) = Data;//向外部写
}

 功能:向端口接收数据
unsigned char inportb(unsigned int DataOrCmd)
{
    SFRPAGE  = CONFIG_PAGE;
    return *((volatile unsigned char *) DataOrCmd);//从外部读
}

示波器依然没有能够抓到地址线的变化。
之前,我反反复复用示波器抓地址线波形,重新编译,然后再抓,试了不下几十次,曾经有几次编译后能够抓到每次向外部选址时地址线的变化,但是重新编译后又抓不到了,好奇怪!!!
lnskngdc 发表于 2008-9-22 10:42 | 显示全部楼层

客气了

EMI0CF   = 0X18  改为0x1b,
最好把你的图发出来看看,外部ram起始地址多少啊?
你测试的小段程序也发出来,这样才能分析,仅凭现有的东西看不出来哪里错了
农民讲习所 发表于 2008-9-22 11:23 | 显示全部楼层

你的示波器才差,单步发出的地址脉冲你抓不到

只有连续地址信号才能抓到
 楼主| geergeer 发表于 2008-9-22 11:51 | 显示全部楼层

多谢两位

多谢农民讲习所的回复

我用的是泰克TDS1012,应该性能不错的

多谢lnskngdc的回复,我现在要做的是用51控制PDIUSBD12实现USB通信,对一个微控制器而言,PDIUSBD12 看起来就象一个带 8 位数据总线和一个地址位 占用 2 个位置 的存储器件,51的P1.7通过反向器与PDIUSBD12的使能端(低有效)相连,51的P2.4与D12的A0相连,用来选择51给D12写入的是命令还是数据.于是51通过外部寻址的瞬间使能D12(地址为0X8000或0X8010),从而在寻址有效时间内写入或读取数据,51的ALE没有和D12相连,读写信号线两者之间直接相连。电路图我截图了,207KB,但是传不上来啊~~
lnskngdc 发表于 2008-9-22 14:26 | 显示全部楼层

是不是太快了?

你在主程序里编写一段测试程序,就是往固定一个单元里不断的写0x55,0xaa,再观察一下,示波器的扫描时间调到1ms都可以,关键是不断的对PDIUSBD12操作,没程序,没图,没法判断,可能性太多了,你也可以先用示波器看PDIUSBD12接的晶振的引脚是否有波形,频率是多少。
 楼主| geergeer 发表于 2008-9-22 15:30 | 显示全部楼层

感谢lnskngdc

按lnskngdc所说,写了一段不断读写的测试程序,然后把一些焊点补焊了一下,已能多次抓到波形,但是还是有个别时候抓不到波形~~USB通信依然不行,看来还有别的问题存在~~非常感激lnskngdc同志宝贵的时间和有效的指导~~
农民讲习所同志的建议也是正确的,再次感谢!
gjg191 发表于 2008-9-22 15:35 | 显示全部楼层

o

看来硬件问题不小!!
lnskngdc 发表于 2008-9-22 16:17 | 显示全部楼层

太客气了

呵呵,解决了就好,硬件连接是关键啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

54

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部