...walczę dalej
wyczytałem że BatchISP:
- kasuje flash pomijając bootloader
- programuje flash nadpisując bootloader więc trzeba go dołączyć do swojego programu.
zgrałem go więc (flash od adresu 0x80000000 do 0x80001FFF) dołączyłem jak BIN do swojego źródła - nie działa:
.equ GPIO_BASE, 0xFFFF1000 .equ GPIO_GPERS, 0x04 .equ GPIO_ODERS, 0x44 .equ GPIO_OVRS, 0x54
.macro mov.w rd, imm mov \rd, LO(\imm) orh \rd, HI(\imm) .endm
.text
.global _start
_start: .incbin "isp.bin" // 8192bytes (saved flash from 0x0000 to 0x1FFF)
program_start: mov.w R0, GPIO_BASE
mov.w R1, (1 << 3) st.w R0[GPIO_GPERS], R1
mov.w R1, (1 << 3) st.w R0[GPIO_ODERS], R1
mov.w R1, (0 << 3) st.w R0[GPIO_OVRS], R1
always: rjmp always
_stop:
zgrałem jeszcze raz pomijając dwa pierwsze bajty i wstawiając tam "trampoline" - nie działa:
.equ GPIO_BASE, 0xFFFF1000 .equ GPIO_GPERS, 0x04 .equ GPIO_ODERS, 0x44 .equ GPIO_OVRS, 0x54
.macro mov.w rd, imm mov \rd, LO(\imm) orh \rd, HI(\imm) .endm
.text
.global _start
_start: rjmp program_start
.incbin "isp.bin" // 8190bytes (saved flash from 0x0002 to 0x1FFF)
program_start: mov.w R0, GPIO_BASE
mov.w R1, (1 << 3) st.w R0[GPIO_GPERS], R1
mov.w R1, (1 << 3) st.w R0[GPIO_ODERS], R1
mov.w R1, (0 << 3) st.w R0[GPIO_OVRS], R1
always: rjmp always
_stop:
asemblacja: avr32-as.exe -R -march=ucr1 -o main.out main.s
linkowanie: avr32-ld.exe --oformat ihex -m avr32elf_uc3b0256 -Ttext 0x80000000 -Tbss
0x00000000 -o main.hex main.out
programowanie: batchisp -device at32uc3b0256 -hardware usb -operation erase f memory flash blankcheck loadbuffer main.hex program verify start reset 0
BatchISP pisze że programuje, weryfikuje, wszystko OK, a i tak pin PA3 nie chce przyjąć poziomu niskiego. (Pomijam już to, że flash jest od 80000000 a BatchISP wszystko pokazuje od 0). Generuje plik HEX od 80002000, BatchISP i tak ładuje od 0. No i teraz nie wiem co właściwie to zero oznacza. Ale gówno.
No to zabrałem się za prosty przykład z AVR Studio - sterowanie wyjście. Załadowałem. Działa. Chciałem podejrzeć co gdzie sie ładuje. Przerabiam ELF na HEX poprzez ObjCopy - wywala błąd!
Ale syf. Powoli wymiękam. Robiłem już na chyba 8 różnych rodzinach procków (od 8bit do ARMów) ale takiego problemu z uruchomieniem to jeszcze nie miałem!
SM