0
mirror of https://github.com/gusmanb/logicanalyzer.git synced 2025-03-12 16:34:33 +00:00
gusmanb-logicanalyzer/Firmware/LogicAnalyzer_V2/LogicAnalyzer.pio
Agustín Gimenez 41d27c99d9 Blast mode
2024-09-21 07:20:16 +02:00

241 lines
6.4 KiB
Plaintext

;--------------------------------------------------------------------------------------------
.program BLAST_CAPTURE
LOOP:
jmp pin LOOP ;wait for trigger
.wrap_target
in pins 32 ;capture
.wrap
;--------------------------------------------------------------------------------------------
.program POSITIVE_CAPTURE
pull
out y 32 ;read loop count
pull
mov x, osr ;read capture length (use MOV instead of PULL so we can MOV it again on each loop)
.wrap_target
in pins 32 ;read sample
jmp pin POST_CAPTURE ;exit wrap if pin is set
.wrap
POST_CAPTURE:
in pins 32 ;read sample
jmp x-- POST_CAPTURE ;loop if more samples needed
jmp y-- LOOP ;jump to loop control
irq 0 ;notify to the main program that we have finished capturing
LOCK:
jmp LOCK ;block the program
LOOP:
mov x, osr ;read loop count
INNER_LOOP:
jmp pin POST_CAPTURE ;wait for trigger
jmp INNER_LOOP
;--------------------------------------------------------------------------------------------
.program NEGATIVE_CAPTURE
pull
out y 32 ;read loop count
pull
mov x, osr ;read capture length (use MOV instead of PULL so we can MOV it again on each loop)
PRE_CAPTURE:
in pins 32 ;read sample
jmp pin PRE_CAPTURE ;loop if pin is set
POST_CAPTURE:
.wrap_target
in pins 32 ;read sample
jmp x-- POST_CAPTURE ;loop if more samples needed
jmp y-- LOOP ;jump to loop control
irq 0 ;notify to the main program that we have finished capturing
LOCK:
jmp LOCK ;block the program
LOOP:
mov x, osr ;read loop count
INNER_LOOP:
jmp pin INNER_LOOP ;wait for trigger
.wrap
;--------------------------------------------------------------------------------------------
.program POSITIVE_CAPTURE_MEASUREBURSTS
pull
out y 32 ;read loop count
pull
mov x, osr ;read capture length (use MOV instead of PULL so we can MOV it again on each loop)
irq wait 1 ;trigger NMI to sync first timestamp
.wrap_target
in pins 32 ;read sample
jmp pin POST_CAPTURE ;exit wrap if pin is set
.wrap
POST_CAPTURE:
in pins 32 ;read sample
jmp x-- POST_CAPTURE ;loop if more samples needed
jmp y-- LOOP ;jump to loop control
irq 1 ;trigger NMI on the CPU to capture burst timestamp
irq 0 ;notify to the main program that we have finished capturing
LOCK:
jmp LOCK ;block the program
LOOP:
irq 1 ;trigger NMI on the CPU to capture burst timestamp
mov x, osr ;read loop count
INNER_LOOP:
jmp pin POST_CAPTURE ;wait for trigger
jmp INNER_LOOP
;--------------------------------------------------------------------------------------------
.program NEGATIVE_CAPTURE_MEASUREBURSTS
pull
out y 32 ;read loop count
pull
mov x, osr ;read capture length (use MOV instead of PULL so we can MOV it again on each loop)
irq wait 1 ;trigger NMI to sync first timestamp
PRE_CAPTURE:
in pins 32 ;read sample
jmp pin PRE_CAPTURE ;loop if pin is set
POST_CAPTURE:
.wrap_target
in pins 32 ;read sample
jmp x-- POST_CAPTURE ;loop if more samples needed
jmp y-- LOOP ;jump to loop control
irq 1 ;trigger NMI on the CPU to capture burst timestamp
irq 0 ;notify to the main program that we have finished capturing
LOCK:
jmp LOCK ;block the program
LOOP:
irq 1 ;trigger NMI on the CPU to capture burst timestamp
mov x, osr ;read loop count
INNER_LOOP:
jmp pin INNER_LOOP ;wait for trigger
.wrap
;--------------------------------------------------------------------------------------------
.program COMPLEX_CAPTURE
pull
out x 32 ;read capture length
wait irq 7 ;wait for trigger program to be ready
.wrap_target
in pins 29 ;read sample
jmp pin POST_CAPTURE ;exit wrap if pin is set
.wrap
POST_CAPTURE:
in pins 29 ;read sample
jmp x-- POST_CAPTURE ;loop if more samples needed
irq 0 ;notify to the main program that we have finished capturing
LOCK:
jmp LOCK ;block the program
;--------------------------------------------------------------------------------------------
.program FAST_CAPTURE
pull
out x 32 ;read capture length
.wrap_target
in pins 29 ;read sample
jmp pin POST_CAPTURE ;exit wrap if pin is set
.wrap
POST_CAPTURE:
in pins 29 ;read sample
jmp x-- POST_CAPTURE ;loop if more samples needed
irq 0 ;notify to the main program that we have finished capturing
LOCK:
jmp LOCK ;block the program
;--------------------------------------------------------------------------------------------
;--------Kept only for reference, the program is stored in volatile memory as it must--------
;---------be modified for concrete trigger parameters.---------------------------------------
;--------------------------------------------------------------------------------------------
;.program COMPLEX_TRIGGER
; pull
; out x 32 ;read trigger value
; set pins 0 ;set trigger pin to low
; irq 7 ;Release capture program
;TRIGGER_LOOP:
; mov osr, pins ;read pin status to output shift register
; out y, 4 ;output 4 bits to Y (writes 32 bits)
; jmp x!=y TRIGGER_LOOP ;loop if trigger not met
; set pins 1 ;set trigger pin to high (trigger met)
;LOCK:
; jmp LOCK ;block program