뻔뻔한avr 프로그래밍 - 뻔한_avr_야간... · pdf fileindex 1 atmega128...

14
뻔뻔한 AVR 프로그래밍 뻔뻔한 AVR 프로그래밍 The 7 th Lecture The 7 Lecture 유명환 ( [email protected])

Upload: duongngoc

Post on 13-Feb-2018

296 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

뻔뻔한 AVR 프로그래밍뻔뻔한 AVR 프로그래밍The 7th LectureThe 7 Lecture

유 명 환 ( [email protected])

Page 2: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

INDEXINDEX

ATmega128 내부 메모리 구조 분석1 ATmega128 내부 메모리 구조 분석

ATmega128 내부 EEPROM 구조 분석

1

2 ATmega128 내부 EEPROM 구조 분석

AT 128 내부 EEPROM 관련 레지스터 분석

2

3 ATmega128 내부 EEPROM 관련 레지스터 분석3

ATmega128 내부 EEPROM 실습4

Page 3: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 메모리 구조 분석1

ATmega128ATmega128Program Memory Data Memory

4KB EEPROM

Page 4: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 메모리 구조 분석1

메모리 종류 용도 PC와 비교메모리 종류 용도 PC와 비교

Flash (128KB) 프로그램 코드 저장 HDD(하드 디스크)

SRAM (4KB) 프로그램 코드 실행 메모리 카드

EEPROM (4KB) 특정 데이터 저장 USB 메모리EEPROM (4KB) 특정 데이터 저장 USB 메모리

* EEPROM 사용 예) USB 기기 관련 정보 저장, Ethernet MAC 주소 저장, TV 채널 정보 저장

Page 5: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 EEPROM 구조 분석2

ATmega128ATmega128ATmega128ATmega128

AVR Core EEPROM

Master Slave

TWI(I2C)

Page 6: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 EEPROM 구조 분석2

마지막 주소에 저장된 데이터

4KB EEPROM

1111 1111 1111 마지막 주소에 저장된 데이터

……1111 1111 1111

네 번째 주소에 저장된 데이터 212……

두 번째 주소에 저장된 데이터

세 번째 주소에 저장된 데이터

첫 번째 주소에 저장된 데이터

두 번째 주소에 저장된 데이터

0000 0000 0000

8 bit

Page 7: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 EEPROM 관련 레지스터 분석3 ATmega128 내부 EEPROM 관련 레지스터 분석3

EEARH / EEARL : EEPROM Address Register

Register 설명 실제 구현 예

EEARH / • EEAR = EEARH(상위 4 비트) + EEARL(하위 8비트) EEAR = (int)addr;EEARL 주의 : UBRRnH, UBRRnL는합쳐서표현할수없다!

• Read/Write할곳의주소를나타냄 // UBRR1H = 0;// UBRR1L = 51;

Page 8: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 EEPROM 관련 레지스터 분석3 ATmega128 내부 EEPROM 관련 레지스터 분석3

EEDR : EEPROM Data Register

Register 설명 실제 구현 예

EEDR •실제로읽거나쓰기위해서사용되는바이트단위의데이터저장 -> 버퍼• EEPROM에데이터를기록할때기록할데이터를보관• EEPROM에데이터를읽을때읽혀진데이터를가짐

EEDR = data; // Writereturn EEDR // Read

Page 9: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 EEPROM 관련 레지스터 분석3 ATmega128 내부 EEPROM 관련 레지스터 분석3EECR : EEPROM Control Registerg

Register 설명 실제 구현 예

Bit 2 EEPROM에기록가능상태를지정 EECR |= (1<<EEMWE);Bit 2 –EEMWE: EEPROM Master Write Enable

• EEPROM에기록가능상태를지정

• EEMWE가 1로설정되고 EEWE가 1일때지정된 EEPROM 주소에

CPU의 4클럭사이클이내에데이터기록 -> Write Time

Write Time 동안외부접근을막아줘야함!

EECR |= (1<<EEMWE);

// EECR 이전 상태는 유지

// EEMWE 값만 “1”로 변경

Bit 1 –EEWE: EEPROM Write Enable

•기록될공간의주소, 데이터가제대로설정되어있어야함

• EEWE가 1로설정되기전에 EEMWE가 1로설정되어있어야

쓰기(write)동작이일어남

while (EECR & (1<<EEWE));// EEWE 값이 “0” 일때// while() 종료

Write Enable 쓰기(write) 동작이일어남

• CPU에서내부플래시메모리에기록하는동안에 EEPROM에데이터를

기록할수없음 -> EEPROM의읽기/쓰기는 Firmware에의해동작되므로

쓰기(write) 동작이완료되면하드웨어(H/W)에의해서 Clear

EECR |= (1<<EEWE);

Bit 0 –EERE : EEPROM Read Enable

•유효한주소를지정한후 EERE가 1로설정되면읽기(read)가동작됨 EECR |= (1<<EERE);

Page 10: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 EEPROM 관련 레지스터 분석3 ATmega128 내부 EEPROM 관련 레지스터 분석3

EEMWE와 EEWE의값이설정된후 4클럭사이클이내에 data write하드웨어에의해서설정

이전 write 동작종료 EEWE = 0출발선

write할주소지정write 동작수행-해당주소에해당데이터 write-버퍼(EEDR)에있던데이터를

EEAR addressEEMWE 1EEWE 1

출발선

-버퍼(EEDR)에있던데이터를EEPROM에기록(write)

EEDR dataEEPROM : Write

write할데이터를버퍼(EEDR)에 저장

Page 11: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 EEPROM 관련 레지스터 분석3 ATmega128 내부 EEPROM 관련 레지스터 분석3

하드웨어에의해서설정

이전 write 동작종료 EEWE = 0출발선

read할주소지정 EEAR address

출발선

EERE 1EEPROM : Read

read 동작수행-지정한주소로부터데이터를읽어와버퍼(EEDR)에저장

Page 12: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 EEPROM 실습4

EEPROM 제어 방법

직접 레지스터를 설정하는 방법 AVR-GCC 라이브러리(함수)를 사용하는 방법

EEAREEDR

<avr/eeprom.h>에 정의#i l d < / m h>EEDR

EECR#include <avr/eeprom.h>

eeprom_is_ready(): EEWE 비트가 Clear 될 때까지 기다림

eeprom_wb(addr, val): 해당 주소(addr)에 값(val)을 쓰기(write)

eeprom_rb(addr): 해당 주소(addr)에 바이트 단위로 읽기(read)

Page 13: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 EEPROM 실습4 ATmega128 내부 EEPROM 실습4

void eeprom write(unsigned int addr, unsigned char data)

예제 : Write

void eeprom_write(unsigned int addr, unsigned char data){

while(EECR & (1<<EEWE));

//초기화 &설정루틴// 초기화 & 설정루틴

//주소와데이터레지스터설정EEAR = addr;EEDR = data;// EEMWE를 1로설정

}

// EEMWE를 1로설정EECR |= (1<<EEMWE);// EEWE를 1로설정EECR |= (1<<EEWE);

}

int main(void){…

// 서비스루틴

for (i = 0; i < len; i++)

EEMWE

…}

eeprom_write(i, buf[i]); // 문자열길이만큼 EEPROM의 0번지부터 write

Page 14: 뻔뻔한AVR 프로그래밍 - 뻔한_AVR_야간... · PDF fileINDEX 1 ATmega128 내부메모리구조분석 2 ATmega128 내부EEPROM 구조분석 3 AT 128 ATmega128 내부EEPROM

ATmega128 내부 EEPROM 실습4 ATmega128 내부 EEPROM 실습4

unsigned char eeprom_read(unsigned int addr){

예제 : Read

{while(EECR & (1<<EEWE));

// 초기화 & 설정루틴

//주소와데이터레지스터설정EEAR = addr;// EERE를 1로설정하여읽기시작EECR |= (1<<EERE);

// 데이터레지스터에서데이터읽음t EEDR

EECR | (1<<EERE);// EEWE를 1로설정EECR |= (1<<EERE);

return EEDR;}

int main(void){…

// 서비스루틴

for (i 0; i < sizeof(buf); i++)

…}

for (i = 0; i < sizeof(buf); i++)eeprom_read(i); // 0번지부터바이트단위로 read