打印
[ZLG-MCU]

关FM25CL64读写问题

[复制链接]
2200|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
linhai1986|  楼主 | 2009-7-4 16:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
linhai1986|  楼主 | 2009-7-7 21:34 | 只看该作者

自己顶一下

使用特权

评论回复
板凳
Harvard| | 2016-4-25 14:40 | 只看该作者
遇到楼主一样的 问题  求教解决办法 ..

使用特权

评论回复
地板
Harvard| | 2016-4-25 14:40 | 只看该作者
/********************************************************************************
*        项目名称:        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;
}

使用特权

评论回复
5
Harvard| | 2016-4-25 14:41 | 只看该作者
说明下.这个代码来源于网络 ,之前在c8051f单片机可以正常使用. 换了ARM M0单片机,就出现问题了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

172

主题

1451

帖子

0

粉丝