📄 flashdrv.h
字号:
/*
*CopyRight Reserved? 凯拓科技版权所有 http://www.ktopcn.com
*文件名:flashdrv.h
*描述:提供flash存储器的底层驱动。
*
*版本:v1.0
*作者:ktop
*日期:2004/11/12
*/
#ifndef FLASHDRV_H
#define FLASHDRV_H
#include <msp430x14x.h>
#ifndef TRUE
#define TRUE 1
#define true 1
#endif
#ifndef FALSE
#define FALSE 0
#define false 0
#endif
#ifndef uchar
#define uchar unsigned char
#define UCHAR uchar
#endif
#ifndef uint
#define uint unsigned int
#define UINT uint
#endif
#ifndef ulong
#define ulong unsigned long
#define ULONG ulong
#endif
#ifndef bool
#define bool unsigned char
#define BOOL bool
#endif
#ifndef CONST
#define CONST const
#endif
#ifdef FLASHDRV_C
/*********************************************参数配置*****************************************/
//SPI模式定义
#define SPI_MODE_0 0 //SPI模式0
#define SPI_MODE_3 1 //SPI模式3
#define SPI_ICPL 2 //非活动时钟极性为低
#define SPI_ICPH 3 //非活动时钟极性为高
#define SPI_MODE SPI_MODE_3 //定义SPI为模式3
#define NOP() //定义空操作,在一些快速应用中,应加延时。
//与存储器操作相关的硬件接口
#define SET_CS_OUT() P3DIR |= 0X01 //将CS脚置为输出
#define SET_CS() P3OUT |= 0X01 //置位CS脚。
#define CLR_CS() P3OUT &= ~0x01 //清零CS脚
#define SET_DO_OUT() P3DIR |= 0X02 //将DO脚置为输出
#define SET_DO() P3OUT |= 0X02 //置位DO脚
#define CLR_DO() P3OUT &=~0X02 //清零DO脚。
#define SET_DI_IN() //设定DI为输入,如果DI与DO共用,则需要将输出转换成输入。
#define READ_DI() (P3IN & 0X04)
#define SET_CLK_OUT() P3DIR |= 0X08 //将CLK脚置为输出
#define SET_CLK() P3OUT |= 0X08 //置位CLK脚
#define CLR_CLK() P3OUT &= ~0X08 //清除CLK脚
#define WRITE_EN_OUT() P2DIR |= 0X10 //将写使能脚置为输出
#define WRITE_EN() P2OUT |= 0X10 //写使能置位
#define WRITE_DS() P2OUT &= ~0x10 //写使能清位。
//清看门狗
#define CLRWATCHDOG()
#endif
/*********************************************参数定义*****************************************/
#if (SPI_MODE == SPI_MODE_3) || (SPI_MODE == SPI_MODE_0) //当前的SPI模式为0或3时
#define CON_ARRAY_READ 0XE8 //连续阵列读
#define MEM_PAGE_READ 0XD2 //主存储器页读模式
#define BUFF_1_READ 0XD4 //缓冲1读方式
#define BUFF_2_READ 0XD6 //缓冲2读方式
#define STU_REG_READ 0XD7 //读状态寄存器
#else //SPI模式为其它模式时
#define CON_ARRAY_READ 0X68 //连续阵列读
#define MEM_PAGE_READ 0X52 //主存储器页读模式
#define BUFF_1_READ 0X54 //缓冲1读方式
#define BUFF_2_READ 0X56 //缓冲2读方式
#define STU_REG_READ 0X57 //读状态寄存器
#endif
//写命令
#define BUFF_1_WRITE 0X84 //写缓冲1
#define BUFF_2_WRITE 0X87 //写缓冲2
#define BUFF1_TO_MEM_WITH_ERASE 0X83 //写缓冲1的数据到存储器,使用内置的擦除功能
#define BUFF2_TO_MEM_WITH_ERASE 0X86 //写缓冲2的数据到存储器,使用内置的擦除功能
#define BUFF1_TO_MEM_NO_ERASE 0X88 //写缓冲1的数据到存储器,不使用内置的擦除功能
#define BUFF2_TO_MEM_NO_ERASE 0X89 //写缓冲2的数据到存储器,不使用内置的擦除功能
#define PAGE_ERASE 0X81 //页擦除
#define BLOCK_ERASE 0X50 //块擦除
#define BUFF1_TO_MEM 0X82 //主存储器页写入,通过BUFFER1
#define BUFF2_TO_MEM 0X85 //主存储器页写入,通过BUFFER2
//附加命令
#define MEM_TO_BUFF1 0X53 //主存储器数据传送到BUFFER1
#define MEM_TO_BUFF2 0X55 //主存储器数据传送到BUFFER2
#define COMP_MEM_AND_BUFF1 0X60 //比较主存储器与BUFFER1的数据
#define COMP_MEM_AND_BUFF2 0X61 //比较主存储器与BUFFER2的数据
#define AUTO_RE_W_FROM_BUFF1 0X58 //自动页写入Buffer1的数据
#define AUTO_RE_W_FROM_BUFF2 0X59 //自动页写入Buffer2的数据
/********************************************函数选择配置**************************************/
#define CONT_READ_EN true //连续读使能
#define PAGE_READ_EN false //页读使能
#define BUFFER_READ_EN false //BUFFER读使能
#define STU_REG_READ_EN true //状态寄存器读使能
#define BUFFER_W_EN true //缓冲写使能位,使能时,置true,否则为false
#define BUFF_TO_MEM_WITH_ERASE_EN true //缓冲数据写入到存储器使能位,使能为true,否则为false
//写入时,使用内置的擦除功能。
#define BUFF_TO_MEM_NO_ERASE_EN false //缓冲数据写入到存储器使能位,使能为true,否则为false
//写入时,不使用内置的擦除功能。
#define PAGE_ERASE_EN false //页擦除使能
#define BLOCK_ERASE_EN true //块擦除使能
#define BUFF_TO_MEM_EN true //主存储器写入使能,通过缓冲写入
#define MEM_TO_BUFF_EN true //读存储器的数据到缓冲使能,将存储器的数据读入到缓冲中
#define COMP_MEM_AND_BUFF_EN false //比较存储器与缓冲中的数据使能
#define AUTO_RE_W_FROM_BUFF_EN false //自动缓冲重写入使能。
/********************************************函数定义******************************************/
#if CONT_READ_EN == true
/*
*函数性质:公共
*入口:Flash页地址uiPageAddr,Flash页内的偏移量uiOffectInPage, 储存读入的数据缓冲pData,需要读入的数据长度uiLen
*出口:无
*功能:从Flash阵列中连续读数据,并将读得的数据存入到pData中。
*/
void ContinueReadFlash(uint uiPageAddr, uint uiOffectInPage, uchar *pData, uint uiLen);
#endif
#if PAGE_READ_EN == true
/*
*函数性质:公共
*入口:Flash页地址uiPageAddr,Flash页内的偏移量uiOffectInPage, 储存读入的数据缓冲pData,需要读入的数据长度uiLen
*出口:无
*功能:从Flash阵列中以页方式读数据,并将读得的数据存入到pData中。当读到一个页的尾部时,
*下一次读出的数据为页的起始数据。
*/
void PageReadFlash(uint uiPageAddr, uint uiOffectInPage, uchar *pData, uint uiLen);
#endif
#if BUFFER_READ_EN == true
/*
*函数性质:公共
*入口:Buffer号ucBufNum,Buffer内的偏移量uiOffectInPage, 储存读入的数据缓冲pData,需要读入的数据长度uiLen
*出口:无
*功能:从给定的Flash缓冲中读数据,读得的数据存放到pData中。当读到缓冲的尾部时,再次读出将会读到缓冲的头部。
*/
void ReadFlashBuff(uchar ucBufNum, uint uiOffectInPage, uchar *pData, uint uiLen);
#endif
#if STU_REG_READ_EN == true
/*
*函数性质:公共
*入口:无
*出口:状态寄存器的值
*功能:读Flash的状态寄存器值。
*/
uchar ReadFlashStuReg(void);
#endif
#if BUFFER_W_EN == true
/*
*函数性质:公共
*入口:Buffer号ucBufNum,Buffer内的偏移量uiOffectInPage, 储存写入的数据缓冲pData,需要写入的数据长度uiLen
*出口:无
*功能:往给定的Flash缓冲写数据,待写入的数据存放在pData中,当写到缓冲的尾部时,再次写入将会写入到缓冲的头部。
*/
void WriteFlashBuff(uchar ucBufNum, uint uiOffectInPage, uchar *pData, uint uiLen);
#endif
#if BUFF_TO_MEM_WITH_ERASE_EN == true
/*
*函数性质:公共
*入口:Buffer号ucBufNum,Flash的页地址uiFlashPageAddr
*出口:无
*功能:往给定编号的Buffer数据写入到给定的Flash页,并使用内置擦除器。
*/
void WriteBuffToFlash(uchar ucBufNum, uint uiFlashPageAddr);
#endif
#if BUFF_TO_MEM_NO_ERASE_EN == true
/*
*函数性质:公共
*入口:Buffer号ucBufNum,Flash的页地址uiFlashPageAddr
*出口:无
*功能:往给定编号的Buffer数据写入到给定的Flash页,不使用内置擦除器。
*/
void WriteBuffToFlashWithNoErase(uchar ucBufNum, uint uiFlashPageAddr);
#endif
#if PAGE_ERASE_EN == true
/*
*函数性质:公共
*入口:页地址uiFlashPageAddr
*出口:无
*功能:页擦除Flash
*/
void FlashPageErase(uint uiFlashPageAddr);
#endif
#if BLOCK_ERASE_EN == true
/*
*函数性质:公共
*入口:Flash块地址uiFlashBlockAddr
*出口:无
*功能:块擦除Flash
*/
void FlashBlockErase(uint uiFlashBlockAddr);
#endif
#if BUFF_TO_MEM_EN == true
/*
*函数性质:公共
*入口:Buffer编号ucBufNum,Flash页地址uiPageAddr,Flash页内的偏移量uiOffectInPage,
* 待写入的数据缓冲pData,需要写入的数据长度uiLen
*出口:无
*功能:本函数整合写缓冲和缓冲数据写入存储器功能,先将数据写入到给定的缓冲中,写入缓冲的偏移量
*由uiOffectInPage确定。如果写入的数据超出缓冲的范围,则自动回绕到缓冲的头部。在写缓冲完成后,
*将芯片的片选置高,则开始缓冲的数据到存储器传送。在整个写入未完成时,状态寄存器中的忙信号有效。
*/
void WriteFlashWithBuff(uchar ucBufNum, uint uiPageAddr, uint uiOffectInPage, uchar *pData, uint uiLen);
#endif
#if MEM_TO_BUFF_EN == true
/*
*函数性质:公共
*入口:Buffer编号ucBufNum, Flash的页地址uiFlashPageAddr
*出口:无
*功能:从主存储器中给定页地址读数据到给定的缓冲
*/
void ReadFlashToBuff(uchar ucBufNum, uint uiFlashPageAddr);
#endif
#if COMP_MEM_AND_BUFF_EN == true
/*
*函数性质:公共
*入口:Buffer编号ucBufNum, Flash的页地址uiFlashPageAddr
*出口:无
*功能:比较给定的缓冲与存储器中对应页的数据。如果相等,则状态寄存器中相应的位清零,否则置位,
*在比较过程中,忙标志有效。
*/
void CompFlashAndBuff(uchar ucBufNum, uint uiFlashPageAddr);
#endif
#if AUTO_RE_W_FROM_BUFF_EN == true
/*
*函数性质:公共
*入口:Buffer编号ucBufNum,Flash页地址uiPageAddr,Flash页内的偏移量uiOffectInPage,
* 待写入的数据缓冲pData,需要写入的数据长度uiLen
*出口:无
*功能:自动读出给定页地址的Flash数据到给定的Buffer中,并在修改完缓冲中的数据后,自动重写入到
*相应的存储器中。在写入过程中,状态寄存器中忙标志有效。
*/
void AutoReWriteFlash(uchar ucBufNum, uint uiFlashPageAddr, uint uiOffectInPage, uchar *pData, uint uiLen);
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -