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

📄 5502_iiceepromboot.c

📁 在CCS开发环境下的DSP 5502使用I2C从EEPROM自举程序
💻 C
字号:

/******************************************************************************/
/*  Copyright 2004 by SEED Electronic Technology LTD.                         */
/*  All rights reserved. SEED Electronic Technology LTD.                      */
/*  Restricted rights to use, duplicate or disclose this code are             */
/*  granted through contract.                                                 */
/*                                                                            */
/*                                                                            */
/******************************************************************************/
/*----------------------------------------------------------------------------*/
/* DESCRIPTION:  															  */
/*   																		  */
/* This is an example of writting boot table into EEPROM of C5502			  */
/*----------------------------------------------------------------------------*/
/* MODULE NAME... IIC and EEPROM											  */
/* FILENAME...... 5502_IICEEPROMBOOT.c   									  */
/* DATE CREATED.. Mon 8/20/2004	    										  */
/* COMPONENT..... 															  */
/* PREREQUISITS.. 															  */
/*----------------------------------------------------------------------------*/

#include <csl.h>
#include <csl_pll.h>
#include <csl_i2c.h>
#include <stdio.h>
#include "E2PROM_Function.h"

#undef  	E2PROM_ADDR			// Define slave IIC device address
#define  	E2PROM_ADDR 0x50

/*----------------------------------------------------------------------------*/
// Config IIC: Use IIC to interface CODEC control interface
/*----------------------------------------------------------------------------*/			
I2C_Setup Setup = {
					0, 		// 7 bit address mode 
					0x0000, // own address 
					60, 	// clkout value (Mhz) 150
					400, 	// a number between 10 and 400
					0, 		// 8 bits/byte to be received or transmitted 
					0, 		// DLB mode off 
					0 		// FREE mode on 
				  };

/*----------------------------------------------------------------------------*/
// Config transimitted data bytes
/*----------------------------------------------------------------------------*/
Uint16 StartAdd;					// 写引导表的EEPROM的起始地址
Uint16 Low_Word;
Uint16 High_Word;
Uint16 Section_count;
Uint16 * Section_add;
unsigned long int i;

/* Entry point address,register configuration count,section parameter */

#define Entry_Point 	0x000017c4		// 32位进入点地址

#define REG_COFIG_COUNT	0x00000001		// 配置寄存器配置计数器
#define DELAY_CONFIG	0xFFFFFFF0		// 延时0xFFF0

#define BIGSECT_COUNT	0x000008E0		// 程序段的字节数
#define BIGSECT_ADDRESS	0x00001000		// 程序段的起始字节地址


/*-----------------------------------------------------------------------------*/
// FUNCTION: MAIN
/*-----------------------------------------------------------------------------*/

void main(void)
{
	int Return;
// Initialize CSL library - This is REQUIRED !!! 
    CSL_init();
	
// The main frequency of system is 240MHz,if input 20MHz Multi=0xc, else Multi=0x8
    PLL_setFreq(1, 0xc, 0, 1, 3, 3, 0);
  
// Initialize IIC, Using parameters in MyI2c_Config structure
	MyI2C_setup(&Setup);
    
    StartAdd = 0x0;
/*--------------------------  write boot table --------------------------------*/ 

  /*************** 写32位进入点地址 ***************************/
     
    High_Word = (Entry_Point & 0xFFFF0000)>>16;
    Return = MyI2C_WriteSigWord( StartAdd, High_Word, 1, E2PROM_ADDR, 1, 30000); 
    while(Return!=0);
     
    StartAdd += 2;
    Low_Word = Entry_Point & 0x0000FFFF;
    Return = MyI2C_WriteSigWord( StartAdd, Low_Word, 1, E2PROM_ADDR, 1, 30000);
    while(Return!=0);
    StartAdd += 2;
    
    /*************** 写32位寄存器配置计数器 **********************/
    
    High_Word = (REG_COFIG_COUNT & 0xFFFF0000)>>16;
    Return = MyI2C_WriteSigWord( StartAdd, High_Word, 1, E2PROM_ADDR, 1, 30000); 
    while(Return!=0); 
    StartAdd += 2;
    Low_Word = REG_COFIG_COUNT & 0x0000FFFF;
    Return = MyI2C_WriteSigWord( StartAdd, Low_Word, 1, E2PROM_ADDR, 1, 30000);
    while(Return!=0);
    StartAdd += 2;    
    
    /*************** 写延时寄存器 **************************************/
    High_Word = (DELAY_CONFIG & 0xFFFF0000)>>16;
    Return = MyI2C_WriteSigWord( StartAdd, High_Word, 1, E2PROM_ADDR, 1, 30000); 
    while(Return!=0); 
    StartAdd += 2;
    Low_Word = DELAY_CONFIG & 0x0000FFFF;
    Return = MyI2C_WriteSigWord( StartAdd, Low_Word, 1, E2PROM_ADDR, 1, 30000);
    while(Return!=0);
    StartAdd += 2;    
    
   	/*************** 写程序段 ***********************************/
   	/* Configure section byte count */
   	
   	High_Word = (BIGSECT_COUNT & 0xFFFF0000)>>16;
   	Return = MyI2C_WriteSigWord( StartAdd, High_Word, 1, E2PROM_ADDR, 1, 30000);
   	while(Return!=0);  
    StartAdd += 2;	
   	Low_Word = BIGSECT_COUNT & 0x0000FFFF;
   	Return = MyI2C_WriteSigWord( StartAdd, Low_Word, 1, E2PROM_ADDR, 1, 30000);
   	while(Return!=0);
    StartAdd += 2;
   	
   	/* Configure section start address */
   	High_Word = (BIGSECT_ADDRESS & 0xFFFF0000)>>16;
   	Return = MyI2C_WriteSigWord( StartAdd, High_Word, 1, E2PROM_ADDR, 1, 30000); 
   	while(Return!=0); 
    StartAdd += 2;	
   	Low_Word = BIGSECT_ADDRESS & 0x0000FFFF;
   	Return = MyI2C_WriteSigWord( StartAdd, Low_Word, 1, E2PROM_ADDR, 1, 30000);
   	while(Return!=0);
    StartAdd += 2;
   	
   	/* Copy data to this section */
   	Section_count = BIGSECT_COUNT>>1;
   	Section_add = (Uint16 *)(BIGSECT_ADDRESS>>1);
    
   	for(i=0; i<Section_count; i++)
   	{
   		Return = MyI2C_WriteSigWord( StartAdd, *Section_add++, 1, E2PROM_ADDR, 1, 30000);
    	while(Return!=0);
    	StartAdd += 2;
   	}		
   	
   	/* Write 32-bit zero byte count to end the boot table */
   	Return = MyI2C_WriteSigWord( StartAdd, 0x0000, 1, E2PROM_ADDR, 1, 30000);
   	while(Return!=0);
   	StartAdd += 2;
   	Return = MyI2C_WriteSigWord( StartAdd, 0x0000, 1, E2PROM_ADDR, 1, 30000); 
   	while(Return!=0);
    /****************************************************************************/
    /* Note:																	*/
    /* 		The process of write boot table will  take 	about seven minutes		*/
    /*		approximately. 														*/
    /****************************************************************************/
    	
}					
 					
/******************************************************************************/
//	No more
/******************************************************************************/

⌨️ 快捷键说明

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