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

📄 flash_prog.c

📁 基于ti公司6711dsp的flash读/写源程序。运行环境为ccs3.2
💻 C
字号:
/*******************************************************************************

* FILENAME

*   flash_prog.c

*

* DESCRIPTION

*   DSK flash programming - DSP Code

*

* REVISION HISTORY

*	Changed PAGE_SIZE to FLASH_WRITE_SIZE

*	Update of SDRAM configuration

*

*******************************************************************************/



#include <stdio.h>

#include <c6x.h>

#include "c6211dsk.h"

#define PWD 0x12345678  



int flash_page_prog( unsigned int src_addr, unsigned int dst_addr, int page_size);



#pragma DATA_SECTION(host_buffer, "Host_Buffer")

  unsigned int host_buffer[33];

  unsigned int start_addr, prog_ptr, prog_flag, page_count, checksum, i;

  char *check_ptr;



/*-------------------------------------------------------------------------*/

/* main()                                                                  */

/*-------------------------------------------------------------------------*/



int main()

{

  /* dsp and peripheral initialization */    

  CSR=0x100;			           /* disable all interrupts            */

  IER=1;                           /* disable all interrupts except NMI */

  ICR=0xffff;                      /* clear all pending interrupts      */



/*************************************************************************

* Standard 6211/6711 DSK includes 2 MT48LC1M16A1-7 devices = 4MB SDRAM   *

* For these devices use the following parameter:                         *

*   EMIF_SDCTRL=0x07126000                                               *

* If MT48LC1M16A1-10 devices are installed use the following parameter:  *

*   EMIF_SDCTRL=0x07227000                                               *

* /|\ 16Mb parts = 4MB SDRAM /|\   *-------------------------------------*

*----------------------------------*   \|/ 64Mb parts = 16MB SDRAM \|/   *

* If MT48LC4M16A2-10 devices are installed use the following parameter:  *

*   EMIF_SDCTRL=0x57227000                                               *

*************************************************************************/



  *(unsigned volatile int *)EMIF_GCR = 0x3300; /* EMIF global control   */

  *(unsigned volatile int *)EMIF_CE0 = 0x30;   /* EMIF CE0control       */

  *(unsigned volatile int *)EMIF_CE1 = 0xffffff03; /* EMIF CE1 control, 8bit async */

  *(unsigned volatile int *)EMIF_SDCTRL = 0x07126000; /* EMIF SDRAM control ZZ    */

  *(unsigned volatile int *)EMIF_SDRP = 0x61a;       /* EMIF SDRM refresh period */



  host_buffer[0] = PWD;  /* send flag, indicating dsp is ready  */

  

  while(host_buffer[0] != 0);    /* wait host acknowledge  */

  start_addr = host_buffer[1];   /* save start programming address */

  prog_ptr = start_addr;         /* initialize pointer value   */

  page_count = 0;                /* initialize programmed page counter */

  prog_flag = 1;                 /* set prog_flag */



  while(prog_flag)               /* loop of receiving host data & program flash */

  {

     while (host_buffer[0] == 0); /* wait to receive a host packet data */

	 if (host_buffer[0] == 1)    /* check if last packet */

	 {

	   flash_page_prog((unsigned int)&host_buffer[1], prog_ptr, FLASH_WRITE_SIZE); /* prog a page of flash */

	   prog_ptr += FLASH_WRITE_SIZE;      /* update programming pointer */

	   page_count++;               /* increment the programmed page counter */

	   host_buffer[0] = 0;         /* send acknowledgement to host */  

	 }

	 else

	 {

	   prog_flag = 0;

	   host_buffer[0] = 0;

	 }

  } 

   

  checksum = 0;                  /* initialize checksum */

  check_ptr = (char *)start_addr; 

  for (i = 0; i < page_count*FLASH_WRITE_SIZE; i++)

  {

	  checksum += *check_ptr++;

  }



  while ( host_buffer[0] == 0 );

  host_buffer[1] = checksum;

  host_buffer[0] = PWD;

  while(1);

}



int flash_page_prog( unsigned int src_addr, unsigned int dst_addr, int page_size)

{

  int i;

  char temp,temp1;

  char *flash_ptr = (char *)dst_addr;

  char *src_ptr = (char *)src_addr;



  *(char *)FLASH_ADR1 = FLASH_KEY1;

  *(char *)FLASH_ADR2 = FLASH_KEY2;

  *(char *)FLASH_ADR1 = FLASH_KEY3;

  for (i=0;i<page_size;i++) *flash_ptr++ = *src_ptr++;

  temp = *--flash_ptr;

  temp1 = *--src_ptr;

  while ( temp != temp1)

  {

    temp = *flash_ptr;

  }

  return 0;

}



⌨️ 快捷键说明

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