Skip to content

Commit 2373c0f

Browse files
Merge pull request #4 from TimerOverflow/20161226
20161226
2 parents 222c208 + 618469e commit 2373c0f

File tree

2 files changed

+47
-60
lines changed

2 files changed

+47
-60
lines changed

AvrEeprom.c

Lines changed: 36 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
/*********************************************************************************/
22
/*
3-
* Author : Jung Hyun Gu
3+
* Author : Jeong Hyun Gu
44
* File name : AvrEeprom.c
55
*/
66
/*********************************************************************************/
7-
#include "include/AvrEeprom.h"
7+
#include <ina90.h>
8+
#include "AvrEeprom.h"
89
/*********************************************************************************/
9-
#if(AVR_EEPROM_REVISION_DATE != 20161130)
10+
#if(AVR_EEPROM_REVISION_DATE != 20161226)
1011
#error wrong include file. (AvrEeprom.h)
1112
#endif
1213
/*********************************************************************************/
@@ -22,59 +23,59 @@ char InitEepControl(tag_EepControl *Eep, const unsigned char *DataBase, unsigned
2223
unsigned int *pEepBase = (unsigned int *) &Eep->EepBase;
2324
unsigned int *pLength = (unsigned int *) &Eep->Length;
2425
tag_EepBitField *pBit = (tag_EepBitField *) &Eep->Bit;
25-
26-
26+
27+
2728
/*
2829
1) 인수
2930
- Eep : tag_EepControl 인스턴스의 주소
3031
- DataBase : eeprom을 통해 관리할 대상의 시작주소
3132
- Length : 관리할 대상의 크기
32-
33+
3334
2) 반환
3435
- 초기화 성공 여부
35-
36+
3637
3) 설명
3738
- tag_EepControl 인스턴스를 초기화한다.
3839
- tag_EepControl 인스턴스에 eeprom으로 부터 읽거나 쓸 대상의 주소와, 할당할 eeprom의 시작과 길이를 초기화한다.
3940
*/
40-
41-
41+
42+
4243
pBit->Init = false;
43-
44+
4445
if((DataBase != 0) && (Length != 0) && ((AllocEepAddr + Length + GapOfAnotherSector) < EEPROM_SIZE))
4546
{
4647
*pLength = Length;
4748
*pDataBase = (char *) DataBase;
4849
*pEepBase = AllocEepAddr;
4950
AllocEepAddr += (Length + GapOfAnotherSector);
50-
51+
5152
pBit->Init = true;
5253
}
53-
54+
5455
return pBit->Init;
5556
}
5657
/*********************************************************************************/
5758
void DoEepReadControl(tag_EepControl *Eep)
5859
{
5960
unsigned int Index = 0;
60-
61+
6162
/*
6263
1) 인수
6364
- Eep : tag_EepControl 인스턴스의 주소
64-
65+
6566
2) 반환
6667
- 없음.
67-
68+
6869
3) 설명
6970
- 해당 인스턴스의 eeprom으로 부터 데이터를 읽어와 대상 버퍼에 값을 대입.
7071
*/
71-
72+
7273
if(Eep->Bit.Init == false)
7374
{
7475
return;
7576
/* error or disabled */
7677
}
77-
78+
7879
do
7980
{
8081
Eep->DataBase[Index] = Eeprom_Read(Eep->EepBase + (Index));
@@ -84,20 +85,20 @@ void DoEepReadControl(tag_EepControl *Eep)
8485
void GetDataFromEeprom(char* const Dest, const int EepBase, int Length)
8586
{
8687
unsigned int Index = 0;
87-
88+
8889
/*
8990
1) 인수
9091
- Dest : eeprom으로 부터 읽은 데이터를 대입할 대상의 주소
9192
- EepBase : 읽을 eeprom의 시작주소 (메모리 주소가 아님)
9293
- Length : 읽어올 데이터의 길이.
93-
94+
9495
2) 반환
9596
- 없음.
96-
97+
9798
3) 설명
9899
- tag_EepControl 구조체를 사용하지 않고 임의 eeprom 영역으로 부터 데이터를 읽어와 대상 버퍼에 값을 대입한다.
99100
*/
100-
101+
101102
do
102103
{
103104
Dest[Index] = Eeprom_Read(EepBase + Index);
@@ -108,29 +109,29 @@ char DoEepWriteControl(tag_EepControl *Eep)
108109
{
109110
unsigned int *pIndex = (unsigned int *) &Eep->Index;
110111
tag_EepBitField *pBit;
111-
112+
112113
/*
113114
1) 인수
114115
- Eep : tag_EepControl 인스턴스의 주소
115-
116+
116117
2) 반환
117118
- 쓰기동작 중일 때 true, 그외 상황일 때 false.
118-
119+
119120
3) 설명
120121
- 해당 인스턴스의 eeprom 영역에 관리할 대상 데이터를 쓰기를 진행한다.
121122
- SetEepWriteEnable() 함수를 통해 'Eep.Bit.Write'를 활성화 시켜야 실행된다.
122-
- 쓰기전 해당주소의 값이 쓰려고 하는 값과 일치하지 않을 경우에만 유효하다고 판단하며,
123+
- 쓰기전 해당주소의 값이 쓰려고 하는 값과 일치하지 않을 경우에만 유효하다고 판단하며,
123124
유효한 데이터만 쓰기를 진행하고 유효하지 않을 경우 다음 주소로 건너뛴다.
124125
- 값이 유효하여 쓰기를 진행하거나 해당영역의 마지막에 도달할 경우에만 while loop를 탈출한다.
125126
*/
126-
127-
127+
128+
128129
if((Eep->Bit.Init == false) || (Eep->Bit.Write == false))
129130
{
130131
return false;
131132
/* error or disabled */
132133
}
133-
134+
134135
while(true)
135136
{
136137
if(Eeprom_Read(Eep->EepBase + (*pIndex)) != Eep->DataBase[*pIndex])
@@ -139,7 +140,7 @@ char DoEepWriteControl(tag_EepControl *Eep)
139140
return true;
140141
/* check valid data */
141142
}
142-
143+
143144
if(++(*pIndex) > Eep->Length)
144145
{
145146
pBit = (tag_EepBitField *) &Eep->Bit;
@@ -155,18 +156,18 @@ void SetEepWriteEnable(tag_EepControl *Eep)
155156
/*
156157
1) 인수
157158
- Eep : tag_EepControl 인스턴스의 주소
158-
159+
159160
2) 반환
160161
- 없음.
161-
162+
162163
3) 설명
163164
- 해당 인스턴스에 쓰기 동작을 활성화한다.
164165
- 'Eep.Bit.Write' 상태가 'true'일 때 DoEepWriteControl()함수가 쓰기 동작을 실행한다.
165166
*/
166-
167+
167168
tag_EepBitField *pBit = (tag_EepBitField *) &Eep->Bit;
168169
unsigned int *pIndex = (unsigned int *) &Eep->Index;
169-
170+
170171
pBit->Write = true;
171172
*pIndex = 0;
172173
}
@@ -175,7 +176,7 @@ void Eeprom_Write(unsigned int Addr, char Data)
175176
{
176177
char cSREG;
177178

178-
while(EECR & 0x02);
179+
while(EECR & 0x02) _WDR();
179180
EEAR = Addr;
180181
EEDR = Data;
181182

@@ -197,15 +198,9 @@ void Eeprom_Write(unsigned int Addr, char Data)
197198
/*********************************************************************************/
198199
char Eeprom_Read(unsigned int Addr)
199200
{
200-
while(EECR & 0x02);
201+
while(EECR & 0x02) _WDR();
201202
EEAR = Addr;
202203
EECR |= 0x01;
203204
return EEDR;
204205
}
205206
/*********************************************************************************/
206-
207-
208-
209-
210-
211-

AvrEeprom.h

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
/*********************************************************************************/
22
/*
3-
* Author : Jung Hyun Gu
3+
* Author : Jeong Hyun Gu
44
* File name : AvrEeprom.h
55
*/
66
/*********************************************************************************/
77
#ifndef __AVR_EEPROM_H__
88
#define __AVR_EEPROM_H__
99
/*********************************************************************************/
10-
#define AVR_EEPROM_REVISION_DATE 20161130
10+
#define AVR_EEPROM_REVISION_DATE 20161226
1111
/*********************************************************************************/
1212
/** REVISION HISTORY **/
1313
/*
14+
2016. 12. 26. - Eeprom_Write(), Eeprom_Read() 함수에서 WDT RESET 추가.
15+
Jeong Hyun Gu
16+
1417
2016. 11. 30. - DoEepReadControl(), GetDataFromEeprom() 함수에서 Length 보다 1바이트 더 읽던 현상 수정.
15-
Jung Hyun Gu
18+
Jeong Hyun Gu
1619
1720
2016. 11. 08. - revision valid check 추가.
18-
Jung Hyun Gu
21+
Jeong Hyun Gu
1922
2023
2016. 10. 28. - DoEepWriteControl() 반환값 수정.
21-
Jung Hyun Gu - 반환값 관련 주석 추가.
24+
Jeong Hyun Gu - 반환값 관련 주석 추가.
2225
2326
2016. 10. 28. - 초기버전.
24-
Jung Hyun Gu
27+
Jeong Hyun Gu
2528
*/
2629
/*********************************************************************************/
2730
/**Define**/
@@ -80,9 +83,9 @@ typedef const struct
8083
{
8184
char *DataBase; // 관리할 데이터의 시작 주소
8285
unsigned int EepBase; // eeprom의 시작 주소
83-
unsigned int Index; // 쓰기 인덱스
86+
unsigned int Index; // 쓰기 인덱스
8487
unsigned int Length; // 관리할 데이터의 길이
85-
88+
8689
tag_EepBitField Bit;
8790
}tag_EepControl;
8891

@@ -102,14 +105,3 @@ char Eeprom_Read(unsigned int Addr);
102105

103106
/*********************************************************************************/
104107
#endif //__AVR_EEPROM_H__
105-
106-
107-
108-
109-
110-
111-
112-
113-
114-
115-

0 commit comments

Comments
 (0)