LM2577 发表于 2013-5-23 15:12:05

ARM与DSP利用HPI总线通信的寄存器便宜地址如何计算?


我现在用TQ2440的总线接口连接DM642的DSP开发板,使用HPI-16接口通信,连接图如下图所示。


为了控制HPI寄存器的选择和读写,采用地址线方法控制,由于HPI接入到nGCS3,所以对应的是BANK3地址是从0x18000000开始的
那么对应的个地址我们入下图所示
*---------------------------------------------------------------------------------------------------------------------------
*         AD4       AD3      AD2         AD1      AD0    偏移地址               说明
*         HR/W   HCNTL1   HCNTL0   HHWIL                                     (ADDR)   
*             0         0             0            0            X      0X00                控制寄存器HPIC 高字节
*             0         0             0            1            X      0X02                写控制寄存器HPIC 低字节
*             1         0             0            0            X      0X10                读控制寄存器HPIC 高字节
*             1         0             0            1            X      0X12                  读控制寄存器HPIC 低字节
*
*
*             0         1             0            0            X      0X08            写地址寄存器HPIA 高字节
*             0         1            0         1            X   0X0A            写地址寄存器HPIA 低字节
*             1         1             0            0            X   0X18            读地址寄存器HPIA 高字节
*             1         1             0            1            X   0X1A            读地址寄存器HPIA 低字节
*
*
*             0          0         1            0             X   0X04            写数据寄存器HPID 高字节地址自增
*             0          0            1            1         X   0X06            写数据寄存器HPID 低字节地址自增
*             1          0            1            0            X   0X14            读数据寄存器HPID 高字节地址自增
*             1          0            1             1            X   0X16            读数据寄存器HPID 低字节地址自增
*
*
*             0         1            1            0            X   0X0C            写数据寄存器HPID 高字节
*             0          1            1             1            X   0X0E            写数据寄存器HPID 低字节
*             1         1            1            0            X   0X1C            读数据寄存器HPID 高字节
*             1          1            1            1            X   0X1E            读数据寄存器HPID 低字节
*
*****************************************************************************************************/

那么当我对0x18000000+(addr)上述偏移地址读写的时候,nCGS3自动会变低, 相应的nOE nWE也会被ARM自动置低或高,同时,地址总线也会根据我们的地址内容去跳变。
但是我对0x18000000+0x00、0x02、0x10、0x12 进行读写的时候ADDR2 就为0,此时为正确的。
接下来我对 0x18000000+0x08 0xa 0x18 0x1a进行读写的时候ADDR2就为1,此时与我理论上的配置相反。(如下图所示,黄色为nGCS3,蓝色为ADDR2,图中的波形代表红色代码的波形)


部分代码:
#define HPI_BASE_ADDRESS0x18000000

#define HPIC_WRITE_H(*(volatile unsigned short *)(HPI_BASE_ADDRESS+0x02)) //写控制寄存器HPIC 高字节
#define HPIC_WRITE_L(*(volatile unsigned short *)(HPI_BASE_ADDRESS+0x00)) //写控制寄存器HPIC 低字节
#define HPIC_READ_H   (*(volatile unsigned short *)(HPI_BASE_ADDRESS+0x12)) //读控制寄存器HPIC 高字节
#define HPIC_READ_L   (*(volatile unsigned short *)(HPI_BASE_ADDRESS+0x10)) //读控制寄存器HPIC 低字节


#define HPIA_WRITE_H(*(volatile unsigned short *)(HPI_BASE_ADDRESS+0x06)) //写地址寄存器HPIA 高字节
#define HPIA_WRITE_L(*(volatile unsigned short *)(HPI_BASE_ADDRESS+0x04)) //写地址寄存器HPIA 低字节
#define HPIA_READ_H   (*(volatile unsigned short *)(HPI_BASE_ADDRESS+0x16)) //读地址寄存器HPIA 高字节
#define HPIA_READ_L   (*(volatile unsigned short *)(HPI_BASE_ADDRESS+0x14)) //读地址寄存器HPIA 低字节



      rBWSCON=rBWSCON|(1<<14)|(0x01<<12);//使能BANK3 nWAIT 16位带宽
      rBANKCON3=(0x10<<13)|(0x100<<8)|(0x11<<6);
      ChangeRomCacheStatus(RW_NCNB);//关闭ARM CACHE

               HPIC_WRITE_L=0x0005;
      HPIC_WRITE_H=0x0005;
      a=HPIC_READ_L;   
      b=HPIC_READ_H;   
      HPIA_WRITE_L=0x1000;
      HPIA_WRITE_H=0x8000;
      c=HPIA_READ_L;
      d=HPIA_READ_H;






请问是我的偏移地址有问题吗?还是什么原因出现的这种情况?
页: [1]
查看完整版本: ARM与DSP利用HPI总线通信的寄存器便宜地址如何计算?