Hello, I am trying to run SPI Slave on NCS with NRFX drivers and for some reason device resets and I cannot figure out why. The code is pretty much straightforward, maybe someone could take a look and tell me what am I doing wrong? P.S. RESETREAS register gives me 4.
Here's the main:
#include <zephyr.h>
#include <sys/printk.h>
#include "nrfx_spis.h"
#define APP_SPIS_SCK_PIN 13
#define APP_SPIS_MISO_PIN 11
#define APP_SPIS_MOSI_PIN 12
#define APP_SPIS_CS_PIN 14
#define NRFX_SPIS_DEFAULT_DEF 0xFF
#define NRFX_SPIS_DEFAULT_ORC 0xFE
#define SPIS_NR 1
int err;
uint32_t u32Reset_reason;
nrfx_spis_t spis_t = NRFX_SPIS_INSTANCE(SPIS_NR);
//nrfx_spis_config_t spis_config_t = NRFX_SPIS_DEFAULT_CONFIG(PIN_SCK, PIN_MOSI, NRFX_SPIS_PIN_NOT_USED, PIN_CSN);
volatile uint8_t rx_buffer[255];
volatile uint8_t tx_buffer[255] = "Labas112";
void spis_event_handler_t(nrfx_spis_evt_t const *p_event, void *p_context)
{
printk("gautas event\n");
int err;
switch(p_event->evt_type)
{
case NRFX_SPIS_XFER_DONE:
err = nrfx_spis_buffers_set(&spis_t, tx_buffer, sizeof(tx_buffer), rx_buffer, sizeof(rx_buffer));
if(err != NRFX_SUCCESS)
{
printk("error w set\n");
}
break;
case NRFX_SPIS_BUFFERS_SET_DONE:
printk("buf set\n");
break;
case NRFX_SPIS_EVT_TYPE_MAX:
break;
}
}
void init_spis()
{
const nrfx_spis_config_t spis_config_t =
{
.csn_pin = APP_SPIS_CS_PIN,
.miso_pin = APP_SPIS_MISO_PIN,
.mosi_pin = APP_SPIS_MOSI_PIN,
.sck_pin = APP_SPIS_SCK_PIN,
.bit_order = NRF_SPIS_BIT_ORDER_MSB_FIRST,
.csn_pullup = NRF_GPIO_PIN_PULLUP,
.def = NRFX_SPIS_DEFAULT_DEF,
.orc = NRFX_SPIS_DEFAULT_ORC,
.irq_priority = NRFX_SPIS_DEFAULT_CONFIG_IRQ_PRIORITY,
.mode = NRF_SPIS_MODE_3,
.miso_drive = NRF_GPIO_PIN_H0H1
};
err = nrfx_spis_init(&spis_t, &spis_config_t, spis_event_handler_t, NULL);
if(err != NRFX_SUCCESS){
printk("init error.\n");
} else {
printk("SPIS start.\n");
}
}
void main(void)
{
init_spis();
u32Reset_reason = NRF_POWER->RESETREAS;
NRF_POWER->RESETREAS = NRF_POWER->RESETREAS;
err = nrfx_spis_buffers_set(&spis_t, tx_buffer, sizeof(tx_buffer), rx_buffer, sizeof(rx_buffer));
if(err != NRFX_SUCCESS){
printk("error w set\n");
}
while (1)
{
printk("while\n");
/* code */
}
}
And here's my project config:
# nothing here CONFIG_NRFX_SPIS=y CONFIG_NRFX_SPIS1=y CONFIG_BOARD_ENABLE_DCDC=n CONFIG_USE_SEGGER_RTT=n CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y