- /********************************************************************************
- * 项目名称: SCC290
- * 文件名称: drv_FM25CL64.c
- * DATE: 2014
- * AUTHOR: Shine
- * 要点:
- *
- * -----------------------------------------------------------------------------*
- *********************************************************************************/
- #include "config.h"
- void FM25CL64_NOP(void )
- {
- u08 i = 0 ;
- for( i=0; i<200;i++ )
- {
- ;
- }
- }
- /*
- * 函数: void FM25CL64_init( void )
- * 输入:
- * 输出:
- * 说明: 对于没有WP保护和HOLD控制需求的应用,初始化wp hold 2引脚.
- */
- void FM25CL64_init( void )
- {
- _delay_ms(2);
- FM25CL64_WP = 1 ;
- FM25CL64_HOLD= 1;
- }
- /*
- * 向FM25CL64写入一个字节
- */
- unsigned char In_FM25CL64_Byte()
- {
- unsigned char in=0,i;
- for(i=0;i<8;i++)
- {
- FM25CL64_SCK=0;
- FM25CL64_NOP();
- FM25CL64_NOP();
- FM25CL64_NOP();
- FM25CL64_SCK=1;
- in=in<<1;
- if( FM25CL64_SO )
- {
- in|=0x01;
- }
- }
-
- return(in);
- }
- /*
- * 从FRAM读取一个字节
- */
- void Out_FM25CL64_Byte(unsigned char byte)
- {
- unsigned char i=0;
- for(i=0;i<8;i++)
- {
- FM25CL64_SCK=0;
- FM25CL64_NOP();
- FM25CL64_NOP();
- FM25CL64_NOP();
- FM25CL64_SI= (byte&0x80);
- FM25CL64_SCK=1;
- byte<<=1;
- }
- FM25CL64_SCK=0;
- FM25CL64_SI=0;
- return;
- }
- /*
- * 读取FRAM的状态
- *
- */
- unsigned char ReadState()
- {
- unsigned char r;
- FM25CL64_SCK=0;
- FM25CL64_CS=0;
- Out_FM25CL64_Byte(FM25CL64_RDSR_INST);
- FM25CL64_NOP();
- FM25CL64_NOP();
- FM25CL64_NOP();
- r=In_FM25CL64_Byte();
- FM25CL64_SCK=0;
- FM25CL64_NOP();
- FM25CL64_NOP();
- FM25CL64_NOP();
- FM25CL64_CS=1;
- return(r);
- }
- /*
- * 检查读状态
- */
- void wip_poll()
- {
- unsigned char i=0,r;
- do
- {
- r=ReadState();
- i++;
- }
- while((r&0x01)&&i<0x99);
- }
- /* 写入使能 */
- void WriteEnable( void )
- {
- FM25CL64_SCK=0;
- FM25CL64_CS=0;
- Out_FM25CL64_Byte(FM25CL64_WREN_INST);
- FM25CL64_SCK=0;
- FM25CL64_CS=1;
- return;
- }
- /*
- *
- */
- void WriteState(void)
- {
- WriteEnable();
- FM25CL64_SCK=0;
- FM25CL64_CS=0;
- Out_FM25CL64_Byte(FM25CL64_WRSR_INST);
- Out_FM25CL64_Byte(FM25CL64_STATUS_REG);
- FM25CL64_SCK=0;
- FM25CL64_CS=1;
- wip_poll();
- }
- /* 读取存储单元的内容,一个字节 */
- unsigned char Read_FM25CL64_Byte(unsigned int address)
- {
- unsigned char dat;
- FM25CL64_SCK=0;
- FM25CL64_CS=0;
- FM25CL64_NOP();
- Out_FM25CL64_Byte(FM25CL64_READ_INST);
- FM25CL64_NOP();
- FM25CL64_NOP();
- Out_FM25CL64_Byte((address&0xff00)>>8);
- FM25CL64_NOP();
- FM25CL64_NOP();
- Out_FM25CL64_Byte(address&0x00ff);
- FM25CL64_NOP();
- FM25CL64_NOP();
- dat=In_FM25CL64_Byte();
- FM25CL64_SCK=0;
- FM25CL64_CS=1;
- return(dat);
- }
- /* 读取存储单元的内容,多个字节 */
- void Read_FM25CL64_nByte(unsigned int address,unsigned char *dat,unsigned char number)
- {
- unsigned char i;
- FM25CL64_SCK=0;
- FM25CL64_CS=0;
- FM25CL64_NOP();
- Out_FM25CL64_Byte(FM25CL64_READ_INST);
- FM25CL64_NOP();
- FM25CL64_NOP();
- Out_FM25CL64_Byte((address&0xff00)>>8);
- FM25CL64_NOP();
- FM25CL64_NOP();
- Out_FM25CL64_Byte(address&0x00ff);
- FM25CL64_NOP();
- FM25CL64_NOP();
- for(i=0;i<number;i++)
- {
- *(dat+i)=In_FM25CL64_Byte();
- }
- FM25CL64_SCK=0;
- FM25CL64_CS=1;
- return;
- }
- /* 写入一个数据到指定位置 */
- void Write_FM25CL64_Byte(unsigned int address,unsigned char dat)
- {
- WriteEnable();
- FM25CL64_SCK=0;
- FM25CL64_CS=0;
- Out_FM25CL64_Byte(FM25CL64_WRITE_INST);
- FM25CL64_NOP();
- FM25CL64_NOP();
- Out_FM25CL64_Byte((address&0xff00)>>8);
- FM25CL64_NOP();
- FM25CL64_NOP();
- Out_FM25CL64_Byte(address&0x00ff);
- FM25CL64_NOP();
- FM25CL64_NOP();
- Out_FM25CL64_Byte(dat);
- FM25CL64_SCK=0;
- FM25CL64_CS=1;
- wip_poll();
- return;
- }
- /* 写入多个字节到指定位置 */
- void Write_FM25CL64_nByte(unsigned int address,unsigned char *dat,unsigned char number)
- {
- unsigned char i;
- WriteEnable();
- FM25CL64_SCK=0;
- FM25CL64_CS=0;
-
- Out_FM25CL64_Byte(FM25CL64_WRITE_INST);
- FM25CL64_NOP();
- FM25CL64_NOP();
- Out_FM25CL64_Byte((address&0xff00)>>8);
- FM25CL64_NOP();
- FM25CL64_NOP();
- Out_FM25CL64_Byte(address&0x00ff);
- FM25CL64_NOP();
- FM25CL64_NOP();
- for(i=0;i<number;i++)
- {
- Out_FM25CL64_Byte(*(dat+i));
- }
-
- FM25CL64_SCK=0;
- FM25CL64_CS=1;
- wip_poll();
- return;
- }
|