Hello, ALL! Глянте плиз. Код реально рабочий - зашит в железячку и тикает там себе. Тем не менее хочу разобратся: Как этот код согласовывается с даташитом от Epson? Никак не могу въехать. Код (Text): RetriveSystemTime STMFD SP!, {R3-R5,LR} MOV R4, R0 MOV R5, #0 loc_4DF9C CMP R5, #100 BCS loc_4DFEC B loc_4DFB4 loc_4DFA8 ADD R0, R5, #1 AND R5, R0, #0xFF B loc_4DF9C loc_4DFB4 LDR R0, =RTC LDRB R0, [R0,#0x1B] ORR R0, R0, #1 ; Установили HOLD в Control Register D LDR R1, =RTC STRB R0, [R1,#0x1B] MOV R0, R1 LDRB R0, [R0,#0x1B] TST R0, #2 ; BUSY set? BEQ loc_4DFEC ; Go to read if NOT set MOV R0, R1 LDRB R0, [R0,#0x1B] BIC R0, R0, #1 ; Clear HOLD & wait STRB R0, [R1,#0x1B] B loc_4DFA8 С кодом выше всё ясно - все происходит строго по даташиту. Затем (см. ниже) процедура берет #1 из RTC - (десятки секунд по мануалу) и складывает (с шифтом) с #3 (десятки минут). Дальше подобный бред типа Month+Years etc.. Код (Text): loc_4DFEC LDR R0, =RTC LDRB R0, [R0,#1] ; 10-seconds digit register (???) AND R0, R0, #0xF LDR R1, =RTC LDRB R1, [R1,#3] ; 10-minute digit register (???) AND R1, R1, #7 ADD R1, R1, R1,LSL#2 ADD R0, R0, R1,LSL#1 STRB R0, [R4,#2] LDR R0, =RTC LDRB R0, [R0,#5] ; 10-hours digit register (???) AND R0, R0, #0xF LDR R1, =RTC LDRB R1, [R1,#7] ; 10-days digit register (???) AND R1, R1, #7 ADD R1, R1, R1,LSL#2 ADD R0, R0, R1,LSL#1 STRB R0, [R4,#1] LDR R0, =RTC LDRB R0, [R0,#9] ; 10-month digit register (???) AND R0, R0, #0xF LDR R1, =RTC LDRB R1, [R1,#0xB] ; 10-years digit register (???) AND R1, R1, #3 ADD R1, R1, R1,LSL#2 ADD R0, R0, R1,LSL#1 STRB R0, [R4] LDR R0, =RTC LDRB R0, [R0,#0x1B] BIC R0, R0, #1 LDR R1, =RTC ; Снова всё четко по мануалу STRB R0, [R1,#0x1B] ; Сняли флаг HOLD MOV R0, R1 LDRB R0, [R0,#0x1F] BIC R0, R0, #3 STRB R0, [R1,#0x1F] ; Освободили шину LDMFD SP!, {R3-R5,LR} BX LR ; End of function Retrive_System_Time Может у меня мануал левый? Как это, блин, работает??? Может кто встречал пример кода работы с сабж? PS. Адрес сего девайса (=RTC) 0x7080000 если вдруг это важно. Сам даташиит : ) http://www.epsondevice.com/www/PDFS...11f4925707d0040ca19/$FILE/ETM17E_01_R7242.pdf
Что-то я здесь вижу только работу с часами, минутами и секундами: [R4]=([RTC,#B]&3)*10+[RTC,#9]&F [R4,#1]=([RTC,#7]&7)*10+[RTC,#5]&F [R4,#2]=([RTC,#3]&7)*10+[RTC,#1]&F А что касается чётных ячеек RTC, то там видимо время когда должен сработать будильник.
Так и есть. Но если верить мануалу, работа ведется и с годами и с месяцами... Тут какой-то хитрый фокус, или просто мануал врёт?