RL78/G23をCS+とE2-Liteでデバッグ中、インターバルタイマ割込みでbreakしない

はじめまして!RL78/G23初心者のNitarouです。元々は78K0/KD2とPM+でアセンブラで作成したプログラムをRL78で使える前提で取り組みましたがCS+(CC-RL)はかなり手ごわいです。インターバルタイマ割込みでbreak設定しても止まりません。エミュレータはE2-Liteです。下記プログラムを添付しますので、解決策をご教示お願い致します。

;
;***************************************
;* RAM MEMORY MAP 0FBF00H-0FFEDFH
;***************************************
;
.data .DSEG DATA
;
RREG0: .DS 4
RREG1: .DS 2
RREG2: .DS 2
ZAD1: .DS 2
ZADM1: .DS 2
ZAD2: .DS 2
ZADM2: .DS 2
ZADD: .DS 2
GAD1: .DS 2
GADM1: .DS 2
GAD2: .DS 2
GADM2: .DS 2
GASADD: .DS 2
GASDT: .DS 2
GDDSP: .DS 2
BBCNVD: .DS 2
REGA: .DS 2
REGB: .DS 6
AVCTZ: .DS 2
AVCNTZ: .DS 2
AVCTG: .DS 2
AVCNTG: .DS 2
;
MNF: .DS 1
DPF: .DS 1
DG4D: .DS 1
DG3D: .DS 1
DG2D: .DS 1
DG1D: .DS 1
DATP6: .DS 1
;
;
;**************************************
;* INITIAL SET
;**************************************
;
.SECTION .sdata, SDATA
.L_section_sdata:
;
.SECTION .text, TEXT
;
START .VECTOR 0x00000
;
INTTM00 .VECTOR 0x00020 ;タイマ割り込み
;
OPT .CSEG OPT_BYTE
.DB 0x00
.DB 0xFC ;LVD0 2.67V
.DB 0xEC ;高速メインモード2MHz
.DB 0x85 ;オンチップデバッグ許可
;
.CSEG
;
START:
DI
SEL RB0
MOV CMC,#0x00 ;低消費発振
;
MOV OSTS,#0x04 ;発振安定時間1.6~3.2ms
MOV CSC,#0xC0 ;高速オンチップオシレータ動作
MOV CKC,#0x00 ;高速オンチップオシレータ選択
MOV HOCODIV,#0x04 ;オンチップオシレータ周波数2MHz
MOV PER0,#0x21 ;PER0(F00F0H)ADCEN,TAU0EN"1"
MOVW AX,#0x0000
MOVW !TPS0,AX ;TPS0(F01B6H,F01B7H)
MOVW AX,#0x0A0F
MOVW !TT0,AX ;カウント動作停止
SET1 TMMK00 ;TAU0割込み禁止
CLR1 TMIF00 ;割込み要求フラグクリア
SET1 TMPR100 ;INTTM00の割込み優先順位レベル3
SET1 TMPR000
MOVW AX,#0x0000
MOVW !TMR00,AX ;TMR00(F0190H,F0191H)
MOVW AX,#0x0005
MOVW !TMR01,AX ;TMR01
MOVW AX,#0x0003 ;タイマカウント開始
MOVW !TS0,AX ;TS0(F01B2H,F01B3H)
MOV TIS1,#0x03
MOV TOE0,#0x03 ;ch.01出力許可
OST_CK:
NOP
START0:
NOP
START1:
CLR1 SELLOSC
MOVW TDR00,#1000 ;周期(0.25秒)
CLR1 TMIF00
CLR1 TMMK00
MOV PMCA2,#0xC0 ;P26,P27アナログ入力設定
;
;**********************************************
;* PORT SET
;**********************************************
;
MOV PM0,#0xFF ;P0.0-7 入力
MOV PU0,#0x0F ;PU0(F0030H) P0.0-3 PU抵抗付加
MOV PM1,#0x0F ;P1.0-3 入力
;P1.4-7 出力
MOV PU1,#0x0F ;PU1(F0031H) P1.0-3 PU抵抗付加
MOV PM2,#0xC0 ;P2.6-7 入力
;P2.0-5 出力
MOV PM3,#0xFF ;P3.0入力
MOV PU3,#0x01 ;PU3(F0033H) P3.0 PU抵抗付加
MOV PM4,#0xFF ;P4.0-1 入力
MOV PU4,#0x03 ;PU4(F0034H) P4.0-1 PU抵抗付加
MOV PM5,#0xFC ;P5.0-1 出力
MOV PM6,#0xFF ;P6.0-3 入力
MOV PM7,#0xF0 ;P7.0-3 出力
;P7.4-7 入力
MOV PU7,#0xF0 ;PU7(F0037H) P7.4-7 PU抵抗付加
MOV PM12,#0xFF
MOV PU12,#0x01 ;PU12(F003CH)
MOV PM14,#0xFF
MOV PU14,#0x01 ;PU14(F003EH)
;
MOV ADM0,#0x00
MOV ADM1,#0x00
MOV ADM2,#0x00
CLR1 ADMK
CLR1 PIF4
CLR1 PMK4
CLR1 EGP0.4
SET1 EGN0.4
;
;*********************************************
;* MAIN PROGRAM
;*********************************************
;
EI
MAIN1:
NOP
NOP
NOP
NOP
NOP
BR $MAIN1
;
;*********************************************
;* タイマ割込
;*********************************************
;
INTTM00:
SEL RB1
CALL !ZDTI
CALL !GDTI
CALL !CALGAS
CALL !GASDSP
NOP
RETI
;
;
;*********************************************
; Zero Data Average
;*********************************************
;
ZDTI:
CALL !AVZCTCL
MOVW HL,!ZAD1
MOVW BC,#8
CALL !CLRMEM
MOV A,#30
ZDTS:
SUB A,#1
MOV !AVCTZ,A
CALL !ZDTI0
MOVW AX,!ZAD2
XCHW AX,BC
MOVW AX,!ZADM2
CALL !SADD16
MOVW !ZADM2,AX
MOVW HL,!AVCTZ
MOV A,[HL]
CMP A,#0
BNZ $ZDTS
MOVW AX,!ZADM2
MOV C,#30
CALL !SDIV16
MOVW !ZADD,AX
RET
;
ZDTI0:
CALL !AVCTCLZ
MOVW HL,!ZAD1
MOVW BC,#6
CALL !CLRMEM
MOV A,#30
ZDTS0:
SUB A,#1
MOV !AVCNTZ,A
CALL !ADZERO
MOVW AX,!ZAD1
XCHW AX,BC
MOVW AX,!ZADM1
CALL !SADD16
MOVW !ZADM1,AX
MOVW HL,!AVCNTZ
MOV A,[HL]
CMP A,#0
BNZ $ZDTS0
MOVW AX,!ZADM1
MOV C,#30
CALL !SDIV16
MOVW !ZAD2,AX
RET
;
GDTI:
CALL !AVGCTCL
MOVW HL,!GAD1
MOVW BC,#16
CALL !CLRMEM
MOV A,#30
GDTS:
SUB A,#1
MOV !AVCTG,A
CALL !GDTI0
MOVW AX,!GAD2
XCHW AX,BC
MOVW AX,!GADM2
CALL !SADD16
MOVW !GADM2,AX
MOVW HL,!AVCTG
MOV A,[HL]
CMP A,#0
BNZ $GDTS
MOVW AX,!GADM2
MOV C,#30
CALL !SDIV16
MOVW !GASADD,AX
RET
;
GDTI0:
CALL !AVCTCLG
MOVW HL,!GAD1
MOVW BC,#16
CALL !CLRMEM
MOV A,#30
GDTS0:
SUB A,#1
MOV !AVCNTG,A
CALL !ADGAS
MOVW AX,!GAD1
XCHW AX,BC
MOVW AX,!GADM1
CALL !SADD16
MOVW !GADM1,AX
MOVW HL,!AVCNTG
MOV A,[HL]
CMP A,#0
BNZ $GDTS0
MOVW AX,!GADM1
MOV C,#30
CALL !SDIV16
MOVW !GAD2,AX
RET
;
;*********************************************
;* A/D
;*********************************************
;
ADZERO:
MOV ADS,#7
SET1 ADIF
SET1 ADCE
CALL TIMER
CLR1 ADIF
SET1 ADCS
ADZ0:
BTCLR ADIF,$ADZ1
BR $ADZ0
ADZ1:
MOVW AX,ADCR
CLR1 ADCS
CLR1 ADCE
MOV C,#***
CALL !SDIV16
MOVW !RREG1,AX
MOVW BC,AX
MOVW AX,#234
MOVW !RREG2,AX
MULHU
MOVW !RREG0,AX
MOVW AX,BC
MOVW !RREG0+2,AX
MOVW AX,!RREG0
MOV C,#100
CALL !SDIV16
MOVW !ZAD1,AX
RET
;
ADGAS:
MOV ADS,#6
SET1 ADIF
SET1 ADCE
CALL TIMER
CLR1 ADIF
SET1 ADCS
ADG0:
BTCLR ADIF,$ADG1
BR $ADG0
ADG1:
MOVW AX,ADCR
CLR1 ADCS
CLR1 ADCE
MOV C,#***
CALL !SDIV16
MOVW !GAD1,AX
RET
;
TIMER:
MOV D,#0xFF
J40: MOV E,#0xFF
J41: DEC E
BNZ $J41
DEC D
BNZ $J40
RET
;
;********************************************
;* CALC GAS
;********************************************
;
CALGAS:
MOV A,P6
AND A,#0x0F
MOV !DATP6,A
CP15: CMP !DATP6,#15 ;1111 FS=1000
BNZ $CP14
CLR1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#60
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP14: CMP !DATP6,#14 ;1110 FS=300
BNZ $CP13
CLR1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#200
CALL !SDIV16
MOVW !GDDSP,AX
RET
;

CP13: CMP !DATP6,#13 ;1101 FS=200
BNZ $CP12
CLR1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#30
CALL !SDIV16
MOV C,#10
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP12: CMP !DATP6,#12 ;1100 FS=150
BNZ $CP11
CLR1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#40
CALL !SDIV16
MOV C,#10
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP11: CMP !DATP6,#11 ;1011 FS=100
BNZ $CP10
CLR1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#60
CALL !SDIV16
MOV C,#10
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP10: CMP !DATP6,#10 ;1010 FS=50
BNZ $CP9
CLR1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#12
CALL !SDIV16
MOV C,#100
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP9: CMP !DATP6,#9 ;1001 FS=30
BNZ $CP8
CLR1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#20
CALL !SDIV16
MOV C,#100
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP8: CMP !DATP6,#8 ;1000 FS=20
BNZ $CP7
CLR1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#30
CALL !SDIV16
MOV C,#100
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP7: CMP !DATP6,#7 ;0111 FS=30.0
BNZ $CP6
SET1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#20
CALL !SDIV16
MOV C,#10
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP6: CMP !DATP6,#6 ;0110 FS=25.0
BNZ $CP5
SET1 !DPF.0
CALL !CALC_OX
MOVW AX,!RREG0
MOV C,#241
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP5: CMP !DATP6,#5 ;0101 FS=20.0
BNZ $CP4
SET1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#30
CALL !SDIV16
MOV C,#10
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP4: CMP !DATP6,#4 ;0100 FS=10.0
BNZ $CP3
SET1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#30
CALL !SDIV16
MOV C,#20
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP3: CMP !DATP6,#3 ;0011 FS=5.0
BNZ $CP2
SET1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#12
CALL !SDIV16
MOV C,#100
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP2: CMP !DATP6,#2 ;0010 FS=2.0
BNZ $CP1
SET1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#30
CALL !SDIV16
MOV C,#100
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP1: CMP !DATP6,#1 ;0001 FS=1.0
BNZ $CP0
SET1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#60
CALL !SDIV16
MOV C,#100
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CP0: SET1 !DPF.0
CALL !CALC
MOVW AX,!RREG0
MOV C,#60
CALL !SDIV16
MOV C,#100
CALL !SDIV16
MOVW !GDDSP,AX
RET
;
CALC:
MOVW AX,!GASADD
MOVW DE,AX
MOVW HL,!ZADD
CALL !ZCP2B
BC $MNDP_S
CLR1 !MNF.1
BR $CALC_0
MNDP_S:
SET1 !MNF.1
MOVW AX,!GASADD
XCHW AX,BC
MOVW AX,!ZADD
CALL !SSUB16
MOVW !GASDT,AX
BR $CALC_1
CALC_0:
MOVW AX,!ZADD
XCHW AX,BC
MOVW AX,!GASADD
CALL !SSUB16
MOVW !GASDT,AX
CALC_1:
MOVW AX,#5
MOVW DE,AX
MOVW HL,!GASDT
CALL !ZCP2B
BC $NORM_DP
MOVW AX,#0
MOVW !GASDT,AX
NORM_DP:
MOVW AX,!GASDT
MOVW !RREG1,AX
MOVW AX,#128
MOVW !RREG2,AX
MOVW BC,AX
MOVW AX,!RREG1
MULHU
MOVW !RREG0+2,AX
MOVW AX,BC
MOVW !RREG0,AX
RET
;
CALC_OX:
MOVW AX,!GASADD
MOVW DE,AX
MOVW HL,!ZADD
CALL !ZCP2B
BC $MNDP_OX_S
CLR1 !MNF.1
BR $CALC_OX_0
MNDP_OX_S:
SET1 !MNF.1
MOVW AX,!GASADD
XCHW AX,BC
MOVW AX,!ZADD
CALL !SSUB16
MOVW !GASDT,AX
BR $CALC_OX_1
CALC_OX_0:
MOVW AX,!ZADD
XCHW AX,BC
MOVW AX,!GASADD
CALL !SSUB16
MOVW !GASDT,AX
CALC_OX_1:
MOVW AX,!GASDT
MOVW !RREG1,AX
MOVW AX,#128
MOVW !RREG2,AX
MOVW BC,AX
MOVW AX,!RREG1
MULHU
MOVW !RREG0,AX
MOVW AX,BC
MOVW !RREG0+2,AX
RET
;
;********************************************
; Data Clear
;********************************************
;
AVZCTCL:
MOVW HL,!AVCTZ
MOVW BC,#1
CALL !CLRMEM
RET
;
AVCTCLZ:
MOVW HL,!AVCNTZ
MOVW BC,#1
CALL !CLRMEM
RET
;
AVGCTCL:
MOVW HL,!AVCTG
MOVW BC,#1
CALL !CLRMEM
RET
;
AVCTCLG:
MOVW HL,!AVCNTG
MOVW BC,#1
CALL !CLRMEM
RET
;
CLRMEM:
NOP
NOP
CLRM:
MOV A,#0
MOV [HL],A
INCW HL
DECW BC
MOV A,B
OR A,C
BNZ $CLRM
RET
;
;********************************************
;* GAS DISPLAY
;********************************************
;
GASDSP:
NOP
MOV A,!DPF
BT A.0,$DPDP
BR $GASDP0
DPDP: SET1 P1.4
BR $GASDP1
GASDP0: CLR1 P1.4
;
GASDP1: MOV A,!MNF
BT A.1,$MNDP
BR $NMDP
MNDP: SET1 P1.5
BR $NMDP0
;
NMDP: CLR1 P1.5
NMDP0:
MOVW AX,!GDDSP
CMPW AX,#999
BH $THDDP_0
MOVW AX,!GDDSP
CMPW AX,#99
BH $HRDDP_0
MOVW AX,!GDDSP
CMPW AX,#9
BH $TENDP_0
BR $SGLDP_0
THDDP_0:
MOVW AX,!GDDSP
MOVW !REGA,AX
CALL !B_DCONV
MOV A,!REGB+0
MOV !DG4D,A
MOV A,!REGB+1
MOV !DG3D,A
MOV A,!REGB+2
MOV !DG2D,A
MOV A,!REGB+3
MOV !DG1D,A
BR $LCDDRV_1
HRDDP_0:
MOVW AX,!GDDSP
MOVW !REGA,AX
CALL !B_DCONV
MOV A,!REGB
MOV !DG4D,A
MOV A,!REGB+1
MOV !DG3D,A
MOV A,!REGB+2
MOV !DG2D,A
MOV !DG1D,#0x0F
BR $LCDDRV_1
TENDP_0:
MOVW AX,!GDDSP
MOVW !REGA,AX
CALL !B_DCONV
MOV A,!REGB
MOV !DG4D,A
MOV A,!REGB+1
MOV !DG3D,A
MOV !DG2D,#0x0F
MOV !DG1D,#0x0F
BR $LCDDRV_1
SGLDP_0:
MOV A,!DPF
BT A.0,$MODZZ
BR $MODZ
LCDDRV_1:
BR $LCDDRV
MODZ:
CLR1 P1.4
MOVW AX,!GDDSP
MOVW !REGA,AX
CALL !B_DCONV
MOV A,!REGB
MOV !DG4D,A
MOV !DG3D,#0x0F
MOV !DG2D,#0x0F
MOV !DG1D,#0x0F
BR $LCDDRV
MODZZ:
SET1 P1.4
MOVW AX,!GDDSP
MOVW !REGA,AX
CALL !B_DCONV
MOV A,!REGB
MOV !DG4D,A
MOV !DG3D,#0x00
MOV !DG2D,#0x0F
MOV !DG1D,#0x0F
BR $LCDDRV
;
LCDDRV:
MOV A,!DG1D
MOV P7,A
SET1 P5.1
SET1 P5.0
CLR1 P1.6
SET1 P1.7
NOP
CLR1 P1.7
MOV A,!DG2D
MOV P7,A
CLR1 P5.1
SET1 P5.0
CLR1 P1.6
SET1 P1.7
NOP
CLR1 P1.7
MOV A,!DG3D
MOV P7,A
SET1 P5.1
CLR1 P5.0
CLR1 P1.6
SET1 P1.7
NOP
CLR1 P1.7
MOV A,!DG4D
MOV P7,A
CLR1 P5.1
CLR1 P5.0
CLR1 P1.6
SET1 P1.7
NOP
CLR1 P1.7
RET
;
SADD16:
XCH A,X
ADD A,C
XCH A,X
ADDC A,B
RET
;
SSUB16:
XCH A,X
SUB A,C
XCH A,X
SUBC A,B
RET
;
ZCP2B:
PUSH DE
CALL !ZSB2B_1
BC $ZCP2B1
MOV A,D
OR A,E
BZ $ZCP2B1
MOV B,A
XOR A,B
INC A
ZCP2B1: POP DE
RET
;
ZSB2B_1:
MOV A,E
SUB A,[HL]
MOV E,A
INCW HL
MOV A,D
SUBC A,[HL]
MOV D,A
DECW HL
RET
;
SMULT16:
MOV A,#0
MOV !RREG0,A
MOV !(RREG0+1),A
MOV B,#16
JMLT120:
CLR1 CY
MOV A,!RREG0
ROLC A,1
MOV !RREG0,A
MOV A,!(RREG0+1)
ROLC A,1
MOV !(RREG0+1),A
MOV A,!RREG1
ROLC A,1
MOV !RREG1,A
MOV A,!(RREG1+1)
ROLC A,1
MOV !(RREG1+1),A
BNC $JMLT220
MOV A,!RREG2
ADD A,!RREG0
MOV !RREG0,A
MOV A,!(RREG2+1)
ADDC A,!(RREG0+1)
MOV !(RREG0+1),A
MOV A,#0
ADDC A,!RREG1
MOV !RREG1,A
JMLT220:
DEC B
BNZ $JMLT120
RET
;
SDIV16:
MOVW DE,AX
MOV X,#0
MOV B,#16
JDIV160:
MOV A,X
ADD X,A
MOV A,E
ADDC E,A
MOV A,D
ADDC D,A
MOV A,#0
ADDC A,X
SUB A,C
MOV X,A
MOV A,E
BT A.0,$JDIV180
BC $JDIV170
OR A,#0x01
MOV E,A
BR $JDIV180
JDIV170:
MOV A,C
ADD X,A
JDIV180:
DEC B
BNZ $JDIV160
MOV A,X
MOV C,A
MOVW AX,DE
RET
;
B_DCONV:
MOVW AX,!REGA
MOV B,#4
MOV C,#0
MOVW HL,!REGB
NOP
B_D1:
MOVW DE,#10
DIVHU
NOP
XCHW AX,DE
MOV [HL+C],A
INC C
XCHW AX,DE
DEC B
BNZ $B_D1
MOV A,X
MOV [HL+C],A
RET

  • チョコです。

    >ADZ0でbreakして、ADZ1にbreak設定してADZ0から実行してADZ1まで走らない状態で強制停止するとBT ADIF,$ADZ1のところでループしている状態でした。

    シュミレータで確認してみました。下に示すのが、ADZ0でブレークした状態です。

    ここで、そのままブレーク付きで実行すると、数回~十数回ADZ0でブレーク後にADZ1でブレークしました。当然その場合には、ADIFは1になっています。(その後にクリアする処理がなさそうなので、

    また、ADZ0でブレーク後、ADZ0のブレーク・ポイントを解除した場合には、ADZ1でブレークしてADIFは1の状態でした。

    E2liteでこのような動作にならなかったとすると、ハードウェアでは、ブレーク中にADIFが正常にセットされない可能性があったのかと考えられます。これは、実際のハードウェア環境がないと確認はできませんし、Renesasの関係部門の人でないと答えられないと思います。

    ただし、ADZ0でのブレークをやめれば、この問題は回避することは可能で、ADZ1だけにブレーク・ポイントを設定しておけば、ADIFがセットされたかどうかの確認はできます。

    なお、アセンブラ記述のほとんどコメントがないプログラムについては、対応が非常に困難です。

    そのことをご理解ください。

    以上