📄 stecx900.c
字号:
/**********************************************************************/
/* System : 俽俹梡僐儞僩儘乕儔 俽俿俤俠亅倃倃倃 */
/* File Name : SETCX900.C */
/* Description : */
/* */
/* ------------------------------------------------------------------ */
/* Copyright(C) Eikosha Co.Ltd. 2000/10/15 */
/* ------------------------------------------------------------------ */
/* History : 2000/10/15 Created */
/**********************************************************************/
#include <machine.h>
#include "iodefine.h"
#include "vect.h"
#include "stecX.h"
#include "StecSeq.h"
#include "E2Prom.h"
#define SCANMAX 8 /* 擖椡庢崬夞悢 */
#define RECO_ON 0xFF /* 俉夞堦抳 ON */
#define RECO_OFF 0x00 /* 俉夞堦抳 OFF */
#define READYSCANMAX 100 /* 揹尮搳擖捈屻IO庢崬傒弨旛夞悢 */
#define _ACV P6.PORT.BIT.B6 /* ACV Port */
#pragma abs16 (TimerBZ, PwrFail,Inputbuff, Inputbuff2, DipSWbuff, Input, Input2, DipSW)
static unsigned char SelNo;
static unsigned char Clk1s, ClkP5s, ClkP1s, SeqTimer;
volatile static unsigned char IOScanCount; /* 揹尮搳擖屻I/O僗僉儍儞夞悢 */
unsigned char PwrFail;
unsigned char Inputbuff[8]; /* 昗弨擖椡僶僢僼傽乮俀係揰乯 */
unsigned char DipSWbuff[16]; /* 僨傿僢僾僗僀僢僠擖椡僶僢僼傽乮侾俇揰乯 */
static unsigned short TimerBZ;
static unsigned short PwrDwn;
unsigned short Timer[TIMERMAX];
unsigned short OnOffTimer; /* LED ON/OFF帪娫僇僂儞僩 */
unsigned short OffTimer; /* LED OFF帪娫僇僂儞僩 */
unsigned short LEDCount; /* LED揰柵夞悢 */
unsigned short PitchDelay; /* 僺僢僠幉僼儕乕仺楢懕僼儕乕傊偺僨傿儗僀帪娫僇僂儞僩 */
extern unsigned short MainSysAlmC; /* 儊僀儞僔僗僥儉傾儔乕儉僐乕僪 */
union DEFIO {
unsigned char BYTE;
struct {
unsigned char B7:1;
unsigned char B6:1;
unsigned char B5:1;
unsigned char B4:1;
unsigned char B3:1;
unsigned char B2:1;
unsigned char B1:1;
unsigned char B0:1;
} BIT;
};
union DEFIO Input[3]; /* 昗弨擖椡僨乕僞乮俀係揰暘乯 */
union DEFIO Input2[1]; /* 憹愝擖椡僨乕僞乮係揰暘乯 */
union DEFIO DipSW[2]; /* 僨傿僢僾僗僀僢僠擖椡僨乕僞乮侾俇揰暘乯 */
enum _temp1{rsIDLE, rsWAIT, rsRECV, rsSUM, rsREND, rsSEND};
extern volatile enum _temp1 Ser2Stat;
enum _temp2{rsIOIDLE, rsIOWAIT, rsIORECV, rsIOSUM, rsIOREND, rsIOSEND};
extern volatile enum _temp2 Ser2IOStat;
enum _temp3{rsNO, rsIO, rsSV};
extern volatile enum _temp3 Ser2SW;
void OutReset(void);
extern void SetCurAlarm(char no, unsigned short code);
unsigned char IOCom(unsigned char o_id);
/*--------------------------------------------------------------------*
* MODULE : INT_TGI4A_TPU4
* ABSTRACT : TGR4A僐儞儁傾儅僢僠妱崬傒
* FUNCTION : 1ms枅偺妱崬傒
* NOTE : vector 54 TGI4A TPU4
* RETURN :
* CREATE : 00.10.15 A.Murakami
* UPDATE :
*--------------------------------------------------------------------*/
void INT_TGI4A_TPU4(void)
{
volatile unsigned char i;
volatile unsigned char *p = &Inputbuff[0];
volatile unsigned char *pDsw = &DipSWbuff[0];
TPU4.TSR.BIT.TGFA = OFF;
if(IOScanCount < READYSCANMAX)
IOScanCount++;
else
SysInf.Flag.bIOReadyFlag = ON;
/* 擖椡價僢僩庢傝崬傒 */
*p <<= 1;
if (PD.PORT.BIT.B0 == LOW) * p |= 1;
p++; *p <<= 1;
if (PD.PORT.BIT.B1 == LOW) * p |= 1;
p++; *p <<= 1;
if (PD.PORT.BIT.B2 == LOW) * p |= 1;
p++; *p <<= 1;
if (PD.PORT.BIT.B3 == LOW) * p |= 1;
p++; *p <<= 1;
if (PD.PORT.BIT.B4 == LOW) * p |= 1;
p++; *p <<= 1;
if (PD.PORT.BIT.B5 == LOW) * p |= 1;
p++; *p <<= 1;
if (PD.PORT.BIT.B6 == LOW) * p |= 1;
p++; *p <<= 1;
if (PD.PORT.BIT.B7 == LOW) * p |= 1;
p++;
// DIPSW 1 Input
*pDsw <<= 1;
if (P4.PORT.BIT.B0 == LOW) * pDsw |= 1; // DIPSW 1-1 Input
pDsw++; *pDsw <<= 1;
if (P4.PORT.BIT.B1 == LOW) * pDsw |= 1; // DIPSW 1-2 Input
pDsw++; *pDsw <<= 1;
if (P4.PORT.BIT.B2 == LOW) * pDsw |= 1; // DIPSW 1-3 Input
pDsw++; *pDsw <<= 1;
if (P4.PORT.BIT.B3 == LOW) * pDsw |= 1; // DIPSW 1-4 Input
pDsw++; *pDsw <<= 1;
if (P4.PORT.BIT.B4 == LOW) * pDsw |= 1; // DIPSW 1-5 Input
pDsw++; *pDsw <<= 1;
if (P4.PORT.BIT.B5 == LOW) * pDsw |= 1; // DIPSW 1-6 Input
pDsw++; *pDsw <<= 1;
if (P4.PORT.BIT.B6 == LOW) * pDsw |= 1; // DIPSW 1-7 Input
pDsw++; *pDsw <<= 1;
if (P4.PORT.BIT.B7 == LOW) * pDsw |= 1; // DIPSW 1-8 Input
pDsw++;
// DIPSW 2 Input
*pDsw <<= 1;
if (P6.PORT.BIT.B0 == LOW) * pDsw |= 1; // DIPSW 2-1 Input
pDsw++; *pDsw <<= 1;
if (P6.PORT.BIT.B1 == LOW) * pDsw |= 1; // DIPSW 2-2 Input
pDsw++; *pDsw <<= 1;
if (P6.PORT.BIT.B2 == LOW) * pDsw |= 1; // DIPSW 2-3 Input
pDsw++; *pDsw <<= 1;
if (P6.PORT.BIT.B3 == LOW) * pDsw |= 1;
pDsw++; *pDsw <<= 1;
if (P6.PORT.BIT.B4 == LOW) * pDsw |= 1;
pDsw++; *pDsw <<= 1;
if (P6.PORT.BIT.B5 == LOW) * pDsw |= 1;
pDsw++; *pDsw <<= 1;
if (P6.PORT.BIT.B6 == LOW) * pDsw |= 1; // ACV Input
pDsw++; *pDsw <<= 1;
if (P6.PORT.BIT.B7 == LOW) * pDsw |= 1; // Power Down Input
pDsw++;
{
unsigned char n;
unsigned short *p = &Timer[0];
for (n = 0; n<(sizeof(Timer) / sizeof(Timer[0])); n++, p++)
if (*p) (*p)--;
}
if (ClkP1s) ClkP1s--;
else{
SysInf.Flag.bp1s = ~SysInf.Flag.bp1s;
ClkP1s = 100/1;
if (ClkP5s) ClkP5s--;
else{
SysInf.Flag.bp5s = ~SysInf.Flag.bp5s;
ClkP5s = 4;
if (Clk1s) Clk1s--;
else {
SysInf.Flag.b1s = ~SysInf.Flag.b1s;
Clk1s = 1;
}
}
}
if (--SeqTimer == 0){
SeqTimerCount();
SeqTimer = 10 / 1;
}
if (SysInf.Flag.bPitchFree == ON){
PitchDelay++;
}
/* 儌僯僞LED1惂屼 */
if(SysInf.Flag.bDownloadMode == OFF){
if(MainSysAlmC != 0){
if(OnOffTimer)
OnOffTimer--;
else{
SysInf.Flag.bp25s = ~SysInf.Flag.bp25s;
OnOffTimer = 250 / 1;
}
if(OffTimer == 0){
if(P1.DR.BIT.B5 == LOW && SysInf.Flag.bp25s == OFF)
LEDCount++;
P1.DR.BIT.B5 = ~SysInf.Flag.bp25s;
}
if(LEDCount >= MainSysAlmC){
P1.DR.BIT.B5 = HIGH;
OffTimer++;
if(OffTimer >= (1000 / 1)){
SysInf.Flag.bp25s = ON;
P1.DR.BIT.B5 = ~SysInf.Flag.bp25s;
OnOffTimer = 250 / 1;
OffTimer = 0;
LEDCount = 0;
}
}
}
else{
P1.DR.BIT.B5 = ~SysInf.Flag.bp5s;
}
}
else{
P1.DR.BIT.B5 = ~SysInf.Flag.b1s;
}
if(Timer[TMCOMMINT] == 0){
if(Ser2SW == rsNO && Ser2IOStat == rsIOSEND){
Ser2SW = rsIO;
Timer[TMIOCOMM] = 2 / 1; /* 2ms */
P5.DR.BIT.B3 = 1; /* 憲怣 Enable */
P5.DR.BIT.B2 = 1; /* 庴怣 Disable */
SCI2.SCR.BIT.RE = 0; /* 庴怣嬛巭 */
SCI2.SCR.BIT.TE = 1; /* 憲怣摦嶌嫋壜 */
SCI2.SCR.BIT.TIE = 1; /* SCI2憲怣僨乕僞僄儞僾僥傿妱崬傒嫋壜 */
}
else if(Ser2SW == rsNO && Ser2Stat == rsSEND){
Ser2SW = rsSV;
Timer[TMSVCOMM] = 2 / 1; /* 2ms */
P5.DR.BIT.B3 = 1; /* 憲怣 Enable */
P5.DR.BIT.B2 = 1; /* 庴怣 Disable */
SCI2.SCR.BIT.RE = 0; /* 庴怣嬛巭 */
SCI2.SCR.BIT.TE = 1; /* 憲怣摦嶌嫋壜 */
SCI2.SCR.BIT.TIE = 1; /* SCI2憲怣僨乕僞僄儞僾僥傿妱崬傒嫋壜 */
}
Timer[TMCOMMINT] = 4; // 4ms
}
if(Timer[TMIOCOMM] == 0 && Ser2SW == rsIO && Ser2IOStat != rsIOIDLE && Ser2IOStat != rsIOREND){
Ser2IOStat = rsIOIDLE;
if(Ser2SW == rsIO)
Ser2SW = rsNO;
if(SysInf.Flag.bSeqInit == ON){ /* 僔乕働儞僒弶婜壔姰椆 */
SysInf.Flag.bIOComm = OFF;
Alarm(SYSALM10); // Communication Error Main <-> I/O
}
}
if(Timer[TMSVCOMM] == 0 && Ser2SW == rsSV && Ser2Stat != rsIDLE && Ser2Stat != rsREND){
Ser2Stat = rsIDLE;
if(Ser2SW == rsSV)
Ser2SW = rsNO;
SVQueueCode(0x03); /* 億乕儕儞僌僨乕僞撉弌偟 */
SysInf.Flag.bSvComm = OFF;
Alarm(SYSALM6); // 03.03 yoshi communication error 2 main&servoamp
}
/* 揹尮堎忢専抦 */
if(((SysInf.Flag.bPwrFail == OFF) && (_ACV == LOW)) || (SysInf.Flag.bPwrFailDis == ON))
PwrFail = 20/1;
if(SysInf.Flag.bSeqRun == ON) { // 僀僯僔儍儔僀僘廔椆傑偱張棟偼偟側偄
if((P6.PORT.BIT.B7 == HIGH) && (SysInf.Flag.bPowerDown == OFF)){ // Power Down専弌
if(SysInf.Flag.bPwrFail == OFF){
while(E2PDSysWrite()); // 彂偒崬傒偨偄僷儔儊乕僞偺傒偺彂崬傒乮俆俇僶僀僩乮侾瓦凹迺獊j乯
while(E2WriteCheck());
OutReset(); // 慡弌椡嫮惂OFF
SysInf.Flag.bPowerDown = ON; // Power Down専弌FLAG ON
Alarm(SYSALM9); // 2004.09.28 Added by Sun
}
}
if(SysInf.Flag.bPwrFailEnd == OFF){ // 弖掆張棟傑偩
if(PwrFail){
PwrFail--;
PwrDwn = (2000/1); // 僽僓乕仌儊僢僙乕僕昞帵傑偱偺僨傿儗僀帪娫愝掕
}
else{
OutReset();
SysInf.Flag.bPwrFail = ON; // AC揹尮堎忢専弌
}
if(SysInf.Flag.bPwrFail == ON){
if(PwrDwn > 0)
PwrDwn--;
else if(SysInf.Flag.bPowerDown == OFF){
SysInf.Flag.bPwrFailEnd = ON; // 弖掆張棟廔椆(娫偵崌傢側偐偭偨偙偲傪峫椂偟偰丄偙偙偱僙僢僩)
Alarm(SYSALM7);
SetCurAlarm(0, SYSALM7); /* 弖掆傾儔乕儉僸僗僩儕 */
while(E2PDSysWrite()); /* 彂偒崬傒偨偄僷儔儊乕僞偺傒偺彂崬傒乮俆俇僶僀僩乮侾瓦凹迺獊j乯 */
while(E2WriteCheck());
// SysInf.Flag.bPwrFail = OFF;
}
}
}
}
}
/*--------------------------------------------------------------------*
* MODULE : INT_IRQ2
* ABSTRACT : AC埵憡専弌妱傝崬傒
* FUNCTION : IRQ2妱傝崬傒
* NOTE : vector 18 External trap IRQ2
* RETURN :
* CREATE : 01.01.11 A.Murakami
* UPDATE :
*--------------------------------------------------------------------*/
//void INT_IRQ2(void)
//{
// if(SysInf.Flag.bPwrFail == OFF)
// PwrFail = 20/2;
//}
/*--------------------------------------------------------------------*
* MODULE : OutReset
* ABSTRACT : 奜晹弌椡偺儕僙僢僩
* FUNCTION :
* NOTE :
* RETURN :
* CREATE :
* UPDATE :
*--------------------------------------------------------------------*/
void OutReset(void)
{
PE.DR.BYTE = 0x00; // 嫮惂OFF
PC.DR.BYTE = 0x00; // 嫮惂OFF
PB.DR.BIT.B0 = HIGH; /* OE OFF */
}
/*--------------------------------------------------------------------*
* MODULE : IORefresh
* ABSTRACT : 僔乕働儞僗僄儕傾偲幚IO偺儕僼儗僢僔儏
* FUNCTION :
* NOTE :
* RETURN : void
* CREATE : 00.10.29 A.Murakami
* UPDATE :
*--------------------------------------------------------------------*/
void IORefresh(void)
{
unsigned char n;
unsigned char *p;
unsigned char i, j;
unsigned char mask;
/* 擖椡峏怴*/
IOCom(1);
// Input Data
mask = 0x01; // Mask Data Initialize
for(i = 0; i < 8; i++){
if ((Inputbuff[i] & RECO_ON) == RECO_ON)
Input[0].BYTE |= mask;
else if ((Inputbuff[i] | RECO_OFF) == RECO_OFF)
Input[0].BYTE &= ~mask;
if ((DipSWbuff[i] & RECO_ON) == RECO_ON)
DipSW[0].BYTE |= mask;
else if ((DipSWbuff[i] | RECO_OFF) == RECO_OFF)
DipSW[0].BYTE &= ~mask;
if ((DipSWbuff[i + 8] & RECO_ON) == RECO_ON)
DipSW[1].BYTE |= mask;
else if ((DipSWbuff[i + 8] | RECO_OFF) == RECO_OFF)
DipSW[1].BYTE &= ~mask;
mask <<= 1;
}
SeqData.B.SMI[56 / 16].c.Lo = DipSW[0].BYTE; /* DIPSW 1 */
SeqData.B.SMI[56 / 16].c.Hi = (SeqData.B.SMI[56 / 16].c.Hi & 0xF0) | (DipSW[1].BYTE & 0x0F); /* DIPSW 2 + Pendant DIPSW */
SeqData.B.IN[8/16].c.Lo = Input[0].BYTE; /* OE1 Standard Input */
PB.DR.BIT.B0 = LOW; /* OE ON */
PE.DR.BIT.B0 = SeqData.B.OUT[8/16].b.b0;
PE.DR.BIT.B1 = SeqData.B.OUT[8/16].b.b1;
PE.DR.BIT.B2 = SeqData.B.OUT[8/16].b.b2;
PE.DR.BIT.B3 = SeqData.B.OUT[8/16].b.b3;
PE.DR.BIT.B4 = SeqData.B.OUT[8/16].b.b4;
PE.DR.BIT.B5 = SeqData.B.OUT[8/16].b.b5;
PE.DR.BIT.B6 = SeqData.B.OUT[8/16].b.b6;
PE.DR.BIT.B7 = SeqData.B.OUT[8/16].b.b7;
PC.DR.BIT.B4 = SeqData.B.OUT[8/16].b.b8;
PC.DR.BIT.B5 = SeqData.B.OUT[8/16].b.b9;
PC.DR.BIT.B6 = SeqData.B.OUT[8/16].b.b10;
PC.DR.BIT.B7 = SeqData.B.IN[1].b.b0;
/* 摿庩儕儗乕峏怴 */
_SMONE = OFF; /* 婲摦屻1僗僉儍儞偺傒ON */
_SMON = ON; /* 忢帪ON */
_SMOFF = OFF; /* 忢帪OFF */
_SM1S = SysInf.Flag.b1s; /* 1昩僋儘僢僋 */
_SMP5S = SysInf.Flag.bp5s; /* 0.5昩僋儘僢僋 */
_SMP1S = SysInf.Flag.bp1s; /* 0.1昩僋儘僢僋 */
_SMSVALMIN = DipSW[1].BIT.B4;
_SMPALM = SysInf.Flag.bMainAlarm || SysInf.Flag.bPndAlarm;
_SMMAL = (_SDZALM != 0 ? ON : OFF);
_SMDELE = (_SDJALM != 0 ? ON : OFF);
_SMSALMF = (_SDSALM != 0 ? ON : OFF);
_SMERF = (_SDER != 0 ? ON : OFF);
_SMOPEERRF = (_SDOPEERR != 0 ? ON : OFF);
_SMCOMEF = (_SDCOME != 0 ? ON : OFF);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -