📄 flashshaoxie.c
字号:
#include <stdio.h>
#include <c6x.h>
#include "C6713regs.h"
void delay(int period)
{
int n=0;
int i=0;
for(n=0;n<period;n++)//500
{
i++;
}
}
void init(void)
{
*(int *)PLLCSR&=0x0FFFFFFFE;
delay(20);
*(int *)PLLCSR|=0x00000008;
delay(20);
*(int *)PLLDIV0=0x00008000;
*(int *)PLLM=0x00000008;
*(int *)OSCDIV1=0x00008003;
delay(20);
*(int *)PLLDIV1=0x00008001;
delay(20);
*(int *)PLLDIV2=0x00008003;
delay(20);
*(int *)PLLDIV3=0x00008003;
delay(20);
*(int *)PLLCSR&=0x0FFFFFFF7;
delay(1500);
*(int *)PLLCSR|=0x00000001;
delay(20);
*(int *)EMIF_GCTL=0x00003378;
*(int *)EMIF_CE0=0xFFFFFF33;
*(int *)EMIF_CE1 = 0xFFFFFF13;
*(int *)EMIF_CE2 = 0xFFFFFF23;
*(int *)EMIF_CE3 = 0xFFFFFF23;
*(int *)EMIF_SDCTL = 0x57113000;
*(int *)EMIF_SDTIM = 0x000005DC;
*(int *)EMIF_SDEXT = 0x0008854B;
/******************************************************/
}
void erase_flash1(unsigned int flash_addr);
void poll_data(volatile unsigned short *prog_ptr,volatile unsigned short prog_data);
void program_flash1(unsigned int flash_addr,unsigned int data_addr,int length);
void program_flash2(unsigned int flash_addr,unsigned int data_addr,int length);
main()
{
init();
erase_flash1(FLASH_START1);//1
program_flash1(FLASH_START1,SOURCE_START,DATA_LENTH1);//3
program_flash2(FLASH_START2,SOURCE_START2,DATA_LENTH2);//4
delay(100);
delay(100);
while(1)
{delay(100);}
}
void erase_flash1(unsigned int flash_addr)
{
volatile unsigned short *FLASH_ADDR1=(volatile unsigned short*)(flash_addr+(0x5555<<1));
volatile unsigned short *FLASH_ADDR2=(volatile unsigned short*)(flash_addr+(0x2AAA<<1));
*FLASH_ADDR1=0xAA;
delay(1000);
*FLASH_ADDR2=0x55;
delay(1000);
*FLASH_ADDR1=0x80;
delay(1000);
*FLASH_ADDR1=0xAA;
delay(1000);
*FLASH_ADDR2=0x55;
delay(1000);
*FLASH_ADDR1=0x10;
delay(1000);
}
void program_flash1(unsigned int flash_addr,unsigned int data_addr,int length)
{
int i;
volatile unsigned short *FLASH_ADDR1=(volatile unsigned short *)(flash_addr+(0x5555<<1));
volatile unsigned short *FLASH_ADDR2=(volatile unsigned short *)(flash_addr+(0x2AAA<<1));
volatile unsigned short *flash_ptr=(volatile unsigned short *)flash_addr;
volatile unsigned short *data_ptr=(volatile unsigned short *)data_addr;
for(i=0;i<length;i++)
{
*FLASH_ADDR1=0xAA;
delay(1000);
*FLASH_ADDR2=0x55;
delay(1000);
*FLASH_ADDR1=0xA0;
delay(1000);
*flash_ptr=*data_ptr;
delay(1000);
poll_data(flash_ptr,*data_ptr);
flash_ptr++;
data_ptr++;
}
}
void program_flash2(unsigned int flash_addr,unsigned int data_addr,int length)
{
int i;
volatile unsigned short *FLASH_ADDR1=(volatile unsigned short *)(flash_addr+(0x5555<<1)-0x1000);
volatile unsigned short *FLASH_ADDR2=(volatile unsigned short *)(flash_addr+(0x2AAA<<1)-0x1000);
volatile unsigned short *flash_ptr=(volatile unsigned short *)flash_addr;
volatile unsigned short *data_ptr=(volatile unsigned short *)data_addr;
for(i=0;i<length;i++)
{
*FLASH_ADDR1=0xAA;
delay(1000);
*FLASH_ADDR2=0x55;
delay(1000);
*FLASH_ADDR1=0xA0;
delay(1000);
*flash_ptr=*data_ptr;
delay(1000);
poll_data(flash_ptr,*data_ptr);
flash_ptr++;
data_ptr++;
}
}
//==========================================================================================================
void poll_data(volatile unsigned short *prog_ptr,volatile unsigned short prog_data)
{
unsigned short srt_data;
unsigned short dst_data;
int fail=1;
while(fail)
{
srt_data=(unsigned short)*prog_ptr;
dst_data=(prog_data&0x00ff)>>7;
srt_data=(srt_data&0x00ff)>>7;
if(srt_data!=dst_data)
fail=1;
else
fail=0;
}
}
void init_mcbsp1(void)
{
*(volatile unsigned int *)McBSP1_SPCR =0x00000000;//SPCR1_XRST set 0
*(volatile unsigned int *)McBSP1_PCR =0x00002A00;//clkx1 fsx1 is output and set to "0" ;forbiden caiji image data
}
//==========================================================================================================
//initialize EMIF Registers
/*
void init_EMIF(void)
{
*(volatile unsigned int *)EMIF_GCTL=0x00003378; //EMIF Global Control Register
*(volatile unsigned int *)EMIF_CE0 =0xFFFFFF33;//0x10514110 //CE0 16-bit ASRAM
*(volatile unsigned int *)EMIF_CE1 =0xFFFFFF13; //CE1 16-bit ASRAM after boot[default]
*(volatile unsigned int *)EMIF_CE2 =0xfff1c121; //CE2 16-bit SDRAM
*(volatile unsigned int *)EMIF_CE3 =0xFFFFFF03; //CE3 asynch external interface,FIFO
*(volatile unsigned int *)EMIF_SDCTL=0x47202000;//SDRAM control register
*(volatile unsigned int *)EMIF_SDTIM=0x005DC271;//SDRAM time register for ECLK=10MHZ,CPU:20MHz
*(volatile unsigned int *)EMIF_SDEXT=0x00054525;//SDRAM Extension Register
}
*/
/*
void init(void)
{
*(int *)EMIF_GCTL=0x00003378;//0x00003378;//0x00000000;
*(int *)EMIF_CE0=0xFFFFFF33;//initial SDRAM
*(int *)EMIF_CE1 = 0xFFFFFF03;//initial 8bit flash
*(int *)EMIF_CE2 = 0xFFFFFF23;
*(int *)EMIF_CE3 = 0xFFFFFF23;
*(int *)EMIF_SDCTL = 0x53117000;
*(int *)EMIF_SDTIM = 0x000005DC;
*(int *)EMIF_SDEXT = 0x0008854B;
}
*/
//================================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -