マクロ定義 | 関数

C:/PIC/OpenSSM/libeeprom.c

#include <p24FJ64GA002.h>
#include "types.h"
#include "librtc.h"
#include "libeeprom.h"
libeeprom.cのインクルード依存関係図

ソースコードを見る。

マクロ定義

#define EEPROM_TX_SET()   TRISBbits.TRISB3 = 0; TRISBbits.TRISB2 = 0;
#define EEPROM_RX_SET()   TRISBbits.TRISB3 = 0; TRISBbits.TRISB2 = 1;
#define EEPROM_SCL   LATBbits.LATB3
#define EEPROM_SDA_READ   PORTBbits.RB2
#define EEPROM_SDA_WRITE   LATBbits.LATB2
#define EEPROM_AD_PIN   LATAbits.LATA3
#define EEPROM_AE_PIN   LATAbits.LATA2
#define EEPROM_HIGH   1
#define EEPROM_LOW   0
#define EEPROM_A0   0x0001
#define EEPROM_A1   0x0002
#define EEPROM_A2   0x0004
#define EEPROM_A3   0x0008
#define EEPROM_A4   0x0010
#define EEPROM_A5   0x0020
#define EEPROM_A6   0x0040
#define EEPROM_A7   0x0080
#define EEPROM_A8   0x0100
#define EEPROM_A9   0x0200
#define EEPROM_AA   0x0400
#define EEPROM_AB   0x0800
#define EEPROM_AC   0x1000
#define EEPROM_AD   0x2000
#define EEPROM_AE   0x4000
#define EEPROM_AF   0x8000
#define EEPROM_MASK(x, y)   ((x & y) ? EEPROM_HIGH : EEPROM_LOW)

関数

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

マクロ定義

#define EEPROM_A0   0x0001

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_A1   0x0002

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_A2   0x0004

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_A3   0x0008

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_A4   0x0010

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_A5   0x0020

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_A6   0x0040

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_A7   0x0080

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_A8   0x0100

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_A9   0x0200

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_AA   0x0400

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_AB   0x0800

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_AC   0x1000

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_AD   0x2000

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_AD_PIN   LATAbits.LATA3

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

参照元 EEPROM_init(), EEPROM_read(), と EEPROM_write().

#define EEPROM_AE   0x4000

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_AE_PIN   LATAbits.LATA2

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

参照元 EEPROM_init(), EEPROM_read(), と EEPROM_write().

#define EEPROM_AF   0x8000

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

#define EEPROM_HIGH   1

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_LOW   0

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_MASK (   x,
  y 
)    ((x & y) ? EEPROM_HIGH : EEPROM_LOW)

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

参照元 EEPROM_read(), と EEPROM_write().

#define EEPROM_RX_SET (  )     TRISBbits.TRISB3 = 0; TRISBbits.TRISB2 = 1;

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

参照元 EEPROM_init().

#define EEPROM_SCL   LATBbits.LATB3

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

参照元 EEPROM_init().

#define EEPROM_SDA_READ   PORTBbits.RB2

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

#define EEPROM_SDA_WRITE   LATBbits.LATB2

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

#define EEPROM_TX_SET (  )     TRISBbits.TRISB3 = 0; TRISBbits.TRISB2 = 0;

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


関数

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);
}

関数の呼び出しグラフ: