Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Дальний переход в atmega128
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
cpl
Привет
(Пишу на асме)
понадобилось мне прыгнуть на адресс за предел начала BOOT сектора (адресс 0xff00),
с ходу пишу:

jmp 0xff00 при этом транслятор создает нормальный нех файл,
а в окне отладчика после програмирывания кристала и перехода в режим дизасемблера:

127: jmp RESET0 ;reset handle
+00000000: F786 BRTC PC-0x0F Branch if T flag cleared
+00000001: 796B ANDI R22,0x9B Logical AND with immediate
129: jmp EXT_INT0
+00000002: E682 LDI R24,0x62 Load immediate
+00000003: EEFD LDI R31,0xED Load immediate
131: jmp EXT_INT1
+00000004: 2BB6 OR R27,R22 Logical OR
+00000005: DFA7 RCALL PC-0x0058 Relative call subroutine
133: reti
+00000006: 99AE SBIC 0x15,6 Skip if bit in I/O register cleared
---- No Source ------------------------------------------------------------------------------------
+00000007: CDB7 RJMP PC-0x0248 Relative jump

стартовые адресса не соотвествуют истене, как только стоит убрать JMP и все становится на место:

127: jmp RESET0;RESETb ;reset handle
+00000000: 940C195C JMP 0x0000195C Jump
129: jmp EXT_INT0
+00000002: 940C0066 JMP 0x00000066 Jump
131: jmp EXT_INT1
+00000004: 940C0070 JMP 0x00000070 Jump
133: reti
+00000006: 9518 RETI Interrupt return
---- No Source ------------------------------------------------------------------------------------
+00000007: FFFF ??? Data or unknown opcode
---- l.asm ---------------------------------------------------------------------------
135: reti
+00000008: 9518 RETI Interrupt return
---- No Source ------------------------------------------------------------------------------------
+00000009: FFFF ??? Data or unknown opcode
---- l.asm ---------------------------------------------------------------------------
137: reti
+0000000A: 9518 RETI Interrupt return
---- No Source ------------------------------------------------------------------------------------
+0000000B: FFFF ??? Data or unknown opcode
---- l.asm ---------------------------------------------------------------------------
139: reti
+0000000C: 9518 RETI

пишу перед джампом или call или icall

ldi r16,(1<<rampz0)
out rampz,r16

и все прекрасно код получается нормальный рабочий. w00t.gif cranky.gif

если делать jmp 0xf000;boot
все нормально, стоит указать адресс дальше боота начинается ерунда с кодом.
В симуляторе всегда код получается правильный !

кто как далает длинные переходы ?
и если данному факту объяснение, почему переколбашивается код ? twak.gif wacko.gif
1111493779.gif
defunct
Что написали, то и получили. Ищите ваш RESET0

у меня вот такой код:
Код
.include "m128def.inc"
.cseg
Reset:
    jmp  0xFF00
.ORG $FF00
    ldi  R16, 0x03


дизассемблируется вот так:

Код
@00000000: Reset
---- Test.asm ---------------------------------------------------------------
6:            jmp  0xFF00
+00000000:   940CFF00    JMP     0x0000FF00       Jump
---- No Source --------------------------------------------------------------
+00000002:   FFFF        ???    Data or unknown opcode
....

+0000FEFF:   FFFF        ???    Data or unknown opcode
---- Test.asm ---------------------------------------------------------------
10:           ldi  R16, 0x03
+0000FF00:   E003        LDI     R16,0x03         Load immediate
---- No Source -------------------------------------------------------------
+0000FF01:   FFFF        ???     Data or unknown opcode
+0000FF02:   FFFF        ???     Data or unknown opcode
+0000FF03:   FFFF        ???     Data or unknown opcode

Под отладкой этот код работает так, как должен. Прыгает именно на 0xFF00.
cpl
RESET присутствует

НЕХ генерится правильный, при вхожении в отладку выдает бред.

вот код.
стоит убрать переход и все нормально

КОД:

; TABLE Vectors
.cseg
.org 0x0000
jmp RESET0 ;reset handle
.org INT0addr
jmp EXT_INT0
.org INT1addr
jmp EXT_INT1
.org INT2addr
reti
................

.include "uart.asm"
.include "delay.asm"
.................
;=============
; start programm
;=============
RESET0:
ldi YH,high($0100)
ldi YL,low($0100)
clr temp
Move_Loop1:
st Y+,temp
cpi YH,high(RAMEND)
brne Move_Loop1
cpi YL,low(RAMEND)
brne Move_Loop1
st Y+,temp

cli
ldi temp,(1<<IVCE)
out MCUCR,temp;GICR,temp
ldi temp,(0<<IVSEL)
out MCUCR,temp;GICR,temp


clr r16
sts xmcra,r16
sts xmcrb,r16

in r16,mcucr
ori r16,0x80 ; sre=1
out mcucr,r16

clr flag

LDI R16,high(ramend)
OUT SPH,R16
LDI R16,low(ramend)
OUT SPL,R16
jmp 0xff00 !!!
....................
....................

.org 0xff00
flash:
...............
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.