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

📄 erase_flash.c

📁 ti tms320c6211 刷写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 + -