X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=firmware%2Fapps%2Fchipcon%2Fchipcon.c;h=28bc52b0f2da44df90e42d6781d30a78624fa957;hp=ce0a9ff03c06387b54cb4d82d29d07f2a7d4ed33;hb=96bf694c533026d571e3fa567edc450ae8a1e24a;hpb=a05528f44a36773d3bb3cf642dcb77bca79c5a33 diff --git a/firmware/apps/chipcon/chipcon.c b/firmware/apps/chipcon/chipcon.c index ce0a9ff..28bc52b 100644 --- a/firmware/apps/chipcon/chipcon.c +++ b/firmware/apps/chipcon/chipcon.c @@ -34,11 +34,12 @@ #define MISO BIT2 #define SCK BIT3 + //This could be more accurate. //Does it ever need to be? #define CCSPEED 3 -//#define CCDELAY(x) delay(x) -#define CCDELAY(x) +#define CCDELAY(x) delay(x) +//#define CCDELAY(x) #define SETMOSI P5OUT|=MOSI #define CLRMOSI P5OUT&=~MOSI @@ -71,7 +72,7 @@ void ccsetup(){ 30: 30 41 ret */ -/* + //! Initialize the debugger void ccdebuginit(){ //Port output BUT NOT DIRECTION is set at start. @@ -82,22 +83,25 @@ void ccdebuginit(){ //Two positive debug clock pulses while !RST is low. //Take RST low, pulse twice, then high. P5OUT&=~SCK; + delay(10); P5OUT&=~RST; + delay(10); + //Two rising edges. P5OUT^=SCK; //up + delay(1); P5OUT^=SCK; //down + delay(1); P5OUT^=SCK; //up + delay(1); P5OUT^=SCK; //Unnecessary. - + delay(1); + //delay(0); //Raise !RST. P5OUT|=RST; } -*/ - -//! Initialize the debugger. -void ccdebuginit(); //! Read and write a CC bit. unsigned char cctrans8(unsigned char byte){ @@ -152,6 +156,7 @@ void cchandle(unsigned char app, //Might hurt too. //ccdebuginit(); long i; + int blocklen, blockadr; switch(verb){ //CC_PEEK and CC_POKE will come later. @@ -191,6 +196,7 @@ void cchandle(unsigned char app, //Micro commands! case CC_CHIP_ERASE: + case CC_MASS_ERASE_FLASH: cc_chip_erase(); txdata(app,verb,1); break; @@ -248,9 +254,18 @@ void cchandle(unsigned char app, txdata(app,verb,1); break; case CC_READ_XDATA_MEMORY: - cmddata[0]=cc_peekdatabyte(cmddataword[0]); - txdata(app,verb,1); + //Read the length. + blocklen=1; + if(len>2) + blocklen=cmddataword[1]; + blockadr=cmddataword[0]; + + //Return that many bytes. + for(i=0;i