/*****************************************************************************
** 文件名称:sram.c
** 功 能:
** 修改日志:
******************************************************************************/
#include "includes.h"
/******************************************************************************
** 函数名称:void SRAM_GPIO_Init()
** 功 能:IO口初始化
** 修改日志:
*******************************************************************************/
void SRAM_GPIO_Init(void)
{
SRAM_CS_DIR_OUTPUT;
SRAM_SCK_DIR_OUTPUT;
SRAM_SI_DIR_OUTPUT;
SRAM_SO_INPUT;
}
/*******************************************************************************
** 函数名称:void SRAM_WriteOneByte(uchar DataBuffer)
** 功 能:上升沿数据写入
** 修改日志:
*******************************************************************************/
void SRAM_WriteOneByte(uchar DataBuffer)
{
SRAM_SCK_HIGH;
for(uchar i= 0;i < 8;i++)
{
SRAM_SCK_LOW;
if(DataBuffer & 0x80)
{
SRAM_SI_HIGH;
}
else
{
SRAM_SI_LOW;
}
DataBuffer <<= 1;
SRAM_SCK_HIGH;
}
}
/*******************************************************************************
** 函数名称:uchar SRAM_ReadOneByte(void)
** 功 能:下降沿数据输出
** 修改日志:
*******************************************************************************/
uchar SRAM_ReadOneByte(void)
{
uchar retValue = 0;
SRAM_SCK_HIGH;
for(uchar i= 0; i< 8; i++)
{
retValue <<= 1;
SRAM_SCK_LOW;
if((P2IN&BIT5)==BIT5)
{
retValue |= 0x01;
}
else
{
retValue &= 0xFE;
}
SRAM_SCK_HIGH;
}
SRAM_SCK_HIGH;
return (retValue);
}
/*****************************************************************************
** 文件名称:void SpiFlash_Write_Adr(char *Adr)
** 功 能:写地址
** 修改日志:
******************************************************************************/
void SRAM_Write_Adr(uchar *Adr)
{
uint i = 0;
for(i = 0;i < 3; i++)
{
SRAM_WriteOneByte(Adr[i]);
}
return ;
}
/*****************************************************************************
** 文件名称:void SRAM_Write_Data(uint8_t *pBuffer,int8_t Page_Num,uint32_t WriteBytesNum)
** 功 能:向具体地址写数据
** 修改日志:
******************************************************************************/
void SRAM_Write_Data(uint8_t *pBuffer,uint8_t Page_Num,uint32_t WriteBytesNum)
{
uint32_t i = 0;
uint8_t pcmd[3] = {0};
SRAM_CS_Enable;
SRAM_WriteOneByte(0X01);//连续读
SRAM_WriteOneByte(0X40);//连续读
SRAM_CS_Disable;
_NOP();
SRAM_CS_Enable;
SRAM_WriteOneByte(0X02);//连续写模式
pcmd[0] = 0;
pcmd[1] = Page_Num;
pcmd[2] = 0;
SRAM_Write_Adr(pcmd);//写地址
for(i = 0;i < WriteBytesNum; i++)
{
SRAM_WriteOneByte(pBuffer[i]);
}
SRAM_CS_Disable;
return;
}
/*****************************************************************************
** 文件名称:void SRAM_Read_Data(uint8_t *pBuffer,uint8_t Page_Num ,uint32_t ReadBytesNum)
** 功 能:
** 修改日志:
******************************************************************************/
void SRAM_Read_Data(uint8_t *pBuffer,uint8_t Page_Num ,uint32_t ReadBytesNum)
{
uint32_t i = 0;
uint8_t pcmd[3] = {0};
SRAM_CS_Enable;
SRAM_WriteOneByte(0X03);//连续读
pcmd[0] =0;
pcmd[1] =Page_Num;
pcmd[2] = 0;
SRAM_Write_Adr(pcmd);
for( i = 0;i < ReadBytesNum; i++)
{
pBuffer[i] = SRAM_ReadOneByte();//读取SPIflash中指定bytes字节数据
}
SRAM_CS_Disable;
return;
}