📄 dm642main.c
字号:
/********************************************************************/
/* Copyright 2004 by SEED Incorporated. */
/* All rights reserved. Property of SEED Incorporated. */
/* Restricted rights to use, duplicate or disclose this code are */
/* granted through contract. */
/* */
/********************************************************************/
#include <csl.h>
#include <csl_emifa.h>
#include <csl_irq.h>
#include <csl_chip.h>
#include "seeddm642.h"
#include "seeddm642_flash.h"
/*SEEDDM642的emifa的设置结构*/
EMIFA_Config Seeddm642ConfigA ={
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];
/*此程序可将四个采集口的数据经过Video Port0送出*/
void main()
{
Uint16 i, j, k, page, limit;
Uint32 startaddr, addr;
/*-------------------------------------------------------*/
/* perform all initializations */
/*-------------------------------------------------------*/
/*Initialise CSL,初始化CSL库*/
CSL_init();
/*----------------------------------------------------------*/
/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间
注,DM642支持的是EMIFA,而非EMIF*/
EMIFA_config(&Seeddm642ConfigA);
/*----------------------------------------------------------*/
/*中断向量表的初始化*/
//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的测试*/
/*测试每一页*/
/* Program the Flash page by page, 256 words at a time */
/* Set Flash page,选择第0页 */
page = 0;
for(page = 0;page<8;page++)
{
SEEDDM642_rset(SEEDDM642_FLASHPAGE, page);
/*等待延时*/
SEEDDM642_waitusec(1);
/* Erase all of the Flash for each page */
SEEDDM642_FLASH_erase(SEEDDM642_FLASH_BASE, SEEDDM642_FLASH_PAGESIZE);
/*等待延时*/
SEEDDM642_waitusec(1);
}
/*取FLASh的首址*/
addr = SEEDDM642_FLASH_BASE;
for(page = 0;page<8;page++)
{
/*取FLASh的首址*/
addr = SEEDDM642_FLASH_BASE;
/* Set Flash page*/
SEEDDM642_rset(SEEDDM642_FLASHPAGE, page);
/*等待延时*/
SEEDDM642_waitusec(1);
/*将数据写入第0页,每页512K*/
limit = 8;
for (i = 0; i < limit; i++)
{
for (j = 0; j < 128; j++)
{
startaddr = addr;
/*每次写入512个字节,以16位的数据为基数*/
for (k = 0; k < 256; k++)
{
buffer[k] = (addr + i + page) & 0xffff;
addr += 2;
}
SEEDDM642_FLASH_write((Uint32)buffer, startaddr, 512);
}
}
}
/* Verify the Flash page by page, 512 bytes at a time */
for (page = 0; page < 8; page++)
{
/*取FLASh的首址*/
addr = SEEDDM642_FLASH_BASE;
/* Set Flash page */
SEEDDM642_rset(SEEDDM642_FLASHPAGE, page);
/*等待延时*/
SEEDDM642_waitusec(1);
addr = SEEDDM642_FLASH_BASE;
limit = 8;
for (i = 0; i < limit; i++)
{
for (j = 0; j < 128; j++)
{
startaddr = addr;
SEEDDM642_FLASH_read(startaddr, (Uint32)buffer, 512);
for (k = 0; k < 256; k++)
{
if (buffer[k] != ((addr + i + page) & 0xffff))
{
/*写入出错*/
for(;;){}
}
addr += 2;
}
}
}
}
/*测试完成*/
printf("Flash test is OK!\n");
for(;;){}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -