diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2020-12-04 23:16:31 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2020-12-04 23:16:31 -0700 |
commit | 7002cb8380406173407c9e8c8d16ebd670fff55c (patch) | |
tree | b6ba377167ce193879347d692f087084f130c561 /tests | |
parent | 83deae717de8b940b0cb04d1d1989b0a4c250e35 (diff) | |
download | stm32l4-7002cb8380406173407c9e8c8d16ebd670fff55c.tar.gz stm32l4-7002cb8380406173407c9e8c8d16ebd670fff55c.tar.bz2 stm32l4-7002cb8380406173407c9e8c8d16ebd670fff55c.zip |
Added kernel-level abstraction over the spi interface.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_spi.c | 63 |
1 files changed, 61 insertions, 2 deletions
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 <stdio.h> + +#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; } |