RTC-72423

Тема в разделе "WASM.ELECTRONICS", создана пользователем ALLeX, 25 окт 2006.

  1. ALLeX

    ALLeX Member

    Публикаций:
    0
    Регистрация:
    21 окт 2004
    Сообщения:
    141
    Адрес:
    Ukraine
    Hello, ALL!
    Глянте плиз. Код реально рабочий - зашит в железячку и тикает там себе. Тем не менее хочу разобратся: Как этот код согласовывается с даташитом от Epson? Никак не могу въехать.

    Код (Text):
    1. RetriveSystemTime
    2.     STMFD   SP!, {R3-R5,LR}
    3.     MOV     R4, R0
    4.     MOV     R5, #0
    5. loc_4DF9C
    6.     CMP     R5, #100
    7.     BCS     loc_4DFEC
    8.     B       loc_4DFB4
    9. loc_4DFA8
    10.     ADD     R0, R5, #1
    11.     AND     R5, R0, #0xFF
    12.     B       loc_4DF9C
    13. loc_4DFB4
    14.     LDR     R0, =RTC
    15.     LDRB    R0, [R0,#0x1B]
    16.     ORR     R0, R0, #1         ; Установили HOLD в Control Register D
    17.     LDR     R1, =RTC
    18.     STRB    R0, [R1,#0x1B]
    19.     MOV     R0, R1
    20.     LDRB    R0, [R0,#0x1B]
    21.     TST     R0, #2             ; BUSY set?
    22.     BEQ     loc_4DFEC        ; Go to read if NOT set
    23.     MOV     R0, R1
    24.     LDRB    R0, [R0,#0x1B]  
    25.     BIC     R0, R0, #1        ; Clear HOLD & wait
    26.     STRB    R0, [R1,#0x1B]
    27.     B       loc_4DFA8
    С кодом выше всё ясно - все происходит строго по даташиту. Затем (см. ниже) процедура берет #1 из RTC - (десятки секунд по мануалу) и складывает (с шифтом) с #3 (десятки минут). Дальше подобный бред типа Month+Years etc..

    Код (Text):
    1. loc_4DFEC
    2.     LDR     R0, =RTC
    3.     LDRB    R0, [R0,#1]      ; 10-seconds digit register (???)
    4.     AND     R0, R0, #0xF
    5.     LDR     R1, =RTC
    6.     LDRB    R1, [R1,#3]      ; 10-minute digit register (???)
    7.     AND     R1, R1, #7
    8.     ADD     R1, R1, R1,LSL#2
    9.     ADD     R0, R0, R1,LSL#1
    10.     STRB    R0, [R4,#2]
    11.     LDR     R0, =RTC
    12.     LDRB    R0, [R0,#5]      ; 10-hours digit register (???)
    13.     AND     R0, R0, #0xF
    14.     LDR     R1, =RTC
    15.     LDRB    R1, [R1,#7]      ; 10-days digit register (???)
    16.     AND     R1, R1, #7
    17.     ADD     R1, R1, R1,LSL#2
    18.     ADD     R0, R0, R1,LSL#1
    19.     STRB    R0, [R4,#1]
    20.     LDR     R0, =RTC
    21.     LDRB    R0, [R0,#9]      ; 10-month digit register (???)
    22.     AND     R0, R0, #0xF
    23.     LDR     R1, =RTC
    24.     LDRB    R1, [R1,#0xB]      ; 10-years digit register (???)
    25.     AND     R1, R1, #3
    26.     ADD     R1, R1, R1,LSL#2
    27.     ADD     R0, R0, R1,LSL#1
    28.     STRB    R0, [R4]
    29.     LDR     R0, =RTC
    30.     LDRB    R0, [R0,#0x1B]
    31.     BIC     R0, R0, #1
    32.     LDR     R1, =RTC             ; Снова всё четко по мануалу
    33.     STRB    R0, [R1,#0x1B]    ; Сняли флаг HOLD
    34.     MOV     R0, R1
    35.     LDRB    R0, [R0,#0x1F]
    36.     BIC     R0, R0, #3
    37.     STRB    R0, [R1,#0x1F]    ; Освободили шину
    38.     LDMFD   SP!, {R3-R5,LR}
    39.     BX      LR
    40. ; End of function Retrive_System_Time
    Может у меня мануал левый? :) Как это, блин, работает??? Может кто встречал пример кода работы с сабж?

    PS.
    Адрес сего девайса (=RTC) 0x7080000 если вдруг это важно.
    Сам даташиит : )
    http://www.epsondevice.com/www/PDFS...11f4925707d0040ca19/$FILE/ETM17E_01_R7242.pdf
     
  2. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Что-то я здесь вижу только работу с часами, минутами и секундами:
    [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, то там видимо время когда должен сработать будильник.
     
  3. ALLeX

    ALLeX Member

    Публикаций:
    0
    Регистрация:
    21 окт 2004
    Сообщения:
    141
    Адрес:
    Ukraine
    Так и есть. Но если верить мануалу, работа ведется и с годами и с месяцами...
    Тут какой-то хитрый фокус, или просто мануал врёт?