裸S3C2440 - メモリ・コントローラ(3、norflash初期化 - タイミング設定)

2440ハードウェアと1.norflash接続

2.初期化も、またタイミングの設定

図1は、タイミングパラメータは、パラメータの意味が記載されている初めての外部装置の性能に応じて構成するプログラマブルコントローラのアクセスサイクルS3C2440メモリ読み出し及び書き込みタイミングです。

TACS:アドレスnGCSnセットアップ(アドレス信号Aが選択出射さnGCSチップを放出する期間を示した後)までの時間

TCOS:チップの選択にnOE SETアップ時間前(チップセレクト信号がイネーブル信号の問題に読み取りを発行しnGCSのにかかる時間を示しています)

TACC:アクセスサイクル(データアクセスサイクル)

ページモードでのアクセスサイクル:TACP

TcOH:チップの選択にnOE HOLD後の時間(nGCSを選択するチップを解放するためにどのくらいの時間にnOE解除信号の後)

TCAH:住所HOLD nGCSn時間後(チップ後nGCSは、アドレス信号Aを解放するためにリリースを選択どのくらい)

2.現在、外部norFlashのタイミングを設定するマニュアルに従って、当社のレジスタを設定するには、来ます。

我々はスタートでも時に、この時点でも、対応するアドレス0から、最初の命令からCPU 0、アドレス、実装を成功さをフェッチし、知っています。質問は、この時点で、あるとnorflashがそれにアクセスすることができる理由、初期化したりしませんでしたので、それを強制するために0からアドレスを取得することができますか?

A:このセクションのデフォルトのタイミングは確かにある互換性のあるCPUの設定が点滅することができるようになります。

セクションnorflash(MX29LV160D)アクセスタイミングがあります


(1)先发送地址信号A
(2)发送片选CE
(3)发送读使能OE
(4)往数据总线放上数据
(5)释放信号...

私たちはテーブルから参照してください。

发出地址数据(Addresses)后,要等待Taa(最少70ns)时间,地址数据才有效;
发出片选信号(CE#)后,要等待Tce(最少70ns)时间,片选信号才有效;
发出读信号(OE#)后要等待Toe(最少30ns)时间,读信号才有效;

而且表中Tas可以为0,那么说明地址信号、片选、读使能可以一起发出。为了简单我们把地址(Addresses),片选信号(CE#),读信号(OE#),同时发出,然后让它们都等待70ns即可(等待信号有效)。

我们再看看上面的nor访问时序图,释放地址、片选、读使能信号都没有时间差值dt要求,那么说明地址、片选、读使能信号可以同时释放。

在来看内存控制器的配置

(1)配置数据访问周期Tacc:

从上图可以看到Tacc的默认值是111,对应14个clocks。系统上电采用12MHz的晶振,HCLK=OSC=12MHz,那么Tacc=(1/FCLK)14=(1000/1214)≈1166ns,这个值很大,几乎可以满足所有NorFlash的要求,这也是为什么我们不做初始化也能访问norflash的原因。

启动后,由于我们的时钟HCLK设置成了100MHz,T=1000/100=10ns,Tacc= 10ns*14 >70ns, 所以不配置也能访问的。为了让访问速率加快,因此设置Tacc>70ns即可,配置成101,8个clocks即可。

(2)配置Tacs,Tcos,Tcoh,Tcah:

从nor的分析中,我们得知地址、片选、读使能同时发出和同时释放,所以配置Tacs,Tcos,Tcoh,Tcah皆为0。

代码如下:
BANKCON0 = (*(volatile unsigned long *)(0x48000004));
void bank0_tacc_set(int val)
{
    BANKCON0 = val << 8;
}

3.测试

int main(void)
{
    unsigned char c;
    
    uart0_init();//参考前面的uart编程
    puts("Enter the Tacc val: \n\r");
    
    while(1)
    {
        c = getchar();
        putchar(c);
        if (c >= '0' && c <= '7')
        {
            bank0_tacc_set(c - '0');
            led_test();//跑马灯代码我就不贴了,谁都会
        }
        else
        {
            puts("Error, val should between 0~7\n\r");
            puts("Enter the Tacc val: \n\r");
        }
    }
    return 0;
}

实验效果:

输入0~4,Tacc小于70ns,无法读取Nor Flash上数据,LED不能闪烁。

输入5~7,Tacc大于70ns,可以读取Nor Flash上数据,LED不断闪烁,且值越小越快。

おすすめ

転載: www.cnblogs.com/fuzidage/p/12021146.html