From 7002cb8380406173407c9e8c8d16ebd670fff55c Mon Sep 17 00:00:00 2001 From: Josh Rahm Date: Fri, 4 Dec 2020 23:16:31 -0700 Subject: Added kernel-level abstraction over the spi interface. --- tests/test_spi.c | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/test_spi.c b/tests/test_spi.c index 866f6e8..7e60c60 100644 --- a/tests/test_spi.c +++ b/tests/test_spi.c @@ -1,10 +1,69 @@ +#include + +#include "arch/stm32l4xxx/peripherals/rcc.h" #include "arch/stm32l4xxx/peripherals/spi.h" +#include "kern/common.h" +#include "kern/spi/spi_manager.h" #include "test_harness.h" TEST(spi, smoke) { - __IO spi_t* spi = &SPI1; - spi->s_r = 1; + int ec = 1; + spi_opts_t opts = DEFAULT_SPI_OPTS; + spi_t* spi = reserve_spi(SPI_SELECT_SPI1, &opts, &ec); + + ASSERT_EQ(ec, 0); + ASSERT_TRUE(spi != NULL); + + uint32_t reg = 0; + regset(reg, spi_bidimode, 0); + regset(reg, spi_crcen, 0); + regset(reg, spi_crcnext, 0); + regset(reg, spi_crcl, 0); + regset(reg, spi_rxonly, 0); + regset(reg, spi_ssm, 1); + regset(reg, spi_ssi, 1); + regset(reg, spi_lsbfirst, 1); + regset(reg, spi_spe, 1); + regset(reg, spi_br, SPI_BAUD_FPCLK_DIV_32); + regset(reg, spi_mstr, 1); + regset(reg, spi_cpol, 0); + regset(reg, spi_cpha, 0); + + ASSERT_EQ(SPI1.c_r1, reg); + + reg = 0; + regset(reg, spi_ldma_tx, 0); + regset(reg, spi_ldma_rx, 0); + regset(reg, spi_frxth, 0); + regset(reg, spi_ds, SPI_DATA_SIZE_8_BITS); + regset(reg, spi_txeie, 0); + regset(reg, spi_rxneie, 0); + regset(reg, spi_errie, 0); + regset(reg, spi_frf, 0); + regset(reg, spi_nssp, 0); + regset(reg, spi_ssoe, 0); + regset(reg, spi_txdmaen, 0); + regset(reg, spi_rxdmaen, 0); + SPI1.c_r2 = reg; + + ASSERT_EQ(SPI1.c_r2, reg); + + ASSERT_TRUE(regget(RCC.apb2en_r, rcc_spi1en)); + + return 0; +} + +TEST(spi, double_reserve) +{ + int ec = 10; + + spi_opts_t opts = DEFAULT_SPI_OPTS; + reserve_spi(SPI_SELECT_SPI1, &opts, &ec); + ASSERT_EQ(ec, 0); + spi_t* spi1_2 = reserve_spi(SPI_SELECT_SPI1, &opts, &ec); + ASSERT_EQ(spi1_2, NULL); + ASSERT_EQ(ec, SPI_ERROR_ALREADY_IN_USE); return 0; } -- cgit