初めて投稿させて頂きます.wakuと申します.
すごくかなり長文・駄文ですみません.
これまで,H8 3048fの4kbyteのRAMに,限界を感じ,ひっそりとSRAM増設を試みてきました.
その過程でこれまで少しづつ全くわからなかったマイコンのことが分かってきて,マニュアルの言っている意味が徐々に理解できるようになってき
ており,少しでも前に進めるうちはできるだけ自力で解決しようと思っていたのですが..
ここにきて,どうしても前に進めなくなってしまいました.思いつくことをあれやこれやと試したのですが,全く検討がつかず,自力では無理を
感じてしまいMLの力を借りようと思った次第です....(;-公-)
過去ログなどを見たりして,いろいろと試したのですが,うまく動作しません.
よろしくご教授をお願いいたします.
環境は,色々試したのですが,
まず最初は,Aki-USB開発kitにてモニタプログラムを書き込んだりしていました.SRAMの配線も合体ロボ型で組んで試していたのですが,
モニタで,"f 20000 20100 55"
等のコマンドで書き込んでみても,エラーが出てどうしてもうまくいかず,分からないので,
もう一機普通の秋月H8 3048マザーボードを買ってきて,同様にSRAMの配線をして比べてみて,やっとAki - H8 3048 のUSB開発kitでは,P3-0〜7
(D8〜D15)がUSBに使われてしまっていることに気付きました.
USBキットでのSRAM増設改造は,前例はあるものの,自分の知識では無理(or相当な時間がかかり)そうなので,まずは情報も多いシリアル通信で
の(通常の秋月マザーボードを使っての)SRAM増設とシリアル通信を試みるように方針を変更しました.
こちらでは,モニタを埋め込んでみて,MコマンドやFコマンドを使って増設したSRAMに無事書き込み,Dコマンドで再度正確に読み出しが出来たの
で,すんなり行くだろうと思っていたのですが.(ここまでも長かったのですが,,ML過去ログをかなり参考にさせていただきました.)
ここからが壁でした.
windowsでの秋月付属のCコンパイラで行っていますが,RAM領域が変わったことをどこでどのように設定してよいのか全くわかりません.
色々試したのですが,どうしてもわからないのでおかしいところがあれば,アドバイスいただけないでしょうか?
増設するSRAMはHM628128DLP5で1Mbitサイズなのでモード5での動作を考えています.
SRAMの配線は,
SRAM = H8 3048
A0〜7 = P1-0〜7
A8〜15 = P2-0〜7
A16 = P5-0
IO0〜7 = P3-0〜7(D8〜D15)
CS1 = P8-3
OE = P6-4
WE = P6-5
CS2 = P8-2
その他GNDとVcc
という,至って普通な配線かと思います.
2タイプ試したことと,SRAM増設しない設定では正常に動作することから,配線間違いは無いと思います.
今成功しているファイルは,以下にずらずらと(すみません)示すファイル.SUBと.ASMファイルですが,
これをSRAM増設に対応させるには,この0FEF10をモード5の動作にて20000番地に入れ替えればよいのかなと思い,
START R(20000),P(200),D(8000),C(9000)や,
START R(20000),P(20200),D(28000),C(29000)や,
などいろいろやったのですが,どのようにしても確保する変数は内蔵RAM領域に確保されているような感じです(∵確保する変数の量を変えてみる
と,4kbyteが限界のような振る舞いをします).
mainプログラム中では,int X[500];といった配列変数を確保しようとしています.int X[1100];などと確保しようとすると固まります..
これはint=4byteなので,500個で約2kbyteであるが,1100個では約4.4kbyteであることから,RAM領域に確保できないと認識しておりますが.
#########usbtest.sub######
OUTPUT usbtest
PRINT usbtest
INPUT start,main,sci,lcd
LIB U:\Nijsseni\h8\wakuchin\c38hab
START R(0FEF10),P(200),D(8000),C(9000);←ここをいろいろと変えてみたのですが.
ROM (D,R)
EXIT
########################
#########start.asm#######
.CPU 300HA
.SECTION V,CODE,LOCATE=H'000000
; RAM用初期化ここからは自分で勝手に加えたSRAM初期化のコードです
ABWCR: .EQU H'FFFEC
ASTCR: .EQU H'FFFED
WCR: .EQU H'FFFEE
WCER: .EQU H'FFFEF
P1_DDR: .EQU H'FFFC0
P2_DDR: .EQU H'FFFC1
P5_DDR: .EQU H'FFFC8
P8_DDR: .EQU H'FFFCD
MOV.B #H'FF,R0L
MOV.B R0L, @ABWCR:8 ; CS1領域バス幅8ビット(P4:D0-D7)
MOV.B #H'FF,R0L
MOV.B R0L,@ASTCR:8 ; CS1領域3ステートアクセス
MOV.B #H'F0,R0L
MOV.B R0L,@WCR:8 ; 0wait
MOV.B #H'FF,R0L
MOV.B R0L,@P1_DDR:8 ; P1をアドレスバス(A0-A7)
MOV.B R0L,@P2_DDR:8 ; P2をアドレスバス(A8-A15)
MOV.B R0L,@P5_DDR:8 ; P5をアドレスバス(A16-A19)
MOV.B #H'E8,R0L
MOV.B R0L,@P8_DDR:8 ; P8-3 CS1出力
;ここまでが勝手に加えたSRAM初期化コードです.この場所も疑問があるのですが..
.IMPORT _main
.DATA.L _start ;リセットベクトル
.DATA.L int_error
.DATA.L int_error
.DATA.L int_error
.DATA.L int_error
.DATA.L int_error
.DATA.L int_error
.DATA.L int_error
.DATA.L int_error
.DATA.L int_error
.DATA.L int_error
.DATA.L int_error
IRQ0: .DATA.L int_error
IRQ1: .DATA.L int_error
IRQ2: .DATA.L int_error
IRQ3: .DATA.L int_error
IRQ4: .DATA.L int_error
;----------------------------------------------------------
.SECTION P,CODE,ALIGN=2
_start:
mov.l #H'0FFF10,er7
; mov.l #H'21100,er7
;↑この部分があやしいと思い,このような行に色々と入れ替えてみたのですが・・・だめでした
;初期化付きデータを使用する場合、RAMに転送する
mov.l #H'8000, er0 ; 転送元(8000)
mov.l #H'0FEF10, er1 ; 転送先
; mov.l #H'20100, er1 ; 転送先
;↑この部分が怪しいと思い,このような行に色々と入れ替えてみたのですが・・・だめでした
mov.l #DATA_END, er2 ; 転送終了
init_loop:
cmp.l er1, er2
beq init_end
mov.b @er0+, r3l
mov.b r3l, @er1
inc.l #1, er1
bra init_loop
init_end:
jsr @_main
; 割り込み未使用
int_error:
rte
;usb_interrupt:
; push.l er0
; push.l er1
; push.l er2
; push.l er3
; push.l er4
; push.l er5
;; push.l er6
; jsr @_usb_int
; pop.l er6
; pop.l er5
; pop.l er4
; pop.l er3
; pop.l er2
; pop.l er1
;; pop.l er0
; rte
;----------------------------------------------------------
; 割り込み許可、禁止ルーチン
.EXPORT _EnableInterrupt,_DisableInterrupt
_EnableInterrupt:
andc.b #H'3f,ccr
rts
_DisableInterrupt:
orc.b #H'c0,ccr
rts
;----------------------------------------------------------
.SECTION D,DATA
.SECTION B,DATA
DATA_END: .RES.W 1
.END
##########
どこが不要な部分かわからないので,全部載せてしまいました.
リンク時に生成されるMAPを見ると,
最後に添付しているようになっておりますが,Rセクションと,Bセクションが外部RAM領域に割り当てられているのですが,Rセクションでは,トー
タルADDRES=0になっていますし,main.c内にてint x[10000]といったような大きなファイルを確保しても,MAPファイルには何も変化がありませ
ん..
main.c内の大きな変数確保がRセクションで行わなければならないのかと思っているのですが..
長いと思いましたが,一応MAPファイルも添付させて頂きます.
自分の知識量がまだ少ない為,どんな小さなことでもかなり参考になると思いますのでお願いします.
waku
wakuchin@xxxxxxxxxxxx
以下usbtest.MAPです,長くてすみません.
###############usbtest.MAP######
H8/300H LINKAGE EDITOR (Evaluation
software) Ver.1.0
LINK COMMAND LINE
LNK -subcommand=usbtest.sub
LINK SUBCOMMANDS
OUTPUT usbtest
PRINT usbtest
INPUT start,main,sci,lcd
LIB D:\H8\akic\c38hab
START R(20000),P(200),D(8000),C(9000)
ROM (D,R)
EXIT
H8/300H LINKAGE EDITOR (Evaluation
software) Ver.1.0 PAGE : 1
*** LINKAGE EDITOR LINK MAP LIST
SECTION NAME START - END LENGTH
UNIT NAME
MODULE NAME
ATTRIBUTE : CODE NOSHR
V H'00000000 - H'0000005B H'0000005C
start
start
* TOTAL ADDRESS * H'00000000 - H'0000005B H'0000005C
ATTRIBUTE : CODE NOSHR
P H'00000200 - H'00000233 H'00000034
start
start
H'00000234 - H'000005D5 H'000003A2
main
main
H'000005D6 - H'000006A7 H'000000D2
sci
sci
H'000006A8 - H'000008E5 H'0000023E
lcd
lcd
H'000008E6 - H'00000943 H'0000005E
sprintf
sprintf
H'00000944 - H'00000973 H'00000030
vsprintf
vsprintf
H'00000974 - H'00000C4D H'000002DA
addd3
addd3
H'00000C4E - H'00000CC7 H'0000007A
dtol3
dtol3
H'00000CC8 - H'00000CFD H'00000036
itod3
itod3
H'00000CFE - H'00000FEB H'000002EE
muld3
muld3
H'00000FEC - H'0000100D H'00000022
spregld3
spregld3
H'0000100E - H'00001035 H'00000028
spregsv3
spregsv3
H'00001036 - H'00002DE3 H'00001DAE
_fmtout
_fmtout
H'00002DE4 - H'000031C9 H'000003E6
_dti
_dti
H'000031CA - H'0000336D H'000001A4
_its
_its
H'0000336E - H'000033C7 H'0000005A
memcpy
memcpy
H'000033C8 - H'000033E3 H'0000001C
strlen
strlen
H'000033E4 - H'00003409 H'00000026
divl3
divl3
H'0000340A - H'00003445 H'0000003C
divul3
divul3
H8/300H LINKAGE EDITOR (Evaluation
software) Ver.1.0 PAGE : 2
*** LINKAGE EDITOR LINK MAP LIST
***
SECTION NAME START - END LENGTH
UNIT NAME
MODULE NAME
ATTRIBUTE : CODE NOSHR
P H'00003446 - H'00003465 H'00000020
mull3
mull3
H'00003466 - H'00003483 H'0000001E
mv83
mv83
H'00003484 - H'00003491 H'0000000E
ned3
ned3
H'00003492 - H'000034B9 H'00000028
_allzero
_allzero
H'000034BA - H'000035B1 H'000000F8
_calcnpw
_calcnpw
H'000035B2 - H'00003655 H'000000A4
_log10
_log10
H'00003656 - H'000036CD H'00000078
_lsfts
_lsfts
H'000036CE - H'000036FB H'0000002E
_pow5
_pow5
H'000036FC - H'00003775 H'0000007A
_rsfts
_rsfts
H'00003776 - H'00003821 H'000000AC
_sub
_sub
H'00003822 - H'000038C5 H'000000A4
_unpack
_unpack
H'000038C6 - H'00003903 H'0000003E
memcmp
memcmp
H'00003904 - H'000039BF H'000000BC
cmpd3
cmpd3
H'000039C0 - H'00003A47 H'00000088
_mult64
_mult64
H'00003A48 - H'00003BA9 H'00000162
_power
_power
H'00003BAA - H'00003C93 H'000000EA
_rnd
_rnd
H'00003C94 - H'00003D2F H'0000009C
_setsbit
_setsbit
H'00003D30 - H'00003E35 H'00000106
frexp
frexp
H'00003E36 - H'00003F6B H'00000136
modf
modf
H'00003F6C - H'00003F8D H'00000022
dslc3
dslc3
H'00003F8E - H'00003FAF H'00000022
dsruc3
dsruc3
H'00003FB0 - H'00004001 H'00000052
_duchek
_duchek
H'00004002 - H'00004053 H'00000052
_lsft
_lsft
H8/300H LINKAGE EDITOR (Evaluation
software) Ver.1.0 PAGE : 3
*** LINKAGE EDITOR LINK MAP LIST
***
SECTION NAME START - END LENGTH
UNIT NAME
MODULE NAME
ATTRIBUTE : CODE NOSHR
P H'00004054 - H'000041E1 H'0000018E
_mult
_mult
H'000041E2 - H'0000427D H'0000009C
_pow10
_pow10
H'0000427E - H'00004289 H'0000000C
eqd3
eqd3
H'0000428A - H'00004299 H'00000010
ltd3
ltd3
H'0000429A - H'000042E1 H'00000048
_add
_add
H'000042E2 - H'00004311 H'00000030
memset
memset
* TOTAL ADDRESS * H'00000200 - H'00004311 H'00004112
ATTRIBUTE : DATA NOSHR ROM
D H'00008000 - H'00008000 H'00000000
start
start
* TOTAL ADDRESS * H'00008000 - H'00008000 H'00000000
ATTRIBUTE : DATA NOSHR
C H'00009000 - H'0000907D H'0000007E
main
main
H'0000907E - H'00009085 H'00000008
_fmtout
_fmtout
H'00009086 - H'00009185 H'00000100
_ctype
_ctype
H'00009186 - H'0000920D H'00000088
_its
_its
H'0000920E - H'00009215 H'00000008
_log10
_log10
H'00009216 - H'000092F5 H'000000E0
_pow5
_pow5
H'000092F6 - H'000093F9 H'00000104
_power
_power
H'000093FA - H'00009401 H'00000008
frexp
frexp
H'00009402 - H'00009409 H'00000008
modf
modf
* TOTAL ADDRESS * H'00009000 - H'00009409 H'0000040A
H8/300H LINKAGE EDITOR (Evaluation
software) Ver.1.0 PAGE : 4
*** LINKAGE EDITOR LINK MAP LIST
***
SECTION NAME START - END LENGTH
UNIT NAME
MODULE NAME
ATTRIBUTE : DATA NOSHR RAM
R H'00020000 - H'00020000 H'00000000
start
start
* TOTAL ADDRESS * H'00020000 - H'00020000 H'00000000
ATTRIBUTE : DATA NOSHR
B H'00020000 - H'00020001 H'00000002
start
start
H'00020002 - H'00020041 H'00000040
main
main
H'00020042 - H'00020091 H'00000050
sci
sci
H'00020092 - H'000200D1 H'00000040
lcd
lcd
H'000200D2 - H'0002010D H'0000003C
_fmtout
_fmtout
H'0002010E - H'0002010F H'00000002
_errno
_errno
* TOTAL ADDRESS * H'00020000 - H'0002010F H'00000110
H8/300H LINKAGE EDITOR (Evaluation
software) Ver.1.0 PAGE : 1
*** LINKAGE EDITOR EXTERNALLY DEFINED
SYMBOLS LIST ***
SYMBOL NAME ADDR
TYPE
$ADDD$3
H'00000A3E DAT
$CMPD$3
H'00003904 DAT
$DIVL$3
H'000033E4 DAT
$DIVUL$3
H'0000340A DAT
$DSLC$3
H'00003F6C DAT
$DSRUC$3
H'00003F8E DAT
$DTOL$3
H'00000C4E DAT
$EQD$3
H'0000427E DAT
$ITOD$3
H'00000CC8 DAT
$LTD$3
H'0000428A DAT
$MULD$3
H'00000DB4 DAT
$MULL$3
H'00003446 DAT
$MV8$3
H'00003466 DAT
$NED$3
H'00003484 DAT
$SUBD$3
H'00000A0E DAT
$sp_regld$3
H'00000FEC DAT
$sp_regsv$3
H'0000100E DAT
_ClearLCD
H'000007C6 ENT
_DisableInterrupt
H'00000230 DAT
_EnableInterrupt
H'0000022C DAT
_GetSCI
H'00000606 ENT
_GetSW
H'00000526 ENT
_H8init
H'0000054C ENT
_InitLCD
H'00000756 ENT
_InitSCI
H'000005D6 ENT
_LCDOut4
H'000006FE ENT
_LocateLCD
H'00000806 ENT
_PrintLCD
H'0000082A ENT
_PrintSCI
H'00000626 ENT
_PutLCD
H'000007DA ENT
_PutSCI
H'000005F6 ENT
_ScanSCI
H'00000616 ENT
_SetLED
H'000004D8 ENT
__add
H'0000429A ENT
__allzero
H'00003492 ENT
__calcnpw
H'000034BA ENT
__ctype
H'00009086 DAT
__dti
H'00002DE4 ENT
__duchek
H'00003FB0 ENT
__errno
H'0002010E DAT
__fmtout
H'00001036 ENT
__its
H'000031CA ENT
__log10
H'000035B2 ENT
__lsft
H'00004002 ENT
__lsfts
H'00003656 ENT
__mult
H'00004054 ENT
__mult64
H'000039C0 ENT
__pow10
H'000041E2 ENT
__pow5
H'000036CE ENT
__power
H'00003A48 ENT
__rnd
H'00003BAA ENT
H8/300H LINKAGE EDITOR (Evaluation
software) Ver.1.0 PAGE : 2
*** LINKAGE EDITOR EXTERNALLY DEFINED
SYMBOLS LIST ***
SYMBOL NAME ADDR
TYPE
__rsfts
H'000036FC ENT
__setsbit
H'00003C94 ENT
__sub
H'00003776 ENT
__unpack
H'00003822 ENT
_frexp
H'00003D30 ENT
_getad
H'00000580 ENT
_initSRAM
H'00000554 ENT
_main
H'00000234 ENT
_memcmp
H'000038C6 ENT
_memcpy
H'0000336E ENT
_memset
H'000042E2 ENT
_modf
H'00003E36 ENT
_sprintf
H'000008E6 ENT
_strlen
H'000033C8 ENT
_timer_init
H'000005A6 ENT
_vsprintf
H'00000944 ENT
_wait
H'000005B8 ENT
_wait_ad
H'0000056E ENT