программирование FLash под микроконтроллером С167
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Swetlan 28 мая 2005 г. 23:09

не совсем мобильная тема, но все-таки рискну...
Помогите понять как сделать:
есть проц С167, есть подключеная флеш к нему:
WE(FLASH) - WR/WRL (C167)
OE(FLASH) - RD(C167)
CE(FLAS) - CS0(C167)
RESET(FLASH) - +5V
код загрузчика :
sub_19C30:
diswdt
bclr S0RIR ; Serial Channel 0 Receive Interrupt Control Register
bclr S0TIR ; Serial Channel 0 Transmit Interrupt Control Register
movb rh0, #3
callr WriteToASC0

loc_19C3C: ; CODE XREF: sub_19C30+Cj
; sub_19C30+2Cj ...
jnb S0RIR, loc_19C3C ; ¦¤Ґ¬
bclr S0RIR ; Serial Channel 0 Receive Interrupt Control Register
movb rl0, S0RBUF ; Serial Channel 0 Receive Buffer Reg. (read only)
movb rh0, #0AAh
callr WriteToASC0 ; ў®§ўа в Ў ©в  + AAh
movb rh0, #0EAh
cmpb rl0, #31h
jmpr cc_NZ, loc_19C5E
einit ; End of Initialization
callr WriteToASC0
jmpr cc_UC, loc_19C3C ; ¦¤Ґ¬
; ---------------------------------------------------------------------------

loc_19C5E: ; CODE XREF: sub_19C30+24j
cmpb rl0, #93h
jmpr cc_NZ, loc_19C68
callr WriteToASC0
jmpr cc_UC, loc_19C3C ; ¦¤Ґ¬
; ---------------------------------------------------------------------------

loc_19C68: ; CODE XREF: sub_19C30+32j
cmpb rl0, #32h
jmpr cc_NZ, loc_19C74
callr WriteToASC0
srst
; ---------------------------------------------------------------------------

loc_19C74: ; CODE XREF: sub_19C30+3Cj
cmpb rl0, #33h
jmpr cc_NZ, loc_19C88
movb rh0, rl5
callr WriteToASC0
movb rh0, #0EAh
callr WriteToASC0
jmpr cc_UC, loc_19C3C ; ¦¤Ґ¬
; ---------------------------------------------------------------------------

loc_19C86: ; CODE XREF: sub_19D24+24j
jmpr cc_UC, loc_19C3C ; ¦¤Ґ¬
; ---------------------------------------------------------------------------

loc_19C88: ; CODE XREF: sub_19C30+48j
cmpb rl0, #84h
jmpr cc_NZ, loc_19CD2
movb rl5, #0
callr Read2WordsFromASC0_R2_R1 ; з⥭ЁҐ  ¤аҐб 
callr ReadWordFromASC0_toR3 ; Ў ©в ¤ ­­ле

loc_19C94: ; CODE XREF: sub_19C30+9Aj
; sub_19C30+A0j
cmpd1 r3, #0
jmpr cc_NZ, loc_19C9C
callr WriteToASC0
jmpr cc_UC, loc_19C3C ; ¦¤Ґ¬
; ---------------------------------------------------------------------------

loc_19C9C: ; CODE XREF: sub_19C30+66j
; sub_19C30+6Cj
jnb S0RIR, loc_19C9C ; Serial Channel 0 Receive Interrupt Control Register
bclr S0RIR ; Serial Channel 0 Receive Interrupt Control Register
movb rl4, S0RBUF ; Serial Channel 0 Receive Buffer Reg. (read only)
xorb rl5, rl4
callr sub_19D82 ; DPP2=r7=[r2,r1]>>14; CPU Data Page Pointer 2 Reg. (10 bits); assume dpp2: 0FFFFh (page 0x3FFFC000)
; r6=r1&3FFFh|8000h;
; [r2,r1]++;
mov r12, r6
bclr r12.0 ; гЎЁа Ґ¬ ­ҐзҐв­®бвм
mov r7, [r12]
jb r6.0, loc_19CBC
and r7, #0FF00h
orb rl7, rl4
jmpr cc_UC, loc_19CC2
; ---------------------------------------------------------------------------

loc_19CBC: ; CODE XREF: sub_19C30+80j
and r7, #0FFh
orb rh7, rl4

loc_19CC2: ; CODE XREF: sub_19C30+8Aj
mov [r12], r7
movb rh4, [r6]
cmpb rh4, rl4
jmpr cc_NZ, loc_19CCC
jmpr cc_UC, loc_19C94
; ---------------------------------------------------------------------------

loc_19CCC: ; CODE XREF: sub_19C30+98j
movb rh0, #11h
jmpr cc_UC, loc_19C94
; ---------------------------------------------------------------------------

loc_19CD2: ; CODE XREF: sub_19C30+5Cj
cmpb rl0, #85h
jmpr cc_NZ, loc_19CF4
movb rl5, #0
callr Read2WordsFromASC0_R2_R1
callr ReadWordFromASC0_toR3

loc_19CDE: ; CODE XREF: sub_19C30+C2j
cmpd1 r3, #0
jmpr cc_NZ, loc_19CEA
movb rh0, #0EAh
callr WriteToASC0
jmpr cc_UC, loc_19C3C ; ¦¤Ґ¬
; ---------------------------------------------------------------------------

loc_19CEA: ; CODE XREF: sub_19C30+B0j
callr sub_19D82 ; DPP2=r7=[r2,r1]>>14; CPU Data Page Pointer 2 Reg. (10 bits); assume dpp2: 0FFFFh (page 0x3FFFC000)
; r6=r1&3FFFh|8000h;
; [r2,r1]++;
movb rh0, [r6]
xorb rl5, rh0
callr WriteToASC0
jmpr cc_UC, loc_19CDE
; ---------------------------------------------------------------------------

loc_19CF4: ; CODE XREF: sub_19C30+A6j
cmpb rl0, #41h
jmpr cc_NZ, loc_19D04
callr Read2WordsFromASC0_R2_R1
callr WriteToASC0
push r2
push r1
rets
; ---------------------------------------------------------------------------

loc_19D04: ; CODE XREF: sub_19C30+C8j
cmpb rl0, #82h
jmpr cc_NZ, sub_19D24
callr Read2WordsFromASC0_R2_R1
callr ReadWordFromASC0_toR3
callr sub_19D82 ; DPP2=r7=[r2,r1]>>14; CPU Data Page Pointer 2 Reg. (10 bits); assume dpp2: 0FFFFh (page 0x3FFFC000)
; r6=r1&3FFFh|8000h;
; [r2,r1]++;
mov [r6], r3
callr WriteToASC0
jmpr cc_UC, loc_19C3C ; ¦¤Ґ¬
; End of function sub_19C30


; --------------- S U B R O U T I N E ---------------------------------------


WriteToASC0: ; CODE XREF: sub_19C30+Ap
; sub_19C30+1Ap ...
movb S0TBUF, rh0 ; Serial Channel 0 Transmit Buffer Register (write only)

loc_19D1A: ; CODE XREF: WriteToASC0+4j
jnb S0RIR, loc_19D1A ; Serial Channel 0 Receive Interrupt Control Register
bclr S0RIR ; Serial Channel 0 Receive Interrupt Control Register
bclr S0TIR ; Serial Channel 0 Transmit Interrupt Control Register
ret
; End of function WriteToASC0


; --------------- S U B R O U T I N E ---------------------------------------


sub_19D24: ; CODE XREF: sub_19C30+D8j
cmpb rl0, #9Fh
jmpr cc_NZ, loc_19C3C ; ¦¤Ґ¬
callr Read2WordsFromASC0_R2_R1
callr WriteTomemFromS0BUF ; § ЇЁбм 16 Ў ©в ў ЎгдҐа CP
callr loc_19D30

loc_19D30:
pop r7
add r7, #10h
push CSP ; CPU Code Seg. Pointer Reg. (read only)
push r7
push r2
push r1
rets
; ---------------------------------------------------------------------------
callr WriteFromMemToS0BUF
movb rh0, #0EAh
callr WriteToASC0
jmpr cc_UC, loc_19C86
; End of function sub_19D24


; --------------- S U B R O U T I N E ---------------------------------------


Read2WordsFromASC0_R2_R1: ; CODE XREF: sub_19C30+60p
; sub_19C30+AAp ...
jnb S0RIR, Read2WordsFromASC0_R2_R1 ; Serial Channel 0 Receive Interrupt Control Register
bclr S0RIR ; Serial Channel 0 Receive Interrupt Control Register
movb rl1, S0RBUF ; Serial Channel 0 Receive Buffer Reg. (read only)

loc_19D54: ; CODE XREF: Read2WordsFromASC0_R2_R1+Aj
jnb S0RIR, loc_19D54 ; Serial Channel 0 Receive Interrupt Control Register
bclr S0RIR ; Serial Channel 0 Receive Interrupt Control Register
movb rh1, S0RBUF ; Serial Channel 0 Receive Buffer Reg. (read only)

loc_19D5E: ; CODE XREF: Read2WordsFromASC0_R2_R1+14j
jnb S0RIR, loc_19D5E ; Serial Channel 0 Receive Interrupt Control Register
bclr S0RIR ; Serial Channel 0 Receive Interrupt Control Register
movb rl2, S0RBUF ; Serial Channel 0 Receive Buffer Reg. (read only)
movb rh2, #0
ret
; End of function Read2WordsFromASC0_R2_R1


; --------------- S U B R O U T I N E ---------------------------------------


ReadWordFromASC0_toR3: ; CODE XREF: sub_19C30+62p
; sub_19C30+ACp ...
jnb S0RIR, ReadWordFromASC0_toR3 ; Serial Channel 0 Receive Interrupt Control Register
bclr S0RIR ; Serial Channel 0 Receive Interrupt Control Register
movb rl3, S0RBUF ; Serial Channel 0 Receive Buffer Reg. (read only)

loc_19D76: ; CODE XREF: ReadWordFromASC0_toR3+Aj
jnb S0RIR, loc_19D76 ; Serial Channel 0 Receive Interrupt Control Register
bclr S0RIR ; Serial Channel 0 Receive Interrupt Control Register
movb rh3, S0RBUF ; Serial Channel 0 Receive Buffer Reg. (read only)
ret
; End of function ReadWordFromASC0_toR3


; --------------- S U B R O U T I N E ---------------------------------------

; DPP2=r7=[r2,r1]>>14; CPU Data Page Pointer 2 Reg. (10 bits); assume dpp2: 0FFFFh (page 0x3FFFC000)
; r6=r1&3FFFh|8000h;
; [r2,r1]++;

sub_19D82: ; CODE XREF: sub_19C30+78p
; sub_19C30+BAp ...
mov r6, r1
mov r7, r2
shr r6, #14
shl r7, #2
or r7, r6
mov DPP2, r7 ; CPU Data Page Pointer 2 Reg. (10 bits)
; assume dpp2: 0FFFFh (page 0x3FFFC000)
mov r6, r1
add r1, #1
addc r2, #0
and r6, #3FFFh
or r6, #8000h
ret
; End of function sub_19D82


; --------------- S U B R O U T I N E ---------------------------------------

; § ЇЁбм 16 Ў ©в ў ЎгдҐа CP

WriteTomemFromS0BUF: ; CODE XREF: sub_19D24+8p
mov r6, CP ; CPU Context Pointer Register FC00H
add r6, #10h
mov r7, #0

loc_19DAA: ; CODE XREF: WriteTomemFromS0BUF+Aj
; WriteTomemFromS0BUF+18j
jnb S0RIR, loc_19DAA ; Serial Channel 0 Receive Interrupt Control Register
bclr S0RIR ; Serial Channel 0 Receive Interrupt Control Register
movb [r6], S0RBUF ; Serial Channel 0 Receive Buffer Reg. (read only)
add r6, #1
cmpi1 r7, #0Fh
jmpr cc_NZ, loc_19DAA
ret
; End of function WriteTomemFromS0BUF


; --------------- S U B R O U T I N E ---------------------------------------


WriteFromMemToS0BUF: ; CODE XREF: sub_19D24+1Cp
mov r6, CP ; CPU Context Pointer Register FC00H
add r6, #10h
mov r7, #0

loc_19DC6: ; CODE XREF: WriteFromMemToS0BUF+12j
movb rh0, [r6]
callr WriteToASC0
add r6, #1
cmpi1 r7, #0Fh
jmpr cc_NZ, loc_19DC6
ret
; End of function WriteFromMemToS0BUF

считать получилось, прочитать не могу.... чего не хватает?

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru