]> rtime.felk.cvut.cz Git - mf624-simulink.git/blobdiff - sfReadPWM.c
Improve cleanup on termination (unmaps mappings and closes fd)
[mf624-simulink.git] / sfReadPWM.c
index a2a344863b21687d17c53fa279ced571a6ff5eb9..fcd406ece4f53d14bedea7a8f7f8167699a18358 100644 (file)
@@ -2,7 +2,7 @@
 #define S_FUNCTION_NAME  sfReadPWM
 #define S_FUNCTION_LEVEL 2
 
-#define CTRX_MODE 2083 //=100000100011, count up, repeat, outpu low,gate by ctrIn
+#define CTRX_MODE 10275 //=10100000100011, count up, repeat, outpu low,gate by ctrIn, gate high
 #define CTR4_MODE 35 //100011, count upm, repeat,output low
 #define CTR_START ((1 << 0) | (1 << 6) | (1 << 12) | (1 << 24)) //start counters 0,1,2,4
 #define CTR_STOP  ((1 << 1) | (1 << 7) | (1 << 13) | (1 << 25)) //stop counters 0,1,2,4
@@ -93,7 +93,7 @@ static void mdlInitializeSizes(SimStruct *S)
  */
 static void mdlInitializeSampleTimes(SimStruct *S)
 {
-    ssSetSampleTime(S, 0, CONTINUOUS_SAMPLE_TIME);
+    ssSetSampleTime(S, 0, 0.00005);
     ssSetOffsetTime(S, 0, 0.0);
 
 }
@@ -130,29 +130,8 @@ static void mdlInitializeSampleTimes(SimStruct *S)
    */
   static void mdlStart(SimStruct *S)
   {
-    if(mfst==NULL){
-        #define BUFF_SMALL             32
-        mfst = malloc(sizeof(mf624_state_t));
-        char buff[BUFF_SMALL];
-        memset(buff, '\0', BUFF_SMALL);
-        mfst->uio_dev = "uio0";
-
-        strncat(buff, "/dev/", 5);
-        strncat(buff, mfst->uio_dev, sizeof(buff) - 6);
-
-        mfst->device_fd = open_device(buff);
-    
-        if (mfst->device_fd < 0) {
-            ssSetErrorStatus(S,"open failed");
-            return;
-        }
-    
-        if (mmap_regions(mfst) < 0) {
-            ssSetErrorStatus(S,"mmap_regions failed");
-               return;
-        }
-    
-    }
+    if (mf624_init(NULL) != 0)
+       return;
             
     /*Configuration of desired counter modes*/
     mf624_write32(CTRX_MODE,MFST2REG(mfst,4,CTR0MODE));
@@ -194,7 +173,9 @@ static void mdlOutputs(SimStruct *S, int_T tid)
     unsigned int period;
     unsigned int c0,c1,c2,c4;
     
-    
+    if (mf624_check(S) != 0)
+           return;
+       
     c0 = mf624_read32(MFST2REG(mfst,4,CTR0));
     c1 = mf624_read32(MFST2REG(mfst,4,CTR1));
     c2 = mf624_read32(MFST2REG(mfst,4,CTR2));
@@ -252,34 +233,11 @@ static void mdlOutputs(SimStruct *S, int_T tid)
  */
 static void mdlTerminate(SimStruct *S)
 {
-    if(mfst!=NULL){
-        mf624_write32(CTR_STOP,MFST2REG(mfst,4,CTRXCTRL));
-        free(mfst);
-        mfst=NULL;
-    } else {
-        mfst = malloc(sizeof(mf624_state_t));
-        char buff[BUFF_SMALL];
-        memset(buff, '\0', BUFF_SMALL);
-        mfst->uio_dev = "uio0";
-
-        strncat(buff, "/dev/", 5);
-        strncat(buff, mfst->uio_dev, sizeof(buff) - 6);
-
-        mfst->device_fd = open_device(buff);
-    
-        if (mfst->device_fd < 0) {
-            ssSetErrorStatus(S,"open failed");
-            return;
-        }
-    
-        if (mmap_regions(mfst) < 0) {
-            ssSetErrorStatus(S,"mmap_regions failed");
-               return;
-        }
-        mf624_write32(CTR_STOP,MFST2REG(mfst,4,CTRXCTRL));
-        free(mfst);
-        mfst=NULL;
-    }
+    if (mf624_check(NULL) != 0)
+           return;
+
+    mf624_write32(CTR_STOP,MFST2REG(mfst,4,CTRXCTRL));
+    mf624_done();
 }