📄 erase_flash.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include "c6211dsk.h"
#include "public.h"
#include "drv__led.h"
#define FLASH_ADDRS (0x90000000)
void config_emif(void);
BOOL poll_data(UC * , UC);
BOOL erase_flash( UC * );
void main(void)
{
UC *dst_addr;
BOOL Res;
dst_addr = (UC *)FLASH_ADDRS;
config_emif();
CloseAllLed();
Res = erase_flash( dst_addr );
while(1)
{
if( Res == TRUE )
{
OpenLed0();
delay_msec(MSEC);
CloseLed0();
delay_msec(MSEC);
}
else
{
OpenLed1();
delay_msec(MSEC);
CloseLed1();
delay_msec(MSEC);
}
}
}
void OpenLed0(void)
{
struct IOStruct *io_struct;
io_struct = (struct IOStruct*)IO_ADDR;
io_struct->Led0 = LED_ON;
}
void CloseLed0(void)
{
struct IOStruct *io_struct;
io_struct = (struct IOStruct*)IO_ADDR;
io_struct->Led0 = LED_OFF;
}
void OpenLed1(void)
{
struct IOStruct *io_struct;
io_struct = (struct IOStruct*)IO_ADDR;
io_struct->Led1 = LED_ON;
}
void CloseLed1(void)
{
struct IOStruct *io_struct;
io_struct = (struct IOStruct*)IO_ADDR;
io_struct->Led1 = LED_OFF;
}
void OpenLed2(void)
{
struct IOStruct *io_struct;
io_struct = (struct IOStruct*)IO_ADDR;
io_struct->Led2 = LED_ON;
}
void CloseLed2(void)
{
struct IOStruct *io_struct;
io_struct = (struct IOStruct*)IO_ADDR;
io_struct->Led2 = LED_OFF;
}
void OpenLed3(void)
{
struct IOStruct *io_struct;
io_struct = (struct IOStruct*)IO_ADDR;
io_struct->Led3 = LED_ON;
}
void CloseLed3(void)
{
struct IOStruct *io_struct;
io_struct = (struct IOStruct*)IO_ADDR;
io_struct->Led3 = LED_OFF;
}
void OpenAllLed(void)
{
struct IOStruct *io_struct;
io_struct = (struct IOStruct*)IO_ADDR;
io_struct->Led0 = LED_ON;
io_struct->Led1 = LED_ON;
io_struct->Led2 = LED_ON;
io_struct->Led3 = LED_ON;
}
void CloseAllLed(void)
{
struct IOStruct *io_struct;
io_struct = (struct IOStruct*)IO_ADDR;
io_struct->Led0 = LED_OFF;
io_struct->Led1 = LED_OFF;
io_struct->Led2 = LED_OFF;
io_struct->Led3 = LED_OFF;
}
void config_emif(void)
{
*(unsigned volatile int *)EMIF_GCR = 0x00000018;
/* *(unsigned volatile int *)EMIF_CE1 = 0xFFFFFF13; */ /* FLASH: ADDR=0x90000000, 16-bit-wide */
*(unsigned volatile int *)EMIF_CE1 = 0xFFFFFF03; /* FLASH: ADDR=0x90000000, 8-bit-wide */
*(unsigned volatile int *)EMIF_CE0 = 0xFFFFFF13; /* ADDR = 0x80000000 */
*(unsigned volatile int *)EMIF_CE2 = 0xFFFFFF33; /* SDRAM: ADDR=0x0A0000000 */
*(unsigned volatile int *)EMIF_CE3 = 0xFFFFFF13; /* ARRD = 0x0B0000000 */
*(unsigned volatile int *)EMIF_SDCTRL = 0x07117000;
*(unsigned volatile int *)EMIF_SDRP = 0x0000061A;
*(unsigned volatile int *)EMIF_SDEXT = 0x00054519;
}
/*******delay msec ms *******/
void delay_msec(short msec)
{
int timer_limit = (msec*9375)<<2;
int time_start;
timer0_start();
time_start = timer0_read();
while ((timer0_read()-time_start) < timer_limit);
}
/*****************************/
int timer0_read()
{
int i;
i = *(unsigned volatile int *)TIMER0_COUNT;
return i;
}
/******************************/
void timer0_start()
{
/* Hold the timer */
*(unsigned volatile int *)TIMER0_CTRL &= 0xff3f;
/* Use CPU CLK/4 */
*(unsigned volatile int *)TIMER0_CTRL |= 0x200;
/* Set for 32 bit counter */
*(unsigned volatile int *)TIMER0_PRD |= 0xffffffff;
/* Start the timer */
*(unsigned volatile int *)TIMER0_CTRL |= 0xC0;
}
/*------------------------------------------------------*/
/*---------------------polling data---------------------*/
/*------------------------------------------------------*/
BOOL poll_data(UC *prog_ptr, UC prog_data)
{
UC data;
data = (UC) * prog_ptr;
if( (data&0x80) != prog_data )
return FALSE;
return TRUE;
}
/*----------------------------------------------------*/
/*-----------------------erase flash------------------*/
/*----------------------------------------------------*/
BOOL erase_flash( UC * flash_ptr )
{
BOOL pass = TRUE;
int i;
UC * ctrl_addr1 = (UC *) (flash_ptr + (0x555));
UC * ctrl_addr2 = (UC *) (flash_ptr + (0x2aa));
*ctrl_addr1 = 0xaa;
*ctrl_addr2 = 0x55;
*ctrl_addr1 = 0x80;
*ctrl_addr1 = 0xaa;
*ctrl_addr2 = 0x55;
*ctrl_addr1 = 0x10;
for( i=0;i<18;i++ )
{
OpenAllLed();
delay_msec(500); /* 1s */
CloseAllLed();
delay_msec(500); /* 1s */
}
pass = poll_data( (UC *)flash_ptr, (UC)0x80 );
return pass;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -