100530

|


まったりとCR85整備。ひらすら洗浄。タイヤは今回から前後YCXに



ルーターテーブルのフェンス移動ハンドルのノブを作り直しました。これも家 の桜から。木工旋盤は木工機械の中では、とても静かで気軽に廻しやすい。 ちょっと練習に廻してみたら結局作ってしまった。やはりこの形が親指がくび れの部分にフィットしていい感じ。
木工旋盤がなんとなく嫌だったのが、バイトを手で移動すること。怖いなと思っ ていたのだけど、チャックされるのは木なので、いざという時はワークがふっ とばされるのでそんなに心配することなかった。

Interface 2010/6号付録SH-2A基板を動かしてみます。とりあえずWindows XPに HEW入れてLED点滅プログラムをビルドして動くのを確認。まずはgcc環境を。
リンカスクリプト。このローダではRAMのスタートは0x1c000500じゃないとだめ みたい。
OUTPUT_FORMAT ("elf32-sh")
OUTPUT_ARCH (sh)

MEMORY {
	start_vector	: o = 0x1c000000, l = 0x4
	ram		: o = 0x1c000500, l = 0x7ff00
}

SECTIONS {

	 .start_vector :
	 {
	 	 *(.vector)
	 } > start_vector

	 .text :
	 {
		*(.text*)
		*(.rodata*)
		 . = ALIGN (4);
	 } > ram
}
入口はこんなで。スタックは設定したけれど使ってない。
// Simple entry routine.
	.align	2
	.section .start_vector, "a"
	.long start

	.align	2
	.section .text
	.global start
start:
	mov.l	.L_stack_start, sp
	mov.l	.L_startup, r0
1:	jmp	@r0
	 nop
	bra	1b

	.align	2
.L_stack_start:
	.long	0x1c004000
.L_startup:
	.long	_startup
オンボードのLEDを点灯してそのまま。
typedef	unsigned short int     uint16_t;

void
startup ()
{
#define	PCIOR0	((volatile uint16_t *)0xfffe3852)
#define	PCCR2	((volatile uint16_t *)0xfffe384a)
#define	PCDR	((volatile uint16_t *)0xfffe3856)

  *PCCR2 &= ~0x3;	// PC8
  *PCIOR0 |= (1 << 8);	// PC8 output
  *PCDR &= ~(1 << 8);	// LED on

  while (/*CONSTCOND*/1)
    ;
}
Makefileは
include ../../../mk/local_conf.mk
SHELL	= /bin/sh
GNUARCH	= sh-elf

PREFIX	= ${TOOLDIR}/bin/${GNUARCH}

AS	= ${PREFIX}-gcc
CPP	= ${PREFIX}-cpp
CC	= ${PREFIX}-gcc
C++	= ${PREFIX}-g++
LD	= ${PREFIX}-ld
OBJCOPY	= ${PREFIX}-objcopy
OBJDUMP	= ${PREFIX}-objdump
NM	= ${PREFIX}-nm
AR	= ${PREFIX}-ar
RANLIB	= ${PREFIX}-ranlib

CFLAGS = -m2a -fomit-frame-pointer -Wall -Werror
ASFLAGS = -m2a -Wall -Werror

DEPEND_DIR	=	.deps
DEPEND_UPDATE	=	-Wp,-MD,$(DEPEND_DIR)/$(*F).P

.c.o:
	${CC} ${CFLAGS} ${DEPEND_UPDATE} -c -o $@ $<
.S.o:
	${AS} ${INCLUDES} ${ASFLAGS} ${DEPEND_UPDATE} -c -o $@ $<

OBJS	= entry.o main.o
PROG	= test.elf
PROGBASENAME = ${basename ${PROG}}

all:	${PROG}

clean:
	rm -f ${OBJS} ${PROGBASENAME}.*
	rm -rf ${DEPEND_DIR}

${PROG}:	${OBJS}
	${LD} -T ldscript -o ${PROG}  ${OBJS}
	${OBJDUMP} -x ${PROG}
	${OBJDUMP} -D ${PROG}

DEPS_MAGIC := ${shell mkdir ${DEPEND_DIR} > /dev/null 2>&1 || :}
-include ${DEPEND_DIR}/*.P
でSH2A用に-m2aを指定。これコンパイルしてみると...おぉ、movi20使ってます ね。(sh-elf-gcc (GCC) 4.3.2)
1c000500 <start>:
1c000500:	df 02       	mov.l	1c00050c <start+0xc>,r15	! 1c004000
1c000502:	d0 03       	mov.l	1c000510 <start+0x10>,r0	! 1c000514 <_startup>
1c000504:	40 2b       	jmp	@r0
1c000506:	00 09       	nop	
1c000508:	af fc       	bra	1c000504 <start+0x4>
1c00050a:	00 09       	nop	
1c00050c:	1c 00       	mov.l	r0,@(0,r12)
1c00050e:	40 00       	shll	r0
1c000510:	1c 00       	mov.l	r0,@(0,r12)
1c000512:	05 14       	mov.b	r1,@(r0,r5)

1c000514 <_startup>:
1c000514:	03 e0 38 52 	movi20	#-116654,r3
1c000518:	01 e0 38 52 	movi20	#-116654,r1
1c00051c:	61 11       	mov.w	@r1,r1
1c00051e:	62 1d       	extu.w	r1,r2
1c000520:	01 00 01 00 	movi20	#256,r1
1c000524:	21 2b       	or	r2,r1
1c000526:	61 1d       	extu.w	r1,r1
1c000528:	23 11       	mov.w	r1,@r3
1c00052a:	03 e0 38 4a 	movi20	#-116662,r3
1c00052e:	01 e0 38 4a 	movi20	#-116662,r1
1c000532:	61 11       	mov.w	@r1,r1
1c000534:	61 1d       	extu.w	r1,r1
1c000536:	02 00 ff f0 	movi20	#65520,r2
1c00053a:	21 29       	and	r2,r1
1c00053c:	23 11       	mov.w	r1,@r3
1c00053e:	03 e0 38 56 	movi20	#-116650,r3
1c000542:	01 e0 38 56 	movi20	#-116650,r1
1c000546:	61 11       	mov.w	@r1,r1
1c000548:	61 1d       	extu.w	r1,r1
1c00054a:	02 00 ff fe 	movi20	#65534,r2
1c00054e:	21 29       	and	r2,r1
1c000550:	23 11       	mov.w	r1,@r3
1c000552:	af fe       	bra	1c000552 <_startup+0x3e>
1c000554:	00 09       	nop	
	...
????? .start_vector ???????:

1c000000 <.start_vector>:
1c000000:	1c 00       	mov.l	r0,@(0,r12)
1c000002:	05 00       	.word 0x0500
これをHEWからダウンロードして実行を確認。