61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| #include <stdio.h>
 | |
| 
 | |
| #include "pico/stdlib.h"
 | |
| #include "pico/multicore.h"
 | |
| #include "hardware/pio.h"
 | |
| #include "hardware/uart.h"
 | |
| #include "uart_rx.pio.h"
 | |
| 
 | |
| // This program
 | |
| // - Uses UART1 (the spare UART, by default) to transmit some text
 | |
| // - Uses a PIO state machine to receive that text
 | |
| // - Prints out the received text to the default console (UART0)
 | |
| // This might require some reconfiguration on boards where UART1 is the
 | |
| // default UART.
 | |
| 
 | |
| #define SERIAL_BAUD PICO_DEFAULT_UART_BAUD_RATE
 | |
| #define HARD_UART_INST uart1
 | |
| 
 | |
| // You'll need a wire from GPIO4 -> GPIO3
 | |
| #define HARD_UART_TX_PIN 4
 | |
| #define PIO_RX_PIN 3
 | |
| 
 | |
| // Ask core 1 to print a string, to make things easier on core 0
 | |
| void core1_main() {
 | |
|     const char *s = (const char *) multicore_fifo_pop_blocking();
 | |
|     uart_puts(HARD_UART_INST, s);
 | |
| }
 | |
| 
 | |
| int main() {
 | |
|     // Console output (also a UART, yes it's confusing)
 | |
|     setup_default_uart();
 | |
|     printf("Starting PIO UART RX example\n");
 | |
| 
 | |
|     // Set up the hard UART we're going to use to print characters
 | |
|     uart_init(HARD_UART_INST, SERIAL_BAUD);
 | |
|     gpio_set_function(HARD_UART_TX_PIN, GPIO_FUNC_UART);
 | |
| 
 | |
|     // Set up the state machine we're going to use to receive them.
 | |
|     PIO pio = pio0;
 | |
|     uint sm = 0;
 | |
|     uint offset = pio_add_program(pio, &uart_rx_program);
 | |
|     uart_rx_program_init(pio, sm, offset, PIO_RX_PIN, SERIAL_BAUD);
 | |
| 
 | |
|     // Tell core 1 to print some text to uart1 as fast as it can
 | |
|     multicore_launch_core1(core1_main);
 | |
|     const char *text = "Hello, world from PIO! (Plus 2 UARTs and 2 cores, for complex reasons)\n";
 | |
|     multicore_fifo_push_blocking((uint32_t) text);
 | |
| 
 | |
|     // Echo characters received from PIO to the console
 | |
|     while (true) {
 | |
|         char c = uart_rx_program_getc(pio, sm);
 | |
|         putchar(c);
 | |
|     }
 | |
| }
 |