📄 hardware.c
字号:
//*******************************************************************************
//Copyright (c) 2007,派利斯电子(北京)有限公司 硬件部
//文件名称: Hardware.c
//摘 要: 本文件主要包含PT2060程序中与硬件相关的初始化、操作和I/O操作部分
//当前版本: D-1
//作 者: 佟文杰
//完成日期: 4/13/2007
//修 改 人:
//修改原因:
//修改日期:
//*******************************************************************************
#include "Hardware.h"
#include <C8051F020.H>
#include "sja1000.h"
#include "intrins.h"
sbit LED_OK = P3^5;
sbit LED_Alarm = P3^4;
sfr16 TMR3RL = 0x92; // Timer3 reload value
sfr16 TMR3 = 0x94; // Timer3 counter
sfr16 ADC0 = 0xbe; // ADC0 data
#define TESTLEDON P4 = P4&0xf7
#define TESTLEDOFF P4 = P4|0x08
#define FLASHFIRSTADDRESS 0xa000
#define MAXGROUP 16
#define SAMPLECOMPLETETRUE 1
#define SAMPLECOMPLETEFALSE 0
sfr16 RCAP4 = 0xe4;
#define SYSCLK 22118400
xdata unsigned char uchConfigStatusBak[3];
xdata unsigned char uchBypassStatusBak[3];
xdata unsigned char uchTripleStatusBak[3];
xdata unsigned char uchConfigStatus = 1;
xdata unsigned char uchBypassStatus = 1;
xdata unsigned char uchTripleStatus = 1;
data unsigned char uchSampleType;
xdata unsigned int uiHeartbeatValue = 0;
xdata unsigned char uchSampleCompleteStatus;
xdata unsigned int uiGroupLength;
//-----------------------------------------------------------
// AD采样的数组定义
//------------------------------------------------------
unsigned int xdata SampBuffer0[2048];
xdata unsigned int SampBuffer1[2048];
xdata unsigned int SampBuffer2[2048];
xdata unsigned int SampBuffer3[2048];
//xdata unsigned int SampBuffer4[2048];
//xdata unsigned int SampBuffer5[2048];
unsigned int data SamplePTR0;
unsigned int data SamplePTR1;
unsigned int data SamplePTR2;
unsigned int data SamplePTR3;
unsigned int data SamplePTR4;
unsigned int data SamplePTR5;
unsigned char idata uchReceiData[13]; //接收数据
unsigned char xdata uchCANReSendFlag=0x00;
unsigned char xdata uchHWCPUAdress;
//----------------------------------------------
unsigned char xdata s_uchTempData1;
unsigned char xdata s_uchTempData2;
//------------------------------------------------------
bit bdata b_NotIntegralChannelType;
bit bdata b_IntegralChannelType;
bit bdata b_LVDTChannelType;
unsigned char idata uchSampleLocationCounter;
//----------------------------------------------------------
//函数名称:void SysCLKInit(void)
//功 能:系统时钟初始化
//输入参数:无
//返 回:无
//完成日期:4/12/2007
//----------------------------------------------------------
void SysCLKInit(void)
{
unsigned char i;
OSCXCN = 0x67; // start external oscillator with 22.1184MHz crystal
for (i=0; i<254; i++)
{;}
while (!(OSCXCN & 0x80)) // Wait for crystal osc. to settle
{;}
OSCICN = 0x88;
// select external oscillator as SYSCLK source and enable missing clock detector
}
//--------------------------------------------------------
//函数名称:void InitCPU(void)
//功 能:交叉开关配置和端口初始化 无看门狗
//输入参数:无
//返 回:无
//完成日期:4/12/2007
//--------------------------------------------------------
void InitCPU(void)
{
XBR0 = 0X87; //connect cp0,UART0 I/O,SPI,SMBus
XBR1 = 0X7F; //connect T2EX,T2E,INT1,T1,INT0,T0,CP1
XBR2 = 0X40; //enable I/O,
P0MDOUT = 0x00; //端口P0配置为露极开路
P1MDIN = 0X00; //P1 被配置成为模拟输入
P2MDOUT = 0x00;
P3MDOUT |= 0x30;
P3MDOUT &= 0X3f;
P3IF = P3IF | 0x0c; //外部中断6,外部中断7 上升沿触发
P74OUT |= 0xf3;
P0 = 0xff;
P1 = 0xff;
P3 |= 0xC0;
P5 = 0xff;
}
//-----------------------------------------------------------------
//函数名称:void HWOKLEDControl(unsigned char uchOKStatus)
//功 能:检测系统OK灯的控制P3.5
//输入参数:OK状态
//返 回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void HWOKLEDControl(unsigned char uchOKStatus)
{
if (uchOKStatus != 0)
{
LED_OK = 0;
}
if (uchOKStatus == 0)
{
LED_OK = 1;
}
}
//--------------------------------------------------------------------------------------------------
//函数名称:void LEDCommunicationControl(void)
//功 能:控制通信灯的执行
//输入参数:无
//返 回:无
//完成日期:4/16/2007
//--------------------------------------------------------------------------------------------------
void LEDCommunicationControl(void)
{
LED_OK = ~ LED_OK;
}
//-----------------------------------------------------------------
//函数名称:void RunLEDStartControl(void)
//功 能:检测系统运行状态控制灯开始运行
//输入参数:无
//返 回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void RunLEDStartControl(void)
{
P4 &= ~0x08;
}
//-----------------------------------------------------------------
//函数名称:void RunLEDStopControl(void)
//功 能:检测系统运行状态控制灯停止运行
//输入参数:无
//返 回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void RunLEDStopControl(void)
{
P4 |= 0x08;
}
//-----------------------------------------------------------------
//函数名称:void AlarmLEDControl(unsigned char uchAlarmStatus)
//功 能:检测系统是否报警的灯的控制P3.6
//输入参数:报警与否状态
//返 回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void AlarmLEDControl(unsigned char uchAlarmStatus)
{
if (uchAlarmStatus == 0)
{
LED_Alarm = 1;
}
else
{
LED_Alarm = 0;
}
}
//-----------------------------------------------------------------
//函数名称:void SetOKIOControl(unsigned char uchChannel)
//功 能:通过状态判断得到P4.2、P4.1和P4.0端口的状态供三冗余使用
//输入参数:通道号
//返 回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void SetOKIOControl(unsigned char uchChannel)
{
unsigned char uchTemp;
if (uchChannel == 1)
{
P4 = P4 & 0xf8; //0 0 0
}
if (uchChannel == 2)
{
EA = 0;
uchTemp = P4;
uchTemp &= 0xf9;
uchTemp |= 0x01; //0 0 1
P4 = uchTemp;
EA = 1;
}
}
//-----------------------------------------------------------------
//函数名称:void SetAlertIOControl(unsigned char uchChannel)
//功 能:通过状态判断得到P4.2、P4.1和P4.0端口的状态供三冗余使用
//输入参数:通道号
//返 回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void SetAlertIOControl(unsigned char uchChannel)
{
unsigned char uchTemp;
if (uchChannel == 1)
{
EA = 0;
uchTemp = P4;
uchTemp &= 0xfc; //1 0 0
uchTemp |= 0x04;
P4 = uchTemp;
EA = 1;
}
if (uchChannel == 2)
{
EA = 0;
uchTemp = P4;
uchTemp &= 0xfd;
uchTemp |= 0x05; //1 0 1
P4 = uchTemp;
EA = 1;
}
}
//-----------------------------------------------------------------
//函数名称:void SetDangerIOControl(unsigned char uchChannel)
//功 能:通过状态判断得到P4.2、P4.1和P4.0端口的状态供三冗余使用
//输入参数:通道号
//返 回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void SetDangerIOControl(unsigned char uchChannel)
{
unsigned char uchTemp;
if (uchChannel == 1)
{
EA = 0;
uchTemp = P4;
uchTemp &= 0xfa;
uchTemp |= 0x02; //0 1 0
P4 = uchTemp;
EA = 1;
}
if (uchChannel == 2)
{
EA = 0;
uchTemp = P4;
uchTemp &= 0xfb;
uchTemp |= 0x03; //0 1 1
P4 = uchTemp;
EA = 1;
}
}
//-----------------------------------------------------------------
//函数名称:void SetNotOKIOControl(unsigned char uchChannel)
//功 能:通过状态判断得到P4.2、P4.1和P4.0端口的状态供三冗余使用
//输入参数:通道号
//返 回:无
//完成日期:4/12/2007
//-----------------------------------------------------------------
void SetNotOKIOControl(unsigned char uchChannel)
{
unsigned char uchTemp;
if (uchChannel == 1)
{
EA = 0;
uchTemp = P4;
uchTemp &= 0xfe; //1 1 0
uchTemp |= 0x06;
P4 = uchTemp;
EA = 1;
}
if (uchChannel == 2)
{
EA = 0;
P4 = P4 | 0x07; //1 1 1
EA = 1;
}
}
//----------------------------------------------------------------
//函数名称:unsigned char HWConfigureStatus(void)
//功 能:从IO口P3.3检测Configure状态
//输入参数:无
//返 回:返回Configure状态 =1,接受配置信息
//完成日期:4/12/2007
//----------------------------------------------------------------
unsigned char HWConfigureStatus(void)
{
xdata unsigned char uchConfigStatus;
uchConfigStatus = P3 & 0x08;
uchConfigStatus = uchConfigStatus>>3;
return uchConfigStatus;
}
//----------------------------------------------------------------
//函数名称:unsigned char HWBypassStatus(void)
//功 能:从IO口P5.5检测Bypass状态
//输入参数:无
//返 回:返回Bypass状态 ,非Bypass为高电平,低电平为Bypass状态
//完成日期:4/12/2007
//----------------------------------------------------------------
unsigned char HWBypassStatus(void)
{
xdata unsigned char uchBypassStatus;
uchBypassStatus = P5 & 0x20;
uchBypassStatus = uchBypassStatus>>5;
return uchBypassStatus;
}
//--------------------------------------------------------------------------
//函数名称:unsigned char HWTripleStatus(void)
//功 能:从IO口P5.6检测报警倍增状态
//输入参数:无
//返 回:返回报警Triple状态,高电平为非报警倍增状态,低电平为报警倍增状态
//完成日期:4/12/2007
//--------------------------------------------------------------------------
unsigned char HWTripleStatus(void)
{
xdata unsigned char uchTripleStatus;
uchTripleStatus = P5 & 0x40;
uchTripleStatus = uchTripleStatus>>6;
return uchTripleStatus;
}
//--------------------------------------------------------------------------
//函数名称:void StopHeartBeat(void)
//功 能:停止心跳
//输入参数:无
//返 回:无
//完成日期:4/12/2007
//--------------------------------------------------------------------------
void StopHeartBeat(void)
{
EIE2 &= 0xfb; //ET2 = 0;
}
//--------------------------------------------------------------------------
//函数名称:void StartHeartBeat(void)
//功 能:开始心跳
//输入参数:无
//返 回:无
//完成日期:4/12/2007
//--------------------------------------------------------------------------
void StartHeartBeat(void)
{
EIE2 |= 0x04; //ET2 = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -