]> rtime.felk.cvut.cz Git - mf624-simulink.git/blobdiff - sfAnalogInput.c
Add build mode WITHOUT_HW to edit model without MF624 hardware access.
[mf624-simulink.git] / sfAnalogInput.c
index fe72ebf27d44d364190e70f9f1d56de63fbe7115..70e4ca956d0307bfe47b5c5d30759567d9addfa6 100644 (file)
  */
 #include "simstruc.h"
 
+#include <stdint.h>
+
+#ifndef WITHOUT_HW
 #include "mf624_SIMULINK.h"
+#endif /*WITHOUT_HW*/
 
 
 /* Error handling
@@ -175,26 +179,27 @@ static void mdlInitializeSampleTimes(SimStruct *S)
    */
   static void mdlStart(SimStruct *S)
   {
+
+  #ifndef WITHOUT_HW
     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 ADCChannels = __builtin_popcount((uint32_t)ADCCMask);           //Counts number of set bits in ADCCMask
-    
+
     ssSetIWorkValue(S, 0, ADCChannels);
-    
+  #ifndef WITHOUT_HW
     mfst->ADC_enabled = ADCCMask;
     mfst->ADC_enabled &= 0xFF;
-    
+
     mf624_write16(mfst->ADC_enabled, MFST2REG(mfst, 2, ADCTRL_reg));
-    
-    
-    
+  #endif /*WITHOUT_HW*/
   }
 #endif /*  MDL_START */
 
@@ -212,35 +217,41 @@ static void mdlOutputs(SimStruct *S, int_T tid)
     real_T*       y[ADCChannels];
     int i;
     int res,res1;
-    
+  #ifndef WITHOUT_HW
     if (mf624_check(S) != 0)
-           return;
+        return;
 
     // 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);
     }
-    
+
+  #ifndef WITHOUT_HW
     // 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);
     }
-    
+
     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*/
 }
 
 
@@ -283,7 +294,9 @@ static void mdlOutputs(SimStruct *S, int_T tid)
  */
 static void mdlTerminate(SimStruct *S)
 {
+  #ifndef WITHOUT_HW
     mf624_done(S);
+  #endif /*WITHOUT_HW*/
 }