도와주세요!!
글 수 15,339
2003.02.02 15:33:35 (*.38.182.2)
6693
이지보드를 사용해서 간단한 스타트업 루틴과 시리얼 IO루틴을 공부삼아 만들
어 보고 있습니다. 플래슁은 ezflashw2k 로 하고 있고,
디버깅은 GPIO에 연결된 LED로 하고 있는데요,
잘 안되네요....
------------------------------------------------
우선 제대로 다운로드가 되는지가 매우 궁금합니다.
현재 arm-elf-objcopy로 바이너리 만들어서 이 바이너리를 바로 ezflash로 다
운로드 하고 있습니다.
이렇게 해도 우선 이지보드의 jtag flash write에 문제가 없는지요???
ezflash로 쓰면 내부적으로 erase하고, write 해주는지요...
이지부트 메이크파일 보면, dd로 뭔가 하는데, dd로 뭘 더해야하는지요.
왜 dd를 사용하고 있는지도 잘 모르겠네요. 단순히 바이너리를 합칠라고 쓰는
지, 혹은 추가로 더 해주어야 하는게 있어서 하는지요.
또, 링크스크립트가 제대로 써져있는지도 궁금한데요...
제가 링크 스크립트의 문법을 잘 몰라서요.
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
SECTIONS
{
.start 0x00000000 : {
vector.o(.text)
}
. = ALIGN(4);
.text 0x00010000 : {
*(.text)
}
. = ALIGN(4);
.rdata 0x00020000 : {
*(.rodata)
}
. = ALIGN(4);
.data 0xc0000100 : {
*(.data)
}
. = ALIGN(4);
.bss 0xc0010000 : {
*(.bss)
}
_end =.;
}
이게 제가 쓴 링크 스크립트인데, 우선 ALIGN의 용도도 잘 모르겠고, 좀 자신
이 없네요..이게 문법상 맞는지...
map파일이나, objdump뜬거는 의도대로 나오는거 같은데...
암튼 동작이 안되니..이상합니다.
확인용으로 넣은 LED점멸하는게 의도대로 안나가서요....
어디가 이상한지 잘 못찾겠네요...
참고로 리셋핸들러 코드는요...
#include "ez_m01.h"
// general definitions
.text
.set _stack_base, 0xc1000000 // stack start : end of ram
.set _stack_top, 0xc0ff0000 // stack end : 10k
space
.extern init
// 1. interrupt vector install
b reset
b undefined_instruction
b software_interrupt
b prefetch_abort
b data_abort
b no_used
b irq
b fiq
reset:
// debuging info - LED1 ON
// setting the GPIO 24, 17, 7~0 as a output
ldr r0, =SA1110_REG_BASE_GPIO
ldr r1, =SA1110_GPDR_V
str r1, [r0, #SA1110_REG_OFFSET_GPDR] // LED
GPIO ????? ????.
//
mov r1, #0xFF
str r1, [r0, #SA1110_REG_OFFSET_GPCR] // LED
CLEAR
mov r1, #0xaa
str r1, [r0, #SA1110_REG_OFFSET_GPSR] // LED
ON :
// 2. set up stack pointer
// firstly, zero clear the stack area
ldr r1,=_stack_base
ldr r2,=_stack_top
mov r0,#0
cmp r1,r2
beq 2f
1: str r0,[r1],#4
cmp r1,r2
bls 1b
// secondly, set up stack pointer
2: ldr sp, =_stack_base
// 3. Relocate [copy] data from ROM to RAM
// 4. clear BSS
// 5. CPU register setting/HW init/interrupt mask
// Mask all interrupt
ldr r0, =SA1110_REG_BASE_INTERRUPT
mov r1, #0x00
str r1, [r0, #SA1110_REG_OFFSET_ICMR]
// CPU speed setting
ldr r0, =SA1110_REG_BASE_POWER_MANAGER
mov r1, #CPU_SPEED
str r1, [r0, #SA1110_REG_OFFSET_PPCR]
// icache
mrc p15, 0, r1, c1, c0, 0 // チヲセ・キケチコナヘクヲ タミエツエル.
orr r1, r1, #0x1000 // Icacheクヲ ネーシコネュ
ステナイエル.
mcr p15, 0, r1, c1, c0, 0 // エルステ ス・ウヨエツエル
// debuging info - LED1 ON
// setting the GPIO 24, 17, 7~0 as a output
ldr r0, =SA1110_REG_BASE_GPIO
mov r1, #0xFF
str r1, [r0, #SA1110_REG_OFFSET_GPCR] // LED
CLEAR
mov r1, #0x55
str r1, [r0, #SA1110_REG_OFFSET_GPSR] // LED
CLEAR
// 6. Call Application function
b init
// interrupt handler
undefined_instruction:
nop
software_interrupt:
nop
prefetch_abort:
nop
data_abort:
nop
no_used:
nop
irq:
nop
fiq:
nop
현재 특히 bss나 , 초기화된 데이타도 안쓰니까 데이타초기화 부분은 안㎞
어 보고 있습니다. 플래슁은 ezflashw2k 로 하고 있고,
디버깅은 GPIO에 연결된 LED로 하고 있는데요,
잘 안되네요....
------------------------------------------------
우선 제대로 다운로드가 되는지가 매우 궁금합니다.
현재 arm-elf-objcopy로 바이너리 만들어서 이 바이너리를 바로 ezflash로 다
운로드 하고 있습니다.
이렇게 해도 우선 이지보드의 jtag flash write에 문제가 없는지요???
ezflash로 쓰면 내부적으로 erase하고, write 해주는지요...
이지부트 메이크파일 보면, dd로 뭔가 하는데, dd로 뭘 더해야하는지요.
왜 dd를 사용하고 있는지도 잘 모르겠네요. 단순히 바이너리를 합칠라고 쓰는
지, 혹은 추가로 더 해주어야 하는게 있어서 하는지요.
또, 링크스크립트가 제대로 써져있는지도 궁금한데요...
제가 링크 스크립트의 문법을 잘 몰라서요.
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
SECTIONS
{
.start 0x00000000 : {
vector.o(.text)
}
. = ALIGN(4);
.text 0x00010000 : {
*(.text)
}
. = ALIGN(4);
.rdata 0x00020000 : {
*(.rodata)
}
. = ALIGN(4);
.data 0xc0000100 : {
*(.data)
}
. = ALIGN(4);
.bss 0xc0010000 : {
*(.bss)
}
_end =.;
}
이게 제가 쓴 링크 스크립트인데, 우선 ALIGN의 용도도 잘 모르겠고, 좀 자신
이 없네요..이게 문법상 맞는지...
map파일이나, objdump뜬거는 의도대로 나오는거 같은데...
암튼 동작이 안되니..이상합니다.
확인용으로 넣은 LED점멸하는게 의도대로 안나가서요....
어디가 이상한지 잘 못찾겠네요...
참고로 리셋핸들러 코드는요...
#include "ez_m01.h"
// general definitions
.text
.set _stack_base, 0xc1000000 // stack start : end of ram
.set _stack_top, 0xc0ff0000 // stack end : 10k
space
.extern init
// 1. interrupt vector install
b reset
b undefined_instruction
b software_interrupt
b prefetch_abort
b data_abort
b no_used
b irq
b fiq
reset:
// debuging info - LED1 ON
// setting the GPIO 24, 17, 7~0 as a output
ldr r0, =SA1110_REG_BASE_GPIO
ldr r1, =SA1110_GPDR_V
str r1, [r0, #SA1110_REG_OFFSET_GPDR] // LED
GPIO ????? ????.
//
mov r1, #0xFF
str r1, [r0, #SA1110_REG_OFFSET_GPCR] // LED
CLEAR
mov r1, #0xaa
str r1, [r0, #SA1110_REG_OFFSET_GPSR] // LED
ON :
// 2. set up stack pointer
// firstly, zero clear the stack area
ldr r1,=_stack_base
ldr r2,=_stack_top
mov r0,#0
cmp r1,r2
beq 2f
1: str r0,[r1],#4
cmp r1,r2
bls 1b
// secondly, set up stack pointer
2: ldr sp, =_stack_base
// 3. Relocate [copy] data from ROM to RAM
// 4. clear BSS
// 5. CPU register setting/HW init/interrupt mask
// Mask all interrupt
ldr r0, =SA1110_REG_BASE_INTERRUPT
mov r1, #0x00
str r1, [r0, #SA1110_REG_OFFSET_ICMR]
// CPU speed setting
ldr r0, =SA1110_REG_BASE_POWER_MANAGER
mov r1, #CPU_SPEED
str r1, [r0, #SA1110_REG_OFFSET_PPCR]
// icache
mrc p15, 0, r1, c1, c0, 0 // チヲセ・キケチコナヘクヲ タミエツエル.
orr r1, r1, #0x1000 // Icacheクヲ ネーシコネュ
ステナイエル.
mcr p15, 0, r1, c1, c0, 0 // エルステ ス・ウヨエツエル
// debuging info - LED1 ON
// setting the GPIO 24, 17, 7~0 as a output
ldr r0, =SA1110_REG_BASE_GPIO
mov r1, #0xFF
str r1, [r0, #SA1110_REG_OFFSET_GPCR] // LED
CLEAR
mov r1, #0x55
str r1, [r0, #SA1110_REG_OFFSET_GPSR] // LED
CLEAR
// 6. Call Application function
b init
// interrupt handler
undefined_instruction:
nop
software_interrupt:
nop
prefetch_abort:
nop
data_abort:
nop
no_used:
nop
irq:
nop
fiq:
nop
현재 특히 bss나 , 초기화된 데이타도 안쓰니까 데이타초기화 부분은 안㎞