' ' *********************************************** ' * * ' * ATmega128 外部メモリー テスト プログラム * ' * * ' * AVR is using ATmega128 * ' * Basic Compiler is BASCOM-AVR * ' * Copyright By O-Family 2008. 4.28 * ' *********************************************** ' ' Ver 01.01 初回公開バージョン ' Ver 01.02 ウェイト値を追加。 ' ' $regfile = "m128def.dat" $crystal = 16000000 ' ' Stadr Alias &H1100 '外部メモリー・スタートアドレス Edadr Alias &H90FF '外部メモリー・エンドアドレス ' 'Config Xram = Enabled 'ウェイト無し Config Xram = Enabled , Waitstatehs = 1 '1ウェイト有り 'Config Xram = Enabled , Waitstatehs = 2 '2ウェイト有り ' $xramsize = &H8000 ' ' Dim Count As Word 'テスト回数 Dim Tadr As Word 'テストアドレス Dim Tdb1 As Byte 'テストデータ バイト型1 Dim Tdb2 As Byte 'テストデータ バイト型2 Dim Tdbtmp As Byte 'テストデータ バイト型テンポラリ Dim Tdw1 As Word 'テストデータ ワード型1 Dim Tdwtmp As Word 'テストデータ ワード型テンポラリ Dim Ff As Byte 'フリップ・フロップ ' ' Print : Print Print "Ex-RAM Test Start" ' Tdbtmp = 0 Tdwtmp = 0 Ff = 0 ' For Count = 1 To 65535 Print Count ; Chr(&H0d); 'テスト回数を表示。 ' Tdb1 = Tdbtmp 'テスト1の書き込み。 For Tadr = Stadr To Edadr Out Tadr , Tdb1 'バイト単位のデータを書き込み。 Tdb1 = Not Tdb1 'テストデータのビットを反転。 If Ff = 1 Then Incr Tdb1 '2バイト毎にテスト・データを+1する。 Toggle Ff.0 Next Tadr ' Tdb1 = Tdbtmp 'テスト1の比較。 For Tadr = Stadr To Edadr Tdb2 = Inp(tadr) 'メモリーの読み込み。 If Tdb1 <> Tdb2 Then 'If エラーが発生した? Then Print Print Hex(tadr) ; " " ; Hex(tdb1) ; " " ; Hex(tdb2) End If Tdb1 = Not Tdb1 'テストデータのビットを反転。 If Ff = 1 Then Incr Tdb1 Toggle Ff.0 Next Tadr Incr Tdbtmp ' Ff = 0 ' Tdw1 = Tdwtmp 'テスト2の書き込み。 For Tadr = Stadr To Edadr If Ff = 0 Then 'ワード単位のデータを書き込み。 Tdb1 = Low(tdw1) Else Tdb1 = High(tdw1) Incr Tdw1 End If Toggle Ff.0 Out Tadr , Tdb1 Next Tadr ' Tdw1 = Tdwtmp 'テスト2の比較。 For Tadr = Stadr To Edadr If Ff = 0 Then Tdb1 = Low(tdw1) Else Tdb1 = High(tdw1) Incr Tdw1 End If Toggle Ff.0 Tdb2 = Inp(tadr) 'メモリーの読み込み。 If Tdb1 <> Tdb2 Then 'If エラーが発生した? Then Print Print Hex(tadr) ; " " ; Hex(tdb1) ; " " ; Hex(tdb2) End If Next Tadr Incr Tdwtmp ' Next Count ' Print Print "Test End" End