X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=firmware%2Fapps%2Fchipcon%2Fchipcon.c;h=392e900b74c33f7d3a18bfd2c38d280ab15b93a5;hp=ce0a9ff03c06387b54cb4d82d29d07f2a7d4ed33;hb=ca48f48a3e03dfdac7dc8bf5a6375797146e22fb;hpb=a05528f44a36773d3bb3cf642dcb77bca79c5a33 diff --git a/firmware/apps/chipcon/chipcon.c b/firmware/apps/chipcon/chipcon.c index ce0a9ff..392e900 100644 --- a/firmware/apps/chipcon/chipcon.c +++ b/firmware/apps/chipcon/chipcon.c @@ -19,6 +19,27 @@ #include #include +//! Handles a chipcon command. +void cc_handle_fn( uint8_t const app, + uint8_t const verb, + uint32_t const len); + +// define the jtag app's app_t +app_t const chipcon_app = { + + /* app number */ + CHIPCON, + + /* handle fn */ + cc_handle_fn, + + /* name */ + "CHIPCON", + + /* desc */ + "\tThe CHIPCON app adds support for debugging the chipcon\n" + "\t8051 processor.\n" +}; /* Concerning clock rates, the maximimum clock rates are defined on page 4 of the spec. They vary, but are roughly 30MHz. Raising @@ -34,6 +55,7 @@ #define MISO BIT2 #define SCK BIT3 + //This could be more accurate. //Does it ever need to be? #define CCSPEED 3 @@ -71,7 +93,7 @@ void ccsetup(){ 30: 30 41 ret */ -/* + //! Initialize the debugger void ccdebuginit(){ //Port output BUT NOT DIRECTION is set at start. @@ -82,22 +104,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){ @@ -144,14 +169,16 @@ void ccread(unsigned char len){ cmddata[i]=cctrans8(0); } -//! Handles a monitor command. -void cchandle(unsigned char app, - unsigned char verb, - unsigned long len){ +//! Handles a chipcon command. +void cc_handle_fn( uint8_t const app, + uint8_t const verb, + uint32_t const len) +{ //Always init. Might help with buggy lines. //Might hurt too. //ccdebuginit(); long i; + int blocklen, blockadr; switch(verb){ //CC_PEEK and CC_POKE will come later. @@ -191,6 +218,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 +276,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