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

📄 eeprom.c

📁 这是一个车用电机调速器的AVR单片机的整套C语言的源代码
💻 C
字号:
/********************************************************************************************************
* 文 件 名 : eeprom.c
* 程 序 员 : (CaiJie) hnclcj@gmail.com
*                             (c) Copyright 2007-2007, CaiJie
*                                  All Rights Reserved
* 创建日期 : 2007-09-10
* 说    明 :
* 修改日期 :
* 修改版本 :
* 说    明 :
********************************************************************************************************/


#define  EEP_GLOBALS
#include "includes.h"





/********************************************************************************************************
* 功  能 : 字节读
* 入  口 : 'Addr' 读数据的位置
* 返  回 : 读到的数据
* 说  明 : 无
********************************************************************************************************/

INT8U EEPROMByteRead (INT16U Addr)
{
    INT8U result;


    //while (EECR & (1<<EEWE));                     // 等待上一次写操作
    //OS_ENTER_CRITICAL();                          // 进入临界
    //EEAR   = Addr;                                // 设置地址寄存器*
    //EECR  |= (1<<EERE);                           // 设置EERE 以启动
    //result = EEDR;                                // 读EEPROM数据
    //OS_EXIT_CRITICAL();                           // 退出临界

    return result;                                // 数据返回
}


/********************************************************************************************************
* 功  能 : 多字节读
* 入  口 : 'addr'  读数据的起始位置
*          'pRDat' 返回数据的指针
*          'ctr'   要读的数据个数
* 返  回 : 读到的数据
* 说  明 : 无
********************************************************************************************************/
#if EEPROM_READS_EN > 0

void EEPROMByteReads (INT16U Addr, INT8U *pRDat, INT16U Ctr)
{
    while (Ctr != 0) {
        *pRDat = EEPROMByteRead(Addr);
        pRDat++;
        Addr++;
        Ctr--;
    }
}
#endif


/********************************************************************************************************
* 功  能 : 字节编程并校验
* 入  口 : 'Addr' 待写入地址
*          'Dat'  待写入的数据
* 返  回 : 返回操作结果
* 说  明 : 1> 在此假设中断不会在执行这些函数的过程当中发生。(此条 通过临界解决)
*          2> 同时还假设软件没有Boot Loader。若Boot Loader 存在,则EEPROM 写函数还需要等待正在运行的SPM 命令的结束
*          3> 写EEPROM时间典型为8.5MS 1字节
********************************************************************************************************/

void EEPROMByteWrite (INT16U Addr, INT8U Dat)
{
    while(EECR & (1<<EEWE));                      // 等待上一次写操作结束
    OS_ENTER_CRITICAL();                          // 进入临界 (保证写操作时序)
    EEAR = Addr;                                  // 设置地址和数据寄存器
    EEDR = Dat;                                   // 写入数据
    EECR |= (1<<EEMWE);                           // 置位EEMWE
    EECR |= (1<<EEWE);                            // 置位EEWE 以启动写操作 (CPU4个周期内写此位 否则写失败)
    OS_EXIT_CRITICAL();                           // 退出临界
}


/********************************************************************************************************
* 功  能 : 字节写编程并校验
* 入  口 : 'addr'  待写入数据的起始地址
*          'pWDat' 待写入的数据的指针
*          'ctr'   待写入数据的长度
* 返  回 : 返回操作结果
* 说  明 :
********************************************************************************************************/
#if EEPROM_WRITES_EN > 0

void EEPROMByteWrites (INT16U Addr, INT8U *pWDat, INT16U Ctr)
{
    while (Ctr != 0) {
        EEPROMByteWrite(Addr, *pWDat);            // 写入数据
        Addr++;
        pWDat++;
        Ctr--;
    }
}
#endif

/********************************************************************************************************
*                                        End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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