/*********************************************************************
 *	書き込み.
 *********************************************************************
 */
void WriteFlash(int adr,uchar *buf,int len)
{
	int i;
	uchar *t=buf;
	PACK_data pd;

	setup_addr24write(adr>>1,0x4001);

	for(i=0;i<len;i+=8,t+=8) {
		pack3word(t,(char *)&pd);

		sendData24(0xEB0300);					// CLR W6
		sendData24(0x200000| (pd.word[0]<<4) );	// MOV  #w0, W0
		sendData24(0x200001| (pd.word[1]<<4) );	// MOV  #w1, W1
		sendData24(0x200002| (pd.word[2]<<4) );	// MOV  #w2, W2
		sendData24(0xBB0BB6);					// TBLWTL [W6++], [W7]
		sendData24(0x000000);					// NOP 
		sendData24(0x000000);					// NOP 
		sendData24(0xBBDBB6);					// TBLWTH.B [W6++], [W7++]
		sendData24(0x000000);					// NOP 
		sendData24(0x000000);					// NOP 
		sendData24(0xBBEBB6);					// TBLWTH.B [W6++], [++W7]
		sendData24(0x000000);					// NOP 
		sendData24(0x000000);					// NOP 
		sendData24(0xBB1BB6);					// TBLWTL [W6++], [W7++]
		sendData24(0x000000);					// NOP 
		sendData24(0x000000);					// NOP 
	}
	
	WaitComplete();
	
	sendData24(0x040200);					// GOTO 0x200
	sendData24(0x000000);					// NOP 
}
Exemple #2
0
/********************************************************************
 *	PIC24F:Flash書き込み
 ********************************************************************
 */
void pic_write24f(void)
{
	uchar i;
	uchar cmd4=PacketFromPC.piccmd4;	// 0=address setupする. 1=継続書き込み 2=complete処理あり.
	uchar len =PacketFromPC.size;		// ループ回数. =データbyte数 / 6 と同じ.
//	ushort *wordp=(ushort *)PacketFromPC.picdata;
	uchar *wordp = PacketFromPC.picdata;

	if(cmd4==0) {
		setup_addr24write();	//(adr>>1,0x4001);
	}

	for(i=0; i<len; i++) {
		sendData24(0xEB0300);					// CLR W6
		sendData24(0x200000| (getword(wordp+0)<<4) );	// MOV  #w0, W0
		sendData24(0x200001| (getword(wordp+2)<<4) );	// MOV  #w1, W1
		sendData24(0x200002| (getword(wordp+4)<<4) );	// MOV  #w2, W2
		sendData24(0xBB0BB6);					// TBLWTL [W6++], [W7]
		send_nop2();
		sendData24(0xBBDBB6);					// TBLWTH.B [W6++], [W7++]
		send_nop2();
		sendData24(0xBBEBB6);					// TBLWTH.B [W6++], [++W7]
		send_nop2();
		sendData24(0xBB1BB6);					// TBLWTL [W6++], [W7++]
		send_nop2();
//		wordp+=3;
		wordp+=3*2;
	}

	if(cmd4==2) {
		WaitComplete();
		send_goto200();
	}
}
/*********************************************************************
 *	チップ消去コマンドの発行.
 *********************************************************************
 */
void EraseCmd(int devtype)
{
	sendData24(0x000000);	// NOP
	sendData24(0x040200);	// GOTO 0x200
	sendData24(0x000000);	// NOP 

	sendData24(0x200800);	// MOV #0x80, W0
	sendData24(0x880190);	// MOV W0, TBLPAG
	sendData24(0x207FE1);	// MOV #0x7FE, W1
	sendData24(0x2000C2);	// MOV #12, W2
	sendData24(0x000000);	// NOP 
	sendData24(0xBA1931);	// TBLRDL [W1++], [W2++]
	sendData24(0x000000);	// NOP 
	sendData24(0x000000);	// NOP 

	sendData24(0x2404F0);	// MOV #0x404F, W0 
	sendData24(0x883B00);	// MOV W0, NVMCON
	sendData24(0x200000);	// MOV #0, W0
	sendData24(0x200801);	// MOV #0x80
	sendData24(0x880191);	// MOV W1, TBLPAG 
	sendData24(0xBB0800);	// TBLWTL W0, [W0] 

	WaitComplete();

	sendData24(0x240031);	// MOV #0x4003, W1
	sendData24(0x883B01);	// MOV W1, NVMCON 
	sendData24(0x200800);	// MOV #0x80, W0 
	sendData24(0x880190);	// MOV W0, TBLPAG 
	sendData24(0x207FE1);	// MOV #0x7FE, W1 
	sendData24(0x2000C2);	// MOV #12, W2 
	sendData24(0x000000);	// NOP 
	sendData24(0xBB18B2);	// TBLWTL [W2++], [W1++]

	WaitComplete();

	sendData24(0x040200);	// GOTO 0x200
	sendData24(0x000000);	// NOP 

}
/*********************************************************************
 *	書き込みテスト.
 *********************************************************************
 */
void WriteFuse(int adr,uchar *buf)
{
	int i,cfg;
	setup_addr24write(adr>>1,0x4003);
	for (i = 0; i < 8; i += 4) {					/* ---- Repeat for two cfg words ---- */
		cfg=buf[i]|(buf[i+1]<<8);
		sendData24(0x200006| (cfg<<4) );	// MOV #cfg, W6
		sendData24(0x000000);				// NOP 
		sendData24(0xBB1B86);				// TBLWTL W6, [W7++]

		WaitComplete();
	}
	sendData24(0x040200);					// GOTO 0x200
	sendData24(0x000000);					// NOP 
}
Exemple #5
0
 void RealtimeProcess::VOnFail(void)
 { 
     WaitComplete();
 }
Exemple #6
0
 void RealtimeProcess::VOnSuccess(void)
 { 
     WaitComplete();
 }
Exemple #7
0
 void RealtimeProcess::VOnAbort(void)
 { 
     WaitComplete();
 }