Software support for external-trigger-once
This commit is contained in:
		
							parent
							
								
									a984e1c8ff
								
							
						
					
					
						commit
						66050aca5b
					
				|  | @ -26,6 +26,7 @@ std::string trigger_mode_to_string(puzzlefw::TriggerMode mode) | ||||||
|     switch (mode) { |     switch (mode) { | ||||||
|         case TriggerMode::TRIG_AUTO: return "auto"; |         case TriggerMode::TRIG_AUTO: return "auto"; | ||||||
|         case TriggerMode::TRIG_EXTERNAL: return "external"; |         case TriggerMode::TRIG_EXTERNAL: return "external"; | ||||||
|  |         case TriggerMode::TRIG_EXTERNAL_ONCE: return "external-once"; | ||||||
|         default: return "none"; |         default: return "none"; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | @ -206,6 +207,7 @@ int main(int argc, char **argv) | ||||||
|         OPT_CLEAR_DMA, OPT_CLEAR_TIMESTAMP, OPT_CLEAR_RANGE, |         OPT_CLEAR_DMA, OPT_CLEAR_TIMESTAMP, OPT_CLEAR_RANGE, | ||||||
|         OPT_ACQUISITION_ON, OPT_ACQUISITION_OFF, OPT_CHANNELS, |         OPT_ACQUISITION_ON, OPT_ACQUISITION_OFF, OPT_CHANNELS, | ||||||
|         OPT_TRIGGER_NONE, OPT_TRIGGER_AUTO, OPT_TRIGGER_EXT, |         OPT_TRIGGER_NONE, OPT_TRIGGER_AUTO, OPT_TRIGGER_EXT, | ||||||
|  |         OPT_TRIGGER_EXT_ONCE, | ||||||
|         OPT_TRIGGER_CHANNEL, OPT_TRIGGER_RISING, OPT_TRIGGER_FALLING, |         OPT_TRIGGER_CHANNEL, OPT_TRIGGER_RISING, OPT_TRIGGER_FALLING, | ||||||
|         OPT_TRIGGER_DELAY, OPT_TRIGGER, |         OPT_TRIGGER_DELAY, OPT_TRIGGER, | ||||||
|         OPT_RECORD_LEN, OPT_DIVISOR, OPT_AVERAGE, OPT_DECIMATE, OPT_SHIFT, |         OPT_RECORD_LEN, OPT_DIVISOR, OPT_AVERAGE, OPT_DECIMATE, OPT_SHIFT, | ||||||
|  | @ -226,6 +228,7 @@ int main(int argc, char **argv) | ||||||
|         {"trigger-none",      0, 0, OPT_TRIGGER_NONE}, |         {"trigger-none",      0, 0, OPT_TRIGGER_NONE}, | ||||||
|         {"trigger-auto",      0, 0, OPT_TRIGGER_AUTO}, |         {"trigger-auto",      0, 0, OPT_TRIGGER_AUTO}, | ||||||
|         {"trigger-ext",       0, 0, OPT_TRIGGER_EXT}, |         {"trigger-ext",       0, 0, OPT_TRIGGER_EXT}, | ||||||
|  |         {"trigger-ext-once",  0, 0, OPT_TRIGGER_EXT_ONCE}, | ||||||
|         {"trigger-channel",   1, 0, OPT_TRIGGER_CHANNEL}, |         {"trigger-channel",   1, 0, OPT_TRIGGER_CHANNEL}, | ||||||
|         {"trigger-rising",    0, 0, OPT_TRIGGER_RISING}, |         {"trigger-rising",    0, 0, OPT_TRIGGER_RISING}, | ||||||
|         {"trigger-falling",   0, 0, OPT_TRIGGER_FALLING}, |         {"trigger-falling",   0, 0, OPT_TRIGGER_FALLING}, | ||||||
|  | @ -264,6 +267,7 @@ int main(int argc, char **argv) | ||||||
|         "  --trigger-none        Disable triggering.\n" |         "  --trigger-none        Disable triggering.\n" | ||||||
|         "  --trigger-auto        Enable continuous triggering.\n" |         "  --trigger-auto        Enable continuous triggering.\n" | ||||||
|         "  --trigger-ext         Enable external trigger.\n" |         "  --trigger-ext         Enable external trigger.\n" | ||||||
|  |         "  --trigger-ext-once    Enable external trigger once.\n" | ||||||
|         "  --trigger-channel N   Select trigger input channel (range 0 to 3)." |         "  --trigger-channel N   Select trigger input channel (range 0 to 3)." | ||||||
|         "\n" |         "\n" | ||||||
|         "  --trigger-rising      Trigger on rising edge.\n" |         "  --trigger-rising      Trigger on rising edge.\n" | ||||||
|  | @ -359,6 +363,9 @@ int main(int argc, char **argv) | ||||||
|             case OPT_TRIGGER_EXT: |             case OPT_TRIGGER_EXT: | ||||||
|                 args.trigger_mode = puzzlefw::TRIG_EXTERNAL; |                 args.trigger_mode = puzzlefw::TRIG_EXTERNAL; | ||||||
|                 break; |                 break; | ||||||
|  |             case OPT_TRIGGER_EXT_ONCE: | ||||||
|  |                 args.trigger_mode = puzzlefw::TRIG_EXTERNAL_ONCE; | ||||||
|  |                 break; | ||||||
|             case OPT_TRIGGER_CHANNEL: |             case OPT_TRIGGER_CHANNEL: | ||||||
|                 args.trigger_channel = parse_int(optarg, ok); |                 args.trigger_channel = parse_int(optarg, ok); | ||||||
|                 if (!ok |                 if (!ok | ||||||
|  |  | ||||||
|  | @ -88,9 +88,10 @@ static inline void sync_dma() | ||||||
| 
 | 
 | ||||||
| /** Trigger modes. */ | /** Trigger modes. */ | ||||||
| enum TriggerMode { | enum TriggerMode { | ||||||
|     TRIG_NONE = 0,      // trigger disabled, manual trigger only
 |     TRIG_NONE = 0,          // trigger disabled, manual trigger only
 | ||||||
|     TRIG_AUTO = 1,      // continuous triggering
 |     TRIG_AUTO = 1,          // continuous triggering
 | ||||||
|     TRIG_EXTERNAL = 2   // external triggering
 |     TRIG_EXTERNAL = 2,      // external triggering
 | ||||||
|  |     TRIG_EXTERNAL_ONCE = 3  // external trigger once
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -267,6 +268,9 @@ public: | ||||||
|         if ((v & 0x02) != 0) { |         if ((v & 0x02) != 0) { | ||||||
|             return TRIG_EXTERNAL; |             return TRIG_EXTERNAL; | ||||||
|         } |         } | ||||||
|  |         if ((v & 0x04) != 0) { | ||||||
|  |             return TRIG_EXTERNAL_ONCE; | ||||||
|  |         } | ||||||
|         return TRIG_NONE; |         return TRIG_NONE; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -274,13 +278,16 @@ public: | ||||||
|     void set_trigger_mode(TriggerMode mode) |     void set_trigger_mode(TriggerMode mode) | ||||||
|     { |     { | ||||||
|         uint32_t v = read_reg(REG_TRIGGER_MODE); |         uint32_t v = read_reg(REG_TRIGGER_MODE); | ||||||
|         v &= 0xfc; |         v &= 0xf0; | ||||||
|         if (mode == TRIG_AUTO) { |         if (mode == TRIG_AUTO) { | ||||||
|             v |= 0x01; |             v |= 0x01; | ||||||
|         } |         } | ||||||
|         if (mode == TRIG_EXTERNAL) { |         if (mode == TRIG_EXTERNAL) { | ||||||
|             v |= 0x02; |             v |= 0x02; | ||||||
|         } |         } | ||||||
|  |         if (mode == TRIG_EXTERNAL_ONCE) { | ||||||
|  |             v |= 0x04; | ||||||
|  |         } | ||||||
|         write_reg(REG_TRIGGER_MODE, v); |         write_reg(REG_TRIGGER_MODE, v); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue