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

📄 eeprom.c

📁 基于DSP 5509a,实现了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 for EERPOM of C5509										  */
/*----------------------------------------------------------------------------*/
/* MODULE NAME... SPI EEPROM write and read 										  */
/* FILENAME...... boot.c    												  */
/* DATE CREATED.. Mon 03/5/2004	    										  */
/* COMPONENT..... 															  */
/* PREREQUISITS.. 															  */
/*----------------------------------------------------------------------------*/
/* DESCRIPTION:																  */  
/*   																		  */
/* this example is that write the SPI EEPROM  		  */
/*----------------------------------------------------------------------------*/

#include <csl.h>
#include <stdio.h>
#include <csl_pll.h>
#include <csl_mcbsp.h>
#include <csl_gpio.h>
#include <csl_irq.h>
#include <csl_chip.h>
#include"boot_dat.h"

#define SPI_WRITE 	  0x02000000
#define SPI_READ  	  0x03000000
#define SPI_WRITE_EN  0x06
#define SPI_WRITE_DI  0x04
#define SPI_WRITE_REG 0x0100
#define SPI_READ_REG  0x0500

 
/*锁相环的设置*/
PLL_Config  myConfig      = {
  0,    //IAI: the PLL locks using the same process that was underway 
                //before the idle mode was entered
  1,    //IOB: If the PLL indicates a break in the phase lock, 
                //it switches to its bypass mode and restarts the PLL phase-locking 
                //sequence
  8,    //PLL multiply value; multiply 12 times
  0             //Divide by 2 PLL divide value; it can be either PLL divide value 
                //(when PLL is enabled), or Bypass-mode divide value
                //(PLL in bypass mode, if PLL multiply value is set to 1)
};


MCBSP_Handle hMcbsp;
//Uint32 data_read[0x3a2] = {0};
Uint32 eeprom_data[0x1bf] = {0};
Uint32 SPI_ReadSignal(Uint32 address);
void SPI_WrieSignal(Uint32 address,Uint32 data);

void main(void)
{
//    Uint32 EEPROM_data = 0; 
    Uint32 i = 0;
    Uint32 j = 0; 
    Uint32 n = 0;
    Uint32 EPROM_address = 0;
    /* Initialize CSL library - This is REQUIRED !!! */
    /*初始化CSL库*/
    CSL_init();
    /*EMIF为全EMIF接口*/
    CHIP_RSET(XBSR,0x0a01);
	/*禁止所有中断*/
	IRQ_globalDisable(); 
    /*确定方向为输出*/
    GPIO_RSET(IODIR,0xFF);
	/*设置系统的运行速度为144MHz*/
    PLL_config(&myConfig);
  	
  	/*写入数据*/
 	for(i = 0; i<0x1bf;)
  	{	
  		/*测试时,将数据写完后,断电后,重新上电打开CCS
  			将此行注释掉,直接读取数据,观察是否正确*/
			
		eeprom_data[n+1]=flash_data[i] & 0xff;
		eeprom_data[n]=((flash_data[i]>>8) & 0xff);
  		SPI_WrieSignal(EPROM_address, eeprom_data[n]);
    	if(i != (eeprom_data[n] & 0xFF))
  		{
 			for(j=0;j<20;j++){}
  		}
  		EPROM_address++;
		SPI_WrieSignal(EPROM_address, eeprom_data[n+1]);
  	
  		if(i != (eeprom_data[n+1] & 0xff))
  		{
 			for(j=0;j<20;j++){}
  		}
  		EPROM_address++;
		n=n+2;
 		i++;
		
  				
 	} 
/*  	for(n=0;n<0x3a2;n++)
	{	
     	
	   //读回写入的数据
		EEPROM_data = SPI_ReadSignal(EPROM_address);	
		//保存读取的数据
		data_read[n] = EEPROM_data;
  	    EPROM_address++;
  	    } */
  	for(j=0;j<=20;j++)
  	{}    	   	    	   
}

/*********************************************************************************/
/*		EEPROM write enable and write disable  									 */
/*********************************************************************************/
/*两次操作之间的延时*/
void SPIEND_Delay()
{
	Uint32 j =0;
	for(j= 0;j<0x200;j++)
	{}
}
/*读写使能与禁止初始化,数据长度为8位*/
void SPI_writecominit(MCBSP_Handle hMcbsp)
{
   /****************************************************************/
   /* Place port in reset - setting XRST & RRST to 0               */
   /****************************************************************/
   /*进行发送复位*/
   MCBSP_FSETH(hMcbsp, SPCR2, XRST,0);
   /*进行接收复位*/
   MCBSP_FSETH(hMcbsp, SPCR1, RRST,0); 
   /*进行分频器复位*/
   MCBSP_FSETH(hMcbsp, SPCR2, GRST,0);
   /****************************************************************/
   /* Set values of all control registers                          */
   /****************************************************************/
   /*设置SPCR1寄存器,SPI时钟停止模式*/
   MCBSP_FSETH(hMcbsp, SPCR1,CLKSTP,0x3);
   /*设置XCR1寄存器,单数据相,发送数据长度为8位*/
   MCBSP_FSETH(hMcbsp, XCR1, XFRLEN1,0x0);
   MCBSP_FSETH(hMcbsp, RCR1, RFRLEN1,0x0);
   MCBSP_FSETH(hMcbsp, XCR1, XWDLEN1,0x0);
   MCBSP_FSETH(hMcbsp, RCR1, RWDLEN1,0x0);
   /*设置XCR2寄存器,发送数据延时一个位*/
   MCBSP_FSETH(hMcbsp, XCR2, XDATDLY,0x1);
   MCBSP_FSETH(hMcbsp, RCR2, RDATDLY,0x1);
   /*设置PCR寄存器,设置BLCK为输出,即MCBSP为Master;
   		            设置BFSX为输出,并且其极性为低有效
   		            设置CLKXP为高*/
   MCBSP_FSETH(hMcbsp, PCR,CLKXP, 0x0);
   MCBSP_FSETH(hMcbsp, PCR,CLKRP, 0x1);
   MCBSP_FSETH(hMcbsp, PCR,CLKXM, 0x1);
   MCBSP_FSETH(hMcbsp, PCR,FSXM, 0x1);
   MCBSP_FSETH(hMcbsp, PCR,FSXP, 0x1);
   /*设置SRGR2,确定时钟来源为内部的CPU

⌨️ 快捷键说明

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