⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stecx930.c

📁 机械手(基于日立2398CPU)程序
💻 C
📖 第 1 页 / 共 2 页
字号:
					break;
				case 'W':	/* 抜庢姺忣曬彂崬傒僐儅儞僪	*/
					if (SysInf.Flag.bSeqRun==ON || rbuff[4]>30){
						AnsErr(0x01);
						Ser1Stat = rsIDLE;
					}
					else{
						WriteStep = 3;
						Ser1Stat = rsWRITE;
					}
					break;
				case 'E':	/* 僔乕働儞僗僾儘僌儔儉僄儕傾徚嫀僐儅儞僪	*/
					SeqPrgErase();
					AnsErr(ans);	/* 廔椆僐乕僪墳摎 */
					Ser1Stat = rsIDLE;
					break;
				case 'G':	/* 僔乕働儞僗僾儘僌儔儉僄儕傾撉弌偟僐儅儞僪	*/
					SysInf.Flag.bFlashProg = ON;
					SeqPrgRead();
					Ser1Stat = rsIDLE;
					break;
				case 'P':	/* 僔乕働儞僗僾儘僌儔儉僄儕傾彂崬傒僐儅儞僪	*/
					SeqPrgWrite();
					AnsErr(ans);	/* 廔椆僐乕僪墳摎 */
					Ser1Stat = rsIDLE;
					break;
				case 'Q':	/* 儌乕僔儑儞僷儔儊乕僞撉弌偟 */
					if (!SysInf.Flag.bSvComm || SysInf.Flag.bSvPrmRD || SysInf.Flag.bSvPrmWR){
						AnsErr(0x05);	/* busy */
						Ser1Stat = rsIDLE;
					}
					else{
						SysInf.Flag.bSvPrmRD = ON;
						SVQueueCode(0x30);			/* 僷儔儊乕僞撉弌偟梫媮 */
						WriteStep = 10;
						Ser1Stat = rsTRAN;
					}
					break;
				case 'S':	/* 儌乕僔儑儞僷儔儊乕僞彂崬傒 */
					if (!SysInf.Flag.bSvComm || SysInf.Flag.bSvPrmRD || SysInf.Flag.bSvPrmWR || _SMSVBUSY){
						AnsErr(0x05);	/* busy */
						Ser1Stat = rsIDLE;
					}
					else if (rbuff[4]!=1){
						AnsErr(0x04);	/* 僨乕僞乮幉斣崋)晄惓 */
						Ser1Stat = rsIDLE;
					}
					else{
						memcpy(&SVParam[0], &rbuff[5], 55*2);
						SVParam[29] = SysInf.RotateDir;	/* 夞揮曽岦 */
						SysInf.Flag.bSvPrmWR = ON;
						SVQueueCode(0x31);	/* 僷儔儊乕僞彂崬傒梫媮 */
						WriteStep = 20;
						Ser1Stat = rsTRAN;
					}
					break;
				case 'X':	/* 儁儞僟儞僩梡儊僢僙乕僕僄儕傾徚嫀 */
					if(SysInf.Flag.bDownloadMode == ON){
						PDFRomKind = rbuff[4];	/* 徚嫀懳徾*/
						SysInf.Flag.bPDErase = ON;
						WriteStep = 30;
						Ser1Stat = rsTRAN;
					}
					else{
						AnsErr(0x02);
						Ser1Stat = rsIDLE;
					}
					break;
				case 'Y':	/* 儁儞僟儞僩梡儊僢僙乕僕僄儕傾撉弌偟 */
					PDFRomKind = rbuff[4];
					memcpy(&PDFRomAddr, &rbuff[5], 4);
					memcpy(&PDFRomLen, &rbuff[9], 2); 
					SysInf.Flag.bPDRead = ON;
					WriteStep = 31;
					Ser1Stat = rsTRAN;
					break;
				case 'Z':	/* 儁儞僟儞僩梡儊僢僙乕僕僄儕傾彂崬傒 */
					if(SysInf.Flag.bDownloadMode == ON){
						PDFRomKind = rbuff[4];
						memcpy(&PDFRomAddr, &rbuff[5], 4);
						PDFRomLen = rbuff[9] * 0x100 + rbuff[10];
						memcpy(&PDFRomData, &rbuff[11], rbuff[9] * 0x100 + rbuff[10]);
						SysInf.Flag.bPDWrite = ON;
						WriteStep = 30;
						Ser1Stat = rsTRAN;
					}
					else{
						AnsErr(0x02);
						Ser1Stat = rsIDLE;
					}
					break;
				case 'V':	/* 僔乕働儞僗幚峴忬懺愝掕乛曄峏*/
					if (rbuff[2] == 2){
						if(SysInf.Flag.bDownloadMode == ON && rbuff[4] == 0x00){
							SysInf.Flag.bSeqRun = (rbuff[4] /* == 0x01 */);
							if(rbuff[4] == 0)
								SysInf.Flag.bFlashProg = ON;
							else
								SysInf.Flag.bFlashProg = OFF;
						}
						AnsErr(0);
						Ser1Stat = rsIDLE;
					}
					else if (rbuff[2] == 1){
						AnsStatus();
					}
					else{
						AnsErr(0xF1);
						Ser1Stat = rsIDLE;
					}
					break;
//				case 'F':	/* 僔僗僥儉僷儔儊乕僞徚嫀僐儅儞僪	*/
//					if (SysInf.Flag.bSeqRun == ON || rbuff[4] > 30){
//						AnsErr(0x01);		/* 彂姺晄壜 */
//						Ser1Stat = rsIDLE;
//					}
//					else{
//						WriteStep = 1;		/* 徚嫀張棟 */
//						Ser1Stat = rsWRITE;
//					}
//					break;
				case 'H':	/* 僔僗僥儉僷儔儊乕僞撉弌偟僐儅儞僪	*/
					SysPrmDataRead();
					Ser1Stat = rsIDLE;
					break;
				default:
					AnsErr(0xF1);
					Ser1Stat = rsIDLE;
					break;
			}
		}
		else{
			AnsErr(ans);
			Ser1Stat = rsIDLE;
		}
	}
	else if (Ser1Stat==rsWRITE){
		if (E2WriteCheck()==0)
			switch(WriteStep){
				case 1:							/* 奩摉抜庢姺僄儕傾嶍彍 */
					if (E2CondDefault(rbuff[4])==0){
						SysPrm.CondUseFlag &= ~(1l << rbuff[4]);	/* 奩摉抜庢姺僄儕傾巊梡僼儔僌僋儕傾 */
						WriteStep = 9;
					}
					break;
				case 3:{						/* 彂崬梡抜庢姺僨乕僞嶌惉 */
						datalen = (rbuff[1] * 256 + rbuff[2]) - 3;
						if(rbuff[5] == 3){		/* 彂崬僨乕僞庬椶俁偺帪 */
							memcpy(E2buff, &rbuff[6], datalen - 1);	/* 嵟戝嵟彫抣丄僜僼僩儕儈僢僩晅壛 */
							memcpy((E2buff + datalen - 1), Cond.dummy1, sizeof(Cond.dummy1));	/* 僟儈乕僨乕僞晅壛 */
							memcpy((E2buff + datalen - 1 + sizeof(Cond.dummy1)), &rbuff[6 + datalen - 1], 1);	/* 僽儘僢僋俶倧丏晅壛 */
						}
						else
							memcpy(E2buff, &rbuff[6], datalen);
						WriteStep++;
					}
					break;
				case 4:							/* 奩摉抜庢姺僄儕傾彂崬 */
					if (E2CondWriteP(rbuff[4], rbuff[5], &E2buff[0]) == 0){
						if(rbuff[4] != 0)
							SysPrm.CondUseFlag |= (1l << rbuff[4]);	/* 奩摉抜庢姺僄儕傾巊梡僼儔僌僙僢僩 */
						WriteStep = 9;
					}
					break;
				case 9:
					AnsErr(0x00);				/* 彂崬傒廔椆 */
//					if (rbuff[5]==6)
//						memcpy(&SysPrm.PointCode[0], E2buff, 58);
//					else
						SysInf.Flag.bE2CondFlag = ON;
					Ser1Stat = rsIDLE;
					E2CondCommRead((unsigned char *)&CondComm);	/* 僐儊儞僩慡撉傒弌偟 */
					break;
				default:
					Ser1Stat = rsIDLE;
					break;
			}
	}
	else if (Ser1Stat==rsTRAN){
		switch(WriteStep){
			case 10:
				if (!SysInf.Flag.bSvPrmRD){	/* 儌乕僔儑儞僷儔儊乕僞撉弌偟姰椆丠 */
					SvParamSend();		/* 憲怣奐巒 */
					WriteStep++;		/* 憲怣姰椆懸偪傊 */
				}
				break;
			case 11:
				if (SCI1.SCR.BIT.TIE == 0)	/* SCI1 憲怣廔椆丠 */	
					Ser1Stat = rsIDLE;
				break;
			case 20:
				if (!SysInf.Flag.bSvPrmWR){	/* 儌乕僔儑儞僷儔儊乕僞彂崬傒姰椆丠 */
					if (SeqData.B.SMI[64 / 16].c.Lo & 0x40)
						AnsErr(0x04);	/* 僨乕僞晄惓 */
					else if (SeqData.B.SMI[64 / 16].c.Lo & 0xa0)
						AnsErr(0x02);	/* 彂崬傒幐攕 */
					else
						AnsErr(0);
					Ser1Stat = rsIDLE;
				}
				break;
			case 30:	/* 儁儞僟儞僩奜晹FROM徚嫀乛彂崬傒姰椆懸偪 */
				if (!SysInf.Flag.bPDErase && !SysInf.Flag.bPDWrite){
					AnsErr(PDFRomAnsw);
					Ser1Stat = rsIDLE;
				}
				break;
			case 31:	/* 儁儞僟儞僩奜晹F-ROM撉弌偟姰椆懸偪 */
				if (!SysInf.Flag.bPDRead){
					if (PDFRomAnsw){
						AnsErr(PDFRomAnsw);
					}
					else{
						PDFRomSend();
					}
					Ser1Stat = rsIDLE;
				}
				break;
			default:
				Ser1Stat = rsIDLE;
				break;
		}
	}

	if (Ser1Stat==rsIDLE || Ser1Stat==rsWRITE || Ser1Stat==rsTRAN)
		Timer[TMCOMM] = 1000/1;	/* 1s */
	else if (!Timer[TMCOMM])
		Ser1Stat = rsIDLE;
}

/*--------------------------------------------------------------------*
 * MODULE   : INT_TEI1_SCI1
 * ABSTRACT : 
 * FUNCTION : vector 87 SCI1 憲怣廔椆妱崬傒
 * NOTE     : 
 * RETURN   : void
 * CREATE   : 00.11.01 A.Murakami
 * UPDATE   : 
 *--------------------------------------------------------------------*/
void INT_TEI1_SCI1(void)
{
#if USEDMA
	if (DMAC0A.DMABCR.BIT.DTE == 0){	/* DMA0A 揮憲掆巭	*/
		SCI1.SCR.BIT.TEIE = 0;		/* SCI1 憲怣廔椆妱崬傒嬛巭			*/
		SCI1.SCR.BIT.TIE = 0;		/* SCI1 憲怣僨乕僞僄儞僾僥傿妱崬傒嬛巭*/
		SCI1.SCR.BIT.TE = 0;		/* SCI1 憲怣摦嶌嬛巭					*/
	}
#else
	SCI1.SCR.BIT.TEIE = 0;		/* SCI1 憲怣廔椆妱崬傒嬛巭			*/
	SCI1.SCR.BIT.TIE = 0;		/* SCI1 憲怣僨乕僞僄儞僾僥傿妱崬傒嬛巭*/
	SCI1.SCR.BIT.TE = 0;		/* SCI1 憲怣摦嶌嬛巭					*/
#endif
}

/*--------------------------------------------------------------------*
 * MODULE   : INT_TXI1_SCI1
 * ABSTRACT : 憲怣僨乕僞僄儞僾僥傿妱崬傒
 * FUNCTION : vector 86 TXI1 SCI1
 * NOTE     : 
 * RETURN   : void
 * CREATE   : 00.11.01 A.Murakami
 * UPDATE   : 
 *--------------------------------------------------------------------*/
void INT_TXI1_SCI1(void)
{
#if USEDMA
	if (DMAC0A.DMABCR.BIT.DTE==0)
		SCI1.SCR.BIT.TIE = 0;		/* SCI1 憲怣僨乕僞僄儞僾僥傿妱崬傒嬛巭 */	
#else
	if (slen){
		SCI1.TDR = *sp;
		SCI1.SSR.BIT.TDRE = 0;
		sp++;
		slen--;
	}
	else{
		SCI1.SCR.BIT.TIE = 0;	/* SCI1 憲怣僨乕僞僄儞僾僥傿妱崬傒嬛巭 */
		SCI1.SCR.BIT.TEIE = 1;	/* SCI1 憲怣廔椆妱崬傒嫋壜 */
	}
#endif
}

/*--------------------------------------------------------------------*
 * MODULE   : INT_DEND0A_DMAC
 * ABSTRACT : 
 * FUNCTION : vector 72 DMAC0A 揮憲姰椆妱崬傒
 * NOTE     : 
 * RETURN   : void
 * CREATE   : 00.11.01 A.Murakami
 * UPDATE   : 
 *--------------------------------------------------------------------*/
void INT_DEND0A_DMAC(void)
{
	DMAC0A.DMABCR.BIT.DTIE = 0;		/* 揮憲廔椆妱崬傒嬛巭 */
	DMAC0A.DMABCR.BIT.DTE = 0;		/* DMA0A 揮憲掆巭	*/

	SCI1.SCR.BIT.TIE = 0;		/* SCI1 憲怣僨乕僞僄儞僾僥傿妱崬傒嬛巭*/
}

/*--------------------------------------------------------------------*
 * MODULE   : SendStart
 * ABSTRACT : SCI1僠儍儞僱儖憲怣奐巒張棟
 * FUNCTION : 
 * NOTE     : 
 * RETURN   : void
 * CREATE   : 00.11.01 A.Murakami
 * UPDATE   : 
 *--------------------------------------------------------------------*/
static void SendStart(
	unsigned short len	/* 揮憲僶僀僩悢 */
	)
{

#if USEDMA
	DMAC0A.DMABCR.BIT.FAE = 0;		/* 0:僔儑乕僩傾僪儗僗儌乕僪	*/
	DMAC0A.DMABCR.BIT.SAE = 0;		/* 0:僨儏傾儖僪儗僗儌乕僪		*/
	DMAC0A.DMABCR.BIT.DTA = 1;		/* 1:撪晹妱崬傒梫場僋儕傾		*/

	DMAC0A.MAR  = &sbuff[0];				/* 揮憲尦傾僪儗僗	*/
	DMAC0A.IOAR = (unsigned int)&SCI1.TDR;	/* 揮憲愭傾僪儗僗	*/
	DMAC0A.ETCR = len;					/* 揮憲夞悢			*/

	DMAC0A.DMACR.BIT.DTSZ  = 0;		/* 僶僀僩揮憲		*/
	DMAC0A.DMACR.BIT.DTID  = 0;		/* MAR僀儞僋儕儊儞僩	*/
	DMAC0A.DMACR.BIT.RPE   = 0;		/* 儕僺乕僩側偟		*/
	DMAC0A.DMACR.BIT.DTDIR = 0;		/* (MAR)->(IOAR)	*/
	DMAC0A.DMACR.BIT.DTF   = 0x06;	/* 婲摦梫場丗SCI1偺憲怣姰椆妱崬傒 */

//	set_imask_ccr(1);
	set_imask_exr(7);
	DMAC0A.DMABCR.BIT.DTE = 1;		/* 僨乕僞揮憲嫋壜 	*/
	SCI1.SCR.BIT.TE = 1;			/* 憲怣摦嶌嫋壜		*/	
	SCI1.SCR.BIT.TIE = 1;			/* SCI1憲怣僨乕僞僄儞僾僥傿妱崬傒嫋壜 */
	SCI1.SCR.BIT.TEIE = 1;			/* SCI1 憲怣廔椆妱崬傒嫋壜			*/
//	set_imask_ccr(0);
	set_imask_exr(0);
#else
	sp = &sbuff[0];
	slen = len;
	
	SCI1.SCR.BIT.TE = 1;		/* 憲怣摦嶌嫋壜				*/	
	SCI1.SCR.BIT.TIE = 1;		/* SCI1憲怣僨乕僞僄儞僾僥傿妱崬傒嫋壜 */
#endif
}


static struct CHKBLK	ChkBlk;

#pragma	section	$FSEC
const struct {
	unsigned char	*Top;
	unsigned char	*Btm;
	unsigned char	*ram_s;
} FETbl[] = {
//	{ __sectop("P$FLE"), __secend("P$FLE"), __secend("R")},
//	{ __sectop("P$FLP"), __secend("P$FLP"), __secend("R")}
	{ __sectop("P$FLE"), __secend("P$FLE"), __sectop("RFL")},
	{ __sectop("P$FLP"), __secend("P$FLP"), __sectop("RFL")}
	};

#pragma	section
/*--------------------------------------------------------------------*
 * MODULE   : SeqPrgErase
 * ABSTRACT : FLASH ROM僔乕働儞僗僾儘僌儔儉僄儕傾徚嫀張棟
 * FUNCTION : 
 * NOTE     : 
 * RETURN   : void
 * CREATE   : 00.11.01 A.Murakami
 * UPDATE   : 
 *--------------------------------------------------------------------*/
static void SeqPrgErase(void)
{
	if(SysInf.Flag.bSeqRun == OFF){
//		set_imask_ccr(1);
		set_imask_exr(7);
		memcpy(FETbl[0].ram_s, FETbl[0].Top, (FETbl[0].Btm - FETbl[0].Top));
		ans = (*((unsigned char (*)(void))FETbl[0].ram_s))() ? 0x02 : 0x00;
//		set_imask_ccr(0);
		set_imask_exr(0);
		if(ans == 0)
			memset(&ChkBlk, 0, sizeof(ChkBlk));
	}
	else
		ans = 0x01;
}

/*--------------------------------------------------------------------*
 * MODULE   : SeqProgWrite
 * ABSTRACT : FLASH ROM僔乕働儞僗僾儘僌儔儉僄儕傾彂崬傒張棟
 * FUNCTION : 
 * NOTE     : 
 * RETURN   : void
 * CREATE   : 00.11.01 A.Murakami
 * UPDATE   : 
 *--------------------------------------------------------------------*/
static void SeqPrgWrite(void)
{
	ans = 0;
	if (SysInf.Flag.bSeqRun == OFF){
/*
		unsigned long	offset = rbuff[5] * (unsigned long)0x10000 + rbuff[6] * (unsigned long)0x100 + rbuff[7];
		if (offset >= ((unsigned long)&SEQTOP-(unsigned long)&FLASHTOP)){
			ChkBlk.Src = (unsigned short *)&rbuff[10];
			ChkBlk.Len = (unsigned short)(rbuff[8] * 0x100 + rbuff[9]) / 2;
			ans = SeqCheck(&ChkBlk) ? 0x03 : 0x00;
		}
*/
		if (ans == 0){
//			set_imask_ccr(1);
			set_imask_exr(7);
			memcpy(FETbl[1].ram_s, FETbl[1].Top, (FETbl[1].Btm - FETbl[0].Top));
			if ((*((unsigned char (*)(void))FETbl[1].ram_s))()){
				ans = 0x02;
				SysInf.Flag.bSeqEnable = OFF;
			}
			else{
				ans = 0x00;
				SysInf.Flag.bSeqEnable = ON;
			}
//			set_imask_ccr(0);
			set_imask_exr(0);
		}
		else
			SysInf.Flag.bSeqEnable = OFF;
	}
	else
		ans = 0x01;
}

#pragma inline	(TPU1wait)
static void TPU1wait(unsigned short tm)
{
	TPU1.TCNT  = 0x0000;						/* TCNT = 0x0000: */
	TPU1.TGRA  = tm;							/* TRGA = ?? :(delay)/(1/19.6608MHz*4) */
	TPU.TSTR.BIT.CST1 = 1;						/* CST1 = 0  :TCNT1 僇僂儞僩奐巒 */
	while (TPU1.TSR.BIT.TGFA == 0);				/* WAIT 10us */
	TPU1.TSR.BIT.TGFA = 0;
	TPU.TSTR.BIT.CST1 = 0;						/* CST1 = 0  :TCNT1 僇僂儞僩掆巭 */
}

#pragma	section $FLE
/*--------------------------------------------------------------------*
 * MODULE   : FlashErase
 * ABSTRACT : 僼儔僢僔儏儊儌儕 僽儘僢僋9,10,11徚嫀
 * FUNCTION : 
 * NOTE     : 
 * RETURN   : 姰椆僐乕僪 0:僀儗乕僗惓忢丄0埲奜:僀儗乕僗幐攕
 * CREATE   : 02.07.01 A.Murakami
 * UPDATE   : 
 *--------------------------------------------------------------------*/
char FlashErase(void)
{
	unsigned char	rc, retry, blk, a;

	rc = 0;

	TPU.TSTR.BIT.CST1 = 0;	/* CST1    = 0	:TCNT1丂僇僂儞僩掆巭			*/
	TPU.TSYR.BIT.SYNC1 = 0;	/* SYNC1   = 0	;TCNT1偼撈棫摦嶌				*/
	TPU1.TCR.BYTE = 0x01;	/* CCLR2,1,0 = 0:僇僂儞僞僋儕傾 TRGA -> CLR	*/
							/* CKEG1,0 = 0	:僋儘僢僋僄僢僕 棫偪忋傝		*/
							/* TPSC2~0 = 1	:僋儘僢僋 -> 撪晹冇/4 = 5MHz	*/
	TPU1.TMDR.BYTE = 0;		/* MD3~0   = 0	:摦嶌儌乕僪 -> 捠忢			*/
	TPU1.TIOR.BYTE = 0;		/* IOB3~0  = 0	:僞僀儅I/O-CNT-REG. -> 弌椡嬛巭	*/
							/* IOA3~0  = 0	:僞僀儅I/O-CNT-REG. -> 弌椡嬛巭	*/
	TPU1.TIER.BYTE = 0;		/* TTGE    = 0		:TGRA A/D曄姺 -> 嬛巭		*/
							/* TCIEU   = 0	;TCFU偵傛傞妱崬傒梫媮->嬛巭	*/
							/* TCIEV   = 0	:TCFV偵傛傞妱崬傒梫媮->嬛巭	*/
							/* TGIEB   = 0	:TGFB偵傛傞妱崬傒梫媮->嬛巭	*/
							/* TGIEA   = 0	:TGFA偵傛傞妱崬傒梫媮->嬛巭	*/
	TPU1.TSR.BYTE = 0x80;	/* TCFD    = 1	:僇僂儞僩曽岦 -> 悲踢冻菽	*/
							/* TCFU    = 0	:no access					*/
							/* TCFV    = 0	:僋儕傾						*/
							/* TGFB    = 0	:僋儕傾						*/
							/* TGFA    = 0	:僋儕傾						*/
	
	WDT.WT.RSTCSR = 0xA500;	/* WOVF    = 0	:	僆乕僶僼儘乕僼儔僌丂肛

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -