реклама на сайте
подробности

 
 
> Дальний переход в atmega128, обсуждение кто как !
cpl
сообщение Dec 20 2006, 20:18
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



Привет
(Пишу на асме)
понадобилось мне прыгнуть на адресс за предел начала 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
defunct
сообщение Dec 20 2006, 20:37
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Что написали, то и получили. Ищите ваш 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.
Go to the top of the page
 
+Quote Post
cpl
сообщение Dec 20 2006, 21:21
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



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:
...............
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01445 секунд с 7
ELECTRONIX ©2004-2016