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

📄 fram.c

📁 使用luminary arm单片机驱动spi接口铁电
💻 C
字号:
#include "G:\CJQ_LM3S1968\config.h"
#include "fram.h"

/*********************************************************************************************************
** Function name:           InitFram
**
** Descriptions:            初始化控制SSI的管脚
**
** input parameters:        NONE
** output parameters:       NONE
**                          
** Returned value:          NONE
**
** Created by:              Zhao shimin
** Created Date:            2007/09/07
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void  InitFram(void)
{      
    SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0);                            /*  为SSI提供时钟*/ 
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);                           /*  使能GPIOA    */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);                           /*  使能GPIOC    */
    /*  配置SPI为模式0,主机模式,波特率,数据宽度为8位     */
    SSIConfig(SSI0_BASE, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, FRAM_BIT_RATE, FRAM_DATA_WIDTH);
    /*  允许对SSI进行操作          */  
    SSIEnable(SSI0_BASE);  
    /*  设置GPIOA2,4,5引脚为SSI配置功能 */
    GPIOPinTypeSSI(GPIO_PORTA_BASE, (FSLK | FSO | FSI)); 
    /*  配置片选管脚为输出*/  
    GPIODirModeSet(GPIO_PORTA_BASE, nFCS , GPIO_DIR_MODE_OUT);
    GPIODirModeSet(GPIO_PORTC_BASE, nFWP | nFHOLD, GPIO_DIR_MODE_OUT);
    /*  配置片选管脚为上拉,2MA输出*/
    GPIOPadConfigSet(GPIO_PORTA_BASE, nFCS , GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD);
    GPIOPadConfigSet(GPIO_PORTC_BASE, nFWP | nFHOLD, GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
    GPIOPinWrite(GPIO_PORTC_BASE, nFHOLD, 0xff);//
    GPIOPinWrite(GPIO_PORTC_BASE, nFWP, 0xff);//
    FCS_HIGH();
}

/*********************************************************************************************************
** Function name:           SendByteToFram
**
** Descriptions:            通过硬件SPI发送一个字节到fram
**
** input parameters:        tempChar   发送的数据
** output parameters:       NONE
**                          
** Returned value:          NONE
**
** Created by:              Zhao shimin
** Created Date:            2007/09/07
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void SendByteToFram(uint8 tempChar)
{
   uint32 nullData;
   WatchdogIntClear(WATCHDOG_BASE);//FEED DOG
   SSIDataPut(SSI0_BASE, tempChar);	
   SSIDataGet(SSI0_BASE, &nullData);                                               
}

/*********************************************************************************************************
** Function name:           GetByteFromFram
**
** Descriptions:            通过硬件SPI接口接收一个字节到处理器	
**
** input parameters:        NONE
** output parameters:       NONE
**                          
** Returned value:          ReadData  读回的数据
**
** Created by:              Zhao shimin
** Created Date:            2007/09/07
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**--------------------------------------------------------------------------------------------------------
*********************************************************************************************************/

uint8 GetByteFromFram(void)
{
   uint32 readData;

   SSIDataPut(SSI0_BASE, 0xFF);/*  发送一个无效字节,以产生接收时钟*/
   SSIDataGet(SSI0_BASE, &readData);
   return (uint8)readData;
}

/************************************************************************
** 函数名称:SSTF016B_WR											
** 函数功能:SST25VF016B的写函数,可写1个和多个数据到指定地址									
** 入口参数:
**			uint32 Dst:目标地址,范围 0x0 - MAX_ADDR(MAX_ADDR = 0x1FFFFF)				
**			uint8* SndbufPt:发送缓存区指针
**      	uint32 NByte:要写的数据字节数
** 出口参数:操作成功则返回OK,失败则返回ERROR		
** 注	 意:若某功能下,某一入口参数无效,可在该入口参数处填Invalid,该参数将被忽略
************************************************************************/
uint8 WrFram(uint32 Dst,uint8* SndbufPt,uint32 NByte)
{
    unsigned char  i = 0;
              
	  if ((((Dst + NByte - 1) > FRAM_MAX_ADDR) || (NByte == 0)))                  
	  {                                                                      
	  	return (ERROR);	 //	检查入口参数                                     
	  }                                                                      
	  
	  for (i = 0; i < 20; i++);		  			
	  FCS_LOW();			          
	  for (i = 0; i < 20; i++);	                                             
	  SendByteToFram(WREN);	// 使状态寄存器可写                                    
	  FCS_HIGH();
    for (i = 0; i < 20; i++);
    	      
	  FCS_LOW();	
	  for (i = 0; i < 20; i++);		                                                       
	  SendByteToFram(WRSR);	// 发送写状态寄存器指令                                  
    SendByteToFram(0);	  // 清0 BPx位,使Fram芯片全区可写               
	  FCS_HIGH();						                                                 

		for(i = 0; i < NByte; i++)
		{	  			                       
	      FCS_LOW();			                                                     
	      SendByteToFram(WREN);	// 使状态寄存器可写                                
	      FCS_HIGH();                                                  
		    FCS_LOW();                   	                             
		    SendByteToFram(WRITE); 	// 发送page program数据烧写命令       
		    SendByteToFram(((Dst + i) & 0xff) >> 8);                                        
		    SendByteToFram((Dst + i) & 0xff);                             
        WatchdogIntClear(WATCHDOG_BASE);//FEED DOG 			         
        SendByteToFram(*(SndbufPt++));	// 发送被烧写的数据	
		    FCS_HIGH();		    	    
		}                                                               
	  return (OK);		                                          
}

/* 以下函数在移植时无需修改 */
/************************************************************************
** 函数名称:RdFram																										
** 函数功能:FM25L256B的读函数,可选择读ID和读数据操作				
** 入口参数:
**			uint32 Dst:目标地址,范围 0x0 - MAX_ADDR(MAX_ADDR = 0x1FFFFF)				
**      	uint32 NByte:	要读取的数据字节数
**			uint8* RcvBufPt:接收缓存的指针			
** 出口参数:操作成功则返回OK,失败则返回ERROR		
** 注	 意:若某功能下,某一入口参数无效,可在该入口参数处填Invalid,该参数将被忽略
************************************************************************/
uint8 RdFram(uint32 Dst, uint32 NByte,uint8* RcvBufPt)
{
	  uint32 i = 0; 
	                                                                                    
	  if (((Dst + NByte) > FRAM_MAX_ADDR)||(NByte == 0))	
	  	  return (ERROR);	 //	检查入口参数                    
	  WatchdogIntClear(WATCHDOG_BASE);                                                                
	  FCS_LOW();			                                                                                  
	  SendByteToFram(READ); 						// 发送读命令                                                       
	  //发送地址信息                                                                                                                               
	  SendByteToFram(((Dst ) & 0xff) >> 8);                                                                               
	  SendByteToFram((Dst) & 0xff);                                                             
	  for (i = 0; i < NByte; i++)		                                                                  
	  { 
                  
	  	  *(RcvBufPt + i) = GetByteFromFram();		                                                              
	  }                                                                                               
	  FCS_HIGH();			                                                                                
	  return (OK);                                                                                    
}

⌨️ 快捷键说明

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