@ -1,7 +1,7 @@
# include "Periphery.h"
# include "Periphery.h"
Periphery : : Periphery ( ) :
Periphery : : Periphery ( ) :
_cana ( can S pace: : CANA ) ,
_cana ( can _s pace: : CANA ) ,
_digitalIO ( ) ,
_digitalIO ( ) ,
_zone6_ptr ( reinterpret_cast < Uint16 * > ( 0x100000 ) ) ,
_zone6_ptr ( reinterpret_cast < Uint16 * > ( 0x100000 ) ) ,
_scib ( ScibRegs ) ,
_scib ( ScibRegs ) ,
@ -27,22 +27,21 @@ void Periphery::config(){
_cana . config ( ) ;
_cana . config ( ) ;
// Data Frame MBOX
// Data Frame MBOX
_cana . configRxMBox ( can Space: : MODBUS_SETTINGS_MBOX , canSpace : : MsgID ( 0x0 ) , canS pace: : MsgCtrlReg ( 0x6 ) ) ; // Modbus settings
_cana . configRxMBox ( can _space: : MODBUS_SETTINGS_MBOX , can_space : : MsgID ( 0x0 ) , can_s pace: : MsgCtrlReg ( 0x6 ) ) ; // Modbus settings
_cana . configTxMBox ( can Space: : MODBUS_DATA_COMM_TO_CPU_MBOX , canSpace : : MsgID ( 0x29 ) , canS pace: : MsgCtrlReg ( 0x28 ) ) ; // Send Modbus data to CPU
_cana . configTxMBox ( can _space: : MODBUS_DATA_COMM_TO_CPU_MBOX , can_space : : MsgID ( 0x29 ) , can_s pace: : MsgCtrlReg ( 0x28 ) ) ; // Send Modbus data to CPU
_cana . configRxMBox ( can Space: : MODBUS_DATA_CPU_TO_COMM_MBOX , canSpace : : MsgID ( 0x28 ) , canS pace: : MsgCtrlReg ( 0x8 ) ) ; // Receive Modbus data from CPU
_cana . configRxMBox ( can _space: : MODBUS_DATA_CPU_TO_COMM_MBOX , can_space : : MsgID ( 0x28 ) , can_s pace: : MsgCtrlReg ( 0x8 ) ) ; // Receive Modbus data from CPU
_cana . configTxMBox ( can Space: : DIGITAL_INPUT_MBOX , canSpace : : MsgID ( 0x30 ) , canS pace: : MsgCtrlReg ( 0x2 ) ) ; // Receive DI
_cana . configTxMBox ( can _space: : DIGITAL_INPUT_MBOX , can_space : : MsgID ( 0x30 ) , can_s pace: : MsgCtrlReg ( 0x2 ) ) ; // Send DI
_cana . configRxMBox ( can Space: : DIGITAL_OUTPUT_MBOX , canSpace : : MsgID ( 0x31 ) , canS pace: : MsgCtrlReg ( 0x2 ) ) ; // Send DO
_cana . configRxMBox ( can _space: : DIGITAL_OUTPUT_MBOX , can_space : : MsgID ( 0x31 ) , can_s pace: : MsgCtrlReg ( 0x2 ) ) ; // Receive DO
// Remote frame MBOX
// Remote frame MBOX
// _cana.configRxMBox(canSpace::MODBUS_SETTINGS_MBOX, canSpace::MsgID(0x0), canSpace::MsgCtrlReg(0x10));
_cana . configTxMBox ( can_space : : COMM_VERSION_MBOX , can_space : : MsgID ( 0x1 , false , true ) , can_space : : MsgCtrlReg ( 0x4 ) ) ;
_cana . configTxMBox ( canSpace : : COMM_VERSION_MBOX , canSpace : : MsgID ( 0x1 , false , true ) , canSpace : : MsgCtrlReg ( 0x4 ) ) ;
_cana . enableTimeOutControl ( can S pace: : MODBUS_SETTINGS_MBOX ) ;
_cana . enableTimeOutControl ( can _s pace: : MODBUS_SETTINGS_MBOX ) ;
_cana . setTimeOutValue ( can S pace: : MODBUS_SETTINGS_MBOX , 1000 ) ;
_cana . setTimeOutValue ( can _s pace: : MODBUS_SETTINGS_MBOX , 1000 ) ;
// Interrupts
// Interrupts
_cana . configSystemIsr ( can S pace: : I0EN_ENABLE |
_cana . configSystemIsr ( can _s pace: : I0EN_ENABLE |
can Space: : EPIM_ENABLE | canSpace : : WLIM_ENABLE | canS pace: : AAIM_ENABLE ) ;
can _space: : EPIM_ENABLE | can_space : : WLIM_ENABLE | can_s pace: : AAIM_ENABLE ) ;
//--------------------------------------Init XINTF interface----------------------------------------------------------
//--------------------------------------Init XINTF interface----------------------------------------------------------
@ -76,39 +75,21 @@ void Periphery::config(){
Uint16 Periphery : : getVersionFPGA ( ) {
Uint16 Periphery : : getVersionFPGA ( ) {
Uint16 data ;
Uint16 data ;
data = * _zone6_ptr + interface : : SOFT_VERSION_OFFSET ;
data = * _zone6_ptr + interface : : SOFT_VERSION_OFFSET ;
return data ;
return data & 0x3FF ; // no more than 1023. (9.9.9) should be limit
}
}
void Periphery : : updateVersionFPGA ( ) {
void Periphery : : updateVersionFPGA ( ) {
_softVersion . CPLD = getVersionFPGA ( ) & 0x3FF ; // no more than 1023. (9.9.9) should be limit
_softVersion . CPLD = getVersionFPGA ( ) ;
_message . mdl . word . LOW_WORD = _softVersion . DSP ;
_message . mdl . word . LOW_WORD = _softVersion . DSP ;
_message . mdl . word . HI_WORD = _softVersion . CPLD ;
_message . mdl . word . HI_WORD = _softVersion . CPLD ;
_cana . updateTXMessage ( canSpace : : COMM_VERSION_MBOX , _message ) ;
_cana . updateTXMessage ( can_space : : COMM_VERSION_MBOX , _message ) ;
}
void Periphery : : initModbusTable ( ) {
modbusRTU . setInputRegsAddr ( 400 ) ;
modbusRTU . setOutputRegsAddr ( 400 ) ;
modbusRTU . addInputReg ( 0 , test_hmi_float_reg_400_test ) ;
modbusRTU . addInputReg ( 1 , test_hmi_float_reg_401_test ) ;
modbusRTU . addInputReg ( 2 , test_hmi_float_reg_402_test ) ;
modbusRTU . addInputReg ( 3 , test_hmi_float_reg_403_test ) ;
modbusRTU . addInputReg ( 4 , test_hmi_float_reg_404_test ) ;
modbusRTU . addOutputReg ( 0 , test_hmi_float_reg_400_test ) ;
modbusRTU . addOutputReg ( 1 , test_hmi_float_reg_401_test ) ;
modbusRTU . addOutputReg ( 2 , test_hmi_float_reg_402_test ) ;
modbusRTU . addOutputReg ( 3 , test_hmi_float_reg_403_test ) ;
modbusRTU . addOutputReg ( 4 , test_hmi_float_reg_404_test ) ;
}
}
void Periphery : : receiveModbusParameters ( ) {
void Periphery : : receiveModbusParameters ( ) {
if ( _cana . isNewMessage ( can S pace: : MODBUS_SETTINGS_MBOX ) ) {
if ( _cana . isNewMessage ( can_space : : MODBUS_SETTINGS_MBOX ) ) {
_cana . receiveMsg ( can S pace: : MODBUS_SETTINGS_MBOX , _message ) ;
_cana . receiveMsg ( can_space : : MODBUS_SETTINGS_MBOX , _message ) ;
MODBUSRTU : : modbusConfiguration . node_id = _message . mdl . byte . BYTE0 ;
MODBUSRTU : : modbusConfiguration . node_id = _message . mdl . byte . BYTE0 ;
MODBUSRTU : : modbusConfiguration . config . lenght = static_cast < DSP28335 : : SCICharLenght > ( _message . mdl . byte . BYTE1 ) ;
MODBUSRTU : : modbusConfiguration . config . lenght = static_cast < DSP28335 : : SCICharLenght > ( _message . mdl . byte . BYTE1 ) ;
@ -124,31 +105,31 @@ void Periphery::receiveModbusParameters(){
void Periphery : : getModbusConfiguration ( ) {
void Periphery : : getModbusConfiguration ( ) {
_cana . resetTimeStampCounter ( ) ;
_cana . resetTimeStampCounter ( ) ;
_cana . clearTimeOutFlag ( can S pace: : MODBUS_SETTINGS_MBOX ) ;
_cana . clearTimeOutFlag ( can _s pace: : MODBUS_SETTINGS_MBOX ) ;
bool requestIsSent = false ;
bool requestIsSent = false ;
while ( ! _cana . isNewMessage ( can S pace: : MODBUS_SETTINGS_MBOX ) ) {
while ( ! _cana . isNewMessage ( can _s pace: : MODBUS_SETTINGS_MBOX ) ) {
if ( _cana . isTimeOut ( can S pace: : MODBUS_SETTINGS_MBOX ) ) {
if ( _cana . isTimeOut ( can _s pace: : MODBUS_SETTINGS_MBOX ) ) {
if ( ! requestIsSent ) {
if ( ! requestIsSent ) {
_cana . resetTimeStampCounter ( ) ;
_cana . resetTimeStampCounter ( ) ;
_cana . clearTimeOutFlag ( can S pace: : MODBUS_SETTINGS_MBOX ) ;
_cana . clearTimeOutFlag ( can _s pace: : MODBUS_SETTINGS_MBOX ) ;
_message . mdl . word . LOW_WORD = _softVersion . DSP ;
_message . mdl . word . LOW_WORD = _softVersion . DSP ;
_message . mdl . word . HI_WORD = _softVersion . CPLD ;
_message . mdl . word . HI_WORD = _softVersion . CPLD ;
_cana . transmitMsg ( can S pace: : COMM_VERSION_MBOX , _message ) ;
_cana . transmitMsg ( can _s pace: : COMM_VERSION_MBOX , _message ) ;
requestIsSent = true ;
requestIsSent = true ;
}
}
else {
else {
_cana . clearTimeOutFlag ( can S pace: : MODBUS_SETTINGS_MBOX ) ;
_cana . clearTimeOutFlag ( can _s pace: : MODBUS_SETTINGS_MBOX ) ;
_cana . disableTimeOutControl ( can S pace: : MODBUS_SETTINGS_MBOX ) ;
_cana . disableTimeOutControl ( can _s pace: : MODBUS_SETTINGS_MBOX ) ;
_error = true ;
_error = true ;
return ;
return ;
}
}
}
}
}
}
_cana . receiveMsg ( can S pace: : MODBUS_SETTINGS_MBOX , _message ) ;
_cana . receiveMsg ( can _s pace: : MODBUS_SETTINGS_MBOX , _message ) ;
MODBUSRTU : : modbusConfiguration . node_id = _message . mdl . byte . BYTE0 ;
MODBUSRTU : : modbusConfiguration . node_id = _message . mdl . byte . BYTE0 ;
MODBUSRTU : : modbusConfiguration . config . lenght = static_cast < DSP28335 : : SCICharLenght > ( _message . mdl . byte . BYTE1 ) ;
MODBUSRTU : : modbusConfiguration . config . lenght = static_cast < DSP28335 : : SCICharLenght > ( _message . mdl . byte . BYTE1 ) ;
MODBUSRTU : : modbusConfiguration . config . baudrate = static_cast < DSP28335 : : SCIBaudRate > ( _message . mdl . word . LOW_WORD ) ;
MODBUSRTU : : modbusConfiguration . config . baudrate = static_cast < DSP28335 : : SCIBaudRate > ( _message . mdl . word . LOW_WORD ) ;
@ -163,13 +144,13 @@ void Periphery::getModbusConfiguration(){
void Periphery : : processDigitalInput ( ) {
void Periphery : : processDigitalInput ( ) {
Uint16 data = 0 ;
Uint16 data = 0 ;
_digitalIO . readDigitalIO ( data ) ;
_digitalIO . readDigitalIO ( data ) ;
_cana . transmitMsg ( can S pace: : DIGITAL_INPUT_MBOX , ( data ) ) ;
_cana . transmitMsg ( can _s pace: : DIGITAL_INPUT_MBOX , data ) ;
}
}
void Periphery : : processDigitalOutput ( ) {
void Periphery : : processDigitalOutput ( ) {
if ( _cana . isNewMessage ( can S pace: : DIGITAL_OUTPUT_MBOX ) ) {
if ( _cana . isNewMessage ( can _s pace: : DIGITAL_OUTPUT_MBOX ) ) {
_cana . receiveMsg ( can S pace: : DIGITAL_OUTPUT_MBOX , _message ) ;
_cana . receiveMsg ( can _s pace: : DIGITAL_OUTPUT_MBOX , _message ) ;
Uint16 data = _message . mdl . word . LOW_WORD ;
Uint16 data = _message . mdl . word . LOW_WORD ;
_digitalIO . writeDigitalIO ( data ) ;
_digitalIO . writeDigitalIO ( data ) ;
}
}
@ -199,13 +180,13 @@ void Periphery::sendModbusDataToCPU(){
_modbusRegCounter + + ;
_modbusRegCounter + + ;
}
}
_cana . transmitMsg ( can S pace: : MODBUS_DATA_COMM_TO_CPU_MBOX , _message ) ;
_cana . transmitMsg ( can _s pace: : MODBUS_DATA_COMM_TO_CPU_MBOX , _message ) ;
}
}
void Periphery : : receiveCpuModbusData ( ) {
void Periphery : : receiveCpuModbusData ( ) {
if ( _cana . isNewMessage ( can S pace: : MODBUS_DATA_CPU_TO_COMM_MBOX ) ) {
if ( _cana . isNewMessage ( can _s pace: : MODBUS_DATA_CPU_TO_COMM_MBOX ) ) {
_cana . receiveMsg ( can S pace: : MODBUS_DATA_CPU_TO_COMM_MBOX , _message ) ;
_cana . receiveMsg ( can _s pace: : MODBUS_DATA_CPU_TO_COMM_MBOX , _message ) ;
WEINBUS : : WeinbusTableRegister reg ;
WEINBUS : : WeinbusTableRegister reg ;