⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flashshaoxie.c

📁 flash在线烧写
💻 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 + -