関数

C:/PIC/OpenSSM/libeeprom.h

#include "types.h"
libeeprom.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

関数

void EEPROM_init (void)
int EEPROM_read (unsigned int ptr)
BOOL EEPROM_write (unsigned int ptr, unsigned char buf)

関数

void EEPROM_init ( void   ) 

libeeprom.c83 行で定義されています。

参照先 EEPROM_AD_PIN, EEPROM_AE_PIN, EEPROM_RX_SET, と EEPROM_SCL.

{
    EEPROM_RX_SET();
    EEPROM_SCL = EEPROM_HIGH;

    /* Bank */
    EEPROM_AD_PIN = EEPROM_LOW;
    EEPROM_AE_PIN = EEPROM_LOW;
    //EEPROM_AF_PIN = EEPROM_LOW;

    return;
}

int EEPROM_read ( unsigned int  ptr  ) 

libeeprom.c106 行で定義されています。

参照先 EEPROM_A0, EEPROM_A1, EEPROM_A2, EEPROM_A3, EEPROM_A4, EEPROM_A5, EEPROM_A6, EEPROM_A7, EEPROM_A8, EEPROM_A9, EEPROM_AA, EEPROM_AB, EEPROM_AC, EEPROM_AD, EEPROM_AD_PIN, EEPROM_AE, EEPROM_AE_PIN, EEPROM_HIGH, EEPROM_LOW, と EEPROM_MASK.

参照元 CONFIG_load().

{
    unsigned char data;

//  EEPROM_AF_PIN = EEPROM_MASK(ptr, EEPROM_AF);
    EEPROM_AE_PIN = EEPROM_MASK(ptr, EEPROM_AE);
    EEPROM_AD_PIN = EEPROM_MASK(ptr, EEPROM_AD);

    EEPROM_start();

    /* コントロール : 1010 AF AE AD R/W */
    EEPROM_TX_pulse(EEPROM_HIGH);
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_HIGH);
    EEPROM_TX_pulse(EEPROM_LOW);
//  EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AF));
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AE));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AD));
    EEPROM_TX_pulse(EEPROM_LOW);
    if(EEPROM_RX_pulse() == EEPROM_HIGH) goto READ_ERROR;       /* Acknowledge */

    /* アドレス : * * * AC AB AA A9 A8 */
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AC));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AB));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AA));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A9));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A8));
    if(EEPROM_RX_pulse() == EEPROM_HIGH) goto READ_ERROR;       /* Acknowledge */

    /* アドレス : A7 A6 A5 A4 A3 A2 A1 A0 */
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A7));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A6));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A5));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A4));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A3));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A2));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A1));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A0));
    if(EEPROM_RX_pulse() == EEPROM_HIGH) goto READ_ERROR;       /* Acknowledge */

    /* ここから読み込み処理 */
    EEPROM_start();

    /* デバイスアドレス 1010 AF AE AD R/W */
    EEPROM_TX_pulse(EEPROM_HIGH);
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_HIGH);
    EEPROM_TX_pulse(EEPROM_LOW);
//  EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AF));
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AE));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AD));
    EEPROM_TX_pulse(EEPROM_HIGH);
    if(EEPROM_RX_pulse() == EEPROM_HIGH) goto READ_ERROR;       /* Acknowledge */

    /* データ読み出し */
    data = 0;
    data +=  EEPROM_RX_pulse() << 7;
    data +=  EEPROM_RX_pulse() << 6;
    data +=  EEPROM_RX_pulse() << 5;
    data +=  EEPROM_RX_pulse() << 4;
    data +=  EEPROM_RX_pulse() << 3;
    data +=  EEPROM_RX_pulse() << 2;
    data +=  EEPROM_RX_pulse() << 1;
    data +=  EEPROM_RX_pulse();
    EEPROM_TX_pulse(EEPROM_HIGH);                               /* No Acknowledge */

    EEPROM_stop();
    return(data);


READ_ERROR:
    EEPROM_stop();
    return(-1);

}

呼出しグラフ:

BOOL EEPROM_write ( unsigned int  ptr,
unsigned char  buf 
)

libeeprom.c199 行で定義されています。

参照先 EEPROM_A0, EEPROM_A1, EEPROM_A2, EEPROM_A3, EEPROM_A4, EEPROM_A5, EEPROM_A6, EEPROM_A7, EEPROM_A8, EEPROM_A9, EEPROM_AA, EEPROM_AB, EEPROM_AC, EEPROM_AD, EEPROM_AD_PIN, EEPROM_AE, EEPROM_AE_PIN, EEPROM_HIGH, EEPROM_LOW, EEPROM_MASK, FALSE, rtc, RTC_get_ticks(), RTC::tick, と TRUE.

{
    unsigned int wait;

//  EEPROM_AF_PIN = EEPROM_MASK(ptr, EEPROM_AF);
    EEPROM_AE_PIN = EEPROM_MASK(ptr, EEPROM_AE);
    EEPROM_AD_PIN = EEPROM_MASK(ptr, EEPROM_AD);

    EEPROM_start();

    /* コントロール : 1010 AF AE AD R/W */
    EEPROM_TX_pulse(EEPROM_HIGH);
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_HIGH);
    EEPROM_TX_pulse(EEPROM_LOW);
//  EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AF));
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AE));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AD));
    EEPROM_TX_pulse(EEPROM_LOW);
    if(EEPROM_RX_pulse() == EEPROM_HIGH) goto WRITE_ERROR;      /* Acknowledge */

    /* アドレス : * * * AC AB AA A9 A8 */
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_LOW);
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AC));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AB));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_AA));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A9));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A8));
    if(EEPROM_RX_pulse() == EEPROM_HIGH) goto WRITE_ERROR;      /* Acknowledge */

    /* アドレス : A7 A6 A5 A4 A3 A2 A1 A0 */
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A7));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A6));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A5));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A4));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A3));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A2));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A1));
    EEPROM_TX_pulse(EEPROM_MASK(ptr, EEPROM_A0));
    if(EEPROM_RX_pulse() == EEPROM_HIGH) goto WRITE_ERROR;      /* Acknowledge */

    /* データ書き込み */
    EEPROM_TX_pulse(EEPROM_MASK(buf, EEPROM_A7));
    EEPROM_TX_pulse(EEPROM_MASK(buf, EEPROM_A6));
    EEPROM_TX_pulse(EEPROM_MASK(buf, EEPROM_A5));
    EEPROM_TX_pulse(EEPROM_MASK(buf, EEPROM_A4));
    EEPROM_TX_pulse(EEPROM_MASK(buf, EEPROM_A3));
    EEPROM_TX_pulse(EEPROM_MASK(buf, EEPROM_A2));
    EEPROM_TX_pulse(EEPROM_MASK(buf, EEPROM_A1));
    EEPROM_TX_pulse(EEPROM_MASK(buf, EEPROM_A0));
    if(EEPROM_RX_pulse() == EEPROM_HIGH) goto WRITE_ERROR;      /* Acknowledge */

    EEPROM_stop();

    /* Write Cycle Time */
    wait = rtc.tick;
    while(RTC_get_ticks(wait, rtc.tick) < 100);

    return(TRUE);

WRITE_ERROR:
    EEPROM_stop();
    return(FALSE);
}

関数の呼び出しグラフ: