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

📄 main.c.bak

📁 6416 emif flash 引导烧写程序
💻 BAK
字号:

#include <stdio.h>
#include <c6x.h>
#include "c6416h.h"


#define FLASH_BEGIN   0x64000000   /*FLASH begin address*/


void test_IRAM( unsigned int RAM_add, int length);
void SDRAM_test( unsigned int sdram_add, int length);
void emifa_init();
void emifb_init();
void erase_flash();
void flash_write(unsigned int FLASH_add,  int code_size);
void flash_read(unsigned int FLASH_add, int code_size); 
void DelayTime(int value);
/*-------------------------------------------------------------------------*/
/* main() begin                                                                 */
/*-------------------------------------------------------------------------*/
void main()
{

    /* DSP initialization                                                       */
  	CSR=0x100;                           /* Disable all interrupts              */
  	IER=1;                               /* Disable all interrupts except NMI   */
  	ICR=0xffff;                          /* Clear all pending interrupts        */

	printf("*TMS320C6416 hello *\n");
	
//	test_IRAM( 0x00020000, 50);      /* test interal Ram*/
	emifa_init();

	SDRAM_test(0x80100000, 200);
	
	emifb_init();
	erase_flash();
	flash_write(0x64000000, 100);
	flash_read(0x64000000, 100); 
	
	
	printf("*END*\n");
}

/*---------------- main() end -----------------------------------*/

/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
 /*test interal ram*/
void test_IRAM( unsigned int RAM_add, int length)
	{
		unsigned int *ptr_ram;
		int i;
		
		ptr_ram = (unsigned int*) RAM_add;
		for (i=0;i<length;i++)
		{
			*ptr_ram++ = i;
			printf("i=0x%08x\n",i);
		}
 
		ptr_ram = (unsigned int*) RAM_add;
		for (i=0;i<length;i++)
		{
	    	int temp;
			temp = *ptr_ram++ ;
			printf("Read=0x%08x at Address=0x%08x\n",temp,(ptr_ram-1));
		}
     } 

/*-------------------------------------------------------------------------*/
 /*EMIFA  intalize  --SDRAM */
 
void emifa_init()
{ 
 	*(unsigned volatile int *) EMIFA_GBLCTL = 0x00000020;
 	*(unsigned volatile int *) EMIFA_CE0 = 	0xffffff33;
 	*(unsigned volatile int *) EMIFA_CESEC0 = 0x00000005;
 	*(unsigned volatile int *) EMIFA_SDEXT = 0x00054505;
 	*(unsigned volatile int *) EMIFA_SDTIM = 0x000003d1;
 	*(unsigned volatile int *) EMIFA_SDCTL = 0x47113000;  
}
/*-------------------------------------------------------------------------*/
 /*EMIFB  intalize  -- FLASH  */
 
void emifb_init()
{ 
 	*(unsigned volatile int *) EMIFB_GBLCTL = 0x00000020;
 	*(unsigned volatile int *) EMIFB_CE1 = 	0xffffff33;
 	*(unsigned volatile int *) EMIFB_CESEC1 = 0x00000005;
}

/*-------------------------------------------------------------------------*/
 /*SDRAM test*/
void SDRAM_test( unsigned int sdram_add, int length)
	{
		unsigned int *ptr_ram;
		int i;
		
		ptr_ram = (unsigned int*) sdram_add;
		for (i=0;i<length;i++)
		{
			*ptr_ram++ = 0x55555555;
//			*ptr_ram++ = 0xaaaaaaaa;
//			*ptr_ram++ = i;
//  		     printf("i=0x%08x\n",i);
		}
 
		ptr_ram = (unsigned int*) sdram_add;
		for (i=0;i<length;i++)
		{
	    	int temp;
			temp = *ptr_ram++ ;
			printf("Read=0x%08x at Address=0x%08x\n",temp,(ptr_ram-1));
		}
     } 

/*************************************************************************/
void erase_flash()

{
  
    int temp = 0;
    unsigned  char *flash_ptr;
    *(unsigned volatile char*)FLASH_ADR1=0xaa;    //0x9000aaaa
    *(unsigned volatile char*)FLASH_ADR2=0x55;    //0x90005555
    
    *(unsigned volatile char*)FLASH_ADR1=0x80;
     
    *(unsigned volatile char*)FLASH_ADR1=0xaa;
   
    *(unsigned volatile char*)FLASH_ADR2=0x55;
  
    *(unsigned volatile char*)FLASH_ADR1=0x10;
   
    
     while (temp != 0x0080 )
      {flash_ptr=(unsigned  char *)FLASH_BEGIN;
      temp = *flash_ptr;
      temp = temp & 0x0080;   /*check DQ7="1"? "1"=erase complete.*/
      }
      
      
                     /*查RY/BY=0*/
}

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

void flash_write(unsigned int FLASH_add,  int code_size)
{

      int i;
      unsigned  char *flash_ptr;
           	  
      flash_ptr=(unsigned  char *)FLASH_add;  /*give flash_ptr=0x90000000*/

      for (i=0;i<code_size;i++)
             {    
               *(unsigned  char *)FLASH_ADR1=0xaa;
               *(unsigned  char *)FLASH_ADR2=0x55;
               *(unsigned  char *)FLASH_ADR1=0xa0;
               
//                 flash_ptr=(unsigned  char *)(FLASH_BEGIN1+2*i); 
                  
                *flash_ptr++ = 0x55;
//             	printf("%0X\n",flash_ptr );//
//           	printf("%0X\n",*flash_ptr );//

                DelayTime(20);  //delay do not<20
      }
  
} 

 
/*************************************/      
 /*read from flash */     
void flash_read(unsigned int FLASH_add, int code_size) 
{
      int i;
      unsigned char temp;
      unsigned  char *flash_ptr;
//       unsigned  char *ram_ptr;

//     *(unsigned volatile short *)FLASH_ADR1=0xaa;
//     *(unsigned volatile short *)FLASH_ADR2=0x55;
//     *(unsigned volatile short *)FLASH_ADR1=0xf0;
 
     flash_ptr=(unsigned char *)FLASH_add;
        for (i=0;i<code_size;i++)
            {
//             flash_ptr=(unsigned  short *)(FLASH_BEGIN1+2*i);
             temp = *flash_ptr++;
             
//             ram_ptr=(unsigned  short *)(RAM_BEGIN1+i);
//             *ram_ptr = temp; 
             DelayTime(10);
//             printf("read=0x%08x\n",temp);
           printf("read=0x%08x at address=0x%08x\n",temp,(flash_ptr-1));
            //flash_ptr++ ;
            }
    
}

/*********************************/
void DelayTime(int value)
{
    
    while(value--)
    printf(" ");
}

/*********************************/
/* END OF FILE */

⌨️ 快捷键说明

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