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

📄 main.c

📁 6416 emif flash 引导烧写程序
💻 C
字号:
////////////////////////////////////////////////////////////////////////////////////
//测试条件:CPU时钟360M,EMIFB时钟60M
//
//
//
//
////////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <c6x.h>
#include <csl.h>
#include <csl_emifb.h>



void DelayTime(int value);
void erase_flash();
void write_flash(unsigned char DATA_write, unsigned  char * ADDR_write);
unsigned char ASC_to_HEX(unsigned char ASC_H, unsigned char ASC_L );


#define FLASH_ADR1    0x64000aaa
#define FLASH_ADR2    0x64000555
#define FLASH_BEGIN   0x64000000
#define FLASH_END     0x640FFFFF
#define FLASH_SIZE    0x00100000

#define DATA_SIZE     0x00000020  //要写入FLASH的数据的大小
#define PREFIX_SIZE   9           //hex文件每行的前缀长度
#define LDATA_SIZE    64          //hex文件每行的数据长度
#define SUFFIX_SIZE   4           //hex文件每行的尾缀长度,包括两个校验位和换行位


EMIFB_Config EMIFB_FLASH = {
  /* gblctl */ 
  EMIFB_GBLCTL_RMK(
  EMIFB_GBLCTL_EK2RATE_DEFAULT,
  EMIFB_GBLCTL_EK2HZ_OF(1),
  EMIFB_GBLCTL_EK2EN_DISABLE,
  EMIFB_GBLCTL_BRMODE_DEFAULT,
  EMIFB_GBLCTL_NOHOLD_ENABLE,
  EMIFB_GBLCTL_EK1HZ_DEFAULT,
  EMIFB_GBLCTL_EK1EN_DISABLE
  ),
  
  /* cectl0 */
  EMIFB_CECTL_DEFAULT,
  /* cectl1 */
/*
  EMIFB_CECTL_RMK(
  EMIFB_CECTL_WRSETUP_OF(3),
  EMIFB_CECTL_WRSTRB_OF(10),
  EMIFB_CECTL_WRHLD_OF(1),
  EMIFB_CECTL_RDSETUP_OF(3),
  EMIFB_CECTL_TA_DEFAULT,
  EMIFB_CECTL_RDSTRB_OF(10),
  EMIFB_CECTL_MTYPE_ASYNC8,
  EMIFB_CECTL_WRHLDMSB_OF(0),
  EMIFB_CECTL_RDHLD_OF(1)
  ),
  */

  EMIFB_CECTL_RMK(
  EMIFB_CECTL_WRSETUP_OF(15),
  EMIFB_CECTL_WRSTRB_OF(63),
  EMIFB_CECTL_WRHLD_OF(3),
  EMIFB_CECTL_RDSETUP_OF(15),
  EMIFB_CECTL_TA_DEFAULT,
  EMIFB_CECTL_RDSTRB_OF(14),
  EMIFB_CECTL_MTYPE_ASYNC8,
  EMIFB_CECTL_WRHLDMSB_OF(0),
  EMIFB_CECTL_RDHLD_OF(2)
  ),
 
  /* cectl2 */
  EMIFB_CECTL_DEFAULT,
  /* cectl3 */
  EMIFB_CECTL_DEFAULT,
  /* sdctl */
  EMIFB_SDCTL_DEFAULT,
  /* sdtim */
  EMIFB_SDTIM_DEFAULT,
  /* sdext */
  EMIFB_SDEXT_DEFAULT,
  /* cesec0 */
  EMIFB_CESEC_DEFAULT,
  /* cesec1 */
  EMIFB_CESEC_DEFAULT,
  /* cesec2 */
  EMIFB_CESEC_DEFAULT,
  /* cesec3 */
  EMIFB_CESEC_DEFAULT,
  
};

#pragma DATA_SECTION (DATA_buffer, "buffers");
#pragma DATA_ALIGN (DATA_buffer, 0x10000);
unsigned char DATA_buffer[DATA_SIZE];

unsigned char PREFIX_buffer[PREFIX_SIZE];
unsigned char LDATA_buffer[LDATA_SIZE];
unsigned char SUFFIX_buffer[SUFFIX_SIZE];



int i;

////////////////////////////////////////////////////////////////////////////////////
void main()
{
    unsigned char test = 0;


    unsigned char* flash_ptr;
    
    int j;

    char LDATA_exist=0;
    
    
  	
  	CSR=0x00000100;                      // Disable all interrupts              
  	IER=0x00000001;                      // Disable all interrupts except NMI   
  	ICR=0x0000ffff;                      // Clear all pending interrupts      
  	
    printf("*init start *\n"); 

     for(i=0;i<DATA_SIZE;i++)
       {
        DATA_buffer[i] = i;
       }
     printf("*init end *\n");  	  
	
	CSL_init();
	
	EMIFB_config(&EMIFB_FLASH);
	
    printf("*erase_flash start *\n");

while(1)
{
    test = *(unsigned volatile char*)FLASH_ADR1;
}
	erase_flash();

	printf("*erase_flash end *\n");
	

     printf("*write start *\n");





//	while(1)
//	{     	
     flash_ptr = (unsigned  char*) FLASH_BEGIN;

     for(i=0;i<DATA_SIZE;i++)
       {
        write_flash(DATA_buffer[i], flash_ptr++);
       }
//   }




     printf("*write end *\n");
    
     
     for(i=0;i<DATA_SIZE;i++)
       {
        DATA_buffer[i] = 0;
       }
     


     printf("*read start *\n");
     flash_ptr = (unsigned  char*) FLASH_BEGIN;
     for(i=0;i<DATA_SIZE;i++)
       {
        DATA_buffer[i] = *flash_ptr++;
       }
    
     
     
     printf("*read end *\n");



	
	while(1)
	 {
	

	}
}
//////////////////////////////////////////////////////////////////////////////////////




/////////////////////////////////////////////////////////////////////////////////////
unsigned char ASC_to_HEX(unsigned char ASC_H, unsigned char ASC_L )
{
  unsigned char HEX=0;
  unsigned char temp=0;
  
  
  if((ASC_H>=48) && (ASC_H<=57))
			{
				temp = ASC_H - 48;
			}
  else if((ASC_H>=65) && (ASC_H<=70))
			{
				temp = ASC_H - 55;
			}
			
  HEX=temp<<4;
  
  if((ASC_L>=48) && (ASC_L<=57))
			{
				temp = ASC_L - 48;
			}
  else if((ASC_L>=65) && (ASC_L<=70))
			{
				temp = ASC_L - 55;
			}

  HEX=HEX+temp;
  return(HEX);
}


/////////////////////////////////////////////////////////////////////////////////////////




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

{
    unsigned  char temp = 0;
	unsigned char test = 0;
    *(unsigned volatile char*)FLASH_ADR1=0xaa;    //0x6400aaaa
    *(unsigned volatile char*)FLASH_ADR2=0x55;    //0x64005555
    *(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 != 0x80 )
      {
       temp = ( *(unsigned  char *)FLASH_BEGIN ) & (0x80);
	   test = *(unsigned  char *)FLASH_BEGIN;
      }
}      
////////////////////////////////////////////////////////////////////////////////////

 

/////////////////////////////////////////////////////////////////////////////////////
void write_flash(unsigned char DATA_write, unsigned  char * ADDR_write)
{
    unsigned  char temp = 0xFF;
    unsigned  char i=50;
	unsigned  char test = 0;
    
    *(unsigned  char *)FLASH_ADR1=0xaa;
    *(unsigned  char *)FLASH_ADR2=0x55;
    *(unsigned  char *)FLASH_ADR1=0xa0;
    *ADDR_write=DATA_write;
    
   while(i--);
    
    while (temp != (DATA_write&0x80) )
     {
      temp = (*ADDR_write) & (0x80);
	  test = *ADDR_write;
	  test = *ADDR_write;
     }
	 
}
/////////////////////////////////////////////////////////////////////////////////////

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


⌨️ 快捷键说明

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