1 .file "rtc8583.c" 2 .arch atmega8535 3 __SREG__ = 0x3f 4 __SP_H__ = 0x3e 5 __SP_L__ = 0x3d 6 __tmp_reg__ = 0 7 __zero_reg__ = 1 8 .global __do_copy_data 9 .global __do_clear_bss 12 .text 13 .Ltext0: 44 rtc_setReadAddr: 1:rtc8583.c **** /* 2:rtc8583.c **** * This code provides all functions to read/write date and time 3:rtc8583.c **** * to/from the Philips I2C RTC devices (PCF8583 or PCF8563) 4:rtc8583.c **** * 5:rtc8583.c **** */ 6:rtc8583.c **** 7:rtc8583.c **** #include "i2c.h" 8:rtc8583.c **** #include "time.h" 9:rtc8583.c **** #include "rtc8583.h" 10:rtc8583.c **** 11:rtc8583.c **** volatile char rtcBuff[5]; 12:rtc8583.c **** 13:rtc8583.c **** static void 14:rtc8583.c **** rtc_setReadAddr(unsigned char addr) 15:rtc8583.c **** { 46 .LM1: 47 /* prologue: frame size=0 */ 48 /* prologue end (size=0) */ 49 0000 282F mov r18,r24 16:rtc8583.c **** i2cControl.AdRW = RTC_I2C_AD & 0xfe; 51 .LM2: 52 0002 80EA ldi r24,lo8(-96) 53 0004 8093 0000 sts i2cControl,r24 17:rtc8583.c **** i2cControl.pDa = rtcBuff; 55 .LM3: 56 0008 80E0 ldi r24,lo8(rtcBuff) 57 000a 90E0 ldi r25,hi8(rtcBuff) 58 000c 9093 0000 sts (i2cControl+2)+1,r25 59 0010 8093 0000 sts i2cControl+2,r24 18:rtc8583.c **** rtcBuff[0] = addr; 61 .LM4: 62 0014 2093 0000 sts rtcBuff,r18 19:rtc8583.c **** i2cControl.Len = 1; 64 .LM5: 65 0018 81E0 ldi r24,lo8(1) 66 001a 8093 0000 sts i2cControl+1,r24 20:rtc8583.c **** 21:rtc8583.c **** i2cControl.State = I2C_BUSY; 68 .LM6: 69 001e 8093 0000 sts i2cControl+4,r24 22:rtc8583.c **** i2cStart(); 71 .LM7: 72 0022 00D0 rcall i2cStart 73 /* epilogue: frame size=0 */ 74 0024 0895 ret 75 /* epilogue end (size=1) */ 76 /* function rtc_setReadAddr size 19 (18) */ 78 .Lscope0: 83 .global rtc_RW 85 rtc_RW: 23:rtc8583.c **** } 24:rtc8583.c **** 25:rtc8583.c **** void 26:rtc8583.c **** rtc_RW(unsigned char rw_ad, unsigned char len) 27:rtc8583.c **** { 87 .LM8: 88 /* prologue: frame size=0 */ 89 /* prologue end (size=0) */ 28:rtc8583.c **** i2cControl.AdRW = rw_ad; // read/write read address 91 .LM9: 92 0026 8093 0000 sts i2cControl,r24 29:rtc8583.c **** i2cControl.pDa = rtcBuff; 94 .LM10: 95 002a 20E0 ldi r18,lo8(rtcBuff) 96 002c 30E0 ldi r19,hi8(rtcBuff) 97 002e 3093 0000 sts (i2cControl+2)+1,r19 98 0032 2093 0000 sts i2cControl+2,r18 30:rtc8583.c **** i2cControl.Len = len; 100 .LM11: 101 0036 6093 0000 sts i2cControl+1,r22 31:rtc8583.c **** 32:rtc8583.c **** i2cControl.State = I2C_BUSY; 103 .LM12: 104 003a 81E0 ldi r24,lo8(1) 105 003c 8093 0000 sts i2cControl+4,r24 33:rtc8583.c **** i2cStart(); 107 .LM13: 108 0040 00D0 rcall i2cStart 109 /* epilogue: frame size=0 */ 110 0042 0895 ret 111 /* epilogue end (size=1) */ 112 /* function rtc_RW size 15 (14) */ 114 .Lscope1: 120 .global rtc_setDate 122 rtc_setDate: 34:rtc8583.c **** } 35:rtc8583.c **** 36:rtc8583.c **** 37:rtc8583.c **** // high level user callable routines 38:rtc8583.c **** 39:rtc8583.c **** void 40:rtc8583.c **** rtc_setDate( unsigned char d, unsigned char m, unsigned char y ) 41:rtc8583.c **** { 124 .LM14: 125 /* prologue: frame size=0 */ 126 /* prologue end (size=0) */ 127 0044 242F mov r18,r20 42:rtc8583.c **** rtcBuff[0] = RTC_DATE_AD; 129 .LM15: 130 0046 35E0 ldi r19,lo8(5) 131 0048 3093 0000 sts rtcBuff,r19 43:rtc8583.c **** 44:rtc8583.c **** #if RTC_8583 45:rtc8583.c **** rtcBuff[1] = (y << 6) + d; 133 .LM16: 134 004c 2295 swap r18 135 004e 220F lsl r18 136 0050 220F lsl r18 137 0052 207C andi r18,0xc0 138 0054 280F add r18,r24 139 0056 2093 0000 sts rtcBuff+1,r18 46:rtc8583.c **** rtcBuff[2] = m; 141 .LM17: 142 005a 6093 0000 sts rtcBuff+2,r22 47:rtc8583.c **** rtc_Write(3); 144 .LM18: 145 005e 63E0 ldi r22,lo8(3) 146 0060 80EA ldi r24,lo8(-96) 147 0062 E1DF rcall rtc_RW 148 /* epilogue: frame size=0 */ 149 0064 0895 ret 150 /* epilogue end (size=1) */ 151 /* function rtc_setDate size 17 (16) */ 153 .Lscope2: 159 .global rtc_setTime 161 rtc_setTime: 48:rtc8583.c **** #elif RTC_8563 49:rtc8583.c **** rtcBuff[1] = d; 50:rtc8583.c **** rtcBuff[3] = m; 51:rtc8583.c **** rtcBuff[4] = y; 52:rtc8583.c **** rtc_Write(5); 53:rtc8583.c **** #else 54:rtc8583.c **** # warning "RTC type not defined" 55:rtc8583.c **** #endif 56:rtc8583.c **** } 57:rtc8583.c **** 58:rtc8583.c **** 59:rtc8583.c **** void 60:rtc8583.c **** rtc_setTime( unsigned char s, unsigned char m, unsigned char h ) 61:rtc8583.c **** { 163 .LM19: 164 /* prologue: frame size=0 */ 165 /* prologue end (size=0) */ 166 0066 982F mov r25,r24 62:rtc8583.c **** rtcBuff[0] = RTC_SECOND_AD; 168 .LM20: 169 0068 82E0 ldi r24,lo8(2) 170 006a 8093 0000 sts rtcBuff,r24 63:rtc8583.c **** rtcBuff[1] = s; 172 .LM21: 173 006e 9093 0000 sts rtcBuff+1,r25 64:rtc8583.c **** rtcBuff[2] = m; 175 .LM22: 176 0072 6093 0000 sts rtcBuff+2,r22 65:rtc8583.c **** rtcBuff[3] = h; 178 .LM23: 179 0076 4093 0000 sts rtcBuff+3,r20 66:rtc8583.c **** rtc_Write(4); 181 .LM24: 182 007a 64E0 ldi r22,lo8(4) 183 007c 80EA ldi r24,lo8(-96) 184 007e D3DF rcall rtc_RW 185 /* epilogue: frame size=0 */ 186 0080 0895 ret 187 /* epilogue end (size=1) */ 188 /* function rtc_setTime size 14 (13) */ 190 .Lscope3: 193 .global rtc_getTime 195 rtc_getTime: 67:rtc8583.c **** } 68:rtc8583.c **** 69:rtc8583.c **** void 70:rtc8583.c **** rtc_getTime(void) 71:rtc8583.c **** { 197 .LM25: 198 /* prologue: frame size=0 */ 199 /* prologue end (size=0) */ 72:rtc8583.c **** rtc_setReadAddr( RTC_SECOND_AD ); 201 .LM26: 202 0082 82E0 ldi r24,lo8(2) 203 0084 BDDF rcall rtc_setReadAddr 204 .L6: 73:rtc8583.c **** while( i2cControl.State != I2C_IDLE ) 206 .LM27: 207 0086 8091 0000 lds r24,i2cControl+4 208 008a 8823 tst r24 209 008c E1F7 brne .L6 74:rtc8583.c **** ; 75:rtc8583.c **** rtc_Read(3); 211 .LM28: 212 008e 63E0 ldi r22,lo8(3) 213 0090 81EA ldi r24,lo8(-95) 214 0092 C9DF rcall rtc_RW 215 .L9: 76:rtc8583.c **** while( i2cControl.State != I2C_IDLE ) 217 .LM29: 218 0094 8091 0000 lds r24,i2cControl+4 219 0098 8823 tst r24 220 009a E1F7 brne .L9 77:rtc8583.c **** ; 78:rtc8583.c **** second = rtcBuff[0] & 0x7f; // clear MSB (this is VL in 8563) 222 .LM30: 223 009c 8091 0000 lds r24,rtcBuff 224 00a0 8F77 andi r24,lo8(127) 225 00a2 8093 0000 sts second,r24 79:rtc8583.c **** minute = rtcBuff[1] & 0x7f; 227 .LM31: 228 00a6 8091 0000 lds r24,rtcBuff+1 229 00aa 8F77 andi r24,lo8(127) 230 00ac 8093 0000 sts minute,r24 80:rtc8583.c **** hour = rtcBuff[2] & 0x3f; 232 .LM32: 233 00b0 8091 0000 lds r24,rtcBuff+2 234 00b4 8F73 andi r24,lo8(63) 235 00b6 8093 0000 sts hour,r24 236 /* epilogue: frame size=0 */ 237 00ba 0895 ret 238 /* epilogue end (size=1) */ 239 /* function rtc_getTime size 29 (28) */ 241 .Lscope4: 244 .global rtc_getDate 246 rtc_getDate: 81:rtc8583.c **** } 82:rtc8583.c **** 83:rtc8583.c **** void 84:rtc8583.c **** rtc_getDate(void) 85:rtc8583.c **** { 248 .LM33: 249 /* prologue: frame size=0 */ 250 /* prologue end (size=0) */ 86:rtc8583.c **** rtc_setReadAddr( RTC_DATE_AD ); 252 .LM34: 253 00bc 85E0 ldi r24,lo8(5) 254 00be A0DF rcall rtc_setReadAddr 255 .L13: 87:rtc8583.c **** while( i2cControl.State != I2C_IDLE ) 257 .LM35: 258 00c0 8091 0000 lds r24,i2cControl+4 259 00c4 8823 tst r24 260 00c6 E1F7 brne .L13 88:rtc8583.c **** ; 89:rtc8583.c **** #if RTC_8583 90:rtc8583.c **** rtc_Read(2); 262 .LM36: 263 00c8 62E0 ldi r22,lo8(2) 264 00ca 81EA ldi r24,lo8(-95) 265 00cc ACDF rcall rtc_RW 266 .L16: 91:rtc8583.c **** #elif RTC_8563 92:rtc8583.c **** rtc_Read(4); 93:rtc8583.c **** #else 94:rtc8583.c **** # warning "RTC type not defined" 95:rtc8583.c **** #endif 96:rtc8583.c **** while( i2cControl.State != I2C_IDLE ) 268 .LM37: 269 00ce 8091 0000 lds r24,i2cControl+4 270 00d2 8823 tst r24 271 00d4 E1F7 brne .L16 97:rtc8583.c **** ; 98:rtc8583.c **** 99:rtc8583.c **** #if RTC_8583 100:rtc8583.c **** year = rtcBuff[0]>>6; 273 .LM38: 274 00d6 8091 0000 lds r24,rtcBuff 275 00da 8295 swap r24 276 00dc 8695 lsr r24 277 00de 8695 lsr r24 278 00e0 8370 andi r24,0x3 279 00e2 8093 0000 sts year,r24 101:rtc8583.c **** day = rtcBuff[0] & 0x3F; 281 .LM39: 282 00e6 8091 0000 lds r24,rtcBuff 283 00ea 8F73 andi r24,lo8(63) 284 00ec 8093 0000 sts day,r24 102:rtc8583.c **** month = rtcBuff[1] & 0x1F; 286 .LM40: 287 00f0 8091 0000 lds r24,rtcBuff+1 288 00f4 8F71 andi r24,lo8(31) 289 00f6 8093 0000 sts month,r24 290 /* epilogue: frame size=0 */ 291 00fa 0895 ret 292 /* epilogue end (size=1) */ 293 /* function rtc_getDate size 32 (31) */ 295 .Lscope5: 298 .global rtc_getCSR 300 rtc_getCSR: 103:rtc8583.c **** #elif RTC_8563 104:rtc8583.c **** day = rtcBuff[0] & 0x3f; 105:rtc8583.c **** month = rtcBuff[2] & 0x1f; 106:rtc8583.c **** year = rtcBuff[3] & 0x0F; 107:rtc8583.c **** #else 108:rtc8583.c **** # warning "RTC type not defined" 109:rtc8583.c **** #endif 110:rtc8583.c **** } 111:rtc8583.c **** 112:rtc8583.c **** unsigned char rtc_getCSR(void) 113:rtc8583.c **** { 302 .LM41: 303 /* prologue: frame size=0 */ 304 /* prologue end (size=0) */ 114:rtc8583.c **** rtc_setReadAddr( RTC_CSR_AD ); 306 .LM42: 307 00fc 80E0 ldi r24,lo8(0) 308 00fe 80DF rcall rtc_setReadAddr 309 .L20: 115:rtc8583.c **** while( i2cControl.State != I2C_IDLE ) 311 .LM43: 312 0100 8091 0000 lds r24,i2cControl+4 313 0104 8823 tst r24 314 0106 E1F7 brne .L20 116:rtc8583.c **** ; 117:rtc8583.c **** rtc_Read(1); 316 .LM44: 317 0108 61E0 ldi r22,lo8(1) 318 010a 81EA ldi r24,lo8(-95) 319 010c 8CDF rcall rtc_RW 320 .L23: 118:rtc8583.c **** while( i2cControl.State != I2C_IDLE ) 322 .LM45: 323 010e 8091 0000 lds r24,i2cControl+4 324 0112 8823 tst r24 325 0114 E1F7 brne .L23 119:rtc8583.c **** ; 120:rtc8583.c **** return rtcBuff[0]; 327 .LM46: 328 0116 8091 0000 lds r24,rtcBuff 121:rtc8583.c **** } 330 .LM47: 331 011a 9927 clr r25 332 /* epilogue: frame size=0 */ 333 011c 0895 ret 334 /* epilogue end (size=1) */ 335 /* function rtc_getCSR size 17 (16) */ 337 .Lscope6: 341 .global rtc_setCSR 343 rtc_setCSR: 122:rtc8583.c **** 123:rtc8583.c **** void rtc_setCSR(unsigned char c) 124:rtc8583.c **** { 345 .LM48: 346 /* prologue: frame size=0 */ 347 /* prologue end (size=0) */ 125:rtc8583.c **** rtcBuff[0] = RTC_CSR_AD; 349 .LM49: 350 011e 1092 0000 sts rtcBuff,__zero_reg__ 126:rtc8583.c **** rtcBuff[1] = c; 352 .LM50: 353 0122 8093 0000 sts rtcBuff+1,r24 127:rtc8583.c **** rtc_Write(2); 355 .LM51: 356 0126 62E0 ldi r22,lo8(2) 357 0128 80EA ldi r24,lo8(-96) 358 012a 7DDF rcall rtc_RW 359 /* epilogue: frame size=0 */ 360 012c 0895 ret 361 /* epilogue end (size=1) */ 362 /* function rtc_setCSR size 8 (7) */ 364 .Lscope7: 366 .comm rtcBuff,5,1 368 .text 370 Letext: 371 /* File "rtc8583.c": code 151 = 0x0097 ( 143), prologues 0, epilogues 8 */ DEFINED SYMBOLS *ABS*:00000000 rtc8583.c *ABS*:0000003f __SREG__ *ABS*:0000003e __SP_H__ *ABS*:0000003d __SP_L__ *ABS*:00000000 __tmp_reg__ *ABS*:00000001 __zero_reg__ c:\DOKUME~1\HANS-J~1\LOKALE~1\Temp/cckPaaaa.s:44 .text:00000000 rtc_setReadAddr *COM*:00000005 rtcBuff c:\DOKUME~1\HANS-J~1\LOKALE~1\Temp/cckPaaaa.s:85 .text:00000026 rtc_RW c:\DOKUME~1\HANS-J~1\LOKALE~1\Temp/cckPaaaa.s:122 .text:00000044 rtc_setDate c:\DOKUME~1\HANS-J~1\LOKALE~1\Temp/cckPaaaa.s:161 .text:00000066 rtc_setTime c:\DOKUME~1\HANS-J~1\LOKALE~1\Temp/cckPaaaa.s:195 .text:00000082 rtc_getTime c:\DOKUME~1\HANS-J~1\LOKALE~1\Temp/cckPaaaa.s:246 .text:000000bc rtc_getDate c:\DOKUME~1\HANS-J~1\LOKALE~1\Temp/cckPaaaa.s:300 .text:000000fc rtc_getCSR c:\DOKUME~1\HANS-J~1\LOKALE~1\Temp/cckPaaaa.s:343 .text:0000011e rtc_setCSR c:\DOKUME~1\HANS-J~1\LOKALE~1\Temp/cckPaaaa.s:370 .text:0000012e Letext UNDEFINED SYMBOLS __do_copy_data __do_clear_bss i2cControl i2cStart second minute hour year day month