- To68x32, Xo68x32, Toppc, Xoppc + !DevTools deleted -> the code is integrated into the main versions of the 332/555
git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@111 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c
This commit is contained in:
@@ -1,76 +0,0 @@
|
|||||||
(* USB Dev Tool *)
|
|
||||||
|
|
||||||
(* NOTE: writing permission is needed in this directory to create the files JavaOut.txt and JavaErr.txt! *)
|
|
||||||
|
|
||||||
(* MC68332 & MPC555 *)
|
|
||||||
<EFBFBD><EFBFBD>CXdeCmdsDev.CompileThis
|
|
||||||
UsbBDIDll
|
|
||||||
UsbBDI
|
|
||||||
UsbBDI555
|
|
||||||
UsbBDI332
|
|
||||||
UsbTargLog
|
|
||||||
<EFBFBD><EFBFBD>E
|
|
||||||
|
|
||||||
<EFBFBD><EFBFBD>CDevDebug.UnloadThis
|
|
||||||
UsbTargLog
|
|
||||||
UsbBDI555
|
|
||||||
UsbBDI332
|
|
||||||
UsbBDI
|
|
||||||
UsbBDIDll
|
|
||||||
<EFBFBD><EFBFBD>E
|
|
||||||
|
|
||||||
(* MPC555 only (start BB555) *)
|
|
||||||
<EFBFBD><EFBFBD>CXdeCmdsDev.CompileThis
|
|
||||||
XoppcTrgtRegDict
|
|
||||||
XoppcAmdFlashs
|
|
||||||
XoppcSystem
|
|
||||||
<EFBFBD><EFBFBD>E
|
|
||||||
|
|
||||||
<EFBFBD><EFBFBD>CDevDebug.UnloadThis
|
|
||||||
XoppcSystem
|
|
||||||
XoppcAmdFlashs
|
|
||||||
XoppcTrgtRegDict
|
|
||||||
<EFBFBD><EFBFBD>E
|
|
||||||
|
|
||||||
(* MC68332 only (start BB332) *)
|
|
||||||
<EFBFBD><EFBFBD>CXdeCmdsDev.CompileThis
|
|
||||||
Xo68x32AmdFlashs
|
|
||||||
Xo68x32System
|
|
||||||
<EFBFBD><EFBFBD>E
|
|
||||||
|
|
||||||
<EFBFBD><EFBFBD>CDevDebug.UnloadThis
|
|
||||||
Xo68x32System
|
|
||||||
Xo68x32AmdFlashs
|
|
||||||
<EFBFBD><EFBFBD>E
|
|
||||||
|
|
||||||
|
|
||||||
(* MC68332 & MPC555 *)
|
|
||||||
files of directory: Usb\Mod\ files: *
|
|
||||||
Usb\Mod\BDI.otd
|
|
||||||
Usb\Mod\BDI332.otd
|
|
||||||
Usb\Mod\BDI555.otd
|
|
||||||
Usb\Mod\BDIDll.otd
|
|
||||||
Usb\Mod\TargLog.otd
|
|
||||||
|
|
||||||
files of directory: Usb\Rsrc\ files: *
|
|
||||||
Usb\Rsrc\usbpdi.jar
|
|
||||||
|
|
||||||
files of directory: files: *
|
|
||||||
BDI.dll
|
|
||||||
|
|
||||||
(* MPC555 only *)
|
|
||||||
files of directory: Xoppc\Mod\ files: *
|
|
||||||
Xoppc\Mod\AmdFlashs.otd
|
|
||||||
Xoppc\Mod\System.otd
|
|
||||||
Xoppc\Mod\TrgtRegDict.otd
|
|
||||||
|
|
||||||
files of directory: Toppc\Docu\ files: *
|
|
||||||
Toppc\Docu\!NTBTargetPpcDemoTool.odc
|
|
||||||
|
|
||||||
(* MC68332 only *)
|
|
||||||
files of directory: Xo68x32\Mod\ files: *
|
|
||||||
Xo68x32\Mod\AmdFlashs.otd
|
|
||||||
Xo68x32\Mod\System.otd
|
|
||||||
|
|
||||||
files of directory: To68x32\Docu\ files: *
|
|
||||||
To68x32\Docu\!NTBTarget332DemoTool.odc
|
|
||||||
Binary file not shown.
Binary file not shown.
@@ -1,369 +0,0 @@
|
|||||||
|
|
||||||
MODULE Xo68x32AmdFlashs;
|
|
||||||
(** <20> ProXon/ED 7.10.97 / 20.10.98 / wm 9.00 / ED 18.12.00 / 27.6.02 | *)
|
|
||||||
(* Updated for 29F800 Bottom Boot Sector. Changes in dark-green. wm, 9.2000 *)
|
|
||||||
IMPORT
|
|
||||||
Log := StdLog, Dialog, Services,
|
|
||||||
UT := XdeUtilities, XE := XdeErrors, FlM := Xo68x32FlashMemories, BDI := UsbBDI332,
|
|
||||||
BDIMain := UsbBDI;
|
|
||||||
|
|
||||||
CONST
|
|
||||||
errPrefix = "Amd_";
|
|
||||||
TargetDefineMem = "Xo68x32ImcTarget.DefineMemory";
|
|
||||||
TargetInit = "Xo68x32ImcTarget.Init";
|
|
||||||
(*
|
|
||||||
thisMod="XdeAmdFlashs";
|
|
||||||
*)
|
|
||||||
|
|
||||||
CONST
|
|
||||||
nul = 0X; cr = 0DX; eol = cr; ht = 9X;
|
|
||||||
|
|
||||||
imageFileExt = ".Tim"; (** target image file extension: ".Tim" *)
|
|
||||||
|
|
||||||
VAR
|
|
||||||
Done-: BOOLEAN; eof-: BOOLEAN;
|
|
||||||
(** Done=TRUE: vorangegangene Operation wurde erfolgreich beendet.
|
|
||||||
eof = TRUE: das Ende des Files ist nun erreicht, oder ein ENDrecord wurde gelesen.
|
|
||||||
|
|
||||||
Done=TRUE und eot = TRUE: ENDrecord konnte noch erfolgreich gelesen werden.
|
|
||||||
*)
|
|
||||||
firstErr-: INTEGER; (** error list see CrossErrors.Text, search for Xo68x32AmdFlashs *)
|
|
||||||
|
|
||||||
PROCEDURE Error (errNr: SHORTINT);
|
|
||||||
BEGIN
|
|
||||||
IF Done THEN firstErr := firstErr; Done := FALSE END;
|
|
||||||
XE.Error("", errPrefix, errNr, TRUE)
|
|
||||||
END Error;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE LogHex (val: INTEGER);
|
|
||||||
BEGIN
|
|
||||||
Log.Char('0'); Log.IntForm(val, Log.hexadecimal, 1, ' ', Log.hideBase); Log.Char('H')
|
|
||||||
END LogHex;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE PutWord (adr, data: INTEGER);
|
|
||||||
BEGIN
|
|
||||||
data := data MOD 10000H; BDI.writeMem(adr, data, 2)
|
|
||||||
END PutWord;
|
|
||||||
|
|
||||||
PROCEDURE WaitByDataPoll (adr, expData: INTEGER);
|
|
||||||
VAR endTime: LONGINT; data: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
endTime := Services.Ticks() + 5000;
|
|
||||||
REPEAT data := BDI.readMem(adr, 2) UNTIL (data = expData) OR (endTime < Services.Ticks());
|
|
||||||
IF data # expData THEN
|
|
||||||
Error(3); Log.Tab; Log.String("at loc "); LogHex(adr); Log.Ln
|
|
||||||
END
|
|
||||||
END WaitByDataPoll;
|
|
||||||
|
|
||||||
PROCEDURE LogWord (data: INTEGER; comment: ARRAY OF CHAR);
|
|
||||||
BEGIN
|
|
||||||
Log.Tab; Log.String(comment); Log.String(":"); Log.Tab; LogHex(data MOD 10000H); Log.Ln
|
|
||||||
END LogWord;
|
|
||||||
|
|
||||||
PROCEDURE InDeviceAdr (VAR devAdr: INTEGER);
|
|
||||||
VAR adr: INTEGER; scnr: UT.Scanner;
|
|
||||||
BEGIN
|
|
||||||
UT.GetScanner("!", scnr);
|
|
||||||
IF scnr.done THEN scnr.Int(adr) END;
|
|
||||||
IF ~scnr.done THEN
|
|
||||||
Error(1); devAdr := 0
|
|
||||||
ELSE
|
|
||||||
devAdr := adr DIV FlM.memDevice.deviceSize * FlM.memDevice.deviceSize
|
|
||||||
END
|
|
||||||
END InDeviceAdr;
|
|
||||||
|
|
||||||
PROCEDURE InSectorAdr (VAR sectorAdr: INTEGER);
|
|
||||||
VAR adr: INTEGER; scnr: UT.Scanner;
|
|
||||||
BEGIN
|
|
||||||
UT.GetScanner("!", scnr);
|
|
||||||
IF scnr.done THEN scnr.Int(adr) END;
|
|
||||||
IF ~scnr.done THEN
|
|
||||||
Error(1); sectorAdr := 0
|
|
||||||
ELSE
|
|
||||||
sectorAdr := adr DIV FlM.memDevice.sectorSize * FlM.memDevice.sectorSize
|
|
||||||
END
|
|
||||||
END InSectorAdr;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE GetChipIDsAm29F800 (devAdr: INTEGER);
|
|
||||||
VAR data: INTEGER; res, sector: INTEGER;
|
|
||||||
|
|
||||||
PROCEDURE GetSectorProtection (sector, sectAdr, sectSize: INTEGER);
|
|
||||||
BEGIN
|
|
||||||
data := BDI.readMem(sectAdr + 4, 2);
|
|
||||||
Log.Tab; Log.String("sector "); Log.Int(sector); Log.Tab; Log.String("adr: ");
|
|
||||||
Log.Tab; LogHex(sectAdr); Log.String("..."); LogHex(sectAdr + sectSize - 1);
|
|
||||||
Log.Tab;
|
|
||||||
IF data = 0 THEN Log.String("un") END; Log.String("protected")
|
|
||||||
END GetSectorProtection;
|
|
||||||
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
devAdr := devAdr DIV FlM.memDevice.deviceSize * FlM.memDevice.deviceSize;
|
|
||||||
Dialog.Call(TargetInit, "error calling " + TargetInit, res);
|
|
||||||
IF res # 0 THEN Error(2) END;
|
|
||||||
Log.Ln; Log.String("getting Am29F800B chip IDs:"); Log.Ln; Log.Tab; Log.String("address area:");
|
|
||||||
LogHex(devAdr); Log.String(" .. "); LogHex(devAdr + FlM.memDevice.deviceSize - 1); Log.Ln;
|
|
||||||
PutWord(devAdr + 0AAAH, 0AAAAH);
|
|
||||||
PutWord(devAdr + 0554H, 5555H);
|
|
||||||
PutWord(devAdr + 0AAAH, 9090H);
|
|
||||||
data := BDI.readMem(devAdr + 0, 2); LogWord(data, "manufacturer id");
|
|
||||||
data := BDI.readMem(devAdr + 2, 2); LogWord(data, "device id");
|
|
||||||
(* device id = 22D6h: top boot block, device id = 2258H: bottom boot block *)
|
|
||||||
|
|
||||||
Log.Tab; Log.String("sector protection:"); Log.Ln;
|
|
||||||
IF data = 22D6H THEN
|
|
||||||
FOR sector := 0 TO 14 DO
|
|
||||||
GetSectorProtection(sector, devAdr, FlM.memDevice.sectorSize);
|
|
||||||
INC(devAdr, FlM.memDevice.sectorSize); Log.Ln
|
|
||||||
END;
|
|
||||||
GetSectorProtection(15, devAdr, FlM.memDevice.sectorSize DIV 2);
|
|
||||||
INC(devAdr, FlM.memDevice.sectorSize DIV 2); Log.Ln;
|
|
||||||
GetSectorProtection(16, devAdr, FlM.memDevice.sectorSize DIV 8);
|
|
||||||
INC(devAdr, FlM.memDevice.sectorSize DIV 8); Log.Ln;
|
|
||||||
GetSectorProtection(17, devAdr, FlM.memDevice.sectorSize DIV 8);
|
|
||||||
INC(devAdr, FlM.memDevice.sectorSize DIV 8); Log.Ln;
|
|
||||||
GetSectorProtection(18, devAdr, FlM.memDevice.sectorSize DIV 4);
|
|
||||||
ELSIF data = 2258H THEN
|
|
||||||
GetSectorProtection(0, devAdr, FlM.memDevice.sectorSize DIV 4);
|
|
||||||
INC(devAdr, FlM.memDevice.sectorSize DIV 4); Log.Ln;
|
|
||||||
GetSectorProtection(1, devAdr, FlM.memDevice.sectorSize DIV 8);
|
|
||||||
INC(devAdr, FlM.memDevice.sectorSize DIV 8); Log.Ln;
|
|
||||||
GetSectorProtection(2, devAdr, FlM.memDevice.sectorSize DIV 8);
|
|
||||||
INC(devAdr, FlM.memDevice.sectorSize DIV 8); Log.Ln;
|
|
||||||
GetSectorProtection(3, devAdr, FlM.memDevice.sectorSize DIV 2);
|
|
||||||
INC(devAdr, FlM.memDevice.sectorSize DIV 2); Log.Ln;
|
|
||||||
FOR sector := 4 TO 18 DO
|
|
||||||
GetSectorProtection(sector, devAdr, FlM.memDevice.sectorSize);
|
|
||||||
INC(devAdr, FlM.memDevice.sectorSize); Log.Ln
|
|
||||||
END
|
|
||||||
ELSE Error(4) (* wrong device id *)
|
|
||||||
END;
|
|
||||||
PutWord(devAdr, 0F0F0H); Log.Ln
|
|
||||||
END GetChipIDsAm29F800;
|
|
||||||
|
|
||||||
PROCEDURE GetChipIDsAm29F040 (devAdr: INTEGER);
|
|
||||||
VAR data: INTEGER; res, sector: INTEGER;
|
|
||||||
|
|
||||||
PROCEDURE GetSectorProtection (sector, sectAdr, sectSize: INTEGER);
|
|
||||||
BEGIN
|
|
||||||
data := BDI.readMem(sectAdr + 4, 2);
|
|
||||||
Log.Tab; Log.String("sector "); Log.Int(sector); Log.Tab; Log.String("adr: ");
|
|
||||||
Log.Tab; LogHex(sectAdr); Log.String("..."); LogHex(sectAdr + sectSize - 1);
|
|
||||||
Log.Tab;
|
|
||||||
IF data = 0 THEN Log.String("un") END; Log.String("protected")
|
|
||||||
END GetSectorProtection;
|
|
||||||
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
devAdr := devAdr DIV FlM.memDevice.deviceSize * FlM.memDevice.deviceSize;
|
|
||||||
Dialog.Call(TargetInit, "error calling " + TargetInit, res);
|
|
||||||
IF res # 0 THEN Error(2) END;
|
|
||||||
Log.Ln; Log.String("getting Am29F040B chip IDs:"); Log.Tab; Log.String("address area:");
|
|
||||||
Log.Tab; LogHex(devAdr); Log.String(" .. "); LogHex(devAdr + FlM.memDevice.deviceSize - 1); Log.Ln;
|
|
||||||
PutWord(devAdr + 0AAAH, 0AAAAH);
|
|
||||||
PutWord(devAdr + 0554H, 5555H);
|
|
||||||
PutWord(devAdr + 0AAAH, 9090H);
|
|
||||||
data := BDI.readMem(devAdr + 0, 2); LogWord(data, "manufacturer id");
|
|
||||||
data := BDI.readMem(devAdr + 2, 2); LogWord(data, "device id");
|
|
||||||
(* device id = 22D6h: top boot block, device id = 2258H: bottom boot block *)
|
|
||||||
|
|
||||||
Log.Tab; Log.String("sector protection:"); Log.Ln;
|
|
||||||
FOR sector := 0 TO 7 DO
|
|
||||||
GetSectorProtection(sector, devAdr, FlM.memDevice.sectorSize);
|
|
||||||
INC(devAdr, FlM.memDevice.sectorSize); Log.Ln
|
|
||||||
END;
|
|
||||||
Log.Ln;
|
|
||||||
DEC(devAdr, FlM.memDevice.sectorSize);
|
|
||||||
PutWord(devAdr, 0F0F0H); Log.Ln
|
|
||||||
END GetChipIDsAm29F040;
|
|
||||||
|
|
||||||
PROCEDURE EraseDevice (adr: INTEGER);
|
|
||||||
CONST expData = 0FFFFH;
|
|
||||||
VAR devAdr: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
devAdr := adr DIV FlM.memDevice.deviceSize * FlM.memDevice.deviceSize;
|
|
||||||
Log.Ln; Log.Tab; Log.String("erasing device(s): ");
|
|
||||||
LogHex(devAdr); Log.String(" .. "); LogHex(devAdr + FlM.memDevice.deviceSize - 1); Log.Ln;
|
|
||||||
|
|
||||||
PutWord(devAdr + 0AAAAH, 0AAAAH);
|
|
||||||
PutWord(devAdr + 05554H, 5555H);
|
|
||||||
PutWord(devAdr + 0AAAAH, 8080H);
|
|
||||||
PutWord(devAdr + 0AAAAH, 0AAAAH);
|
|
||||||
PutWord(devAdr + 05554H, 5555H);
|
|
||||||
PutWord(devAdr + 0AAAAH, 1010H);
|
|
||||||
|
|
||||||
WaitByDataPoll(devAdr, expData)
|
|
||||||
END EraseDevice;
|
|
||||||
|
|
||||||
PROCEDURE EraseSector (sectorAdr: INTEGER);
|
|
||||||
VAR devAdr: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
sectorAdr := sectorAdr DIV FlM.memDevice.sectorSize * FlM.memDevice.sectorSize;
|
|
||||||
devAdr := sectorAdr DIV FlM.memDevice.deviceSize * FlM.memDevice.deviceSize;
|
|
||||||
Log.Ln; Log.Tab; Log.String("erasing sector: ");
|
|
||||||
LogHex(sectorAdr); Log.String(" .. "); LogHex(sectorAdr + FlM.memDevice.sectorSize - 1);
|
|
||||||
|
|
||||||
PutWord(devAdr + 0AAAAH, 0AAAAH);
|
|
||||||
PutWord(devAdr + 05554H, 5555H);
|
|
||||||
PutWord(devAdr + 0AAAAH, 8080H);
|
|
||||||
PutWord(devAdr + 0AAAAH, 0AAAAH);
|
|
||||||
PutWord(devAdr + 05554H, 5555H);
|
|
||||||
PutWord(sectorAdr, 3030H);
|
|
||||||
|
|
||||||
WaitByDataPoll(sectorAdr, 0FFFFH)
|
|
||||||
END EraseSector;
|
|
||||||
|
|
||||||
PROCEDURE EraseSectorAm29F800 (sectorAdr: INTEGER);
|
|
||||||
VAR devAdr: INTEGER;
|
|
||||||
|
|
||||||
PROCEDURE SetEraseMode;
|
|
||||||
BEGIN
|
|
||||||
PutWord(devAdr + 0AAAAH, 0AAAAH);
|
|
||||||
PutWord(devAdr + 05554H, 5555H);
|
|
||||||
PutWord(devAdr + 0AAAAH, 8080H);
|
|
||||||
PutWord(devAdr + 0AAAAH, 0AAAAH);
|
|
||||||
PutWord(devAdr + 05554H, 5555H)
|
|
||||||
END SetEraseMode;
|
|
||||||
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
sectorAdr := sectorAdr DIV FlM.memDevice.sectorSize * FlM.memDevice.sectorSize;
|
|
||||||
devAdr := sectorAdr DIV FlM.memDevice.deviceSize * FlM.memDevice.deviceSize;
|
|
||||||
Log.Ln; Log.Tab; Log.String("erasing sector: ");
|
|
||||||
LogHex(sectorAdr); Log.String(" .. "); LogHex(sectorAdr + FlM.memDevice.sectorSize - 1);
|
|
||||||
SetEraseMode;
|
|
||||||
PutWord(sectorAdr, 3030H); WaitByDataPoll(sectorAdr, 0FFFFH);
|
|
||||||
IF sectorAdr - devAdr <= 0FFFFH THEN (* erase bottom boot block *)
|
|
||||||
INC(sectorAdr, FlM.memDevice.sectorSize DIV 4);
|
|
||||||
SetEraseMode; PutWord(sectorAdr, 3030H); WaitByDataPoll(sectorAdr, 0FFFFH);
|
|
||||||
INC(sectorAdr, FlM.memDevice.sectorSize DIV 8);
|
|
||||||
SetEraseMode; PutWord(sectorAdr, 3030H); WaitByDataPoll(sectorAdr, 0FFFFH);
|
|
||||||
INC(sectorAdr, FlM.memDevice.sectorSize DIV 8);
|
|
||||||
SetEraseMode; PutWord(sectorAdr, 3030H); WaitByDataPoll(sectorAdr, 0FFFFH);
|
|
||||||
ELSIF sectorAdr - devAdr >= 0F0000H THEN (* erase top boot block *)
|
|
||||||
INC(sectorAdr, FlM.memDevice.sectorSize DIV 2);
|
|
||||||
SetEraseMode; PutWord(sectorAdr, 3030H); WaitByDataPoll(sectorAdr, 0FFFFH);
|
|
||||||
INC(sectorAdr, FlM.memDevice.sectorSize DIV 8);
|
|
||||||
SetEraseMode; PutWord(sectorAdr, 3030H); WaitByDataPoll(sectorAdr, 0FFFFH);
|
|
||||||
INC(sectorAdr, FlM.memDevice.sectorSize DIV 8);
|
|
||||||
SetEraseMode; PutWord(sectorAdr, 3030H); WaitByDataPoll(sectorAdr, 0FFFFH);
|
|
||||||
END
|
|
||||||
END EraseSectorAm29F800;
|
|
||||||
|
|
||||||
PROCEDURE ProgramLong (adr, data: INTEGER);
|
|
||||||
(* program one long at adr *)
|
|
||||||
VAR devAdr, word: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
devAdr := adr DIV FlM.memDevice.deviceSize * FlM.memDevice.deviceSize;
|
|
||||||
|
|
||||||
(* high word *)
|
|
||||||
word := data DIV 10000H MOD 10000H;
|
|
||||||
PutWord(devAdr + 0AAAAH, 0AAAAH);
|
|
||||||
PutWord(devAdr + 05554H, 5555H);
|
|
||||||
PutWord(devAdr + 0AAAAH, 0A0A0H);
|
|
||||||
PutWord(adr, word);
|
|
||||||
WaitByDataPoll(adr, word);
|
|
||||||
|
|
||||||
(* low word *)
|
|
||||||
word := data MOD 10000H; INC(adr, 2);
|
|
||||||
PutWord(devAdr + 0AAAAH, 0AAAAH);
|
|
||||||
PutWord(devAdr + 05554H, 5555H);
|
|
||||||
PutWord(devAdr + 0AAAAH, 0A0A0H);
|
|
||||||
PutWord(adr, word);
|
|
||||||
WaitByDataPoll(adr, word)
|
|
||||||
END ProgramLong;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE ShowChipIDsAm29F040 * ;
|
|
||||||
(**
|
|
||||||
Syntax: XdeAmdFlashs.ShowChipIDsAm29F040B deviceAddress
|
|
||||||
|
|
||||||
Preconditions: Target.DefineMemory defines the memory device Am29F040B
|
|
||||||
target connected via BDI
|
|
||||||
Description: shows: manufacturer id, device id and sector protection
|
|
||||||
Postconditions: the device(s) is in normal reading array mode.
|
|
||||||
*)
|
|
||||||
VAR devAdr: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
BDIMain.ConnectDevice;
|
|
||||||
FlM.LoadMemDevPar("Am29F040"); InDeviceAdr(devAdr); GetChipIDsAm29F040(devAdr)
|
|
||||||
END ShowChipIDsAm29F040;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE ShowChipIDsAm29F800 * ;
|
|
||||||
(**
|
|
||||||
Syntax: XdeAmdFlashs.ShowChipIDsAm29F800B deviceAddress
|
|
||||||
|
|
||||||
Preconditions: Target.DefineMemory defines the memory device Am29F800B
|
|
||||||
target connected via BDI
|
|
||||||
Description: shows: manufacturer id, device id and sector protection
|
|
||||||
Postconditions: the device(s) is in normal reading array mode.
|
|
||||||
*)
|
|
||||||
VAR devAdr: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
BDIMain.ConnectDevice;
|
|
||||||
FlM.LoadMemDevPar("Am29F800"); InDeviceAdr(devAdr); GetChipIDsAm29F800(devAdr)
|
|
||||||
END ShowChipIDsAm29F800;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE EraseSectAm29F800 * ;
|
|
||||||
VAR sectAdr: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
BDIMain.ConnectDevice;
|
|
||||||
FlM.LoadMemDevPar("Am29F800"); InSectorAdr(sectAdr); EraseSectorAm29F800(sectAdr)
|
|
||||||
END EraseSectAm29F800;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE LoadAm29F010 * ;
|
|
||||||
(** Preconditions: there is an image file Am29F010.Tim
|
|
||||||
if neccessary, click on CRSystem.Build to update all images
|
|
||||||
Description: the image in file Am29F010.Tim is loaded to the targets flash memory devices.
|
|
||||||
Postconditions: all flash memory device sectors, touched by the records in the imagefile,
|
|
||||||
are first erased and then programed.
|
|
||||||
*)
|
|
||||||
BEGIN
|
|
||||||
BDIMain.ConnectDevice;
|
|
||||||
Done := TRUE;
|
|
||||||
FlM.InstallDeviceProc(EraseDevice, EraseSector, ProgramLong);
|
|
||||||
FlM.Program("Am29F010", FALSE)
|
|
||||||
END LoadAm29F010;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE LoadAm29F040 * ;
|
|
||||||
(** Preconditions: there is an image file Am29F040.Tim
|
|
||||||
if neccessary, click on CRSystem.Build to update all images
|
|
||||||
Description: the image in file Am29F040.Tim is loaded to the targets flash memory devices.
|
|
||||||
Postconditions: all flash memory device sectors, touched by the records in the imagefile,
|
|
||||||
are first erased and then programed.
|
|
||||||
*)
|
|
||||||
BEGIN
|
|
||||||
BDIMain.ConnectDevice;
|
|
||||||
Done := TRUE;
|
|
||||||
FlM.InstallDeviceProc(EraseDevice, EraseSector, ProgramLong);
|
|
||||||
FlM.Program("Am29F040", FALSE)
|
|
||||||
END LoadAm29F040;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE LoadAm29F800 * ;
|
|
||||||
(** Preconditions: there is an image file Am29F800B.Tim
|
|
||||||
if neccessary, click on CRSystem.Build to update all images
|
|
||||||
Description: the image in file Am29F800B.Tim is loaded to the targets flash memory devices.
|
|
||||||
Postconditions: all flash memory device sectors, touched by the records in the imagefile,
|
|
||||||
are first erased and then programed.
|
|
||||||
*)
|
|
||||||
BEGIN
|
|
||||||
BDIMain.ConnectDevice;
|
|
||||||
Done := TRUE;
|
|
||||||
FlM.InstallDeviceProc(EraseDevice, EraseSectorAm29F800, ProgramLong);
|
|
||||||
FlM.Program("Am29F800", FALSE)
|
|
||||||
END LoadAm29F800;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
END Xo68x32AmdFlashs.
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,369 +0,0 @@
|
|||||||
|
|
||||||
MODULE XoppcAmdFlashs;
|
|
||||||
(** <20> ProXon/ED 7.10.97 / 20.10.98 / wm 9.00 / ED 18.12.00 / 27.6.02 | *)
|
|
||||||
(* changes:
|
|
||||||
22.10.04 UG adapted for ppc
|
|
||||||
*)
|
|
||||||
IMPORT
|
|
||||||
Log := StdLog, Dialog, Services,
|
|
||||||
UT := XdeUtilities, XE := XdeErrors, FlM := XoppcFlashMemories , BDI := UsbBDI555, TMAM := XoppcTargetMemAndMods,
|
|
||||||
S := SYSTEM, XSYS := XoppcSystem, TextModels;
|
|
||||||
|
|
||||||
CONST
|
|
||||||
errPrefix = "Amd_";
|
|
||||||
TargetDefineMem = "Xo68x32ImcTarget.DefineMemory";
|
|
||||||
TargetInit = "Xo68x32ImcTarget.Init";
|
|
||||||
|
|
||||||
(*
|
|
||||||
thisMod="XdeAmdFlashs";
|
|
||||||
*)
|
|
||||||
|
|
||||||
CONST
|
|
||||||
nul = 0X; cr = 0DX; eol = cr; ht = 9X;
|
|
||||||
nyd = "<>"; (*not yet defined (number)*)
|
|
||||||
imageFileExt = ".Tim"; (** target image file extension: ".Tim" *)
|
|
||||||
|
|
||||||
VAR
|
|
||||||
Done-: BOOLEAN; eof-: BOOLEAN;
|
|
||||||
(** Done=TRUE: vorangegangene Operation wurde erfolgreich beendet.
|
|
||||||
eof = TRUE: das Ende des Files ist nun erreicht, oder ein ENDrecord wurde gelesen.
|
|
||||||
|
|
||||||
Done=TRUE und eot = TRUE: ENDrecord konnte noch erfolgreich gelesen werden.
|
|
||||||
*)
|
|
||||||
firstErr-: INTEGER; (** error list see CrossErrors.Text, search for Xo68x32AmdFlashs *)
|
|
||||||
|
|
||||||
|
|
||||||
(*cs*)
|
|
||||||
VAR
|
|
||||||
Am29LV160DSegment : TMAM.Segment;
|
|
||||||
Am29LV160DDevice: TMAM.Device;
|
|
||||||
configT: TextModels.Model;
|
|
||||||
|
|
||||||
CONST
|
|
||||||
configText = "TargetConfig.odc";
|
|
||||||
|
|
||||||
PROCEDURE Error (errNr: SHORTINT);
|
|
||||||
BEGIN
|
|
||||||
IF Done THEN firstErr := firstErr; Done := FALSE END;
|
|
||||||
XE.Error("", errPrefix, errNr, TRUE)
|
|
||||||
END Error;
|
|
||||||
|
|
||||||
PROCEDURE LogHex (val: INTEGER);
|
|
||||||
BEGIN
|
|
||||||
Log.Char('0'); Log.IntForm(val, Log.hexadecimal, 1, ' ', Log.hideBase); Log.Char('H')
|
|
||||||
END LogHex;
|
|
||||||
|
|
||||||
PROCEDURE LogWord (data: INTEGER; comment: ARRAY OF CHAR);
|
|
||||||
BEGIN
|
|
||||||
Log.Tab; Log.String(comment); Log.String(":"); Log.Tab; LogHex(data MOD 10000H); Log.Ln
|
|
||||||
END LogWord;
|
|
||||||
|
|
||||||
PROCEDURE PutInt (adr, data: INTEGER);
|
|
||||||
BEGIN
|
|
||||||
BDI.writeMem(adr, data, 4);
|
|
||||||
END PutInt;
|
|
||||||
|
|
||||||
PROCEDURE mirrorReadIntData (data : INTEGER): INTEGER;
|
|
||||||
VAR i: INTEGER;
|
|
||||||
ds, datas: SET;
|
|
||||||
BEGIN
|
|
||||||
ds := {};
|
|
||||||
datas := S.VAL(SET, data);
|
|
||||||
FOR i := 0 TO 31 DO
|
|
||||||
IF i IN datas THEN
|
|
||||||
INCL(ds, 31 - i)
|
|
||||||
END;
|
|
||||||
END;
|
|
||||||
RETURN S.VAL(INTEGER, ds);
|
|
||||||
END mirrorReadIntData;
|
|
||||||
|
|
||||||
PROCEDURE InDeviceAdr (VAR devAdr: INTEGER);
|
|
||||||
VAR adr: INTEGER; scnr: UT.Scanner;
|
|
||||||
BEGIN
|
|
||||||
UT.GetScanner("!", scnr);
|
|
||||||
IF scnr.done THEN scnr.Int(adr) END;
|
|
||||||
IF ~scnr.done THEN
|
|
||||||
Error(1); devAdr := 0
|
|
||||||
ELSE
|
|
||||||
devAdr := adr DIV Am29LV160DSegment.size * Am29LV160DSegment.size ;
|
|
||||||
END
|
|
||||||
END InDeviceAdr;
|
|
||||||
|
|
||||||
PROCEDURE GetChipIDsAm29LV160D (devAdr: INTEGER);
|
|
||||||
VAR data: INTEGER; res, sector: INTEGER;
|
|
||||||
VAR locSgmt: TMAM.Segment; locSgmtNr: INTEGER;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE GetSectorProtection (sector, sectAdr, sectSize: INTEGER);
|
|
||||||
BEGIN
|
|
||||||
data := BDI.readMem(sectAdr + 2 * 4, 4);
|
|
||||||
Log.Tab; Log.String("adr: ");
|
|
||||||
Log.Tab; LogHex(sectAdr); Log.String("..."); LogHex(sectAdr + sectSize - 1);
|
|
||||||
Log.Tab;
|
|
||||||
IF mirrorReadIntData(data) = 0 THEN Log.String("un") END; Log.String("protected")
|
|
||||||
END GetSectorProtection;
|
|
||||||
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
devAdr := devAdr DIV Am29LV160DSegment.size * Am29LV160DSegment.size ;
|
|
||||||
|
|
||||||
Log.Ln; Log.String("getting Am29LV160D chip IDs:"); Log.Tab; Log.String("address area:");
|
|
||||||
Log.Tab; LogHex(devAdr); Log.String(" .. "); LogHex(devAdr + Am29LV160DSegment.size - 1); Log.Ln;
|
|
||||||
|
|
||||||
PutInt(devAdr + 01554H, 055005500H);
|
|
||||||
PutInt(devAdr + 0AA8H, 0AA00AA00H);
|
|
||||||
PutInt(devAdr + 01554H, 009000900H);
|
|
||||||
|
|
||||||
data := BDI.readMem(devAdr + 0, 4); LogWord(mirrorReadIntData(data), "manufacturer id"); (*01*)
|
|
||||||
data := BDI.readMem(devAdr + 4, 4); LogWord(mirrorReadIntData(data), "device id");
|
|
||||||
Log.String("Sectorname:"); Log.Tab;
|
|
||||||
Log.String("Sectorbaseadress:"); Log.Tab;
|
|
||||||
Log.String("Sectorsize:"); Log.Tab;
|
|
||||||
Log.String("Sectorused:"); Log.Tab;
|
|
||||||
Log.String("Sectorattributs:"); Log.Tab;
|
|
||||||
Log.String("Sectoradressrange:"); Log.Tab;
|
|
||||||
Log.Tab; Log.String("sector protection:");
|
|
||||||
Log.Ln;
|
|
||||||
locSgmt := Am29LV160DSegment.local; locSgmtNr := 0;
|
|
||||||
WHILE locSgmt # NIL DO
|
|
||||||
IF locSgmt.name = "" THEN Log.Int(locSgmtNr) ELSE Log.String(locSgmt.name) END;
|
|
||||||
Log.Tab;
|
|
||||||
Log.Tab; IF locSgmt.base < 0 THEN Log.String(nyd) ELSE LogHex(locSgmt.base) END;
|
|
||||||
Log.Tab; IF locSgmt.size < 0 THEN Log.String(nyd) ELSE LogHex(locSgmt.size) END;
|
|
||||||
Log.Tab; LogHex(locSgmt.used);
|
|
||||||
Log.Tab; Log.Set(locSgmt.attrs);
|
|
||||||
GetSectorProtection(locSgmtNr, devAdr, locSgmt.size);
|
|
||||||
INC(devAdr, locSgmt.size DIV Am29LV160DSegment.width); Log.Ln;
|
|
||||||
locSgmt := locSgmt.next; INC(locSgmtNr)
|
|
||||||
END;
|
|
||||||
PutInt(devAdr + 01554H, 0F000F00H); Log.Ln (*Reset*)
|
|
||||||
END GetChipIDsAm29LV160D;
|
|
||||||
|
|
||||||
PROCEDURE ShowChipIDsAm29LV160D * ;
|
|
||||||
(**
|
|
||||||
Syntax: XdeAmdFlashs.ShowChipIDsAm29LV160D deviceAddress
|
|
||||||
|
|
||||||
Preconditions: Target.DefineMemory defines the memory device Am29FLV160DB
|
|
||||||
target connected via BDI
|
|
||||||
Description: shows: manufacturer id, device id and sector protection
|
|
||||||
Postconditions: the device(s) is in normal reading array mode.
|
|
||||||
*)
|
|
||||||
VAR devAdr: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
InDeviceAdr(devAdr);
|
|
||||||
GetChipIDsAm29LV160D(devAdr);
|
|
||||||
END ShowChipIDsAm29LV160D;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE GetSectorAdress (sectName : TMAM.Name; VAR sectSize : INTEGER ): INTEGER;
|
|
||||||
VAR locSgmt: TMAM.Segment; locSgmtNr, adr: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
locSgmt := Am29LV160DSegment.local; locSgmtNr := 0; adr := 0;
|
|
||||||
WHILE locSgmt # NIL DO
|
|
||||||
adr := adr DIV locSgmt.size * locSgmt.size;
|
|
||||||
IF locSgmt.name = "" THEN Log.Int(locSgmtNr) ELSE Log.String(locSgmt.name) END;
|
|
||||||
IF locSgmt.name = sectName THEN
|
|
||||||
sectSize := locSgmt.size DIV Am29LV160DSegment.width ; RETURN adr
|
|
||||||
ELSE
|
|
||||||
adr := adr + locSgmt.size DIV Am29LV160DSegment.width;
|
|
||||||
END;
|
|
||||||
locSgmt := locSgmt.next; INC(locSgmtNr)
|
|
||||||
END;
|
|
||||||
END GetSectorAdress;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE InSectorAdr (VAR sectorAdr, sectSize : INTEGER);
|
|
||||||
VAR scnr: UT.Scanner;
|
|
||||||
sectName : TMAM.Name;
|
|
||||||
BEGIN
|
|
||||||
UT.GetScanner("!", scnr);
|
|
||||||
IF scnr.done THEN scnr.CharSequence(sectName) END;
|
|
||||||
Log.String("Readed sector name: "); Log.String(sectName); Log.Tab;
|
|
||||||
IF ~scnr.done THEN
|
|
||||||
Error(1); sectorAdr := 0
|
|
||||||
ELSE
|
|
||||||
sectorAdr := GetSectorAdress(sectName, sectSize);
|
|
||||||
Log.String("Sectoradress: "); LogHex(sectorAdr); Log.Ln;
|
|
||||||
END
|
|
||||||
END InSectorAdr;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE InDumpStartAndEndAdr (VAR startAdr, endAdr: INTEGER);
|
|
||||||
VAR adr: INTEGER; scnr: UT.Scanner;
|
|
||||||
BEGIN
|
|
||||||
UT.GetScanner("!", scnr);
|
|
||||||
IF scnr.done THEN scnr.Int(adr) END;
|
|
||||||
IF ~scnr.done THEN
|
|
||||||
Error(1); startAdr := 0
|
|
||||||
ELSE
|
|
||||||
startAdr := adr
|
|
||||||
END;
|
|
||||||
Log.Ln; Log.String("read start adress to dump: "); LogHex(startAdr);
|
|
||||||
|
|
||||||
IF scnr.done THEN scnr.Int(adr) END;
|
|
||||||
IF ~scnr.done THEN
|
|
||||||
Error(1); endAdr := 0
|
|
||||||
ELSE
|
|
||||||
endAdr := adr
|
|
||||||
END;
|
|
||||||
Log.Ln; Log.String("read end adress to dump: "); LogHex(endAdr); Log.Ln;
|
|
||||||
END InDumpStartAndEndAdr;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE InSectorAdr2 (VAR sectorAdr: INTEGER);
|
|
||||||
VAR adr: INTEGER; scnr: UT.Scanner;
|
|
||||||
BEGIN
|
|
||||||
UT.GetScanner("!", scnr);
|
|
||||||
IF scnr.done THEN scnr.Int(adr) END;
|
|
||||||
IF ~scnr.done THEN
|
|
||||||
Error(1); sectorAdr := 0
|
|
||||||
ELSE
|
|
||||||
sectorAdr := adr
|
|
||||||
END;
|
|
||||||
LogHex(sectorAdr);
|
|
||||||
END InSectorAdr2;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE WaitByDataPollInt (adr, expData, timeOut: INTEGER);
|
|
||||||
VAR endTime: LONGINT; data: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
endTime := Services.Ticks() + timeOut;
|
|
||||||
REPEAT data := BDI.readMem(adr, 4) UNTIL (data = expData) OR (endTime < Services.Ticks());
|
|
||||||
IF data # expData THEN
|
|
||||||
Error(3); Log.Tab; Log.String("at loc "); LogHex(adr); Log.Ln
|
|
||||||
END
|
|
||||||
END WaitByDataPollInt;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE EraseSectorAm29LV160D (sectorAdr: INTEGER);
|
|
||||||
VAR devAdr: INTEGER;
|
|
||||||
|
|
||||||
PROCEDURE SetEraseMode;
|
|
||||||
BEGIN
|
|
||||||
PutInt(devAdr + 01554H, 055005500H);
|
|
||||||
PutInt(devAdr + 0AA8H, 0AA00AA00H);
|
|
||||||
PutInt(devAdr + 01554H, 01000100H);
|
|
||||||
PutInt(devAdr + 01554H, 055005500H);
|
|
||||||
PutInt(devAdr + 0AA8H, 0AA00AA00H)
|
|
||||||
END SetEraseMode;
|
|
||||||
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
(* Log.String("AmdFlashs-Erase, sector adress ");
|
|
||||||
LogHex(sectorAdr); Log.Tab;*)
|
|
||||||
devAdr := Am29LV160DSegment.base ;
|
|
||||||
(* LogHex(devAdr);*)
|
|
||||||
sectorAdr := sectorAdr - devAdr;
|
|
||||||
(* Log.Ln; Log.Tab; Log.String("erasing sector: ");
|
|
||||||
LogHex(devAdr + sectorAdr); Log.String(" .. ");*)
|
|
||||||
SetEraseMode;
|
|
||||||
PutInt(devAdr + sectorAdr , 0C000C00H); WaitByDataPollInt(devAdr + sectorAdr , 0FFFFFFFFH, 5000);
|
|
||||||
|
|
||||||
END EraseSectorAm29LV160D;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE EraseSectAm29LV160D * ;
|
|
||||||
VAR sectAdr, sectSize: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
InSectorAdr2(sectAdr);
|
|
||||||
EraseSectorAm29LV160D(sectAdr);
|
|
||||||
END EraseSectAm29LV160D;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE EraseDeviceAm29LV160D * (adr: INTEGER);
|
|
||||||
CONST expData = 0FFFFFFFFH;
|
|
||||||
VAR devAdr: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
devAdr := Am29LV160DSegment.base ;
|
|
||||||
adr := adr - devAdr;
|
|
||||||
Log.Ln; Log.Tab; Log.String("erasing device(s): ");
|
|
||||||
LogHex(devAdr); Log.String(" .. "); LogHex(devAdr + Am29LV160DDevice.size - 1); Log.Ln;
|
|
||||||
PutInt(devAdr + 01554H, 055005500H);
|
|
||||||
PutInt(devAdr + 0AA8H, 0AA00AA00H);
|
|
||||||
PutInt(devAdr + 01554H, 01000100H);
|
|
||||||
PutInt(devAdr + 01554H, 055005500H);
|
|
||||||
PutInt(devAdr + 0AA8H, 0AA00AA00H);
|
|
||||||
PutInt(devAdr + 01554H, 08000800H);
|
|
||||||
WaitByDataPollInt(devAdr, expData, 30000);
|
|
||||||
Log.Tab; Log.String("device erased! ");
|
|
||||||
END EraseDeviceAm29LV160D;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE EraseDeviceAm29LV160DCmd * ;
|
|
||||||
VAR sectAdr, sectSize: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
InDeviceAdr(sectAdr);
|
|
||||||
EraseDeviceAm29LV160D(sectAdr);
|
|
||||||
END EraseDeviceAm29LV160DCmd;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE ProgramIntAm29LV160D (adr, data: INTEGER);
|
|
||||||
(* program one int at adr *)
|
|
||||||
VAR
|
|
||||||
devAdr: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
devAdr := Am29LV160DSegment.base ;
|
|
||||||
|
|
||||||
PutInt(devAdr + 01554H, 055005500H);
|
|
||||||
PutInt(devAdr + 0AA8H, 0AA00AA00H);
|
|
||||||
PutInt(devAdr + 01554H, 05000500H);
|
|
||||||
PutInt(adr, data);
|
|
||||||
WaitByDataPollInt(adr , data, 5000);
|
|
||||||
END ProgramIntAm29LV160D;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE LoadAm29LV160D * ;
|
|
||||||
(** Preconditions: there is an image fileAm29LV160DB.Tim
|
|
||||||
if neccessary, click on XoppcSystem.Build to update all images
|
|
||||||
Description: the image in file fileAm29LV160DB.Tim is loaded to the targets flash memory devices.
|
|
||||||
Postconditions: all flash memory device sectors, touched by the records in the imagefile,
|
|
||||||
are first erased and then programed.
|
|
||||||
*)
|
|
||||||
BEGIN
|
|
||||||
|
|
||||||
Done := TRUE;
|
|
||||||
Am29LV160DSegment := TMAM.GetSegment(NIL, "ExternalFlashAm29LV160D");
|
|
||||||
Am29LV160DDevice := TMAM.GetDevice("Am29LV160D");
|
|
||||||
FlM.LoadMemDevPar(Am29LV160DDevice, Am29LV160DSegment);
|
|
||||||
FlM.InstallDeviceProc(EraseDeviceAm29LV160D, EraseSectorAm29LV160D, ProgramIntAm29LV160D);
|
|
||||||
XSYS.ResetTarget; IF ~BDI.Done THEN Error(40); RETURN END;
|
|
||||||
FlM.Program("Am29LV160D", FALSE)
|
|
||||||
END LoadAm29LV160D;
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE DumpIntAm29LV160D * ;
|
|
||||||
VAR
|
|
||||||
startAdr, endAdr : INTEGER;
|
|
||||||
data, i : INTEGER;
|
|
||||||
BEGIN
|
|
||||||
InDumpStartAndEndAdr(startAdr, endAdr);
|
|
||||||
FOR i := startAdr TO (endAdr) BY 4 DO
|
|
||||||
data := BDI.readMem(i , 4);
|
|
||||||
Log.String("Readed INT value at Adress "); LogHex(i); Log.String(" : ");
|
|
||||||
LogHex(data); Log.Ln;
|
|
||||||
END;
|
|
||||||
END DumpIntAm29LV160D;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE Init * ;
|
|
||||||
BEGIN
|
|
||||||
XSYS.ResetTarget;
|
|
||||||
IF ~BDI.Done THEN Error(40); RETURN END;
|
|
||||||
Log.Tab; Log.String("controller reset and initialised"); Log.Ln;
|
|
||||||
TMAM.InitRegs;
|
|
||||||
END Init;
|
|
||||||
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
Init;
|
|
||||||
END XoppcAmdFlashs.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,190 +0,0 @@
|
|||||||
|
|
||||||
MODULE XoppcTrgtRegDict;
|
|
||||||
(** <20> ProXon/ED 3.9.94 / 22.11.98 / 4.12.00 / 14.2.02 | *)
|
|
||||||
(** target register operations*)
|
|
||||||
IMPORT
|
|
||||||
XE := XdeErrors, XU := XdeUtilities, BDI := UsbBDI555, Log := StdLog;
|
|
||||||
|
|
||||||
CONST
|
|
||||||
errPrefix = "RegDir_"; regDictPath = "Xoppc/Rsrc/RegisterDictionary.odc";
|
|
||||||
|
|
||||||
TYPE
|
|
||||||
RegName* = ARRAY 8 OF CHAR;
|
|
||||||
RegDesc = RECORD
|
|
||||||
type: RegName;
|
|
||||||
size: INTEGER;
|
|
||||||
END;
|
|
||||||
|
|
||||||
VAR
|
|
||||||
Done-: BOOLEAN; (** previous operation successfully completed *)
|
|
||||||
firstErr-: SHORTINT; (** first error occured, see error list at the end of this module *)
|
|
||||||
|
|
||||||
regTypeTab: ARRAY 8 OF RegDesc;
|
|
||||||
curReg, curRegCode, regTextPos: INTEGER; curRegName: RegName; curRegType: RegName;
|
|
||||||
regScn: XU.Scanner;
|
|
||||||
fprMoveAddr*: INTEGER;
|
|
||||||
|
|
||||||
PROCEDURE ClearRegAttr;
|
|
||||||
BEGIN
|
|
||||||
curReg := 0; curRegCode := 0; regTextPos := 0;
|
|
||||||
curRegType := regTypeTab[0].type; curRegName := ""
|
|
||||||
END ClearRegAttr;
|
|
||||||
|
|
||||||
PROCEDURE Error (errNr: SHORTINT);
|
|
||||||
BEGIN
|
|
||||||
IF Done THEN firstErr := errNr; Done := FALSE END;
|
|
||||||
XE.Error("", errPrefix, errNr, TRUE);
|
|
||||||
ClearRegAttr
|
|
||||||
END Error;
|
|
||||||
|
|
||||||
PROCEDURE LogInt (val: INTEGER);
|
|
||||||
BEGIN
|
|
||||||
Log.Int(val)
|
|
||||||
END LogInt;
|
|
||||||
|
|
||||||
PROCEDURE LogHex (val: INTEGER);
|
|
||||||
BEGIN
|
|
||||||
Log.Char('0'); Log.IntForm(val MOD 100000000L, Log.hexadecimal, 1, ' ', Log.hideBase); Log.Char('H')
|
|
||||||
END LogHex;
|
|
||||||
|
|
||||||
PROCEDURE SelectRegEntry;
|
|
||||||
BEGIN
|
|
||||||
curReg := 0;
|
|
||||||
WHILE (curReg < LEN(regTypeTab)) & (regTypeTab[curReg].type # curRegType) DO
|
|
||||||
INC(curReg)
|
|
||||||
END;
|
|
||||||
IF curReg >= LEN(regTypeTab) THEN Error(6) END
|
|
||||||
END SelectRegEntry;
|
|
||||||
|
|
||||||
PROCEDURE SelectNextReg * ;
|
|
||||||
VAR ch: CHAR;
|
|
||||||
BEGIN
|
|
||||||
regScn.Ident(curRegName); regTextPos := regScn.start;
|
|
||||||
regScn.Ident(curRegType);
|
|
||||||
regScn.Int(curRegCode); regScn.Char(ch);
|
|
||||||
IF ~regScn.done THEN
|
|
||||||
IF regScn.eot THEN
|
|
||||||
Done := FALSE; ClearRegAttr
|
|
||||||
ELSE
|
|
||||||
Error(8)
|
|
||||||
END
|
|
||||||
ELSIF ch # ';' THEN
|
|
||||||
Error(8)
|
|
||||||
ELSE
|
|
||||||
SelectRegEntry
|
|
||||||
END
|
|
||||||
END SelectNextReg;
|
|
||||||
|
|
||||||
PROCEDURE SelectFirstReg * ;
|
|
||||||
BEGIN
|
|
||||||
IF ~Done THEN
|
|
||||||
XU.GetScanner(regDictPath, regScn); Done := TRUE;
|
|
||||||
END;
|
|
||||||
regScn.SetPos(0); SelectNextReg
|
|
||||||
END SelectFirstReg;
|
|
||||||
|
|
||||||
PROCEDURE SelectReg * (IN name: ARRAY OF CHAR; OUT found: BOOLEAN);
|
|
||||||
BEGIN
|
|
||||||
SelectFirstReg;
|
|
||||||
WHILE Done & (name # curRegName) DO SelectNextReg END;
|
|
||||||
found := Done
|
|
||||||
END SelectReg;
|
|
||||||
|
|
||||||
PROCEDURE LogRegs * ;
|
|
||||||
BEGIN
|
|
||||||
SelectFirstReg;
|
|
||||||
WHILE Done DO
|
|
||||||
SelectNextReg;
|
|
||||||
Log.String(curRegName); Log.Tab; Log.String(curRegType); Log.Tab;
|
|
||||||
Log.Int(curRegCode); Log.Tab; Log.Int(regTextPos); Log.Ln
|
|
||||||
END
|
|
||||||
END LogRegs;
|
|
||||||
|
|
||||||
PROCEDURE ReadReg * (IN regName: ARRAY OF CHAR; OUT regVal: LONGINT; OUT size: INTEGER; OUT done: BOOLEAN);
|
|
||||||
BEGIN
|
|
||||||
Done := TRUE; done := TRUE;
|
|
||||||
IF curRegName # regName THEN SelectReg(regName, done) END;
|
|
||||||
IF done THEN
|
|
||||||
size := regTypeTab[curReg].size;
|
|
||||||
CASE curReg OF
|
|
||||||
| 0:
|
|
||||||
regVal := BDI.readGPR(curRegCode);
|
|
||||||
| 1:
|
|
||||||
regVal := BDI.readGPR(curRegCode);
|
|
||||||
| 2:
|
|
||||||
regVal := BDI.readSPR(curRegCode);
|
|
||||||
| 3:
|
|
||||||
regVal := BDI.readMSR();
|
|
||||||
| 4:
|
|
||||||
regVal := BDI.readFPR(curRegCode, fprMoveAddr);
|
|
||||||
| 5:
|
|
||||||
regVal := BDI.readCR();
|
|
||||||
| 6:
|
|
||||||
regVal := BDI.readFPSCR();
|
|
||||||
| 7:
|
|
||||||
regVal := BDI.readMem(curRegCode, 4);
|
|
||||||
END;
|
|
||||||
done := BDI.Done
|
|
||||||
END
|
|
||||||
END ReadReg;
|
|
||||||
|
|
||||||
PROCEDURE WriteReg * (IN regName: ARRAY OF CHAR; regVal: INTEGER; OUT done: BOOLEAN);
|
|
||||||
BEGIN
|
|
||||||
Done := TRUE; done := TRUE;
|
|
||||||
IF curRegName # regName THEN SelectReg(regName, done) END;
|
|
||||||
IF done THEN
|
|
||||||
CASE curReg OF
|
|
||||||
| 0:
|
|
||||||
BDI.writeGPR(curRegCode, regVal);
|
|
||||||
| 1:
|
|
||||||
BDI.writeGPR(curRegCode, regVal);
|
|
||||||
| 2:
|
|
||||||
BDI.writeSPR(curRegCode, regVal);
|
|
||||||
| 3:
|
|
||||||
BDI.writeMSR(regVal);
|
|
||||||
| 4:
|
|
||||||
BDI.writeFPR(curRegCode, fprMoveAddr, regVal);
|
|
||||||
| 5:
|
|
||||||
BDI.writeCR(regVal);
|
|
||||||
| 6:
|
|
||||||
BDI.writeFPSCR(regVal);
|
|
||||||
| 7:
|
|
||||||
BDI.writeMem(curRegCode, regVal, 4);
|
|
||||||
END;
|
|
||||||
done := BDI.Done
|
|
||||||
END
|
|
||||||
END WriteReg;
|
|
||||||
|
|
||||||
PROCEDURE Clear * ;
|
|
||||||
VAR n: INTEGER;
|
|
||||||
BEGIN
|
|
||||||
Done := TRUE; firstErr := 0;
|
|
||||||
FOR n := 0 TO LEN(regTypeTab) - 1 DO
|
|
||||||
regTypeTab[0].type := "???"; regTypeTab[0].size := 4;
|
|
||||||
END
|
|
||||||
END Clear;
|
|
||||||
|
|
||||||
PROCEDURE Init;
|
|
||||||
BEGIN
|
|
||||||
Clear;
|
|
||||||
(*__ setup stub reg type *)
|
|
||||||
regTypeTab[0].type := "???"; regTypeTab[0].size := 4;
|
|
||||||
ClearRegAttr;
|
|
||||||
|
|
||||||
(*__ setup register types *)
|
|
||||||
regTypeTab[1].type := "GPR"; regTypeTab[1].size := 4;
|
|
||||||
regTypeTab[2].type := "SPR"; regTypeTab[2].size := 4;
|
|
||||||
regTypeTab[3].type := "MSR"; regTypeTab[3].size := 4;
|
|
||||||
regTypeTab[4].type := "FPR"; regTypeTab[4].size := 8;
|
|
||||||
regTypeTab[5].type := "CR"; regTypeTab[5].size := 4;
|
|
||||||
regTypeTab[6].type := "FPSCR"; regTypeTab[6].size := 4;
|
|
||||||
regTypeTab[7].type := "CtrlReg"; regTypeTab[7].size := 4;
|
|
||||||
XU.GetScanner(regDictPath, regScn);
|
|
||||||
IF ~regScn.done THEN Error(3) END
|
|
||||||
END Init;
|
|
||||||
|
|
||||||
|
|
||||||
BEGIN
|
|
||||||
Init
|
|
||||||
END XoppcTrgtRegDict.
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user