📄 stecx930.c
字号:
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 + -