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

📄 write_flash.c

📁 ccs环境下的FLASH烧写文件
💻 C
字号:
#include  <std.h>
#include <string.h>
#include <stdio.h>
#include "write_flashcfg.h"

void dsp_init();
int mcbsp_init();
void flash_earse();
void flash_program(long code_len);

Uint16 err = 0;
Uint16 old_intm;
Uint16 rcvEventId, xmtEventId;
int code_low=0,code_high=0;
long code_length = 0;

unsigned long display=0;
unsigned int a=0;


int ioport *port0;
int ioport *port1;

/*-----------------------------------------------------------------*/
Uint16 MCBSP_read8(MCBSP_Handle _MCBSP) {
  Uint16 val;
  MCBSP_ASSERT_HANDLE(_MCBSP,return 0xFFFFFFFF);
  val = _PREG_GET(((MCBSP_PrivateObj*)_MCBSP)->Drr1Addr);
  return (val & 0x00ff);
}
/*-----------------------------------------------------------------*/
void MCBSP_write8(MCBSP_Handle _MCBSP,Uint16 Val) {
MCBSP_ASSERT_HANDLE(_MCBSP,return);
_PREG_SET((((MCBSP_PrivateObj*)_MCBSP)->Dxr1Addr),(Val & 0xff));
}


main()
{  
	long i;
	int ioport * EBCR;
	dsp_init();
	mcbsp_init(); 
		
	EBCR=(int *)0x6c00;
	*EBCR=0x01;
	*(int *)0x600014 = 0x1;//LED3 OFF
	*(int *)0x600004 = 0x0;//LED1 OFF
	 *(int *)0x600005 = 0x0;//LED2 OFF
	*(int *)0x600004 = 0x1;//LED1 ON
	flash_earse();
 	for(i=0;i<6000000;i++);
 	*(int *)0x600004 = 0x0;//LED1 OFF
 	*(int *)0x600005 = 0x1;//LED2 ON
 	code_low = *(int *)0x800b;
	code_high = *(int *)0x800c;
	code_length = ((long)code_high<<16)|code_low;
    flash_program(code_length);
    *(int *)0x600005 = 0x0;//LED2 OFF
	exit(0);
}


void dsp_init()
{  

    port0=(int *)0x6c00;
    *port0=0x1;
}

int mcbsp_init()
{
		
	old_intm = IRQ_globalDisable();
    // Get Event Id's associated with MCBSP 0 receive and transmit 
    rcvEventId = MCBSP_getRcvEventId(hMcbsp0);
 	 // Clear any pending receive/transmit interrupts 
    IRQ_clear(rcvEventId);            
  	IRQ_disable(rcvEventId);          
    // Enable all maskable interrupts 
  	IRQ_globalRestore(old_intm);
    /* in the code automatically generated by the DSPBIOS/CCSL GUI config*/
    MCBSP_start(hMcbsp0,
              MCBSP_XMIT_START | MCBSP_RCV_START |
              MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC,
                0x300u);
   MCBSP_ASSERT_HANDLE(hMcbsp0,return 11); 
   return 1;
	

}
    

void flash_program(long code_len)
{   
	long program_cnt = 0,i = 0,j=2;
  
	for(program_cnt=0;program_cnt<code_len*2+4;program_cnt+=4)
	{	
    	//写使能
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, 0x06);	
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, 0x00);           
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, 0x00);	
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, 0x00);	
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, 0x00);           
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, 0x00);	
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, 0x00);           
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, 0x00);
		
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, 0x02); 
		//写地址          
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, program_cnt>>16);	
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, program_cnt>>8);	
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, program_cnt);	
		while (!MCBSP_xrdy(hMcbsp0)); 
		//写第一个字(word)
		a=*(int *)(0x800b+j);
		MCBSP_write8(hMcbsp0, a>>8);	
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, a);
		j++;
		//写第二个字(word)
		a=*(int *)(0x800b+j);
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, a>>8);
		while (!MCBSP_xrdy(hMcbsp0)); 
		MCBSP_write8(hMcbsp0, a); 
		
		j++;
		for(i=0;i<20000;i++);
	}
}


void flash_earse()
{
	//写使能
	while (!MCBSP_xrdy(hMcbsp0));  
	MCBSP_write8(hMcbsp0, 0x06);	
 	while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);           
    while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);	
 	while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);	
 	while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);           
    while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);	
 	while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);           
    while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);

 	while (!MCBSP_xrdy(hMcbsp0));  
	MCBSP_write8(hMcbsp0, 0x62);	
 	while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);           
    while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);	
 	while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);	
 	while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);           
    while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);	
 	while (!MCBSP_xrdy(hMcbsp0)); 
 	MCBSP_write8(hMcbsp0, 0x00);           
    while (!MCBSP_xrdy(hMcbsp0)); 
	MCBSP_write8(hMcbsp0, 0x00);

}

⌨️ 快捷键说明

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