head	1.3;
access;
symbols
	thesis:1.2
	arelease:1.1.1.1
	avendor:1.1.1;
locks; strict;
comment	@# @;


1.3
date	2005.05.11.16.42.49;	author martin;	state dead;
branches;
next	1.2;
commitid	1fb8428236084567;

1.2
date	2004.09.10.07.48.48;	author martin;	state Exp;
branches;
next	1.1;

1.1
date	2004.02.19.13.22.16;	author martin;	state Exp;
branches
	1.1.1.1;
next	;

1.1.1.1
date	2004.02.19.13.22.16;	author martin;	state Exp;
branches;
next	;


desc
@@


1.3
log
@resync with current development
@
text
@package util;

import com.jopdesign.sys.Const;
import com.jopdesign.sys.Native;
/**
*	Flash programmer (for AMD Am29LV040).
*		read and write data to address 0x80000.
*
*	timing:
*		byte program: typ 9 us max. 300 us
*		sector erase: typ 0.7 s + 0.6 s max 15 s + 20 s
*
*	asumes Timer.java is initialized
*/


public class Amd {

	public static int read(int addr) {

		return Native.rdMem(addr+0x80000);
	}

	/** program and handle timeout (without wd handling!) */

	public static void program(int addr, int data) {

		int i;

		addr += 0x80000;

		Native.wr(0, Const.IO_INT_ENA);
		
		Native.wrMem(0xaa, 0x80555);
		Native.wrMem(0x55, 0x802aa);
		Native.wrMem(0xa0, 0x80555);
		Native.wrMem(data, addr);

		int j = Native.rd(Const.IO_US_CNT);
		j += 350;						// maximum 350 us timeout
		data &= 0xff;

		for (;;) {
			if (Native.rdMem(addr) == data) break;
			if (j-Native.rd(Const.IO_US_CNT) < 0) break;
		}
		
		Native.wr(1, Const.IO_INT_ENA);

	}

	/**
	*	erase one sector and handle wd.
	*/
	public static boolean erase(int addr) {

		int i;

		addr += 0x80000;

		Native.wr(0, Const.IO_INT_ENA);
		
		Native.wrMem(0xaa, 0x80555);
		Native.wrMem(0x55, 0x802aa);
		Native.wrMem(0x80, 0x80555);
		Native.wrMem(0xaa, 0x80555);
		Native.wrMem(0x55, 0x802aa);
		Native.wrMem(0x30, addr);

		Native.wr(1, Const.IO_INT_ENA);

		for (i=0; i<400; ++i) {					// maximum 40 s timeout
			joprt.RtThread.sleepMs(100);
Dbg.wr('.');
			Timer.wd();
			if (Native.rdMem(addr) == 0xff) return true;
		}
		return false;
	}
}
@


1.2
log
@resync of actual development.
@
text
@@


1.1
log
@Initial revision
@
text
@d3 1
d32 2
d39 1
a39 1
		int j = Native.rd(Native.IO_US_CNT);
d45 1
a45 1
			if (j-Native.rd(Native.IO_US_CNT) < 0) break;
d47 3
d61 2
d70 2
@


1.1.1.1
log
@initial cvs import.
@
text
@@
