TI中文支持网
TI专业的中文技术问题搜集分享网站

C5416的DS、PS、IS、MSTRB引脚具体是怎么设置的呢?还是自动设置的呢?

如题,就拿DS引脚来说,假如我初始化时MP/MC=0,ovly=0,且操作外部RAM空间E000,当我设置ioport unsigned portE000=0x01后,是不是DS引脚就会自动拉低?PS和IS引脚呢?PS和IS引脚是不是也是同样的道理呢?

wenlong zhang87:

回复 Shine:

我是小白,只是想搞明白到底是怎么回事儿,谢谢您的回答!

是不是就是说:此时操作IO空间地址线,此时地址线为A15-A0依次为:1110 0000 0000 0000(如果我用逻辑分析仪抓时序的话,可以看到这16位的电平是吗?),然后数据线上面就会出现D7-D0依次为:0000 0001(如果我用逻辑分析仪抓的话,可以看到这8位的电平是吗?)。

那么如果我分别设置:ioport unsigned int port8000;

port8000=0x11;

port8000=0x13;

port8000=0x15;是相当于在统一地址空间分别写入不同数据吗?为了您查看方便我把代码附上,只有main.c和CMD文件

wenlong zhang87:

回复 Shine:

Shine Zhang非常感谢!

看了您对《5416 访问外部存储器的疑惑》问题的回答,我突然傻了,不知道怎么区分什么时候读什么是写呀?您说PS#、DS#、IS#会自动拉低,所以我就想当然的认为R/W#、MSTRB#、IOSTRB#也是自动拉低,操作完成就会自动拉高,真实情况是这样吗?当我看到spru131g文档(TMS320C54xDSP Reference Set Volume 1:CPU and Peripherals)的时候Figure 10-8时,突然不明白什么读什么时候写呢?

(在我读http://www.ti.com/lit/ug/spru131g/spru131g.pdf,的时候,又发现下面描述,难道是以此来区分读写操作的吗?)

port10 = a;    //此时是写a到port10

b = port11;    //此时从port11读取到b

wenlong zhang87:

回复 Shine:

非常感谢你,大虾!!!

wenlong zhang87:

回复 Shine:

Shine Zhang非常感谢!    您太谦虚了,我这个人很笨,又没人指导,全靠个人,网上乱窜,跟个无头苍蝇一样,但是我不是那么容易放弃一件事。    总结一下哈,经过您的指导,让我明白了:    1,对于data空间地址的读写操作是通过对地址的的直接读取的,例如        向data地址里写数据,如*(0x1000)=0x1, R/W#信号、DS#信号、MSTRB#信号会自动拉低表示写信号。        从data地址里读数据,如i=*(0x1000),     MSTRB#、DS#信号会自动拉低,R/W#信号会自动拉高表示读信号。        且data空间地址肯定可以连续访问,哈哈        问题一:有没有办法让R/W#一直拉低呢?即使我连续读写呜呜呜            我在手册:http://www.ti.com/lit/ds/symlink/tms320vc5416.pdf的第五章Fugire 5-6Consecutive Mode Memroy Reads            看到连续读可以使MSTRB#、DS#一直拉低,R/W#一直拉高,我下面这样是否能实现:            int *AddressIncrease = *(0x1000);            int a[];            for(i=0;i<1024;i++)                {                a[i]=*AddressIncrease;            }            在这段读的时间内,MSTRB#、DS#一直拉低,R/W#一直拉高,是否是这样呢?若不能,代码该如何正确编写呢?    2,对于program空间地址的读写操作是通过对地址的的直接读取的,例如        向program地址里写数据,如*(0x1000)=0x1, RW信号、PS#信号、MSTRB#信号会自动拉低表示写信号。        从program地址里读数据,如i=*(0x1000),     MSTRB#、PS#信号会自动拉低,RW信号会自动拉高表示读信号。        且program空间地址肯定可以连续访问,哈哈    3,对于IO空间地址的读写操作是通过对地址的的直接读取的,例如        向IO空间地址里写数据,如*(0x1000)=0x1, RW信号、IS#信号、IOSTRB#信号会自动拉低表示写信号。        从IO空间地址里读数据,如i=*(0x1000),     IOSTRB#、IS#信号会自动拉低,RW信号会自动拉高表示读信号。        且IO空间地址只能一个一个的定义,然后才能连续访问,另外也可以使用下面这种方式进行连续访问:        start:            ORM   #00020h,pmst    ;set OVLY=1            STM   #01000h,ar2     ;pointer to data memory address            STM   #02000h,ar3     ;pointer for I/O port address            MVMD  ar3,(portloc+1) ;update PORTW instruction                          ; with new address            STM   #table_length,BRC  ;initialize BRC            RPTB  end_block-1        portloc:     PORTW *ar2+,0h        ;copy word from data space to                           ; I/O space and increment                                       ; data memory address            MAR   *ar3+           ; increment I/O memory address            MVMD  ar3,(portloc+1) ;update PORTW instruction                                  ;with new address            NOP                   ;wait for MVMD pipeline latency            NOP                   ;wait for MVMD pipeline latency                          ;(portloc+1) is now updated        end_block:        问题二:1、如何把上面的汇编转成C,如何转换?看一下哈,我转化得对不对?谢谢您                #define PMST     *(0x1D)//PMST寄存器的地址                #define AR2     *(0x12)//AR2寄存器的地址                #define AR3     *(0x13)//AR3寄存器的地址                ioport    unsigned port2000; //IO空间                                PMST = 0x20;                AR2  = *(0x1000);                AR3  = *(port2000);                //太笨啊,下面就不知道怎么写啦                            3、我想让IOSTRB#信号一直拉低,我怎么去做呢?呜呜呜,我想实现一直拉低IOSTRB#信号,我的脑袋太死,肯定不会这样吧                ioport    unsigned port2000; //IO空间                ioport    unsigned port2001; //IO空间                ioport    unsigned port2002; //IO空间                ioport    unsigned port2003; //IO空间                。。。                ioport    unsigned port23FF; //IO空间                int a[1024];                a[0]=port2000;                a[1]=port2001;                a[2]=port2002;                …                a[1021]=port23fd;                a[1022]=port23fe;                a[1023]=port23ff;            //脑袋太死板了,怎么实现持续拉低IOSTRB#            问题三:大侠,我还有一个问题,我又重新看了一遍    TMS320C54x DSP Reference Set Voulume 1:CPU and Peripherals(SPRU131F)第三章Memory和TMS320VC5416 Fixed-Point Digital Sigal Processor Data Manual(SPRS095P)第3.1Memory中    去寻找关于自动设置PS#/DS#/IS#/MSTRB#/IOSTRB#的地方????????没有找到相关描述的地方,请指导一下在那片手册里面,让我好好的学习消化一下,非常感谢!

Shine:

回复 wenlong zhang87:

1. 可以。

2. 理解正确。

3. IO空间访问要用PORTW, PORTR(汇编语言)或者ioport定义(C语言)

赞(0)
未经允许不得转载:TI中文支持网 » C5416的DS、PS、IS、MSTRB引脚具体是怎么设置的呢?还是自动设置的呢?
分享到: 更多 (0)