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/*********************************************************************************/
5758void 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)
8485void 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/*********************************************************************************/
198199char 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-
0 commit comments