Solved: Well, turns out delay and SCK doesnt work well together haha. I imagined the sck signal to be a background thread of some sort. I was wrong.
Hi guys,
at the moment im trying to setup a SPI connection between an ADC and my nrf52832. Sadly i have some problems so i started from the beginning again and used the SPI master configuration code coming with the examples:
(sorry for the formating)
/* Copyright (c) 2015 Nordic Semiconductor. All Rights Reserved. *
- The information contained herein is property of Nordic Semiconductor ASA.
- Terms and conditions of usage are described in detail in NORDIC * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. * * Licensees are granted free, non-transferable use of the information. NO * WARRANTY of ANY KIND is provided. This heading must NOT be removed from * the file. * */
#include "nrf_drv_spi.h" #include "app_util_platform.h" #include "nrf_gpio.h" #include "nrf_delay.h" #include "boards.h" #include "app_error.h" #include <string.h> #define NRF_LOG_MODULE_NAME "APP" #include "nrf_log.h" #include "nrf_log_ctrl.h"
#define SPI_INSTANCE 0 /< SPI instance index. */ static const nrf_drv_spi_t spi = NRF_DRV_SPI_INSTANCE(SPI_INSTANCE); /< SPI instance. */ static volatile bool spi_xfer_done; /**< Flag used to indicate that SPI instance completed the transfer. */
#define TEST_STRING "Nordic" static uint8_t m_tx_buf[] = TEST_STRING; /< TX buffer. */ static uint8_t m_rx_buf[sizeof(TEST_STRING) + 1];
/< RX buffer. */ static const uint8_t m_length = sizeof(m_tx_buf);
/**< Transfer length. *//** * @brief SPI user event handler.
- @param event */ void spi_event_handler(nrf_drv_spi_evt_t const * p_event) { spi_xfer_done = true; NRF_LOG_INFO("Transfer completed.\r\n"); if (m_rx_buf[0] != 0) { NRF_LOG_INFO(" Received: \r\n"); NRF_LOG_HEXDUMP_INFO(m_rx_buf, strlen((const char *)m_rx_buf)); } }
int main(void) { bsp_board_leds_init();
APP_ERROR_CHECK(NRF_LOG_INIT(NULL)); NRF_LOG_INFO("SPI example\r\n"); nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG; spi_config.ss_pin = SPI_SS_PIN; //29 spi_config.miso_pin = SPI_MISO_PIN; // 28 spi_config.mosi_pin = SPI_MOSI_PIN;// 4 spi_config.sck_pin = SPI_SCK_PIN; // 3 spi_config.frequency =
NRF_SPI_FREQ_125K; APP_ERROR_CHECK(nrf_drv_spi_init(&spi, &spi_config, spi_event_handler));
while (1) { // Reset rx buffer and transfer done flag memset(m_rx_buf, 0, m_length); spi_xfer_done = false; APP_ERROR_CHECK(nrf_drv_spi_transfer(&spi,
m_tx_buf, m_length, m_rx_buf, m_length));
while (!spi_xfer_done) { __WFE(); } NRF_LOG_FLUSH(); bsp_board_led_invert(BSP_BOARD_LED_0); nrf_delay_ms(200); SEGGER_RTT_printf(0, "Read: %s\n", m_rx_buf); } }
Sadly when i measure the SCK signal i do not get any signal (no matter which resolution i chose), see attachment for my measurement.spi_osci.jpg
Despite that the transmission works and when i use the RTT Viewer it shows the "Nordic" message just fine.
What is wrong with my code? Why am I not getting a proper SCK signal?
Thank you :)