打印

68013 SLAVEFIFO 8位工作方式求助,引脚复用问题!勿小视

[复制链接]
3307|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhugezhan|  楼主 | 2011-3-10 16:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
选择SLAVEFIFO工作方式寄存器设置如下用8位工作方式,于是按照数据手册上PORTD端口可以复用可是实际并非如此是不是数据手册上有误呢:TDININT代码(使用EP6作为IN传输)
CPUCS = 0x12;
  
SYNCDELAY;
IFCONFIG = 0x43;  //使用外部时钟 选择同步工作方式 选择slave fifo 工作模式

SYNCDELAY;
EP2CFG = 0x00;     //bit1:0为0:0设置为四缓冲区域 bit5:4设置为1:0表示批量传输bit3为0表示缓冲区大小为512字节;
       //bit7为1代表端点有效,bit6为0代表OUT bit6为1代表IN
SYNCDELAY;
EP4CFG = 0x00;
SYNCDELAY;
EP6CFG = 0xE0;  //四缓冲大小1K;

SYNCDELAY;
EP8CFG = 0x00;



SYNCDELAY;
FIFORESET = 0x80; //avoid nak_all race condition

SYNCDELAY;
FIFORESET = 0x06;
SYNCDELAY;
FIFORESET = 0x00;

SYNCDELAY;
PINFLAGSAB = 0xE2; // EP6 FF状态FLAGB

SYNCDELAY;
    PORTACFG = 0x00;   //scls被屏蔽!(0X40)

SYNCDELAY;
FIFOPINPOLAR = 0x00; // PKTEND SLOE SLRD SLWR EE EF 皆为低电平有效
   
SYNCDELAY;
EP6FIFOCFG = 0x08;   //AUTOIN=1,选择8位数据宽度
SYNCDELAY;
然后OED使能,设置了几个管退为高电平,端口无输出!!!!!!

于是我 在TDININT当中在设完EP6FIFOCFG = 0x08;后将寄存器读出来与0x05也就是寄存器默认值做比较发现此寄存器内的数值正是0x05!!!!也就是说BIT0位始终为1按照数据手册第9章所述只要该寄存器BIT0位为1,那么PORTD就不能作为复用引脚!
问题来了我明明设置了EP6FIFOCFG寄存器为什么还是默认值!!实在难以理解请高人指点,最好实践下,感激不尽!!!!此致敬礼

相关帖子

沙发
dqyubsh| | 2011-3-10 20:37 | 只看该作者
之前要加上REVCTL=0x03;

手册说只要所有端点都设成8位,PD口就可以做普通IO。你把PD使能、输出都发上来看看。

使用特权

评论回复
板凳
zhugezhan|  楼主 | 2011-3-10 20:52 | 只看该作者
也试过了DATASHEET上的代码,包括把所有EPXFIFOCGF最后一位置0都试过了,PORTD使能是在上面完成后就使能OED |= 0xff, D端口置高始终无输出!这2天都纠结这个问题,下午发现EPXFIFOCFG在上面代码完成跟0x05也就是默认的一样,也就是EPXFIFOCGF最低位为1,这样的话按照数据手册上的话D端口必定不能作为GPIO了,是不是写这个寄存器没有成功呢实在不解!!求赐教

使用特权

评论回复
地板
zhugezhan|  楼主 | 2011-3-10 20:54 | 只看该作者
EPXFIFOCFG貌似这一个系列的寄存器貌似在读取的时候都是默认值,很奇怪

使用特权

评论回复
5
dqyubsh| | 2011-3-10 22:52 | 只看该作者
你把程序打个包发上来吧。CY安装目录下边有SLAVE的例子,一切还是从例子开始。

使用特权

评论回复
6
zhugezhan|  楼主 | 2011-3-11 00:03 | 只看该作者
就是第9章的例子IN传输不需要经过CPU的,我现在需要解决的是上面的问题求赐教,8位SLAVEFIFO传输时PORTD端口的复用真的可行么,DATASHEET上是可以但是我试过了真的不行,非常尴尬,仔细阅读了数据手册的相关设置,即使是按照DS的那种写法也不行!还有EPXFIFOCFG寄存器!我琢磨很久了,希望好心的朋友能够实践下帮我解答感激不尽此致敬礼!

使用特权

评论回复
7
dqyubsh| | 2011-3-11 09:13 | 只看该作者
你的FIFO时钟是怎么加的,用内部还是外部的?你这里设置了外部时钟,如果没加时钟的话,可能SLAVE没工作。

使用特权

评论回复
8
dqyubsh| | 2011-3-11 09:17 | 只看该作者
先设成IFCONFIG=0xCF试试,CY例子就是这样做的。

使用特权

评论回复
9
dqyubsh| | 2011-3-11 09:46 | 只看该作者
void TD_Init(void)             // Called once at startup
{
        CPUCS = 0x12;

        IFCONFIG = 0xCF;          //使用外部时钟 选择同步工作方式 选择slave fifo 工作模式

        REVCTL = 0x03;
        SYNCDELAY;
        EP2CFG = 0xA0;             //
        SYNCDELAY;
        EP6CFG = 0xE0;          // 四缓冲大小1K;
        SYNCDELAY;
        EP4CFG = 0x00;
        SYNCDELAY;
        EP8CFG = 0x00;
        SYNCDELAY;

        FIFORESET = 0x80;         // avoid nak_all race condition
        SYNCDELAY;
        FIFORESET = 0x02;
        SYNCDELAY;
        FIFORESET = 0x06;
        SYNCDELAY;
        FIFORESET = 0x04;
        SYNCDELAY;
        FIFORESET = 0x08;
        SYNCDELAY;
        FIFORESET = 0x00;
        SYNCDELAY;

        FIFOPINPOLAR = 0x00; // PKTEND SLOE SLRD SLWR EE EF 皆为低电平有效
        SYNCDELAY;       

        EP2FIFOCFG = 0x00;   //
        SYNCDELAY;
        EP2FIFOCFG = 0x10;   //
        SYNCDELAY;
        EP6FIFOCFG = 0x08;   //
        SYNCDELAY;
        EP4FIFOCFG = 0x00;   //
        SYNCDELAY;
        EP8FIFOCFG = 0x00;   //
        SYNCDELAY;

        PINFLAGSAB = 0xE2; // EP6 FF状态FLAGB
        SYNCDELAY;
        PINFLAGSAB = 0x08; // EP6 FF状态FLAGB
        SYNCDELAY;

        PORTACFG = 0x00;   //scls被屏蔽!(0X40)
        SYNCDELAY;
       
        OED |= 0xff;
}

void TD_Poll(void)             // Called repeatedly while the device is idle
{
        PD3 = ~PD3;
}

以上测试通过,初始化部分未仔细考虑。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
zhugezhan + 1 我很赞同
10
zhugezhan|  楼主 | 2011-3-11 12:48 | 只看该作者
感谢dqyubsh同学,确实如此,我外设CLK信号没接一直没注意这个问题,好像IFCONFIG选择外部时钟的话而实际不接外部时钟的话,往EPXFIFOCFG以及FIFO相关寄存器里面设置没有效果!感激不尽!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

1

粉丝