查看: 2372|回复: 0
打印 上一主题 下一主题

lpc1788带16bit位宽SDRAM时地址映射原理的问题

[复制链接]
跳转到指定楼层
沙发
发表于 2015-6-14 17:26:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

       
搜索
搜索       
热搜: 净化器雕刻机阿莫邮购
amoBBS 阿莫电子论坛?论坛首页?单片机?CortexM3?lpc1788带16bit位宽SDRAM时地址映射原理的问题,大家来 ...bottom↓
返回列表发新帖
查看: 1559|回复: 2
打印 上一主题 下一主题 lpc1788带16bit位宽SDRAM时地址映射原理的问题,大家来帮我看看 [复制链接]
timehandle

电梯直达跳转到指定楼层 1楼
发表于 2013-5-20 17:57:01 | 只看该作者 回帖奖励
各位好,我正在使用周立功的1788的开发板,这块板配了一片4M*16的SDRAM,行地址长度为12,列地址长度为8,4 bank。

通过配置EMC的DynaminConfig0寄存器,将地址映射方式配置为RBC模式,根据这篇文章(我没有权限发链接,悲催,大家看时注意把链接中的“。”改回“.”):
www。crifan。com/detailed_sdram_address_mapping_brc_bank_row_column_and_rbc_row_bank_column/
(我不知道自己理解的对不对),芯片内部地址总线ic_addr[31:0]与SDRAM地址寻址之间的映射关系就为
ic_addr[7:0]对应SDRAM列地址
ic_addr[9:8]对应SDRAM bank地址
ic_addr[21:10]对应SDRAM 行地址

另外,根据周立功给的lpc1788的SDRAM初始化程序,SDRAM模式寄存器的配置是通过一个读操作来实现的:
#define SDRAM_BASE 0xA0000000
LPC_EMC->DynamicControl    = 0x00000083; /* Issue MODE command */
wtemp = *((volatile uint16_t *)(SDRAM_BASE | (0x23<<11)));
想要配置SDRAM模式寄存器,就需要通过SDRAM的地址线向SDRAM发送命令来实现,那么依照之前所述RBC的地址映射方式,将命令0x23左移11位后,正好移过了8bit宽的列地址与2bit宽的bank地址,对应SDRAM的行地址。然后通过一个读操作,LPC1788的EMC模块输出外部地址总线信号000000100011,即使得SDRAM地址线上出现0x23确定的地址电平状态(行地址),这样模式寄存器就设置完成了。(emc的引脚e_A[13:0]连接至SDRAM的地址线A[13:0],其中12和13脚作为bank选通,11:0为行地址与列地址复用线)

现在有两个问题:
1. 上面对通过读操作来实现配置模式寄存器的解释是我根据RBC这么一个配置方式猜测的,我不知道自己的猜测是否正确,希望能够得到大家的解答
2. lpc1788的地址映射应该不像我前面描述的那么简单直接吧?因为:如果就是像前面那么简单,那么写程序的时候,怎么单独访问到SDRAM中的一个字节呢?现在这片SDRAM位宽是16位的,最小的可寻址到的存储单位就是16bit宽了,所以如果是前述映射方式,那写程序的时候我就只能对2字节整数倍的地址进行读写,但是实际上我对奇数地址照样读写,比如说我写了一个unsigned char *a=(unsigned char*)0xA0001221;*a = 5; 第二个问题就是,lpc1788是怎样根据0xA0001221这一个地址得到SDRAM中16bit存储单元的行地址,列地址,bank地址的呢?

顺带还有第三个问题,lpc1788芯片中的EMCDLYCTL这个寄存器设置的时延是什么的时延?我看lpc1788的手册,这个寄存器设置的时延会作用在送给SDRAM的时钟输出上,把时钟信号延时,这是什么意思呢?。。。时钟信号是个周期信号,我怎么觉得延时就是移相位啊。。是不是就是移相位?移了能有啥用啊?
转载

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表