Signed-off-by: Pavel Pisa <pi@baree.pikron.com>
MEXFLAGS ?= -f ./mexopts.sh -g
MEXFLAGS ?= -f ./mexopts.sh -g
+# Build MF624 MEX functions without dependency on hardware access
+#WITHOUT_HW=y
+
+ifeq ($(WITHOUT_HW),y)
+MEXFLAGS += -DWITHOUT_HW=1
+else
+MF624_COMMON_C_FILES=mf624_SIMULINK.c
+endif
+
- mex $(MEXFLAGS) sfAnalogInput.c mf624_SIMULINK.c
- mex $(MEXFLAGS) sfAnalogOutput.c mf624_SIMULINK.c
- mex $(MEXFLAGS) sfDigitalOutput.c mf624_SIMULINK.c
- mex $(MEXFLAGS) sfDigitalInput.c mf624_SIMULINK.c
- mex $(MEXFLAGS) sfReadPWM.c mf624_SIMULINK.c
- mex $(MEXFLAGS) sfIRCInput.c mf624_SIMULINK.c
- mex $(MEXFLAGS) sfPWMOutput.c mf624_SIMULINK.c
- mex $(MEXFLAGS) sfPWMwDirOutput.c mf624_SIMULINK.c
+ mex $(MEXFLAGS) sfAnalogInput.c $(MF624_COMMON_C_FILES)
+ mex $(MEXFLAGS) sfAnalogOutput.c $(MF624_COMMON_C_FILES)
+ mex $(MEXFLAGS) sfDigitalOutput.c $(MF624_COMMON_C_FILES)
+ mex $(MEXFLAGS) sfDigitalInput.c $(MF624_COMMON_C_FILES)
+ mex $(MEXFLAGS) sfReadPWM.c $(MF624_COMMON_C_FILES)
+ mex $(MEXFLAGS) sfIRCInput.c $(MF624_COMMON_C_FILES)
+ mex $(MEXFLAGS) sfPWMOutput.c $(MF624_COMMON_C_FILES)
+ mex $(MEXFLAGS) sfPWMwDirOutput.c $(MF624_COMMON_C_FILES)
+#include <stdint.h>
+
+#ifndef WITHOUT_HW
#include "mf624_SIMULINK.h"
#include "mf624_SIMULINK.h"
*/
static void mdlStart(SimStruct *S)
{
*/
static void mdlStart(SimStruct *S)
{
if (mf624_init(NULL) != 0)
return;
if (mf624_init(NULL) != 0)
return;
+ #endif /*WITHOUT_HW*/
+
int ADCCMask = (int)MASK_PRM(S);
if(ADCCMask > 255 || ADCCMask < 0) {
ssSetErrorStatus(S,"Invalid parameter mask, set to 0-255");
}
int ADCCMask = (int)MASK_PRM(S);
if(ADCCMask > 255 || ADCCMask < 0) {
ssSetErrorStatus(S,"Invalid parameter mask, set to 0-255");
}
int ADCChannels = __builtin_popcount((uint32_t)ADCCMask); //Counts number of set bits in ADCCMask
int ADCChannels = __builtin_popcount((uint32_t)ADCCMask); //Counts number of set bits in ADCCMask
ssSetIWorkValue(S, 0, ADCChannels);
ssSetIWorkValue(S, 0, ADCChannels);
mfst->ADC_enabled = ADCCMask;
mfst->ADC_enabled &= 0xFF;
mfst->ADC_enabled = ADCCMask;
mfst->ADC_enabled &= 0xFF;
mf624_write16(mfst->ADC_enabled, MFST2REG(mfst, 2, ADCTRL_reg));
mf624_write16(mfst->ADC_enabled, MFST2REG(mfst, 2, ADCTRL_reg));
real_T* y[ADCChannels];
int i;
int res,res1;
real_T* y[ADCChannels];
int i;
int res,res1;
// Activate trigger to start conversion
// Activate trigger to start conversion
- mf624_read16(MFST2REG(mfst, 2, ADSTART_reg));
-
+ mf624_read16(MFST2REG(mfst, 2, ADSTART_reg));
+ #endif /*WITHOUT_HW*/
+
for(i=0; i < ADCChannels;i++){
y[i]=ssGetOutputPortSignal(S,i);
}
for(i=0; i < ADCChannels;i++){
y[i]=ssGetOutputPortSignal(S,i);
}
// Check if conversion has finished
// Check if conversion has finished
- while((mf624_read32(MFST2REG(mfst, 0, GPIOC_reg)) & GPIOC_EOLC_mask)) {
- for (i = 0; i < 1000; i++) {} // small wait
- }
-
-
- for(i=1; i < ADCChannels;i+=2){
+ while((mf624_read32(MFST2REG(mfst, 0, GPIOC_reg)) & GPIOC_EOLC_mask)) {
+ for (i = 0; i < 1000; i++) {} // small wait
+ }
+
+ for(i=1; i < ADCChannels;i+=2){
res = mf624_read32(MFST2REG(mfst, 2, ADDATA0_reg));
res1= res >> 16;
res = res & 0xFFFF;
*y[i-1] = (real_T) (10.0 * ((int16_t) (res << 2)) / (double) 0x8000);
*y[i] = (real_T) (10.0 * ((int16_t) (res1 << 2)) / (double) 0x8000);
}
res = mf624_read32(MFST2REG(mfst, 2, ADDATA0_reg));
res1= res >> 16;
res = res & 0xFFFF;
*y[i-1] = (real_T) (10.0 * ((int16_t) (res << 2)) / (double) 0x8000);
*y[i] = (real_T) (10.0 * ((int16_t) (res1 << 2)) / (double) 0x8000);
}
if(i == ADCChannels){
res = mf624_read16(MFST2REG(mfst, 2, ADDATA0_reg));
*y[ADCChannels-1]=(real_T)(10.0 * ((int16_t) (res << 2)) / (double) 0x8000);
}
if(i == ADCChannels){
res = mf624_read16(MFST2REG(mfst, 2, ADDATA0_reg));
*y[ADCChannels-1]=(real_T)(10.0 * ((int16_t) (res << 2)) / (double) 0x8000);
}
+ #else /*WITHOUT_HW*/
+ for(i=0; i < ADCChannels; i++){
+ *y[i] = 0;
+ }
+ #endif /*WITHOUT_HW*/
*/
static void mdlTerminate(SimStruct *S)
{
*/
static void mdlTerminate(SimStruct *S)
{
* its associated macro definitions.
*/
#include "simstruc.h"
* its associated macro definitions.
*/
#include "simstruc.h"
#include "mf624_SIMULINK.h"
#include "mf624_SIMULINK.h"
/* Error handling
* --------------
/* Error handling
* --------------
*/
static void mdlStart(SimStruct *S)
{
*/
static void mdlStart(SimStruct *S)
{
if (mf624_init(NULL) != 0)
return;
DAC_enable(mfst);
if (mf624_init(NULL) != 0)
return;
DAC_enable(mfst);
//ssSetPWorkValue(S, 0, mfst);
}
#endif /* MDL_START */
//ssSetPWorkValue(S, 0, mfst);
}
#endif /* MDL_START */
//mf624_state_t* mfst = ssGetPWorkValue(S,0);
int out;
//mf624_state_t* mfst = ssGetPWorkValue(S,0);
int out;
if (mf624_check(S) != 0)
return;
if (mf624_check(S) != 0)
return;
out = (int) ((u[0] + 10) * 8192 / 10 + 0.5);
}
mf624_write16(out, MFST2REG(mfst, 2, dac_channel2reg[(int)CHNL_PRM(S)-1]));
out = (int) ((u[0] + 10) * 8192 / 10 + 0.5);
}
mf624_write16(out, MFST2REG(mfst, 2, dac_channel2reg[(int)CHNL_PRM(S)-1]));
*/
static void mdlTerminate(SimStruct *S)
{
*/
static void mdlTerminate(SimStruct *S)
{
//mf624_state_t* mfst = ssGetPWorkValue(S,0);
if (mf624_check(NULL) != 0)
return;
//mf624_state_t* mfst = ssGetPWorkValue(S,0);
if (mf624_check(NULL) != 0)
return;
MFST2REG(mfst, 0, GPIOC_reg));
mf624_done();
MFST2REG(mfst, 0, GPIOC_reg));
mf624_done();
* its associated macro definitions.
*/
#include "simstruc.h"
* its associated macro definitions.
*/
#include "simstruc.h"
#include "mf624_SIMULINK.h"
#include "mf624_SIMULINK.h"
/* Error handling
* --------------
/* Error handling
* --------------
*/
static void mdlStart(SimStruct *S)
{
*/
static void mdlStart(SimStruct *S)
{
if (mf624_init(NULL) != 0)
if (mf624_init(NULL) != 0)
+ return;
+ #endif /*WITHOUT_HW*/
static void mdlOutputs(SimStruct *S, int_T tid)
{
real_T *y;
static void mdlOutputs(SimStruct *S, int_T tid)
{
real_T *y;
+ uint_T din;
+
+ y = (real_T *)ssGetOutputPortSignal(S, 0);
if (mf624_check(S) != 0)
return;
if (mf624_check(S) != 0)
return;
- y = (real_T *)ssGetOutputPortSignal(S, 0);
-
din = mf624_read16(MFST2REG(mfst, 2, DIN_reg));
*y = din & (1 << (int)(CHNL_PRM(S)-1)) ? 0.0 : 1.0;
din = mf624_read16(MFST2REG(mfst, 2, DIN_reg));
*y = din & (1 << (int)(CHNL_PRM(S)-1)) ? 0.0 : 1.0;
+ #else /*WITHOUT_HW*/
+ *y = 0;
+ #endif /*WITHOUT_HW*/
*/
static void mdlTerminate(SimStruct *S)
{
*/
static void mdlTerminate(SimStruct *S)
{
+ #ifndef WITHOUT_HW
+ mf624_done();
+ #endif /*WITHOUT_HW*/
* its associated macro definitions.
*/
#include "simstruc.h"
* its associated macro definitions.
*/
#include "simstruc.h"
#include "mf624_SIMULINK.h"
#include "mf624_SIMULINK.h"
/* Error handling
* --------------
/* Error handling
* --------------
*/
static void mdlStart(SimStruct *S)
{
*/
static void mdlStart(SimStruct *S)
{
if (mf624_init(NULL) != 0)
return;
mfst->DOut=0;
if (mf624_init(NULL) != 0)
return;
mfst->DOut=0;
{
const real_T *u = (const real_T*) ssGetInputPortSignal(S,0);
{
const real_T *u = (const real_T*) ssGetInputPortSignal(S,0);
if (mf624_check(S) != 0)
return;
if (mf624_check(S) != 0)
return;
}
mf624_write16(mfst->DOut, MFST2REG(mfst, 2, DOUT_reg));
}
mf624_write16(mfst->DOut, MFST2REG(mfst, 2, DOUT_reg));
*/
static void mdlTerminate(SimStruct *S)
{
*/
static void mdlTerminate(SimStruct *S)
{
+ #ifndef WITHOUT_HW
+ mf624_done();
+ #endif /*WITHOUT_HW*/
* its associated macro definitions.
*/
#include "simstruc.h"
* its associated macro definitions.
*/
#include "simstruc.h"
#include "mf624_SIMULINK.h"
static const int32_T irc_channel2reg[] = {
#include "mf624_SIMULINK.h"
static const int32_T irc_channel2reg[] = {
/* Error handling
* --------------
/* Error handling
* --------------
ssSetErrorStatus(S, "Ts has to be positive or -1 for automatic step");
if ((PRM_CHANNEL(S) < 0) || (PRM_CHANNEL(S) > 3))
ssSetErrorStatus(S, "valid IRC channel is 0, 1, 2, or 3");
ssSetErrorStatus(S, "Ts has to be positive or -1 for automatic step");
if ((PRM_CHANNEL(S) < 0) || (PRM_CHANNEL(S) > 3))
ssSetErrorStatus(S, "valid IRC channel is 0, 1, 2, or 3");
if ((PRM_COUNTER_MODE(S) < 0) || PRM_COUNTER_MODE(S) >
__mfld2val(IRCCTRL_IRC0MODE_mask, IRCCTRL_IRC0MODE_mask))
ssSetErrorStatus(S, "Counter Mode out of valid range");
if ((PRM_COUNTER_MODE(S) < 0) || PRM_COUNTER_MODE(S) >
__mfld2val(IRCCTRL_IRC0MODE_mask, IRCCTRL_IRC0MODE_mask))
ssSetErrorStatus(S, "Counter Mode out of valid range");
if ((PRM_DIGITAL_FILTER(S) < 0) || PRM_DIGITAL_FILTER(S) >
__mfld2val(IRCCTRL_IRC0FILTER_mask, IRCCTRL_IRC0FILTER_mask))
ssSetErrorStatus(S, "Digital Filter out of valid range");
if ((PRM_DIGITAL_FILTER(S) < 0) || PRM_DIGITAL_FILTER(S) >
__mfld2val(IRCCTRL_IRC0FILTER_mask, IRCCTRL_IRC0FILTER_mask))
ssSetErrorStatus(S, "Digital Filter out of valid range");
if ((PRM_RESET_AT_STARTUP(S) != 0) && (PRM_RESET_AT_STARTUP(S) != 1))
ssSetErrorStatus(S, "Reset at startup can be only 0 or 1");
}
if ((PRM_RESET_AT_STARTUP(S) != 0) && (PRM_RESET_AT_STARTUP(S) != 1))
ssSetErrorStatus(S, "Reset at startup can be only 0 or 1");
}
int_T reset_mode;
int_T reset_mode_save;
int_T reset_mode;
int_T reset_mode_save;
if (mf624_check(S) != 0)
return;
if (mf624_check(S) != 0)
return;
IRC_mode_change(mfst, mask, reset_mode);
IRC_mode_change(mfst, mask, reset_mode_save & mask);
}
IRC_mode_change(mfst, mask, reset_mode);
IRC_mode_change(mfst, mask, reset_mode_save & mask);
}
}
#endif /* MDL_INITIALIZE_CONDITIONS */
}
#endif /* MDL_INITIALIZE_CONDITIONS */
int_T filter;
int_T mask;
int_T filter;
int_T mask;
if (mf624_init(NULL) != 0)
return;
if (mf624_init(NULL) != 0)
return;
IRC_mode_change(mfst, mask << shift, IWORK_IRCCTRL(S) << shift);
IRC_mode_change(mfst, mask << shift, IWORK_IRCCTRL(S) << shift);
+ #endif /*WITHOUT_HW*/
+
mdlInitializeConditions(S);
}
#endif /* MDL_START */
mdlInitializeConditions(S);
}
#endif /* MDL_START */
{
int32_T *y = ssGetOutputPortSignal(S,0);
{
int32_T *y = ssGetOutputPortSignal(S,0);
if (mf624_check(S) != 0)
return;
y[0] = mf624_read32(MFST2REG(mfst, 4, irc_channel2reg[IWORK_CHANNEL(S)]));
if (mf624_check(S) != 0)
return;
y[0] = mf624_read32(MFST2REG(mfst, 4, irc_channel2reg[IWORK_CHANNEL(S)]));
+ #else /*WITHOUT_HW*/
+ y[0] = 0;
+ #endif /*WITHOUT_HW*/
int_T shift;
int_T inp_num = 0;
int_T shift;
int_T inp_num = 0;
if (mf624_check(S) != 0)
return;
if (mf624_check(S) != 0)
return;
shift = IWORK_CHANNEL(S) * IRCCTRL_CHANNEL_SHIFT;
IRC_mode_change(mfst, mask << shift, IWORK_IRCCTRL(S) << shift);
}
shift = IWORK_CHANNEL(S) * IRCCTRL_CHANNEL_SHIFT;
IRC_mode_change(mfst, mask << shift, IWORK_IRCCTRL(S) << shift);
}
}
#endif /* MDL_UPDATE */
}
#endif /* MDL_UPDATE */
*/
static void mdlTerminate(SimStruct *S)
{
*/
static void mdlTerminate(SimStruct *S)
{
* its associated macro definitions.
*/
#include "simstruc.h"
* its associated macro definitions.
*/
#include "simstruc.h"
#include "mf624_SIMULINK.h"
#include "mf624_SIMULINK.h"
#define CTR_MAX_PWM_CHANNEL 3
#define CTR_MAX_PWM_CHANNEL 3
typedef struct {
int32_T STATUS_reg;
int32_T MODE_reg;
typedef struct {
int32_T STATUS_reg;
int32_T MODE_reg;
{CTR3STATUS_reg, CTR3MODE_reg, CTR3_reg, CTR3A_reg, CTR3B_reg, CTRXCTRL_reg},
{CTR4STATUS_reg, CTR4MODE_reg, CTR4_reg, CTR4A_reg, -1, CTRXCTRL_reg}
};
{CTR3STATUS_reg, CTR3MODE_reg, CTR3_reg, CTR3A_reg, CTR3B_reg, CTRXCTRL_reg},
{CTR4STATUS_reg, CTR4MODE_reg, CTR4_reg, CTR4A_reg, -1, CTRXCTRL_reg}
};
/* Error handling
* --------------
/* Error handling
* --------------
if (mf624_init(NULL) != 0)
return;
if (mf624_init(NULL) != 0)
return;
/* Force output low during startup */
ctr_mode = __val2mfld(CTR_MODE_OUTPUT_CONTROL_mask, CTR_MODE_OUTPUT_CONTROL_FORCE_LO);
mf624_write32(ctr_mode, MFST2REG(mfst, 4, ctr_channel2regs[IWORK_CHANNEL(S)].MODE_reg));
/* Force output low during startup */
ctr_mode = __val2mfld(CTR_MODE_OUTPUT_CONTROL_mask, CTR_MODE_OUTPUT_CONTROL_FORCE_LO);
mf624_write32(ctr_mode, MFST2REG(mfst, 4, ctr_channel2regs[IWORK_CHANNEL(S)].MODE_reg));
uint32_T T1_uint;
uint32_T T2_uint;
uint32_T T1_uint;
uint32_T T2_uint;
if (mf624_check(S) != 0)
return;
if (mf624_check(S) != 0)
return;
ctr_ctrl <<= IWORK_CHANNEL(S) * CTRXCTRL_CHANNEL_SHIFT;
mf624_write32(ctr_ctrl, MFST2REG(mfst, 4, ctr_channel2regs[IWORK_CHANNEL(S)].CTRL_reg));
}
ctr_ctrl <<= IWORK_CHANNEL(S) * CTRXCTRL_CHANNEL_SHIFT;
mf624_write32(ctr_ctrl, MFST2REG(mfst, 4, ctr_channel2regs[IWORK_CHANNEL(S)].CTRL_reg));
}
if (mf624_check(S) == 0) {
/* Force output low when finished */
ctr_mode = __val2mfld(CTR_MODE_OUTPUT_CONTROL_mask, CTR_MODE_OUTPUT_CONTROL_FORCE_LO);
if (mf624_check(S) == 0) {
/* Force output low when finished */
ctr_mode = __val2mfld(CTR_MODE_OUTPUT_CONTROL_mask, CTR_MODE_OUTPUT_CONTROL_FORCE_LO);
* its associated macro definitions.
*/
#include "simstruc.h"
* its associated macro definitions.
*/
#include "simstruc.h"
#include "mf624_SIMULINK.h"
#include "mf624_SIMULINK.h"
#define CTR_MAX_PWM_CHANNEL 3
#define CTR_MAX_PWM_CHANNEL 3
typedef struct {
int32_T STATUS_reg;
int32_T MODE_reg;
typedef struct {
int32_T STATUS_reg;
int32_T MODE_reg;
{CTR3STATUS_reg, CTR3MODE_reg, CTR3_reg, CTR3A_reg, CTR3B_reg, CTRXCTRL_reg},
{CTR4STATUS_reg, CTR4MODE_reg, CTR4_reg, CTR4A_reg, -1, CTRXCTRL_reg}
};
{CTR3STATUS_reg, CTR3MODE_reg, CTR3_reg, CTR3A_reg, CTR3B_reg, CTRXCTRL_reg},
{CTR4STATUS_reg, CTR4MODE_reg, CTR4_reg, CTR4A_reg, -1, CTRXCTRL_reg}
};
/* Error handling
* --------------
/* Error handling
* --------------
* See matlabroot/simulink/src/sfuntmpl_doc.c for more details.
*/
* See matlabroot/simulink/src/sfuntmpl_doc.c for more details.
*/
static void fncSetDirOutput(SimStruct *S, int_T direction_mode)
{
if (mf624_check(S) != 0)
static void fncSetDirOutput(SimStruct *S, int_T direction_mode)
{
if (mf624_check(S) != 0)
mf624_write16(mfst->DOut, MFST2REG(mfst, 2, DOUT_reg));
}
mf624_write16(mfst->DOut, MFST2REG(mfst, 2, DOUT_reg));
}
/*====================*
* S-function methods *
/*====================*
* S-function methods *
if (mf624_init(NULL) != 0)
return;
if (mf624_init(NULL) != 0)
return;
/* Force output low during startup */
ctr_mode = __val2mfld(CTR_MODE_OUTPUT_CONTROL_mask, CTR_MODE_OUTPUT_CONTROL_FORCE_LO);
mf624_write32(ctr_mode, MFST2REG(mfst, 4, ctr_channel2regs[IWORK_CHANNEL(S)].MODE_reg));
/* Force output low during startup */
ctr_mode = __val2mfld(CTR_MODE_OUTPUT_CONTROL_mask, CTR_MODE_OUTPUT_CONTROL_FORCE_LO);
mf624_write32(ctr_mode, MFST2REG(mfst, 4, ctr_channel2regs[IWORK_CHANNEL(S)].MODE_reg));
uint32_T T2_uint;
int_T new_mode;
uint32_T T2_uint;
int_T new_mode;
if (mf624_check(S) != 0)
return;
if (mf624_check(S) != 0)
return;
ctr_ctrl <<= IWORK_CHANNEL(S) * CTRXCTRL_CHANNEL_SHIFT;
mf624_write32(ctr_ctrl, MFST2REG(mfst, 4, ctr_channel2regs[IWORK_CHANNEL(S)].CTRL_reg));
}
ctr_ctrl <<= IWORK_CHANNEL(S) * CTRXCTRL_CHANNEL_SHIFT;
mf624_write32(ctr_ctrl, MFST2REG(mfst, 4, ctr_channel2regs[IWORK_CHANNEL(S)].CTRL_reg));
}
if (mf624_check(S) == 0) {
/* Force output low when finished */
ctr_mode = __val2mfld(CTR_MODE_OUTPUT_CONTROL_mask, CTR_MODE_OUTPUT_CONTROL_FORCE_LO);
if (mf624_check(S) == 0) {
/* Force output low when finished */
ctr_mode = __val2mfld(CTR_MODE_OUTPUT_CONTROL_mask, CTR_MODE_OUTPUT_CONTROL_FORCE_LO);
#include "mf624_SIMULINK.h"
#include "mf624_SIMULINK.h"
/* Error handling
* --------------
/* Error handling
* --------------
*/
static void mdlStart(SimStruct *S)
{
*/
static void mdlStart(SimStruct *S)
{
if (mf624_init(NULL) != 0)
return;
if (mf624_init(NULL) != 0)
return;
/*Start counters 0,1,2, tehy are gated with their inputs so no worries about premature start*/
mf624_write32(CTR_START,MFST2REG(mfst,4,CTRXCTRL_reg));
/*Start counters 0,1,2, tehy are gated with their inputs so no worries about premature start*/
mf624_write32(CTR_START,MFST2REG(mfst,4,CTRXCTRL_reg));
real_T *y2 = ssGetOutputPortSignal(S,2);
unsigned int period;
unsigned int c0,c1,c2,c4;
real_T *y2 = ssGetOutputPortSignal(S,2);
unsigned int period;
unsigned int c0,c1,c2,c4;
c0 = mf624_read32(MFST2REG(mfst,4,CTR0_reg));
c1 = mf624_read32(MFST2REG(mfst,4,CTR1_reg));
c2 = mf624_read32(MFST2REG(mfst,4,CTR2_reg));
c4 = mf624_read32(MFST2REG(mfst,4,CTR4_reg));
c0 = mf624_read32(MFST2REG(mfst,4,CTR0_reg));
c1 = mf624_read32(MFST2REG(mfst,4,CTR1_reg));
c2 = mf624_read32(MFST2REG(mfst,4,CTR2_reg));
c4 = mf624_read32(MFST2REG(mfst,4,CTR4_reg));
period = (unsigned int)(c4-(unsigned int)ssGetIWorkValue(S,3));
period = (unsigned int)(c4-(unsigned int)ssGetIWorkValue(S,3));
y0[0] = (real_T)(c0-(unsigned int)ssGetIWorkValue(S,0))/(real_T)period;
y1[0] = (real_T)(c1-(unsigned int)ssGetIWorkValue(S,1))/(real_T)period;
y2[0] = (real_T)(c2-(unsigned int)ssGetIWorkValue(S,2))/(real_T)period;
y0[0] = (real_T)(c0-(unsigned int)ssGetIWorkValue(S,0))/(real_T)period;
y1[0] = (real_T)(c1-(unsigned int)ssGetIWorkValue(S,1))/(real_T)period;
y2[0] = (real_T)(c2-(unsigned int)ssGetIWorkValue(S,2))/(real_T)period;
ssSetIWorkValue(S,0,c0);
ssSetIWorkValue(S,1,c1);
ssSetIWorkValue(S,2,c2);
ssSetIWorkValue(S,3,c4);
ssSetIWorkValue(S,0,c0);
ssSetIWorkValue(S,1,c1);
ssSetIWorkValue(S,2,c2);
ssSetIWorkValue(S,3,c4);
+ #else /*WITHOUT_HW*/
+ y0[0] = y1[0] = y2[0] = 0;
+ #endif /*WITHOUT_HW*/
*/
static void mdlTerminate(SimStruct *S)
{
*/
static void mdlTerminate(SimStruct *S)
{
if (mf624_check(NULL) != 0)
if (mf624_check(NULL) != 0)
mf624_write32(CTR_STOP,MFST2REG(mfst,4,CTRXCTRL_reg));
mf624_done();
mf624_write32(CTR_STOP,MFST2REG(mfst,4,CTRXCTRL_reg));
mf624_done();