diff --git a/src/epics/util/feCodeGen.pl b/src/epics/util/feCodeGen.pl
index c225320268c136b2573c08097bd299db5a1714d0..4bff5e06e1249d5ba34266b9ba145f4e7c8f1915 100755
--- a/src/epics/util/feCodeGen.pl
+++ b/src/epics/util/feCodeGen.pl
@@ -138,6 +138,7 @@ $rfmTimeSlave = -1;
 $diagTest = -1;
 $flipSignals = 0;
 $virtualiop = 0;
+$no_cpu_shutdown = 0;
 $edcu = 0;
 $casdf = 0;
 $globalsdf = 0;
@@ -2547,6 +2548,9 @@ if ($adcMaster > -1) {
   if($dacWdOverride > -1) {
   print OUTM "EXTRA_CFLAGS += -DDAC_WD_OVERRIDE\n";
   }
+  if ($no_cpu_shutdown > 0) {
+    print OUTM "EXTRA_CFLAGS += -DNO_CPU_SHUTDOWN\n";
+  }
   # ADD DAC_AUTOCAL to IOPs
   print OUTM "EXTRA_CFLAGS += -DDAC_AUTOCAL\n";
 } else {
diff --git a/src/epics/util/lib/Parameters.pm b/src/epics/util/lib/Parameters.pm
index c98dbead5d2d8c32b74d1fa1af5989cfaab0a1e9..4487c012debf930b476911ace1689195df983aa0 100644
--- a/src/epics/util/lib/Parameters.pm
+++ b/src/epics/util/lib/Parameters.pm
@@ -126,6 +126,8 @@ sub parseParams {
 				$::timeSlave = $spp[1];
 			} elsif ($spp[0] eq "iop_time_slave") {
 				$::iopTimeSlave = $spp[1];
+			} elsif ($spp[0] eq "no_cpu_shutdown") {
+				$::no_cpu_shutdown = $spp[1];
 			} elsif ($spp[0] eq "rfm_time_slave") {
 				$::rfmTimeSlave = $spp[1];
 			} elsif ($spp[0] eq "pciRfm") {
diff --git a/src/fe/controllerIop.c b/src/fe/controllerIop.c
index 9916604e62dde90901ba43904afb93901217f54e..e445fcc362ccd73ef23fa9e98e667e3cdd889a6b 100644
--- a/src/fe/controllerIop.c
+++ b/src/fe/controllerIop.c
@@ -505,9 +505,6 @@ adcInfo_t *padcinfo = (adcInfo_t *)&adcinfo;
   // Calculate how many CPU cycles per code cycle
   cpc = cpu_khz * 1000;
   cpc /= CYCLE_PER_SECOND;
-#ifdef NO_CPU_SHUTDOWN
-	usleep_range(2,4);
-#endif
 
 
 #ifdef NO_CPU_SHUTDOWN
@@ -677,6 +674,9 @@ adcInfo_t *padcinfo = (adcInfo_t *)&adcinfo;
           diagWord |= TIME_ERR_IRIGB;;
         }
       }
+#ifdef NO_CPU_SHUTDOWN
+	schedule();
+#endif
     }
 
 /// \> Update duotone diag information