?? dm642main.c
?? DM642flash驅(qū)動(dòng)編寫,flash用的是S29AL032D70TFI000
?? C
字號(hào):
??
/******************************************************/
/* 深圳市奇想達(dá)科技有限公司QXD-DM642開發(fā)板源程序 */
/* 網(wǎng)址:http://www.szqxd.com */
/******************************************************/
#include <csl.h>
#include <csl_emifa.h>
#include <csl_irq.h>
#include <csl_chip.h>
#include <stdio.h>
#include "QXDdm642.h"
#include "QXDdm642_flash.h"
/*QXDDM642的emifa的設(shè)置結(jié)構(gòu)*/
EMIFA_Config QXDdm642ConfigA ={
EMIFA_FMKS(GBLCTL, EK2RATE, HALFCLK) |
EMIFA_FMKS(GBLCTL, EK2HZ, CLK) |
EMIFA_FMKS(GBLCTL, EK2EN, ENABLE) |
EMIFA_FMKS(GBLCTL, BRMODE, MRSTATUS) |
EMIFA_FMKS(GBLCTL, NOHOLD, DISABLE) |
EMIFA_FMKS(GBLCTL, EK1HZ, HIGHZ) |
EMIFA_FMKS(GBLCTL, EK1EN, ENABLE) |
EMIFA_FMKS(GBLCTL, CLK4EN, ENABLE) |
EMIFA_FMKS(GBLCTL, CLK6EN, ENABLE),
EMIFA_FMKS(CECTL, WRSETUP, DEFAULT) |
EMIFA_FMKS(CECTL, WRSTRB, DEFAULT) |
EMIFA_FMKS(CECTL, WRHLD, DEFAULT) |
EMIFA_FMKS(CECTL, RDSETUP, DEFAULT) |
EMIFA_FMKS(CECTL, TA, DEFAULT) |
EMIFA_FMKS(CECTL, RDSTRB, DEFAULT) |
EMIFA_FMKS(CECTL, MTYPE, SDRAM64) |
EMIFA_FMKS(CECTL, RDHLD, DEFAULT),
EMIFA_FMKS(CECTL, WRSETUP, OF(7)) |
EMIFA_FMKS(CECTL, WRSTRB, OF(14)) |
EMIFA_FMKS(CECTL, WRHLD, OF(2)) |
EMIFA_FMKS(CECTL, RDSETUP, OF(2)) |
EMIFA_FMKS(CECTL, TA, OF(2)) |
EMIFA_FMKS(CECTL, RDSTRB, OF(14)) |
EMIFA_FMKS(CECTL, MTYPE, ASYNC8) |
EMIFA_FMKS(CECTL, RDHLD, OF(1)),
EMIFA_FMKS(CECTL, WRSETUP, OF(2)) |
EMIFA_FMKS(CECTL, WRSTRB, OF(10)) |
EMIFA_FMKS(CECTL, WRHLD, OF(2)) |
EMIFA_FMKS(CECTL, RDSETUP, OF(2)) |
EMIFA_FMKS(CECTL, TA, OF(2)) |
EMIFA_FMKS(CECTL, RDSTRB, OF(10)) |
EMIFA_FMKS(CECTL, MTYPE, ASYNC32) |
EMIFA_FMKS(CECTL, RDHLD, OF(2)),
EMIFA_FMKS(CECTL, WRSETUP, OF(2)) |
EMIFA_FMKS(CECTL, WRSTRB, OF(10)) |
EMIFA_FMKS(CECTL, WRHLD, OF(2)) |
EMIFA_FMKS(CECTL, RDSETUP, OF(2)) |
EMIFA_FMKS(CECTL, TA, OF(2)) |
EMIFA_FMKS(CECTL, RDSTRB, OF(10)) |
EMIFA_FMKS(CECTL, MTYPE, SYNC32) |
EMIFA_FMKS(CECTL, RDHLD, OF(2)),
EMIFA_FMKS(SDCTL, SDBSZ, 4BANKS) |
EMIFA_FMKS(SDCTL, SDRSZ, 12ROW) |
EMIFA_FMKS(SDCTL, SDCSZ, 8COL) |
EMIFA_FMKS(SDCTL, RFEN, ENABLE) |
EMIFA_FMKS(SDCTL, INIT, YES) |
EMIFA_FMKS(SDCTL, TRCD, OF(1)) |
EMIFA_FMKS(SDCTL, TRP, OF(1)) |
EMIFA_FMKS(SDCTL, TRC, OF(5)) |
EMIFA_FMKS(SDCTL, SLFRFR, DISABLE),
EMIFA_FMKS(SDTIM, XRFR, OF(0)) |
EMIFA_FMKS(SDTIM, PERIOD, OF(2075)),
EMIFA_FMKS(SDEXT, WR2RD, OF(1)) |
EMIFA_FMKS(SDEXT, WR2DEAC, OF(3)) |
EMIFA_FMKS(SDEXT, WR2WR, OF(1)) |
EMIFA_FMKS(SDEXT, R2WDQM, OF(3)) |
EMIFA_FMKS(SDEXT, RD2WR, OF(2)) |
EMIFA_FMKS(SDEXT, RD2DEAC, OF(3)) |
EMIFA_FMKS(SDEXT, RD2RD, OF(1)) |
EMIFA_FMKS(SDEXT, THZP, OF(2)) |
EMIFA_FMKS(SDEXT, TWR, OF(2)) |
EMIFA_FMKS(SDEXT, TRRD, OF(0)) |
EMIFA_FMKS(SDEXT, TRAS, OF(6)) |
EMIFA_FMKS(SDEXT, TCL, OF(1)),
EMIFA_CESEC_DEFAULT,
EMIFA_CESEC_DEFAULT,
EMIFA_CESEC_DEFAULT,
EMIFA_FMKS(CESEC, SNCCLK, ECLKOUT2) |
EMIFA_FMKS(CESEC, RENEN, READ) |
EMIFA_FMKS(CESEC, CEEXT, ACTIVE) |
EMIFA_FMKS(CESEC, SYNCWL, 0CYCLE) |
EMIFA_FMKS(CESEC, SYNCRL, 3CYCLE)
};
extern far void vectors();
/* Define source and destination arrays for flash tests */
Uint16 buffer[256];
/*此程序可將四個(gè)采集口的數(shù)據(jù)經(jīng)過(guò)Video Port0送出*/
void main()
{
Uint16 i, j, k, page, limit;
Uint32 startaddr, addr;
/*-------------------------------------------------------*/
/* perform all initializations */
/*-------------------------------------------------------*/
/*Initialise CSL,初始化CSL庫(kù)*/
CSL_init();
/*----------------------------------------------------------*/
/*EMIFA的初始化,將CE0設(shè)為SDRAM空間,CE1設(shè)為異步空間
注,DM642支持的是EMIFA,而非EMIF*/
EMIFA_config(&QXDdm642ConfigA);
/*----------------------------------------------------------*/
/*中斷向量表的初始化*/
//Point to the IRQ vector table
IRQ_setVecs(vectors);
IRQ_nmiEnable();
IRQ_globalEnable();
IRQ_map(IRQ_EVT_VINT1, 11);
IRQ_map(IRQ_EVT_VINT0, 12);
IRQ_reset(IRQ_EVT_VINT1);
IRQ_reset(IRQ_EVT_VINT1);
/*----------------------------------------------------------*/
/*FLash的測(cè)試*/
/*測(cè)試每一頁(yè)*/
/* Program the Flash page by page, 256 words at a time */
/* Set Flash page,選擇第0頁(yè) */
page = 0;
for(page = 0;page<1;page++)
{
QXDDM642_rset(QXDDM642_FLASHPAGE, page);
/*等待延時(shí)*/
QXDDM642_waitusec(1);
/* Erase all of the Flash for each page */
QXDDM642_FLASH_erase(QXDDM642_FLASH_BASE, QXDDM642_FLASH_PAGESIZE);
/*等待延時(shí)*/
QXDDM642_waitusec(1);
}
/*取FLASh的首址*/
addr = QXDDM642_FLASH_BASE;
for(page = 0;page<1;page++)
{
/*取FLASh的首址*/
addr = QXDDM642_FLASH_BASE;
/* Set Flash page*/
QXDDM642_rset(QXDDM642_FLASHPAGE, page);
/*等待延時(shí)*/
QXDDM642_waitusec(1);
/*將數(shù)據(jù)寫入第0頁(yè),每頁(yè)512K*/
limit = 1;
for (i = 0; i < limit; i++)
{
for (j = 0; j < 128; j++)
{
startaddr = addr;
/*每次寫入512個(gè)字節(jié),以16位的數(shù)據(jù)為基數(shù)*/
for (k = 0; k < 256; k++)
{
buffer[k] = (addr + i + page) & 0xffff;
addr += 2;
}
QXDDM642_FLASH_write((Uint32)buffer, startaddr, 512);
}
}
}
/* Verify the Flash page by page, 512 bytes at a time */
for (page = 0; page < 1; page++)
{
/*取FLASh的首址*/
addr = QXDDM642_FLASH_BASE;
/* Set Flash page */
QXDDM642_rset(QXDDM642_FLASHPAGE, page);
/*等待延時(shí)*/
QXDDM642_waitusec(1);
addr = QXDDM642_FLASH_BASE;
limit = 1;
for (i = 0; i < limit; i++)
{
for (j = 0; j < 128; j++)
{
startaddr = addr;
QXDDM642_FLASH_read(startaddr, (Uint32)buffer, 512);
for (k = 0; k < 256; k++)
{
if (buffer[k] != ((addr + i + page) & 0xffff))
{
/*寫入出錯(cuò)*/
for(;;){}
}
addr += 2;
}
}
}
}
/*測(cè)試完成*/
printf("Flash test is OK!\n");
for(;;){}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -