📄 mi200e_setting.c
字号:
/***********************************************************************************
/----------------------Copyright (c) 2005 ~ 2008 Miartech. All Rights Reserved.-----------------------/
/***********************************************************************************
**-----------------------------------------File Info--------------------------------------------
** Last modified Date: 2008-06-24
** Descriptions: MI200E Setting Processing Primary Functions
**--------------------------------------------------------------------------------------------
** Created By: Kelven
** Created Date: 2007-04-17
**--------------------------------------------------------------------------------------------
** Modified by: Kelven
** Modified date: 2007-09-04
** Version: V4.0.0
** Descriptions:
**--------------------------------------------------------------------------------------------
** Modified by: Kelven
** Modified date: 2008-06-24
** Version: V4.0.1
** Descriptions: Updating Key Configrating Function, Added PLC Chip Register Value Setting Module
***********************************************************************************/
#include "..\inc\MI200E_Setting.h"
extern bit g_bInteract_Bit;
extern bit g_bRefresh_DSP_Flag;
extern FLAG_YES_NO ACK_Frame_Flag;
extern FLAG_YES_NO Stop_Loop_Flag;
extern FLAG_YES_NO Recv_Config_Correct;
extern FLAG_YES_NO COS_Menu_ESC;
extern BYTE g_cTrans_Step;
extern BYTE g_cRecv_Step;
extern BYTE g_cRecByte_H;
extern BYTE g_cRecByte_L;
extern BYTE g_cSend_Data_Length;
extern BYTE g_cPkg_Length;
extern BYTE g_cSend_Byte_Cnt;
extern BYTE g_cRecv_Byte_Cnt;
extern BYTE code ST_info[];
extern BYTE xdata g_Recv_Buf[];
extern BYTE xdata g_Send_Buf[];
extern BYTE xdata g_cNode_Address;
extern BYTE bdata g_cModCfgReg;
extern bit bMI200_RX_TXn;
extern BYTE bdata g_cRecModCfgReg;
extern BYTE bdata g_cAsigCfgReg;
extern WORD g_wTotal_Pkg;
/*-------------------------------Global Value Definition----------------------------------------*/
MI200E_PARAM_SETTING MI200E_Param_Setting;
COMMUNICATION_PARAM_SET Communication_Param_Set;
RETURN_REG_VALUE Return_Regs_Value;
MI200E_REG_VALUE MI200E_Reg_Value;
FLAG_YES_NO Data_Send_Permit;
/*------------------------------------------------------------------------------------------*/
/***********************************************************************************
** Function Name: Send_STOP_Command
** Input Parameters:None
** Output Parameters:None
** Description:Send Stop Command to Indicated The Task Have Finished
***********************************************************************************/
void Send_STOP_Command(pFRAME_RS232 pFrame_RS232)
{
BYTE ForCnt;
BYTE xdata SBUF_Data[10];
pFrame_RS232->Frame_Header = FRAME_HEADER_BYTE;
pFrame_RS232->Local_Address = g_cNode_Address;
pFrame_RS232->Direction_Flag = 0x01;
pFrame_RS232->RetrySend_Flag = 0x00;
pFrame_RS232->Reserved = 0x00;
pFrame_RS232->Sequence_ID = 0x00;
pFrame_RS232->Command = Stop_Command;
pFrame_RS232->Data_Length = 0x00;
memcpy(&SBUF_Data, pFrame_RS232, 6);
SBUF_Data[6] = Check_XOR_Sum(SBUF_Data, 6);
for (ForCnt = 0;ForCnt < 7; ForCnt++)
{
SBUF = SBUF_Data[ForCnt];
while(!TI);
TI = 0;
}
//ACK_Frame_Flag = FLAG_YES;
}
/***********************************************************************************
** Function Name: MI200E_Setting_Process
** Input Parameters:pFRAME_RS232 xdata pFrame_RS232
** Output Parameters:None
** Description:MI3323 Main Function
***********************************************************************************/
void MI200E_Setting_Process(pFRAME_RS232 pFrame_RS232)
{
BYTE Tmp_Value;
BYTE cReg_ReadValue;
pMI200E_PARAM_SETTING pMI200E_Param_Setting;
pCOMMUNICATION_PARAM_SET pCommunication_Param_Set;
pMI200E_REG_VALUE pMI200E_Reg_Value;
pRETURN_REG_VALUE pReturn_Reg_Value;
FRAME_RS232 xdata Send_Frame_RS232;
pMI200E_Param_Setting = &MI200E_Param_Setting;
pCommunication_Param_Set = &Communication_Param_Set;
pMI200E_Reg_Value = &MI200E_Reg_Value;
pReturn_Reg_Value = &Return_Regs_Value;
memset(&Send_Frame_RS232, 0, sizeof(FRAME_RS232));
switch(pFrame_RS232->Command)
{
case Set_MI200E_Reg:
{
memcpy(pMI200E_Reg_Value, pFrame_RS232->Frame_Data_BUF, pFrame_RS232->Data_Length);
PLC_Write_Reg(0x01, pMI200E_Reg_Value->Reg_01_Value);
PLC_Write_Reg(0x07, pMI200E_Reg_Value->Reg_07_Value);
PLC_Write_Reg(0x0A, pMI200E_Reg_Value->Reg_0A_Value);
PLC_Write_Reg(0x0B, pMI200E_Reg_Value->Reg_0B_Value);
PLC_Write_Reg(0x0C, pMI200E_Reg_Value->Reg_0C_Value);
PLC_Write_Reg(0x0D, pMI200E_Reg_Value->Reg_0D_Value);
PLC_Write_Reg(0x10, pMI200E_Reg_Value->Reg_10_Value);
PLC_Write_Reg(0x11, pMI200E_Reg_Value->Reg_11_Value);
PLC_Write_Reg(0x12, pMI200E_Reg_Value->Reg_12_Value);
PLC_Write_Reg(0x13, pMI200E_Reg_Value->Reg_13_Value);
PLC_Write_Reg(0x14, pMI200E_Reg_Value->Reg_14_Value);
PLC_Write_Reg(0x15, pMI200E_Reg_Value->Reg_15_Value);
g_cModCfgReg = pMI200E_Reg_Value->Reg_01_Value;
EEPROM_Write_Data(EEAddr_PLC_Mode, g_cModCfgReg, EEPROM_TYPE);
g_cAsigCfgReg = pMI200E_Reg_Value->Reg_07_Value;
EEPROM_Write_Data(EEAddr_WRAR, g_cAsigCfgReg, EEPROM_TYPE);
EEPROM_Write_Data(EEAddr_WRACD, pMI200E_Reg_Value->Reg_0A_Value, EEPROM_TYPE);
EEPROM_Write_Data(EEAddr_WRTDR, pMI200E_Reg_Value->Reg_0B_Value, EEPROM_TYPE);
EEPROM_Write_Data(EEAddr_WRTH0, pMI200E_Reg_Value->Reg_0C_Value, EEPROM_TYPE);
EEPROM_Write_Data(EEAddr_WRTH1, pMI200E_Reg_Value->Reg_0D_Value, EEPROM_TYPE);
EEPROM_Write_Data(EEAddr_WR_F1FRE, pMI200E_Reg_Value->Reg_10_Value, EEPROM_TYPE);
EEPROM_Write_Data(EEAddr_WR_F1Q, pMI200E_Reg_Value->Reg_11_Value, EEPROM_TYPE);
EEPROM_Write_Data(EEAddr_WR_F2FRE, pMI200E_Reg_Value->Reg_12_Value, EEPROM_TYPE);
EEPROM_Write_Data(EEAddr_WR_F2Q, pMI200E_Reg_Value->Reg_13_Value, EEPROM_TYPE);
EEPROM_Write_Data(EEAddr_WR_F3FRE, pMI200E_Reg_Value->Reg_14_Value, EEPROM_TYPE);
EEPROM_Write_Data(EEAddr_WR_F3Q, pMI200E_Reg_Value->Reg_15_Value, EEPROM_TYPE);
}
break;
case Read_Reg_Value:
{
memset(pReturn_Reg_Value, 0, sizeof(RETURN_REG_VALUE));
cReg_ReadValue = PLC_Read_Reg(0x81) ;
pReturn_Reg_Value->Reg_81_Value = cReg_ReadValue;
cReg_ReadValue = PLC_Read_Reg(0x87) ;
pReturn_Reg_Value->Reg_87_Value = cReg_ReadValue;
memcpy(Send_Frame_RS232.Frame_Data_BUF, pReturn_Reg_Value, sizeof(RETURN_REG_VALUE));
Send_Frame_RS232.Data_Length = sizeof(RETURN_REG_VALUE);
RS232_Send_Frame(&Send_Frame_RS232, Return_Reg_Value);
while(ACK_Frame_Flag == FLAG_YES)//Wait For PC ACK Infomation
{
if(Read_Key() == ESC)
{
COS_Menu_ESC = FLAG_YES;
return;
}
}
}
break;
case Start_Send_Command:
{
g_bInteract_Bit = 0;
g_cTrans_Step = 0;
bMI200_RX_TXn = Status_TRAN;
PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg & 0x7f);
TX_SWITH = 1;
memcpy(g_Send_Buf, pFrame_RS232, pFrame_RS232->Data_Length + 6);
g_cSend_Data_Length = pFrame_RS232->Data_Length + 6;
while(g_bInteract_Bit == 0)
{
if(g_cTrans_Step != 6)
{
PLC_Transmit_Process( &g_Send_Buf[g_cSend_Byte_Cnt] );
}
else
{
DSP_Show(0x80,"Transmiting Data");
g_bInteract_Bit = 1;
g_cRecByte_H = 0;
g_cRecByte_L = 0;
g_cRecv_Step = 0x00;
bMI200_RX_TXn = Status_RECV; //Change to transmit mode
PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg|0x8c); //Write mode configuration,
LED_TX = 1;
LED_RX = 1;
LED_BUSY = 1;
LED_CORRECT = 1;
}
}
while(g_bInteract_Bit == 1)
{
if(Read_Key() == ESC)
{
COS_Menu_ESC = FLAG_YES;
return;
}
if (g_cRecv_Step != 4)
{
PLC_Receive_Process( &g_Recv_Buf[g_cRecv_Byte_Cnt] );
}
else
{
DSP_Show(0xc0,"Receiving Data");
g_cTrans_Step = 0x00;
bMI200_RX_TXn = Status_TRAN;
PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg & 0x7f);
g_bInteract_Bit = 0;
Send_Frame_RS232.Data_Length = (g_cPkg_Length - 2)*2;
memcpy(&Send_Frame_RS232.Frame_Header, g_Recv_Buf, Send_Frame_RS232.Data_Length + 6);
RS232_Send_Frame(&Send_Frame_RS232, Return_Send_Pkg);
LED_TX = 1;
LED_RX = 1;
LED_BUSY = 1;
LED_CORRECT = 1;
}
}
LED_TX = 1;
LED_RX = 1;
LED_BUSY = 1;
LED_CORRECT = 1;
while((ACK_Frame_Flag == FLAG_YES) && (Stop_Loop_Flag == FLAG_NO))//Wait For PC ACK Infomation
{
if(Read_Key() == ESC)
{
COS_Menu_ESC = FLAG_YES;
return;
}
}
if(Stop_Loop_Flag == FLAG_YES)
{
//memset(&Send_Frame_RS232, 0, sizeof(FRAME_RS232));
//Send_STOP_Command(&Send_Frame_RS232);
return;
}
}
break;
case Stop_Send_Command:
{
LED_TX = 1;
LED_RX = 1;
LED_BUSY = 1;
LED_CORRECT = 1;
memset(&Send_Frame_RS232, 0, sizeof(FRAME_RS232));
Send_STOP_Command(&Send_Frame_RS232);
}
break;
case Set_MI200E_Param:
{
memcpy(pCommunication_Param_Set, pFrame_RS232->Frame_Data_BUF, pFrame_RS232->Data_Length);
Tmp_Value = 0;
Tmp_Value = (pCommunication_Param_Set->MI200E_Param.Carrier_Freq)
+ (pCommunication_Param_Set->MI200E_Param.Baud_Rate<<2)
+ (pCommunication_Param_Set->MI200E_Param.SS_Code<<4);
cReg_ReadValue = (PLC_Read_Reg(0x81) & 0x80) ;
pMI200E_Reg_Value->Reg_01_Value = cReg_ReadValue + Tmp_Value;
PLC_Write_Reg(0x01, pMI200E_Reg_Value->Reg_01_Value);
g_cModCfgReg = pMI200E_Reg_Value->Reg_01_Value;
EEPROM_Write_Data(EEAddr_PLC_Mode, g_cModCfgReg, EEPROM_TYPE);
g_cNode_Address = pCommunication_Param_Set->Node_Address;
EEPROM_Write_Data(EEAddr_NodeAddr, g_cNode_Address, EEPROM_TYPE);
Tmp_Value = (BYTE)((pCommunication_Param_Set->Package_Cnt & 0xff00)>>8);
g_wTotal_Pkg = (WORD)((pCommunication_Param_Set->Package_Cnt<<8)+Tmp_Value);
EEPROM_Write_Data(EEAddr_TotalPkg_H, (BYTE)((g_wTotal_Pkg & 0xff00)>>8), EEPROM_TYPE);
EEPROM_Write_Data(EEAddr_TotalPkg_L, (BYTE)(g_wTotal_Pkg & 0x00ff), EEPROM_TYPE);
}
break;
}
}
/***********************************************************************************
** Function Name: COM_Receiving_Process
** Input Parameters:None
** Output Parameters:None
** Description:Send Stop Command to Indicated The Task Have Finished
***********************************************************************************/
void Return_Testing_Process(void)
{
g_bInteract_Bit = 0;
g_cRecByte_H = 0;
g_cRecByte_L = 0;
g_cRecv_Step = 0x00;
bMI200_RX_TXn = Status_RECV; //Change to Receive mode
PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg|0x8c); //Write mode configuration,
while(g_bInteract_Bit == 0)
{
if(Read_Key() == ESC)
{
PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg);
COS_Menu_ESC = FLAG_YES;
return;
}
if (g_cRecv_Step != 4)
{
PLC_Receive_Process( &g_Recv_Buf[g_cRecv_Byte_Cnt] );
}
else
{
DSP_Show(0xc0,"Receive Data");
g_cModCfgReg = (g_cModCfgReg|0x0c) & ((g_cRecModCfgReg>>4)|0xf3);
EEPROM_Write_Data(EEAddr_PLC_Mode, g_cModCfgReg, EEPROM_TYPE);
g_cTrans_Step = 0x00;
bMI200_RX_TXn = Status_TRAN;
PLC_Write_Reg(PLCAddrWRMR, g_cModCfgReg & 0x7f);
g_bInteract_Bit = 1;
TX_SWITH = 1;
g_cSend_Data_Length = (g_cPkg_Length-2)*2;
g_Recv_Buf[1] = g_cNode_Address;
memcpy(g_Send_Buf, g_Recv_Buf, g_cSend_Data_Length);
}
}
while(g_bInteract_Bit == 1)
{
if(g_cTrans_Step != 6)
{
PLC_Transmit_Process( &g_Send_Buf[g_cSend_Byte_Cnt] );
}
else
{
DSP_Show(0x80,"Transmit Data");
g_bInteract_Bit = 0;
}
}
LED_TX = 1;
LED_RX = 1;
LED_BUSY = 1;
LED_CORRECT = 1;
}
/***********************************************************************************
** End Of File **
***********************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -