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

📄 eeprom.c

📁 tms320vc5509的eepromC语言代码
💻 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>

#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
  2,    //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[0x100] = {0};

Uint32 SPI_ReadSignal(Uint32 address);
void SPI_WrieSignal(Uint32 address,Uint32 data);

void main(void)
{
    Uint32 EEPROM_data = 0; 
    Uint32 i = 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<0x100;)
  	{	
  		/*测试时,将数据写完后,断电后,重新上电打开CCS
  			将此行注释掉,直接读取数据,观察是否正确*/
  		SPI_WrieSignal(EPROM_address,i);
  		/*读回写入的数据*/
		EEPROM_data = SPI_ReadSignal(EPROM_address);
		/*保存读取的数据*/
		data_read[i] = EEPROM_data;
  		if(i != (data_read[i] & 0xFF))
  		{
 			for(;;){}
  		}
  		EPROM_address++;
  		i++;
  	} 
  	for(;;)
  	{}    	   	    	   
}

/*********************************************************************************/
/*		EEPROM write enable and write disable  									 */
/*********************************************************************************/
/*两次操作之间的延时*/
void SPIEND_Delay()
{
	Uint32 j =0;
	for(j= 0;j<0x20;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 + -