▶ EEPROM에_직접_읽고/쓰기
(1) EEPROM 에는 다이렉트로 직접 접근이 불가하다. 1-1 EEPROM에 쓰고싶은 주소는 EEAR(어드레스 레지스터)에 주소를 입력하고, 이 EEAR 레지는 EEARH(4bit)+EEARL(8bit) = 12bit 를 사용한다. 1-2 EEPROM에 쓰고싶은 데이터는 EEDR(데이터 레지스터)에 입력을 한다. EEPROM 의 범위는 0x0000 ~ 0x0FFF 이고, 각 칸당 1byte 소모한다. 1-3 EEPROM에 Write 가 가능하도록 허용할지 여부를 결정하는 레지스터는 EEMPE로 EEMPE = 1 일때 값이 EEPROM에 입력이된다. |
▶ EEPROM.c
#include "EEPROM.h" // 첫번째인자는 12byte의 주소를넘겨주어야하므로, int형(16bit)으로 주소를 넘겨줌. // 두번째인자에는 EEPROM이 0x0000~0x0FFF 의 범위를 가지고 void EEPROM_write(unsigned int ui_addr,unsigned char uc_data) // 1byte의 크기를 가지므로 char 형으로 값을 넘겨줌. { // 1. 앞의 라이트 동작이 완료되어 EEPE = 0 으로 될때까지 기다린다. while(0 != (EECR & (1<<EEPE))); // EEPE=0으로 될때까지 기다린다. 값이 2(0x00000010)일때 참이어야 한다. 0이면 while 빠져나감 // 2. SPMCSR 레지스터에서 SPMEN = 0 으로 될때까지 기다린다. //while(0 != (SPMCSR & (1<<SPMEN))); // DataSheet의 샘플코드에는 이부분이 생략됨. // 3. 새로 라이트할 EEPROM 어드레스를 EEAR 레지스터에 저장한다. EEAR = ui_addr; // 4. 새로 라이트할 EEPROM 데이터를 EEDR 레지스터에 저장한다. EEDR = uc_data; // 5. EECR 레지스터에 EEMPE = 1, EEPE = 0 으로 설정한다. EECR = (1<<EEMPE) | (0<<EEPE); // 6. 4사이클 이내에 EEPE =1 로 설정한다. EECR = (1<<EEPE);
return; } unsigned char EEPROM_read(unsigned int ui_addr) { // 1. 앞의 라이트 동작이 완료되어 EEPE = 0 으로 될때까지 기다린다. while(0 != (EECR & (1<<EEPE))) // 2. 리드할 EEPROM 어드레스를 EEAR 레지스터에 저장한다. EEAR = ui_addr; // 3. EECR 레지스터에 EERE = 1 로 설정한다. EECR = (1<<EERE); // 4. EEPROM 데이터를 EEDR 레지스터로 부터 읽는다. return(EEDR); } |
▶ EEPROM.h
#ifndef _EEPROM_H #define _EEPROM_H #define EEARH (*((volatile unsigned char *)0x42)) // 어드레스 레지스터. #define EEARL (*((volatile unsigned char *)0x41)) #define EEAR (*((volatile unsigned int *)0x41)) // int 형으로 바꿔서 한번에 보냄 #define EEDR (*((volatile unsigned char *)0x40)) #define EECR (*((volatile unsigned char *)0x3F)) #define SPMCSR (*((volatile unsigned char *)0x57)) /**** EECR 레지 ******/ // 제어 레지스터 #define EEPM1 5 #define EEPM0 4 #define EERIE 3 #define EEMPE 2 #define EEPE 1 #define EERE 0 /**** SPMCSR 레지 ****/ // SPMCSR – Store Program Memory Control and Status Register #define SPMIE 7 #define RWWSB 6 #define SIGRD 5 #define RWWSRE 4 #define BLBSET 3 #define PGWRT 2 #define PGERS 1 #define SPMEN 0 // SPMEN: Store Program Memory Enable void EEPROM_write(unsigned int ui_addr,unsigned char uc_data); unsigned char EEPROM_read(unsigned int ui_addr); #endif // _EEPROM_H |
'AVR2560' 카테고리의 다른 글
2013.06.10_초음파센서_활용 (0) | 2013.06.11 |
---|---|
2013.06.07_인터럽트에 대한 이론_ (0) | 2013.06.07 |
2013.06.05_AVR_ADC동작. (0) | 2013.06.07 |
2013.05.30_AVR_한글띄우기_포팅_BSD(퍼온자료_종영이형꺼) (0) | 2013.05.31 |
2013.05.30_ARM_LCD에 한글띄우기. (0) | 2013.05.30 |