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

📄 flashburn.c

📁 实现TMS320C6713的Flash烧写程序
💻 C
字号:
//#include "type.h"
#include <stdio.h>
#include <csl.h>
#include <csl_emif.h>
#include <csl_pll.h>


#define EMIF_CE1		0x01800004	/* Address of EMIF CE1 control			*/

#define FLASH_SIZE		0x4000                                       /* 1M X 16bit */
#define FLASH_START		0x90000000
#define FLASH_END		(FLASH_START + FLASH_SIZE)

#define FLASH_ADR1		*(volatile char *)(0x90000000 +(0x0555<<1))
#define FLASH_ADR2		*(volatile char *)(0x90000000 +(0x02AA<<1))
#define FLASH_KEY1		0xAA
#define FLASH_KEY2		0x55
#define FLASH_KEY3		0xA0
#define FLASH_KEY4		0x80
#define FLASH_KEY5		0x10

#define CE1_16			0x02208812 

unsigned short *flashstart = (unsigned short *)FLASH_START;
unsigned short *flashnext  = (unsigned short *)FLASH_START;

/* 函数声明 */
void DEC6713_init(void);
void InitFlash(void);
void EraseFlash(unsigned int nBytes);
void BurnFlash(unsigned char *addr, unsigned int nBytes);
void FlashDelay(unsigned short count);


unsigned int nBytes = 0;  
char flag = 0; 

main()
{
   
   CSL_init();
   
   DEC6713_init();
   
   InitFlash();
   
   EraseFlash(nBytes);
   printf("Erase successed!");
   
   //BurnFlash((unsigned char *)0x0000,0x0200);             //烧写vectors
   //printf(" \nBurn vectors successed!");
   
   flashnext = (unsigned short *)(0x90000000);
   BurnFlash((unsigned char *)0x0000,0x0400);              //烧写bootload
   printf(" \nBurn bootload successed!");
   
   flashnext = (unsigned short *)(0x90000400);    
   BurnFlash((unsigned char *)0x0400,0x3200);             //烧写.text
   printf(" \nBurn text successed!");
  
}

void FlashDelay(unsigned short count)
{
   unsigned short i = count;
   while(i--);
}      

void InitFlash(void)
{
   *(unsigned int *)EMIF_CE1 = CE1_16;
   flashstart = (unsigned short *)FLASH_START;                   /* flashstart = 0x90000000 */
   flashnext = flashstart;
}	
		

void EraseFlash(unsigned int nBytes)
{				 
	
	/*  16MBit (2M X 8) Flash Memory */
    /*  擦除指令 555:AA /2AA:55/ 555:80 /555:AA/ 2AA:55/ 555:10 */ 
    
	FLASH_ADR1 = (char)FLASH_KEY1;		//AAH
	FlashDelay(10);
	FLASH_ADR2 = (char)FLASH_KEY2;		//55H
	FlashDelay(10);
	FLASH_ADR1 = (char)FLASH_KEY4;		//80H
	FlashDelay(10);

	FLASH_ADR1 = (char)FLASH_KEY1;		//AAH
	FlashDelay(10);
	FLASH_ADR2 = (char)FLASH_KEY2;		//55H
	FlashDelay(10);
	FLASH_ADR1 = (char)FLASH_KEY5;		//10H
	FlashDelay(2000);
	
	/* Spin here 'til erasing completes
	 */
     
	while(*flashstart != 0xFFFF);
	
	flag = 1; 			
	return;
}
   

void BurnFlash(unsigned char *addr, unsigned int nBytes)
{
    unsigned short timeout;
	unsigned short c;
	unsigned int nWords = nBytes/2;
	
    if(flag == 1)
    {
	  
	  while(nWords--)	
	  
	 {
		/*  16MBit (2M X 8) Flash Memory */
		/*  编程指令 555:AA /2AA:55/ 555:A0  */ 		
		FLASH_ADR1 = (char)FLASH_KEY1;		//AAH
		FlashDelay(20);
		FLASH_ADR2 = (char)FLASH_KEY2;		//55H
		FlashDelay(20);
		FLASH_ADR1 = (char)FLASH_KEY3;		//A0H
		FlashDelay(20);
	
		*flashnext = ((unsigned short)*addr++) | (((unsigned short)*addr)<<8);
		
		FlashDelay(200);
		
		/* Spin here 'til programming completes
		 */
		c = (((unsigned short)*addr--)<<8) | ((unsigned short)*addr++);
		addr++;

		timeout = 0;
		do timeout += 1;
		while(*flashnext != c && timeout < (unsigned short)0xffff);
		
		flashnext++;
	 }
   }	
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -