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

📄 csfu107.h

📁 一个串口终端解释程序。用于单片机调试串口的超级终端应用。
💻 H
📖 第 1 页 / 共 2 页
字号:
VARIABLE_DEFINE unsigned int RotateSpeed;   //发电机转速,rpm

VARIABLE_DEFINE int OutputMetereData;           //输出到数显表的数据
VARIABLE_DEFINE int RealDisplayData;            //数显表实际显示的数据
VARIABLE_DEFINE unsigned int CurrMeterOutputDataType;   //当前数显表输出的数据类型:0——功角,1-内电势绝对角,2-发电机转速
/**********end of 内电势角度测量相关变量及常量定义**********/


/**********与调节按钮相关的变量及常量定义**********/
VARIABLE_DEFINE unsigned int AddAngleFilterCnt;     //ADD按钮的去抖计数器
VARIABLE_DEFINE unsigned int SubAngleFilterCnt;     //SUB按钮的去抖计数器
VARIABLE_DEFINE unsigned int InitAngleLockCnt;      //E补偿值清理后的延时计数器,补偿值清零后3秒内按钮调节无效
VARIABLE_DEFINE unsigned int AngleAdjustFinishCnt;  //按钮调节完毕后的延时计数器,若连续5秒调节按钮无动作则将补偿值写入flash
VARIABLE_DEFINE unsigned int AngleAdjustFlag;       //调节按钮更改E补偿值标志
VARIABLE_DEFINE unsigned int FastAngleAdjustFlag;   //要求快速调节E补偿值标志
#define ADD_ANGLE_BUTTON (*GPIO_B_DR & 0x0001)
#define SUB_ANGLE_BUTTON (*GPIO_D_DR & 0x0001)
/**********end of 与调节按钮相关的变量及常量定义**********/


/**********与D/A操作相关变量及常量定义**********/
VARIABLE_DEFINE unsigned int DaValue;           //内存中存储的DA值
VARIABLE_DEFINE unsigned int OutputDaValue;     //实际输出的DA值
VARIABLE_DEFINE unsigned int InitDaFlag;        //初始化DA输出的标志
VARIABLE_DEFINE unsigned int DaOutputFlag;      //正在进行DA输出的标志
VARIABLE_DEFINE unsigned int DaOutputStep;      //当前的DA输出步骤
VARIABLE_DEFINE unsigned int DaOutputJudgeFlag; //进行DA输出判断的标志,整周期后10ms时刻进行DA输出判断,避开上送串口报文时间

#define DA_FAULT_DETECT (*TMRC0_SCR & 0x0100)

#define SET_CLK_LOW         if(!DaMode) {asm(BFCLR #0x0010, X:$13f2);} else {asm(MOVE #0x0000, X:$1127);}
#define SET_CLK_HIGH        if(!DaMode) {asm(BFSET #0x0010, X:$13f2);} else {asm(MOVE #0x0005, X:$1127);}
#define SET_DATAIN_LOW      if(!DaMode) {asm(BFCLR #0x0020, X:$13f2);} else {asm(MOVE #0x0000, X:$112f);}
#define SET_DATAIN_HIGH     if(!DaMode) {asm(BFSET #0x0020, X:$13f2);} else {asm(MOVE #0x0005, X:$112f);}
#define SET_LATCH_LOW       if(!DaMode) {asm(BFCLR #0x0040, X:$13f2);} else {asm(MOVE #0x0000, X:$1137);}
#define SET_LATCH_HIGH      if(!DaMode) {asm(BFSET #0x0040, X:$13f2);} else {asm(MOVE #0x0005, X:$1137);}
#define SET_CLEAR_LOW       if(!DaMode) {asm(BFCLR #0x0080, X:$13f2);} else {asm(MOVE #0x0000, X:$113f);}
#define SET_CLEAR_HIGH      if(!DaMode) {asm(BFSET #0x0080, X:$13f2);} else {asm(MOVE #0x0005, X:$113f);}
/**********end of 与D/A操作相关变量及常量定义**********/


/**********与串口发送/接收相关的变量及常量定义**********/
#define REC_RCM3200_BUF_SIZE (9+1)      //比实际报文长度加一,防止接收报文时出现错位死循环
VARIABLE_DEFINE unsigned int RecRcm3200Buf[REC_RCM3200_BUF_SIZE];   //RCM3200接收缓冲区
VARIABLE_DEFINE unsigned int RecRcm3200DataSize;    //此次接收报文的数据长度
VARIABLE_DEFINE unsigned int *RecRcm3200BufPtr;     //接收数据缓冲区写指针
VARIABLE_DEFINE unsigned int RecSci0Flag;           //标识当前接收状态,1-报文接收中,0-还未找到报文头
VARIABLE_DEFINE unsigned int Sci0Data;              //串口接收临时变量
VARIABLE_DEFINE unsigned int LastSci0Data;          //SCI0上一次接收到的数据
VARIABLE_DEFINE unsigned int Sci0RecErrCounter;     //Sci0接收错误计数器
VARIABLE_DEFINE unsigned int Sci0ResponsionFlag;    //向RCM3200返回应答报文标志

#define SEND_RCM3200_QUEUE_DEPTH 6      //RCM3200发送数据队列的深度
#define SEND_RCM3200_QUEUE_LENGTH 23    //RCM3200发送数据队列中每帧报文的长度
typedef struct
{
    unsigned int Data[SEND_RCM3200_QUEUE_LENGTH];
    unsigned int DataLength;        //Data数组中有效数据的实际长度
}Sci0SendBufQueueStruct;
VARIABLE_DEFINE Sci0SendBufQueueStruct SendRcm3200Queue[SEND_RCM3200_QUEUE_DEPTH];
VARIABLE_DEFINE Sci0SendBufQueueStruct *WriteSendRcm3200QueuePtr;       //当前RCM3200发送数据队列的写指针
VARIABLE_DEFINE Sci0SendBufQueueStruct *ReadSendRcm3200QueuePtr;        //当前RCM3200发送数据队列的读指针

VARIABLE_DEFINE unsigned int Sci0SendBuf[SEND_RCM3200_QUEUE_LENGTH];    //Sci0缓冲区数据指针
VARIABLE_DEFINE unsigned int *Sci0SendBufCurrPtr;   //Sci0缓冲区当前发送数据指针
VARIABLE_DEFINE unsigned int *Sci0SendBufEndPtr;        //Sci0缓冲区有效数据的尾指针
VARIABLE_DEFINE unsigned int Sci0SendFlag;          //Sci0正在发送串口报文标志

#define METER_BUF_SIZE 11
VARIABLE_DEFINE unsigned int SendMeterBuf[METER_BUF_SIZE];
VARIABLE_DEFINE unsigned int *Sci1SendBufPtr;       //Sci1缓冲区数据指针
VARIABLE_DEFINE unsigned int Sci1SendFlag;          //Sci1正在发送串口报文标志

VARIABLE_DEFINE unsigned int ClockRecFinishCounter; //GPS时钟报文接收完毕计数值
VARIABLE_DEFINE unsigned int Sci1SwitchCounter;     //Sci1发送/接收状态切换计数值
VARIABLE_DEFINE unsigned int InitMeterDisplayFlag;  //上电后初始化数显表示数标志
/**********end of 与串口发送数据相关的变量及常量定义**********/


/**********装置状态变量及常量定义**********/
VARIABLE_DEFINE unsigned int MaskBit[16];

typedef union
{
    struct
    {
        unsigned int b0:1;
        unsigned int b1:1;
        unsigned int b2:1;
        unsigned int b3:1;
        unsigned int b4:1;
        unsigned int b5:1;
        unsigned int b6:1;
        unsigned int b7:1;
        unsigned int b8:1;
        unsigned int b9:1;
        unsigned int b10:1;
        unsigned int b11:1;
        unsigned int b12:1;
        unsigned int b13:1;
        unsigned int b14:1;
        unsigned int b15:1;
    }SingleBit;
    struct
    {
        unsigned int b0:1;
        unsigned int b1:1;
        unsigned int b2:1;
        unsigned int b3:1;
        unsigned int b45:2;
        unsigned int b67:2;
        unsigned int b89:2;
        unsigned int b1013:4;
        unsigned int b1415:2;
    }EspecialBit;
    unsigned int Word;
}BitUInt;

VARIABLE_DEFINE BitUInt DetailErrInfo;                      //DSP上报的详细错误信息,对应串口报文的第1、2字节
#define EinErrFlag DetailErrInfo.SingleBit.b0               //bit0:键相脉冲信号异常,上送的内电势相量绝对角、发电机功角和发电机转速数据均无效
#define UinErrFlag DetailErrInfo.SingleBit.b1               //bit1:输入电压信号异常,上送发电机功角数据无效
#define DaErrFlag DetailErrInfo.SingleBit.b2                //bit2:DA回路硬件开路或发生其它故障
#define Sci0ErrFlag DetailErrInfo.SingleBit.b3              //bit3:与RCM3200的串口通信异常(巡检失败)
#define Sci1RecErrFlag DetailErrInfo.SingleBit.b4           //bit4:与GPS OEM板的串口通讯异常(连续20秒未收到有效报文或校验失败)
#define EAngleNoEffectFlag DetailErrInfo.SingleBit.b8       //bit8:此次发送的内电势相量绝对角无效,复制上一次的数据仅供参考(未得到新的有效的E,此时功角数据也无效)
#define PowerAngleNoEffectFlag DetailErrInfo.SingleBit.b9   //bit9:此次发送的功角值无效,复制上一次的数据仅供参考(未得到新的有效的U)
#define RotateSpeedNoEffectFlag DetailErrInfo.SingleBit.b10 //bit10:此次发送的发电机转速无效,复制上一次的数据仅供参考(未得到新的有效的E)
#define UploadDataType DetailErrInfo.EspecialBit.b1415      //bit15~14:报文17~18字节上送的数据类型,00——内电势补偿角,01——机端电压补偿角,10——内电势测量装置当前工作模式

VARIABLE_DEFINE BitUInt GpsStat;                //GPS对时的状态,对应串口报文的第13、14字节
#define LeapSecFlag GpsStat.EspecialBit.b0      //1-闰秒发生的标志
#define LeapSecDir GpsStat.EspecialBit.b1       //闰秒特性:0-add,1-delete
#define SocErr GpsStat.EspecialBit.b3           //1-GPS串口对时丢失超过10秒 
#define GpsLockStat GpsStat.EspecialBit.b45     //GPS卫星失锁时间:00——失锁时间<10秒,01——10秒<失锁时间<100秒,10——100秒<失锁时间<1000秒,11——失锁时间>1000秒
#define PpsSyncStat GpsStat.EspecialBit.b67     //PPS脉冲失锁时间:00——失锁时间<10秒,01——10秒<失锁时间<100秒,10——100秒<失锁时间<1000秒,11——失锁时间>1000秒
#define GpsLockErr GpsStat.EspecialBit.b89      //GPS锁星状况:00——not fix,01——2D fix,10——3D fix,

VARIABLE_DEFINE unsigned int PpsLedOnFlag;		//用于控制前面板PPS指示灯	
/**********end of 装置状态变量及常量定义**********/


/**********指示灯操作定义**********/
#define DEBUG1_LED_TURN_OFF     asm(BFSET #0x0010, X:$13c1)
#define DEBUG1_LED_TURN_ON      asm(BFCLR #0x0010, X:$13c1)
#define DEBUG2_LED_TURN_OFF     asm(BFSET #0x0020, X:$13c1)
#define DEBUG2_LED_TURN_ON      asm(BFCLR #0x0020, X:$13c1)
#define PULSE_LED_TURN_OFF      asm(BFSET #0x0002, X:$13e1)
#define PULSE_LED_TURN_ON       asm(BFCLR #0x0002, X:$13e1)
#define UIN_LED_TURN_OFF        asm(BFSET #0x0004, X:$13e1)
#define UIN_LED_TURN_ON         asm(BFCLR #0x0004, X:$13e1)
#define CLOCK_LED_TURN_OFF      asm(BFSET #0x0008, X:$13e1)
#define CLOCK_LED_TURN_ON       asm(BFCLR #0x0008, X:$13e1)
#define PPS_LED_TURN_OFF        asm(BFSET #0x0010, X:$13e1)
#define PPS_LED_TURN_ON         asm(BFCLR #0x0010, X:$13e1)
#define ALERT1_LED_TURN_OFF     asm(BFSET #0x0020, X:$13e1)
#define ALERT1_LED_TURN_ON      asm(BFCLR #0x0020, X:$13e1)
/**********end of 指示灯操作定义**********/


/*****测试用变量定义*****/
VARIABLE_DEFINE unsigned long InputPpsCounterRecBuf[32];    //输入PPS上升沿计数器值存储缓冲区,用于测试
VARIABLE_DEFINE unsigned long *InputPpsCounterRecBufPtr;
VARIABLE_DEFINE unsigned long OutputPpsCounterRecBuf[32];   //输出PPS上升沿计数器值存储缓冲区,用于测试
VARIABLE_DEFINE unsigned long *OutputPpsCounterRecBufPtr;
VARIABLE_DEFINE unsigned long Td3OverflowCounterRecBuf[32];   //TD3溢出时刻计数器值存储缓冲区,用于测试
VARIABLE_DEFINE unsigned long *Td3OverflowCounterRecBufPtr;

#define TEST_BUS_SIZE 60
VARIABLE_DEFINE int EAbsoluteAngleBuf[TEST_BUS_SIZE];
VARIABLE_DEFINE int *EAbsoluteAngleBufPtr;

VARIABLE_DEFINE unsigned int RotateSpeedBuf[TEST_BUS_SIZE];
VARIABLE_DEFINE unsigned int *RotateSpeedBufPtr;

VARIABLE_DEFINE int PowerAngleBuf[TEST_BUS_SIZE];
VARIABLE_DEFINE int *PowerAngleBufPtr;

VARIABLE_DEFINE unsigned int FirstTimes;
VARIABLE_DEFINE int LastPowerAngle;
VARIABLE_DEFINE int AngleDiff;

VARIABLE_DEFINE unsigned int Sci0RecBuf[50];
VARIABLE_DEFINE unsigned int *Sci0RecBufPtr;

VARIABLE_DEFINE unsigned int Sci1RecBuf[100];
VARIABLE_DEFINE unsigned int *Sci1RecBufPtr;

VARIABLE_DEFINE unsigned int IntFlag;

VARIABLE_DEFINE unsigned int iCounter;

VARIABLE_DEFINE unsigned int EErrorTimes;

VARIABLE_DEFINE unsigned int GpsReportMaxReachTime;
VARIABLE_DEFINE unsigned int GpsReportMinReachTime;

typedef struct
{
    unsigned int ReachTime[20];      //GPS时钟报文到来时间
    unsigned int FixStat[20];        //锁星状态
}GpsReachTimeStruct;
VARIABLE_DEFINE GpsReachTimeStruct GpsReachTime;
VARIABLE_DEFINE unsigned int GpsReachTimeWritePtr;
VARIABLE_DEFINE unsigned int GpsReachTimeErrorCnt;
/*****end of 测试用变量定义*****/

#endif /* _CSFU107_H */

⌨️ 快捷键说明

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