X-Git-Url: https://rtime.felk.cvut.cz/gitweb/mf624-simulink.git/blobdiff_plain/629314ef680aff5d27d5be1615805d585fc866b6..f68e0aa7d1b39a46e039a8c3b7bc8cca4ae7e86c:/sfPWMwDirOutput.c diff --git a/sfPWMwDirOutput.c b/sfPWMwDirOutput.c index 31cf582..24bf21a 100644 --- a/sfPWMwDirOutput.c +++ b/sfPWMwDirOutput.c @@ -56,7 +56,7 @@ enum {CTR_MODE_ZERO = 0, CTR_MODE_PLUS_PWM = 1, CTR_MODE_PLUS_FULL = 2, CTR_MODE_MINUS_PWM = -1, CTR_MODE_MINUS_FULL = -2}; -#define IWORK_COUNT 4 +#define IWORK_COUNT 5 #define IWORK_CHANNEL(S) (ssGetIWork(S)[IWORK_IDX_CHANNEL]) #define IWORK_DIR_DO_BIT(S) (ssGetIWork(S)[IWORK_IDX_DIR_DO_BIT]) @@ -76,10 +76,14 @@ enum {CTR_MODE_ZERO = 0, CTR_MODE_PLUS_PWM = 1, CTR_MODE_PLUS_FULL = 2, * its associated macro definitions. */ #include "simstruc.h" + +#ifndef WITHOUT_HW #include "mf624_SIMULINK.h" +#endif /*WITHOUT_HW*/ #define CTR_MAX_PWM_CHANNEL 3 +#ifndef WITHOUT_HW typedef struct { int32_T STATUS_reg; int32_T MODE_reg; @@ -96,6 +100,7 @@ static const ctr_channel_regs_t ctr_channel2regs[] = { {CTR3STATUS_reg, CTR3MODE_reg, CTR3_reg, CTR3A_reg, CTR3B_reg, CTRXCTRL_reg}, {CTR4STATUS_reg, CTR4MODE_reg, CTR4_reg, CTR4A_reg, -1, CTRXCTRL_reg} }; +#endif /*WITHOUT_HW*/ /* Error handling * -------------- @@ -121,6 +126,7 @@ static const ctr_channel_regs_t ctr_channel2regs[] = { * See matlabroot/simulink/src/sfuntmpl_doc.c for more details. */ +#ifndef WITHOUT_HW static void fncSetDirOutput(SimStruct *S, int_T direction_mode) { if (mf624_check(S) != 0) @@ -135,6 +141,7 @@ static void fncSetDirOutput(SimStruct *S, int_T direction_mode) mf624_write16(mfst->DOut, MFST2REG(mfst, 2, DOUT_reg)); } +#endif /*WITHOUT_HW*/ /*====================* * S-function methods * @@ -269,6 +276,7 @@ static void mdlStart(SimStruct *S) { int32_T ctr_mode; + #ifndef WITHOUT_HW if (mf624_init(NULL) != 0) return; @@ -286,6 +294,7 @@ static void mdlStart(SimStruct *S) /* 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)); + #endif /*WITHOUT_HW*/ } #endif /* MDL_START */ @@ -308,6 +317,7 @@ static void mdlOutputs(SimStruct *S, int_T tid) uint32_T T2_uint; int_T new_mode; + #ifndef WITHOUT_HW if (mf624_check(S) != 0) return; @@ -410,6 +420,7 @@ static void mdlOutputs(SimStruct *S, int_T tid) ctr_ctrl <<= IWORK_CHANNEL(S) * CTRXCTRL_CHANNEL_SHIFT; mf624_write32(ctr_ctrl, MFST2REG(mfst, 4, ctr_channel2regs[IWORK_CHANNEL(S)].CTRL_reg)); } + #endif /*WITHOUT_HW*/ } @@ -454,6 +465,7 @@ static void mdlTerminate(SimStruct *S) { int32_T ctr_mode; + #ifndef WITHOUT_HW if (mf624_check(S) == 0) { /* Force output low when finished */ ctr_mode = __val2mfld(CTR_MODE_OUTPUT_CONTROL_mask, CTR_MODE_OUTPUT_CONTROL_FORCE_LO); @@ -461,6 +473,7 @@ static void mdlTerminate(SimStruct *S) } mf624_done(); + #endif /*WITHOUT_HW*/ }