WIP: init real SPI
This commit is contained in:
parent
deb1b816ce
commit
638b536ce0
|
@ -3,6 +3,7 @@
|
||||||
#include "pico/binary_info.h"
|
#include "pico/binary_info.h"
|
||||||
#include "pico/sleep.h"
|
#include "pico/sleep.h"
|
||||||
#include "hardware/i2c.h"
|
#include "hardware/i2c.h"
|
||||||
|
#include "hardware/spi.h"
|
||||||
#include "hardware/irq.h"
|
#include "hardware/irq.h"
|
||||||
#include "hardware/rtc.h"
|
#include "hardware/rtc.h"
|
||||||
#include "fusb302b.h"
|
#include "fusb302b.h"
|
||||||
|
@ -873,10 +874,26 @@ void on_uart_rx() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define SPI_BUF_LEN 0x100
|
||||||
|
uint8_t spi_out_buf[SPI_BUF_LEN];
|
||||||
|
uint8_t spi_in_buf[SPI_BUF_LEN];
|
||||||
|
void init_spi_client() {
|
||||||
|
spi_init(spi1, 1000 * 1000);
|
||||||
|
// we don't appreciate the wording, but it's the API we are given
|
||||||
|
spi_set_slave(spi1, true);
|
||||||
|
gpio_set_function(PIN_SOM_MOSI, GPIO_FUNC_SPI);
|
||||||
|
gpio_set_function(PIN_SOM_MISO, GPIO_FUNC_SPI);
|
||||||
|
gpio_set_function(PIN_SOM_SS0, GPIO_FUNC_SPI);
|
||||||
|
gpio_set_function(PIN_SOM_SCK, GPIO_FUNC_SPI);
|
||||||
|
|
||||||
|
printf("[init_spi_client] done.\n");
|
||||||
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
//set_sys_clock_48mhz();
|
//set_sys_clock_48mhz();
|
||||||
|
|
||||||
stdio_init_all();
|
stdio_init_all();
|
||||||
|
init_spi_client();
|
||||||
|
|
||||||
// UART to keyboard
|
// UART to keyboard
|
||||||
uart_init(UART_ID, BAUD_RATE);
|
uart_init(UART_ID, BAUD_RATE);
|
||||||
|
@ -890,6 +907,7 @@ int main() {
|
||||||
//irq_set_enabled(UART_IRQ, true);
|
//irq_set_enabled(UART_IRQ, true);
|
||||||
//uart_set_irq_enables(UART_ID, true, false); // bool rx_has_data, bool tx_needs_data
|
//uart_set_irq_enables(UART_ID, true, false); // bool rx_has_data, bool tx_needs_data
|
||||||
|
|
||||||
|
// UART to som
|
||||||
uart_init(uart0, BAUD_RATE);
|
uart_init(uart0, BAUD_RATE);
|
||||||
uart_set_format(uart0, DATA_BITS, STOP_BITS, PARITY);
|
uart_set_format(uart0, DATA_BITS, STOP_BITS, PARITY);
|
||||||
uart_set_hw_flow(uart0, false, false);
|
uart_set_hw_flow(uart0, false, false);
|
||||||
|
@ -948,7 +966,7 @@ int main() {
|
||||||
gpio_put(PIN_LED_B, 0);
|
gpio_put(PIN_LED_B, 0);
|
||||||
|
|
||||||
// TODO: actual SPI bus
|
// TODO: actual SPI bus
|
||||||
gpio_init(PIN_SOM_MOSI);
|
/*gpio_init(PIN_SOM_MOSI);
|
||||||
gpio_init(PIN_SOM_SS0);
|
gpio_init(PIN_SOM_SS0);
|
||||||
gpio_init(PIN_SOM_SCK);
|
gpio_init(PIN_SOM_SCK);
|
||||||
gpio_init(PIN_SOM_MISO);
|
gpio_init(PIN_SOM_MISO);
|
||||||
|
@ -959,7 +977,7 @@ int main() {
|
||||||
gpio_put(PIN_SOM_MOSI, 0);
|
gpio_put(PIN_SOM_MOSI, 0);
|
||||||
gpio_put(PIN_SOM_SS0, 0);
|
gpio_put(PIN_SOM_SS0, 0);
|
||||||
gpio_put(PIN_SOM_SCK, 0);
|
gpio_put(PIN_SOM_SCK, 0);
|
||||||
gpio_put(PIN_SOM_MISO, 0);
|
gpio_put(PIN_SOM_MISO, 0);*/
|
||||||
//gpio_set_pulls(PIN_SOM_MOSI, 0, 0);
|
//gpio_set_pulls(PIN_SOM_MOSI, 0, 0);
|
||||||
//gpio_set_pulls(PIN_SOM_MISO, 0, 0);
|
//gpio_set_pulls(PIN_SOM_MISO, 0, 0);
|
||||||
//gpio_set_pulls(PIN_SOM_SS0, 0, 0);
|
//gpio_set_pulls(PIN_SOM_SS0, 0, 0);
|
||||||
|
@ -993,10 +1011,29 @@ int main() {
|
||||||
printf("[pocket-sysctl] entering main loop.\n");
|
printf("[pocket-sysctl] entering main loop.\n");
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
// handle commands from keyboard
|
||||||
while (uart_is_readable(UART_ID)) {
|
while (uart_is_readable(UART_ID)) {
|
||||||
handle_commands(uart_getc(UART_ID));
|
handle_commands(uart_getc(UART_ID));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (spi_is_readable(spi1)) {
|
||||||
|
// 0x01 is some "repeated tx data"
|
||||||
|
spi_read_blocking(spi1, 0x01, spi_in_buf, 1);
|
||||||
|
printf("[spi read] %02x\n", spi_in_buf[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// handle commands over usb serial
|
||||||
|
int usb_c = getchar_timeout_us(0);
|
||||||
|
if (usb_c != PICO_ERROR_TIMEOUT) {
|
||||||
|
printf("[acm command] '%x'\n", usb_c);
|
||||||
|
if (usb_c == '1') {
|
||||||
|
turn_som_power_on();
|
||||||
|
}
|
||||||
|
else if (usb_c == '0') {
|
||||||
|
turn_som_power_off();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (state == 0) {
|
if (state == 0) {
|
||||||
gpio_put(PIN_LED_R, 0);
|
gpio_put(PIN_LED_R, 0);
|
||||||
power_objects = 0;
|
power_objects = 0;
|
||||||
|
|
Loading…
Reference in New Issue