Hi,
I am trying to use the SPIS 1 on the nrf52840 but when i compile the program i get the following problem:
Rebuilding ‘zephyr/isr_tables.c’ from solution ‘build’ in configuration ‘Common’
1> Combining ‘zephyr/isr_tables.c’
1> gen_isr_tables.py: multiple registrations at table_index 4 for irq 4 (0x4)
1> Has IRQ_CONNECT or IRQ_DIRECT_CONNECT accidentally been invoked on the same irq multiple times?
1> Traceback (most recent call last):
1> File "C:/Users/ncs/v1.2.0/zephyr/arch/common/gen_isr_tables.py", line 316, in <module>
1> main()
1> File "C:/Users/ncs/v1.2.0/zephyr/arch/common/gen_isr_tables.py", line 307, in main
1> + "\nHas IRQ_CONNECT or IRQ_DIRECT_CONNECT accidentally been invoked on the same irq multiple times?"
1> File "C:/Users/ncs/v1.2.0/zephyr/arch/common/gen_isr_tables.py", line 36, in error
1> raise Exception()
1> Exception
I am using SEGGER whit the "nrf Connect for Desktop"
Here is the code i am trying to get to work. (This code worked when i was only using Zephyr)
#include "..\config.h" #include <string.h> #include <sys/printk.h> #include <drivers/spi.h> #include <nrfx_spis.h> #include <stdbool.h> #include "..\error.h" // /* create a instance for the SPIS*/ static const nrfx_spis_t spis_p_instance = NRFX_SPIS_INSTANCE(1); /* SPI settings */ static const nrfx_spis_config_t spis_p_config = { .miso_pin = DT_ALIAS_SPI_1_MISO_PIN, .mosi_pin = DT_ALIAS_SPI_1_MOSI_PIN, .sck_pin = DT_ALIAS_SPI_1_SCK_PIN, .csn_pin = 35, .mode = NRF_SPIS_MODE_0, .bit_order = NRF_SPIS_BIT_ORDER_MSB_FIRST, .csn_pullup = NRF_GPIO_PIN_PULLDOWN, .miso_drive = NRF_GPIO_PIN_S0S1, .def = 0xFF, .orc = 0xFE, .irq_priority = NRFX_SPIS_DEFAULT_CONFIG_IRQ_PRIORITY, }; /* TX & RX buffers */ #define BUFFER_SIZE 50 #define TEST_STRING "nRF52840: Good Morning" static u8_t m_tx_buf[BUFFER_SIZE] = TEST_STRING; // TX buffer static u8_t m_rx_buf[BUFFER_SIZE]; // RX buffer static const u8_t m_length = sizeof(m_tx_buf); // Transfer length /* Interrupt for received message */ static void spis_event_handler(nrfx_spis_evt_t const * p_event, void * p_context) { if (p_event->evt_type == NRFX_SPIS_XFER_DONE) { u8_t *str = m_rx_buf; printk("Transfer completed. Received: %s\n", str); // reset interupt and buffers memset(m_tx_buf, 0, BUFFER_SIZE); strcat(m_tx_buf, "nRF52840: "); strcat(m_tx_buf, m_rx_buf); memset(m_rx_buf, 0, BUFFER_SIZE); nrfx_err_t volatile ret = nrfx_spis_buffers_set(&spis_p_instance, m_tx_buf, m_length, m_rx_buf, m_length); if(ret != NRFX_SUCCESS) { printk("error = %x\n", ret); } } } /* Initiating Test_SPIS.c */ extern int init_SPIS(void) { nrfx_err_t volatile ret; IRQ_CONNECT(DT_ALIAS_SPI_1_IRQ_0, DT_ALIAS_SPI_1_IRQ_0_PRIORITY, nrfx_isr, nrfx_spis_1_irq_handler, 0); // Init SPIS ret = nrfx_spis_init(&spis_p_instance, &spis_p_config, spis_event_handler, NULL); if(ret != NRFX_SUCCESS) { printk("error = %x\n", ret); return -1; } // setup interupt and buffers ret = nrfx_spis_buffers_set(&spis_p_instance, m_tx_buf, m_length, m_rx_buf, m_length); if(ret != NRFX_SUCCESS) { printk("error = %x\n", ret); return -1; } return 0; }