[H8-ML(2350)] Re: ハイパーターミナルの障害
From: Makoto Yamashita <truth-mt@xxxxxxxxxxxxxx>
Date: 2002年11月12日(火)22時35分12秒
On Thursday, Nov 7, 2002, at 15:56 Asia/Tokyo, Pan, Guanguru wrote:

>  ところが、取説にサンプルプログラムのリストが載っている通信機能
> を試すソフトTEST.MARを手入力し、コンパイラしたら、どうしてもエラーが
> でます。

で、下にのせたハンさんのプログラムですが、とりあえずエラーになりそうなのは、
  1) プログラム本体のおかれる場所が 0x00100 からになっていない
   -> "reset:" ラベルの前に ".section reset0,code,locate=h'00100" とかをいれる
  2) 33行目あたりからいくつか "#r0l" がある
   -> "r0l" ですよね。
  3) 50行目あたりに "#' a'", "#' z'" がある
   -> "#'a'", "#'z'" だったのでは?
ぱっと僕に分かったのはこれくらいですが。ほかにも形式的でない問題があるかもしれません。
ところで、このプログラムは最初に試すにしては複雑すぎませんか?
一番最後のところに別のサンプルプログラム MYTERM.TXT をのせておきました。こっちは起動後 SCI1(書き込みに使う方) 
で'S'送信->1文字受信するまで待ち->'R'送信するだけのシンプルなものです。使っているテクニックとかも少ないので、どうでしょう?


**** TEST.MAR by Pan ****
         .heading  'Test for H8/3048 98.01.16'
	.print src,nocref,nosct,list
;----------------------------------------------
;	Simple In/Out for H8/3048
;	H8/3048 SingleChip Advanced Mode
;----------------------------------------------
;
	.CPU 300HA:20	;H8/300H Advanced Mode,20 bit addr
;
;
;---------------------------------------------
;	rest vector table
;---------------------------------------------
	.section rom,data,locate=h'0
;
	.data.l reset
;
;---------------------------------------------
reset:
	mov.l	#stack,sp
	bsr	inisci
loop:
	bsr	inch
	bsr	outch
	bra	loop
;
;--------------------------------------------
;	inisci	InitSCI
;--------------------------------------------
inisci:
	mov.b	#0,r0l
	mov.b	#r0l,@sci0scr	;clear all flags
	mov.b	#0,r0l
	mov.b	#r0l,@sci0smr	;Ascnc, 8bit, Noparity, (Even), stop1, 1/1
	mov.b	#51,r0l
	mov.b	#r0l,@sci0brr	;9600 baud (CPU=16MHz)
	mov.w	#280,r0		;wait 1 bit time (1/9600 sec)
inisc1:	dec.w	#1,r0
	bne	inisc1
	mov.b	#h'30,r0l
	mov.b	#r0l,@sci0scr	;scr=0011 0000 (TE=1,RE=1)
	mov.b	@sci0ssr,r0l	;Dummy Read
	mov.b	#h'80,r0l
	mov.b	#r0l,@sci0ssr	;Clear Error Flag (TDRE=1)
	rts
;-------------------------------------------
;	inch to r0l
;		if err then carry=1
;-------------------------------------------
inch:   bsr	inchxx	;to upper
	cmp.b	#' a',r0l
	blo	inch2
	cmp.b	#' z',r0l
	bhi	inch2
	and.b	#h'df,r0l	;'a'(0x61)ÅÑ'A'(0x41)
inch2:	rts
inchxx:	mov.b	@sci0ssr,r0l
	and.b	#h'78,r0l
	beq	inchxx		;RDRF=ORER=FER=PER=0
	btst.b	#6,@sci0ssr:8
	beq	incher
	mov.b	@sci0rdr,r0l
	bclr.b	#6,@sci0ssr
	andc.b	#h'fe,ccr	;clear carry
	rts
;
incher:	mov.b	#h'80,r0l
	mov.b	r0l,@sci0ssr
	orc.b	#1,ccr
	rts
;------------------------------------------
;	outch from r0l
;------------------------------------------
outch:	btst.b	#7,@sci0ssr
	beq	outch
	mov.b	r0l,@sci0tdr
	bclr.b	#7,@sci0ssr
	rts
;
	.section	stk,stack,locate=h'ff400
stack:	.equ	$
;
ramend:	.equ	h'fff0f
;
;------------------------------------------
;	internal I/O defs	h'fff1c - h'ffff
;--sci defs

	.section	io,data,locate=h'fffb0
sci0smr	.res.b	1       ; h'fffb0      ;serial mode register (h'fffb0)
sci0brr	.res.b	1	; h'fffb1      ;serial bit rate register
sci0scr	.res.b	1	; h'fffb2      ;serial control register
sci0tdr	.res.b	1	; h'fffb3      ;serial TX data
sci0ssr	.res.b	1	; h'fffb4      ;serial status register
sci0rdr	.res.b	1	; h'fffb5      ;serial RX data
;
	.end
**** TEST.MAR ends ****
**** MYTERM.TXT ****
             .CPU    300HA
     ; SCI ch1 Initialize Subroutine

     SMR1    .EQU    H'FFFFB8
     BRR1    .EQU    H'FFFFB9
     SCR1    .EQU    H'FFFFBA
     TDR1    .EQU    H'FFFFBB
     SSR1    .EQU    H'FFFFBC
     RDR1    .EQU    H'FFFFBD

             .SECTION        RESET0, DATA, LOCATE=H'00000
             .DATA.L INIT
             .ORG    H'000E4
             .DATA.L IN_CHR

             .SECTION ROM,CODE,LOCATE=H'00100
INIT:
SCI_INIT:

             MOV.B   #0,R0L
             MOV.B   R0L,@SCR1       ;TE=0, RE=0, CKE1=0, CKE0=0
             MOV.B   R0L,@SMR1       ;SMR= 0000 0000 (n=0)
             MOV.B   #51,R0L
             MOV.B   R0L,@BRR1       ;BRR=51 (N=51)
             MOV.W   #280,R0

SCI_INIT_WAIT:

             DEC.W   #1,R0
             BNE     SCI_INIT_WAIT
             MOV.B   #H'70,R0L
             MOV.B   R0L,@SCR1       ;SCR=0111 0000 (RIE=1,TE=1,RE=1)
             MOV.B   @SSR1,R0L       ;Dummy Read
             MOV.B   #H'80,R0L
             MOV.B   R0L,@SSR1       ;Clear Error Flag (TDRE=1)


             MOV.L   #H'FFFF00,ER7   ;set SP
             BCLR    #7,@FLAG        ;clear flag

             ANDC    #B'01111111,CCR ;enable interrupt

             MOV.B   #H'53,R0L
             JSR     @OUT_DATA

WAITLOOP:
             BTST    #7,@FLAG        ;check Rx data
             BEQ     WAITLOOP

             MOV.B   #H'52,R0L
             JSR     @OUT_DATA

ENDLOOP:
             JMP     @ENDLOOP

     ; 1 Data Transmit Subroutine
OUT_DATA:

             BTST.B  #7,@SSR1        ; TEST TDRE
             BEQ     OUT_DATA        ; WAIT IF TDRE=0
             MOV.B   R0L,@TDR1       ; WRITE DATA TO TRD
             BCLR.B  #7,@SSR1        ; CLEAR TDRE
             RTS

IN_CHR: PUSH.W  R0
             BCLR    #6,@SSR1        ;stop interrupt
             MOV.B   @RDR1,R0L
             MOV.B   R0L,@R_DATA
             BSET    #7,@FLAG        ;set flag
             POP.W   R0
             RTE

             .SECTION        WORK,DATA,LOCATE=H'FFFF00
R_DATA: .RES.B  1
FLAG:   .RES.B  1

             .END


スレッド概略
[2348(R)](起点)
 └[表示中]


投稿順に移動
[←前の記事へ(P)]
[→次の記事へ(N)]


リスト表示へ
[このスレッド(T)]
[本記事の前後(L)]