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

📄 test.c

📁 该代码实现了 两次下载法在dspC6713平台上 烧写flash的操作过程
💻 C
字号:
#include "includes.h"
#include <c6x.h>


void main (void)
{   

	unsigned int i,j,k,data;

  	unsigned int test_buffer,add_buffer2;
  
	unsigned int buffer_addr1;
//	unsigned int buffer_temp=0x80500000;
	
	
	*(unsigned volatile int *)PLLCSR  &=0xfffe; /*(1) PLLEN(bit0)=0*/
	for(i=0;i<4;i++);/*(2)wait */
//	asm("nop");
	*(unsigned volatile int *)PLLCSR  |=0x08;/*(3)PLLRST=1*/

	*(unsigned volatile int *)PLLDIV0 =0x8001; /*(4) devide 2 =25*/
	for(i=0;i<8;i++);
	*(unsigned volatile int *)PLLM	  =0x0009; /*PLL * 9 =225*/
	for(i=0;i<8;i++);	
	*(unsigned volatile int *)PLLDIV1 =0x8000;  /*(5)devide 2 =112.5*/
	for(i=0;i<8;i++);
	*(unsigned volatile int *)PLLDIV2 =0x8000;  /* devide 1 */
	for(i=0;i<8;i++);
	*(unsigned volatile int *)PLLDIV3 =0x8001;  /* devide 1 */	
	for(i=0;i<100;i++);							/**6*/
	*(unsigned volatile int *)PLLCSR  &=0xfff7;/*(7)PLLRST=0*/
	for(i=0;i<100;i++);							/**8*/
	*(unsigned volatile int *)PLLCSR  |=0x01; /*(1) PLLEN(bit0)=1*/
	
  	*(unsigned volatile int *)DEVCFG  =0;/*emif clock out = sysclk3*/
  	
	/* DSP initialization                                                       */
	CSR=0x100;                           /* Disable all interrupts              */
	IER=1;                               /* Disable all interrupts except NMI   */
	ICR=0xffff;                          /* Clear all pending interrupts        */
	
	*(unsigned volatile int *)EMIF_GCR = 0x3338;    /* EMIF global control      */
	*(unsigned volatile int *)EMIF_CE1 = 0xffffff13;//0x23b10513;    /* EMIF CE1 control, 32bit  */
	*(unsigned volatile int *)EMIF_CE2 =0xFFFFFF23; //0x11E1C722;  /* EMIF CE2 control, 32bit  */
	*(unsigned volatile int *)EMIF_CE3 = 0xFFFFFF23;  /* EMIF CE3 control, 32bit  */
	*(unsigned volatile int *)EMIF_SDCTRL = 0x07126000; /* EMIF SDRAM control   */ 
	*(unsigned volatile int *)EMIF_CE0 = 0x30;      /* EMIF CE0 control         */
	*(unsigned volatile int *)EMIF_SDRP = 0x61a;    /* EMIF SDRM refresh period */
	*(unsigned volatile int *)EMIF_SDEXT= 0x54529;  /* EMIF SDRM extension      */

      
  	*(unsigned  int *)(0xa00004fc)=0x12b7c;
  
   test_buffer=0xa00004fc;

   (*(unsigned int *)(test_buffer))=0x12b7c; 
  

       
	test_buffer=0x1940000;//TIMER0_CTRL
	buffer_addr1=0x1980000;//TIMER1_CTRL       		
///*****************/*erase*/
     *(unsigned short int *)(0x90000000+0x5555*2)=0xAAAA; 
     
     *(unsigned short int *)(0x90000000+0x2AAA*2)=0x5555;
     
     *(unsigned short int *)(0x90000000+0x5555*2)=0x8080;
     
     *(unsigned short int *)(0x90000000+0x5555*2)=0xAAAA;
     
     *(unsigned short int *)(0x90000000+0x2AAA*2)=0x5555;
     
     *(unsigned short int *)(0x90000000+0x8000)=0x5050;//30-sector;50-block-0x8000;10-chip

     for(i=0;i<100;i++);
     j=*(unsigned short int *)(0x90008004);
     while(!(j&0x80))
     	j=*(unsigned short int *)(0x90008004);
     for(i=0;i<100;i++);
     
     
     

//***************burn sram to flash *******     
  k=0x000; //user code start address  boot 0-0x400 , user :0x400-0x1400 	
  data=0;
  while(k<0x400)  //BOOT
  {
  	 *(unsigned short int *)(0x90000000+0x5555*2)=0xAAAA;
     
     *(unsigned short int *)(0x90000000+0x2AAA*2)=0x5555;
     
     *(unsigned short int *)(0x90000000+0x5555*2)=0xA0A0;
     
     /*0x90000000+k 如果k+=1的话造成地址重复写 */
     *(unsigned short int *)(0x90000000+k)= *(unsigned short int *)(0x0000+k);
     for(i=0;i<300;i++);//延时

     k+=2;/* 还是要加2 */

   } 
 
//***************burn sdram to flash *******  
//user code start address  boot 0-0x400 , user :0x400-0x1400 
   
  k=0x000; 	
  while(k<0x1B00)  //user code
  {
  	 *(unsigned short int *)(0x90000000+0x5555*2)=0xAAAA;
     
     *(unsigned short int *)(0x90000000+0x2AAA*2)=0x5555;
     
     *(unsigned short int *)(0x90000000+0x5555*2)=0xA0A0;
     
     /*0x90000000+k 如果k+=1的话造成地址重复写 */
     *(unsigned short int *)(0x90000400+k)= *(unsigned short int *)(0x80000000+k);
     for(i=0;i<300;i++);//延时

     k+=2;/* 还是要加2 */

   } 
       
	while(1)//led blink 
	{
			(*(unsigned int *)test_buffer)|=0x04; //off
			for(i=0;i<0x3FFFFF;i++);
			(*(unsigned int *)test_buffer)&=0x0B;  //on
			for(i=0;i<0x3FFFFF;i++);	
			(*(unsigned int *)buffer_addr1)|=0x04;
			for(i=0;i<0x3FFFFF;i++);
			(*(unsigned int *)buffer_addr1)&=0x0B;
			for(i=0;i<0x3FFFFF;i++); 
	} 
                                                                  
}
/*
   *(unsigned short int *)(0x90000000+0x5555*2)=0xAAAA; //erase
     
     *(unsigned short int *)(0x90000000+0x2AAA*2)=0x5555;
     
     *(unsigned short int *)(0x90000000+0x5555*2)=0x8080;
     
     *(unsigned short int *)(0x90000000+0x5555*2)=0xAAAA;
     
     *(unsigned short int *)(0x90000000+0x2AAA*2)=0x5555;
     
     *(unsigned short int *)(0x90000000+0x5555*2)=0x1010;

     for(i=0;i<100;i++);
     j=*(unsigned short int *)(0x90008004);
     while(!(j&0x80))
     	j=*(unsigned short int *)(0x90008004);
     for(i=0;i<100;i++);
  i=0;   
  k=0;	
  while(k<0x100)
  {
  	 *(unsigned short int *)(0x90000000+0x5555*2)=0xAAAA;
     
     *(unsigned short int *)(0x90000000+0x2AAA*2)=0x5555;
     
     *(unsigned short int *)(0x90000000+0x5555*2)=0xA0A0;
     
     
     *(unsigned short int *)(0x9000c400+k)=(k+1)*256+k;
     for(i=0;i<100;i++);
     j=*(unsigned short int *)(0x90000000);
     while(!(j&0x80))
     	j=*(unsigned short int *)(0x90000000);
     i++;
     k+=2;
     if(i>255) i=0;

   }  

*/

⌨️ 快捷键说明

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