#include <p24FJ64GA002.h>#include "types.h"#include "librtc.h"#include "libeeprom.h"
マクロ定義 | |
| #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.c の 50 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_A1 0x0002 |
libeeprom.c の 51 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_A2 0x0004 |
libeeprom.c の 52 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_A3 0x0008 |
libeeprom.c の 53 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_A4 0x0010 |
libeeprom.c の 54 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_A5 0x0020 |
libeeprom.c の 55 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_A6 0x0040 |
libeeprom.c の 56 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_A7 0x0080 |
libeeprom.c の 57 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_A8 0x0100 |
libeeprom.c の 58 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_A9 0x0200 |
libeeprom.c の 59 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_AA 0x0400 |
libeeprom.c の 60 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_AB 0x0800 |
libeeprom.c の 61 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_AC 0x1000 |
libeeprom.c の 62 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_AD 0x2000 |
libeeprom.c の 63 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_AD_PIN LATAbits.LATA3 |
libeeprom.c の 41 行で定義されています。
参照元 EEPROM_init(), EEPROM_read(), と EEPROM_write().
| #define EEPROM_AE 0x4000 |
libeeprom.c の 64 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_AE_PIN LATAbits.LATA2 |
libeeprom.c の 42 行で定義されています。
参照元 EEPROM_init(), EEPROM_read(), と EEPROM_write().
| #define EEPROM_AF 0x8000 |
libeeprom.c の 65 行で定義されています。
| #define EEPROM_HIGH 1 |
libeeprom.c の 46 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_LOW 0 |
libeeprom.c の 47 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_MASK | ( | x, | ||
| y | ||||
| ) | ((x & y) ? EEPROM_HIGH : EEPROM_LOW) |
libeeprom.c の 67 行で定義されています。
参照元 EEPROM_read(), と EEPROM_write().
| #define EEPROM_RX_SET | ( | ) | TRISBbits.TRISB3 = 0; TRISBbits.TRISB2 = 1; |
libeeprom.c の 37 行で定義されています。
参照元 EEPROM_init().
| #define EEPROM_SCL LATBbits.LATB3 |
libeeprom.c の 38 行で定義されています。
参照元 EEPROM_init().
| #define EEPROM_SDA_READ PORTBbits.RB2 |
libeeprom.c の 39 行で定義されています。
| #define EEPROM_SDA_WRITE LATBbits.LATB2 |
libeeprom.c の 40 行で定義されています。
| #define EEPROM_TX_SET | ( | ) | TRISBbits.TRISB3 = 0; TRISBbits.TRISB2 = 0; |
libeeprom.c の 36 行で定義されています。
| void EEPROM_init | ( | void | ) |
libeeprom.c の 84 行で定義されています。
参照先 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.c の 107 行で定義されています。
参照先 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.c の 200 行で定義されています。
参照先 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);
}

1.7.1