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

📄 m25p80程序.txt

📁 M25P80的操作
💻 TXT
📖 第 1 页 / 共 2 页
字号:
转自:http://dreamingdewdrop1980.spaces.live.com/blog/cns!FBA4D341BFAE0326!1245.entry
MCU:MSP430.
存储器:M25P80(SPI总线)
虽然MSP430本身自带SPI总线模块.但下面的程序并没有用此.而是用普通I/O模拟总线时序进行操作的.详细代码如下:
在调试时,犯了超级无敌白痴错误.我竟然把FLASHRAM编程写入只能有1变0,不能从0到1,结果在调式的时候不断的向首地址写数,然后都给变成0,接下来回读数据全0,当时还以为是自己的时序没搞定呢.无意间换了个地址重写重读,数据正常。/于是乎"天才的"我认为是首地址已经被我写坏(调试的时候不停的循环写入).接着我象改变的地址重新写一个新数,读出比较,发现数据还是不对.才想起FLASH RAM的这个特点,不象E2RAM可以随改随写.FLASH 要先擦除再写..!切记
/*********************************************************************
*公司名称:      *
*模 块 名:      SPI总线FLASHRAM读写模块  *
*创 建 人:           日期:        *
*修 改 人:                    日期:   * 
*功能描述:  *
*其他说明:                                             *
*版    本:VER 1.0
**********************************************************************/
#define M25_CLK_0 P4OUT&=~BIT2   //时钟置0
#define M25_CLK_1 P4OUT|=BIT2   //时钟置1
#define M25_SI_0 P4OUT&=~BIT3   //输入0,上升沿写数据
#define M25_SI_1 P4OUT|=BIT3   //输入1
#define M25_SO  (P4IN & 0X80)>>7  //读出数据,下降沿读数
#define M25_CS_0 P5OUT&=~BIT2   //片选有效
#define M25_CS_1 P5OUT|=BIT2   //片选无效
#define M25_WP_0 P4OUT&=~BIT5
#define M25_WP_1 P4OUT|=BIT5
#define M25_HD_0 P4OUT&=~BIT4                    //C为低电平时,HOLD下降沿,HOLD模式
#define M25_HD_1 P4OUT|=BIT4    
#define WREN  0X06    //写使能
#define WRDI  0X04    //写禁止
#define RDSR  0X05    //读状态寄存器
#define WRSR  0X01    //写状态寄存器,WEL为0不允许写
#define READ  0X03    //读字节
#define FAST_READ 0X0B    //快读指令
#define PP  0X02           //页写指令
#define SE  0XD8           //区域擦除
#define BE  0XC7           //批擦除
#define DP  0XB9           //深度掉电模式
#define RES  0XAB           //从深度掉电模式苏醒
#define uchar           unsigned char
#define uint            unsigned int

/*********************************************************************  
*
* 函 数 名:Delay
* 功能描述: 延时子程序
* 函数说明: 
* 调用函数:
* 全局变量:无
* 输    入: 无
* 返    回: 无
* 设 计 者 :                       日期:
* 修 改 者:                               日期:
* 版    本:VER 1.0
***********************************************************************/
void MDelay(uint ui_temp)
{
    uint ui_i;
    for(ui_i=ui_temp;ui_i>0;ui_i--)
    {
        ;
    }
}
/*********************************************************************  
*
* 函 数 名:M25P80_SPI_Write8
* 功能描述: 基于SPI总线的8位数据写操作
* 函数说明: 实现SPI总线的8位数据写操作,上升沿写数据
* 调用函数:
* 全局变量:无
* 输    入: 无
* 返    回: 无
* 设 计 者:                        日期:
* 修 改 者:                               日期:
* 版    本:VER 1.0
***********************************************************************/
void M25P80_SPI_Write8(uchar temp8)
{
    uchar i;
    for(i=8;i>0;i--)
    {
        if( ( temp8 & 0X80 ) == 0x80 )
        {
           M25_SI_1;   //写入1
        }
        else
        {
           M25_SI_0;    //写入0
        }
        M25_CLK_0;       
        MDelay(5);
        M25_CLK_1;        
        temp8<<=1;   //左移
        
        
    }
}

/*********************************************************************  
*
* 函 数 名:MP25_WriteEnable
* 功能描述: 写使能
* 函数说明: PP,SE,BE,WRSR之前必须进行写使能
* 调用函数:M25P80_SPI_Write8
* 全局变量:无
* 输    入: 无
* 返    回: 无
* 设 计 者:                        日期:
* 修 改 者:                               日期:
* 版    本:VER 1.0
***********************************************************************/
void MP25_WriteEnable(void)
{

    
    M25_CS_0;    //片选
    M25P80_SPI_Write8(WREN);  //写使能
    M25_CS_1;    //禁止片选
    //
    MDelay(10); 
}
/*********************************************************************  
*
* 函 数 名:SPI_Write24
* 功能描述: 基于SPI总线的24位数据写操作
* 函数说明: 实现SPI总线的24位数据写操作
* 调用函数:
* 全局变量:无
* 输    入: 无
* 返    回: 无
* 设 计 者:                        日期:
* 修 改 者:                               日期:
* 版    本:VER 1.0
***********************************************************************/
void M25P80_SPI_Write24(long temp24)
{
    uchar i;
    for(i=24;i>0;i--)
    {
        if( ( temp24 & 0X800000 ) == 0x800000 )
        {
           M25_SI_1;   //写入1
        }
        else
        {
           M25_SI_0;                    //写入0
        }
        M25_CLK_0;
        MDelay(5);
        M25_CLK_1;
        temp24<<=1;                     //左移
    }
}
/*********************************************************************  
*
* 函 数 名:M25P80_Read
* 功能描述: 基于SPI总线的8位数据读操作
* 函数说明: 实现SPI总线的8位数据读操作
* 调用函数:
* 全局变量:无
* 输    入: 无
* 返    回: 无
* 设 计 者:                        日期:
* 修 改 者:       日期:
* 版    本:VER 1.0
***********************************************************************/
uchar M25P80_Read(void)
{
    uchar i,tempbit;
    uchar tempData8;
    
    M25_CLK_0;      
    
    for(i=8;i>0;i--)
    {
        if(M25_SO == 0X01)
        {
           tempbit=1;     //置1
        }
        else
        {
           tempbit=0;     //置0
        }
        M25_CLK_1;
        MDelay(5);
        M25_CLK_0;
        tempData8= ( (tempData8<<1) | tempbit );        //数据读出操作
    }                                
    return (tempData8);
}
/*********************************************************************  
*
* 函 数 名:MP25_ReadReg
* 功能描述: 读功能寄存器
* 函数说明: 
* 调用函数:M25P80_SPI_Write8,MP25_WriteEnable
* 全局变量:无
* 输    入: 无
* 返    回: 无
* 设 计 者:                        日期:
* 修 改 者:                               日期:
* 版    本:VER 1.0
***********************************************************************/
uchar MP25_ReadReg(void)
{
    uchar Reg_Temp;
    M25_CS_0;      //片选
    M25P80_SPI_Write8(RDSR);    //写指令
    Reg_Temp=M25P80_Read();    //数据读出
    M25_CS_1;      //禁止片选
    MDelay(10);
    return(Reg_Temp);                                   //返回值
}
/*********************************************************************  
*
* 函 数 名:MP25_Check
* 功能描述: WIP位检查
* 函数说明: 1,表示写操作未完成,0表示写操作完成
* 调用函数:MP25_ReadReg
* 全局变量:无
* 输    入: 无
* 返    回: 无
* 设 计 者:                      日期:
* 修 改 者:                               日期:
* 版    本:VER 1.0
***********************************************************************/
void MP25_Check(void)
{
    while(MP25_ReadReg() & 0X01)        
    {
        ;
    }
}
/*********************************************************************  
*
* 函 数 名:MP25_WriteDis
* 功能描述: 写禁止
* 函数说明: 
* 调用函数:M25P80_SPI_Write8

⌨️ 快捷键说明

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