Uart pio fix zeros
Prevent UART from only getting 0s from the output
This commit is contained in:
parent
39c1cc9f00
commit
56b21ad429
@ -338,7 +338,7 @@ mod uart_rx {
|
|||||||
start:
|
start:
|
||||||
wait 0 pin 0 ; Stall until start bit is asserted
|
wait 0 pin 0 ; Stall until start bit is asserted
|
||||||
set x, 7 [10] ; Preload bit counter, then delay until halfway through
|
set x, 7 [10] ; Preload bit counter, then delay until halfway through
|
||||||
rx_bitloop: ; the first data bit (12 cycles incl wait, set).
|
rx_bitloop: ; the first data bit (12 cycles incl wait, set).
|
||||||
in pins, 1 ; Shift data bit into ISR
|
in pins, 1 ; Shift data bit into ISR
|
||||||
jmp x-- rx_bitloop [6] ; Loop 8 times, each loop iteration is 8 cycles
|
jmp x-- rx_bitloop [6] ; Loop 8 times, each loop iteration is 8 cycles
|
||||||
jmp pin good_rx_stop ; Check stop bit (should be high)
|
jmp pin good_rx_stop ; Check stop bit (should be high)
|
||||||
@ -347,7 +347,8 @@ mod uart_rx {
|
|||||||
wait 1 pin 0 ; and wait for line to return to idle state.
|
wait 1 pin 0 ; and wait for line to return to idle state.
|
||||||
jmp start ; Don't push data if we didn't see good framing.
|
jmp start ; Don't push data if we didn't see good framing.
|
||||||
|
|
||||||
good_rx_stop: ; No delay before returning to start; a little slack is
|
good_rx_stop: ; No delay before returning to start; a little slack is
|
||||||
|
in null 24
|
||||||
push ; important in case the TX clock is slightly too fast.
|
push ; important in case the TX clock is slightly too fast.
|
||||||
"#
|
"#
|
||||||
);
|
);
|
||||||
@ -361,8 +362,9 @@ mod uart_rx {
|
|||||||
sm_rx.set_pin_dirs(Direction::In, &[&rx_pin]);
|
sm_rx.set_pin_dirs(Direction::In, &[&rx_pin]);
|
||||||
|
|
||||||
cfg.clock_divider = (U56F8!(125_000_000) / (8 * baud)).to_fixed();
|
cfg.clock_divider = (U56F8!(125_000_000) / (8 * baud)).to_fixed();
|
||||||
cfg.shift_out.auto_fill = false;
|
cfg.shift_in.auto_fill = false;
|
||||||
cfg.shift_out.direction = ShiftDirection::Right;
|
cfg.shift_in.direction = ShiftDirection::Right;
|
||||||
|
cfg.shift_in.threshold = 32;
|
||||||
cfg.fifo_join = FifoJoin::RxOnly;
|
cfg.fifo_join = FifoJoin::RxOnly;
|
||||||
sm_rx.set_config(&cfg);
|
sm_rx.set_config(&cfg);
|
||||||
sm_rx.set_enable(true);
|
sm_rx.set_enable(true);
|
||||||
|
Loading…
Reference in New Issue
Block a user