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

关于c6657的EMIF16接口访问CPLD

现在想通过6657的emif16接口访问cpld,但是我看到6657的emif相关寄存器中只有对配置成nand模式的相关寄存器,并没有配置成地址数据不复用的相关寄存器,于是我就按照如下的配置进行emif16的初始化:(cpld接在片选1上)

uint32_t epld_init(void)
{

hEmif16Cfg->A1CR = (0 \
| (1 << 31) /* selectStrobe */ \
| (0xf << 26) /* writeSetup 10 ns */ \
| (0x3f << 20) /* writeStrobe 40 ns */ \
| (7 << 17) /* writeHold 10 ns */ \
| (0xf << 13) /* readSetup 10 ns */ \
| (0x3f << 7) /* readStrobe 60 ns */ \
| (7 << 4) /* readHold 10 ns */ \
| (3 << 2) /* turnAround 40 ns */ \
| (0 << 0)); /* asyncSize 8-bit bus */ \

CSL_FINS(hEmif16Cfg->NANDFCTL, EMIF16_NANDFCTL_CE1NAND , CSL_EMIF16_NANDFCTL_CE1NAND_DISABLE);  //非nand模式

/* Set the wait polarity */

hEmif16Cfg->AWCCR = (0x80 /* max extended wait cycle */ \
| (0 << 16) /* CS2 uses WAIT0 */ \
| (0 << 28)); /* WAIT0 polarity low */ \

hEmif16Cfg->IRR = (1 /* clear async timeout */ \

| (1 << 2)); /* clear wait rise */ \

return SUCCESS;
}

然后对epld的读操作是通过直接访问片选1的地址空间0x74000000加上寄存器偏移来是实现的:

uint8_t EPLDReadDataByte(uint32_t offset)
{
uint32_t addr = 0;
uint8_t data = 0;

addr = (offset + EPLD_DATA_ADDR);
data = *(uint8_t *)(addr);

return data;
}

按照该方法配置的话片选和读使能信号都有,但是为什么我访问的地址还是被送到了emif16的数据线上,也就是emif16还是被配置成了nand模式,

但是寄存器中并没有配置成其他模式的相关寄存器,我也将A1CR配置成了非nand模式,这是怎么回事?

Brighton Feng:

地址和数据分开是EMIF的缺省模式或者说是传统模式,不需要额外的配置。

从你的代码里没看出问题,能不能在出问题的时候把EMIF所有的寄存器导出来,确认一下是否被正确的配置了,或是否被意外修改了。

 

赞(0)
未经允许不得转载:TI中文支持网 » 关于c6657的EMIF16接口访问CPLD
分享到: 更多 (0)