* its associated macro definitions.
*/
#include "simstruc.h"
+
+#ifndef WITHOUT_HW
#include "mf624_SIMULINK.h"
static const int32_T irc_channel2reg[] = {
IRC2_reg,
IRC3_reg
};
+#endif /*WITHOUT_HW*/
/* 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");
+ #ifndef WITHOUT_HW
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");
+ #endif /*WITHOUT_HW*/
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;
+ #ifndef WITHOUT_HW
if (mf624_check(S) != 0)
return;
IRC_mode_change(mfst, mask, reset_mode);
IRC_mode_change(mfst, mask, reset_mode_save & mask);
}
+ #endif /*WITHOUT_HW*/
}
#endif /* MDL_INITIALIZE_CONDITIONS */
int_T filter;
int_T mask;
+ #ifndef WITHOUT_HW
if (mf624_init(NULL) != 0)
return;
IRC_mode_change(mfst, mask << shift, IWORK_IRCCTRL(S) << shift);
+ #endif /*WITHOUT_HW*/
+
mdlInitializeConditions(S);
}
#endif /* MDL_START */
{
int32_T *y = ssGetOutputPortSignal(S,0);
+ #ifndef WITHOUT_HW
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;
+ #ifndef WITHOUT_HW
if (mf624_check(S) != 0)
return;
shift = IWORK_CHANNEL(S) * IRCCTRL_CHANNEL_SHIFT;
IRC_mode_change(mfst, mask << shift, IWORK_IRCCTRL(S) << shift);
}
+ #endif /*WITHOUT_HW*/
}
#endif /* MDL_UPDATE */
*/
static void mdlTerminate(SimStruct *S)
{
+ #ifndef WITHOUT_HW
mf624_done();
+ #endif /*WITHOUT_HW*/
}