?? flash_prog.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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -