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

📄 flash_prog.c

📁 使用在dsp TI DSK6711中 很多controller 的例子
💻 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 + -