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

📄 drveeprom.c

📁 自己设计的5路定时器!用于公司。内附电路图(DXP)
💻 C
字号:
#define _DRVEEPROM_C_ 

#include    "DrvHead.h" 

/////////////////////////////////////////////////////////////////////////////// 

STATIC S_EEPROM_POSITION volatile _sEepromBuf[EEPROM_WRITE_BUF_SIZE]; 
STATIC BYTE volatile _bEepromBufWrPtr; 
STATIC BYTE volatile _bEepromBufRdPtr; 
STATIC BYTE volatile _bEepromBufNs; 
#define fgEepromBufEmpty()      (_bEepromBufNs == 0) 
#define fgEepromBufFull()       (_bEepromBufNs == EEPROM_WRITE_BUF_SIZE) 

/////////////////////////////////////////////////////////////////////////////// 

#pragma interrupt_handler vIvEeReady:iv_EE_READY 
void vIvEeReady(void) 
{ 
    if(!fgEepromBufEmpty()) 
    { 
        EEAR = _sEepromBuf[_bEepromBufRdPtr].wAddress; 
        EEDR = _sEepromBuf[_bEepromBufRdPtr].bVal; 
        EECR |= BIT(EEMWE); 
        EECR |= BIT(EEWE); 
        _bEepromBufRdPtr++; 
        if(_bEepromBufRdPtr >= EEPROM_WRITE_BUF_SIZE) 
        { 
            _bEepromBufRdPtr = 0; 
        } 
        _bEepromBufNs--; 
    } 
    else 
    { 
        EECR &= ~BIT(EERIE); 
    } 
} 

/////////////////////////////////////////////////////////////////////////////// 

BYTE bWriteData2Eeprom(WORD wAddress, BYTE bVal) 
{ 
    if(fgEepromBufFull()) 
    { 
        return RET_BUSY; 
    } 

    CLI(); 
    _sEepromBuf[_bEepromBufWrPtr].wAddress = wAddress; 
    _sEepromBuf[_bEepromBufWrPtr].bVal = bVal; 
    _bEepromBufWrPtr++; 
    if(_bEepromBufWrPtr >= EEPROM_WRITE_BUF_SIZE) 
    { 
        _bEepromBufWrPtr = 0; 
    } 
    _bEepromBufNs++; 
    EECR |= BIT(EERIE); // Sure the EEPIE is enable even if do the thing before 
    SEI(); 

    return RET_SUCCESS; 
} 


// Notice! The programer must ensure the EEPROM is NOT in writing state. 
BYTE bReadDataFromEeprom(WORD wAddress, BYTE *pbVal) 
{ 
    if(EECR & BIT(EEWE)) 
    { 
        return RET_BUSY; 
    } 

    EEAR = wAddress; 
    EECR |= BIT(EERE); 
    *pbVal = EEDR; 
    return RET_SUCCESS; 
} 


BYTE bGetEepromWrBuf(void) 
{ 
    return _bEepromBufNs; 
} 


void bClrEepromBuf(void) 
{ 
    CLI(); 
    _bEepromBufNs = 0; 
    _bEepromBufRdPtr = _bEepromBufWrPtr; 
    EECR &= ~BIT(EERIE); 
    SEI(); 
} 


BOOL fgEepromWizard(void) 
{ 
    BOOL fgRet = FALSE; 

    return fgRet; 
} 


void vInitEeprom(void) 
{ 
    EECR = 0x00; 
    _bEepromBufWrPtr = 0; 
    _bEepromBufRdPtr = 0; 
    _bEepromBufNs    = 0; 
} 

/////////////////////////////////////////////////////////////////////////////// 

⌨️ 快捷键说明

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