#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 の 83 行で定義されています。
参照先 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 の 106 行で定義されています。
参照先 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 の 199 行で定義されています。
参照先 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); }