BM-SDK-nRF54L15-IRQ

nRF54L15 DK Board

BM-SDK-V1.0

Hi:

I have debugged the IRQ according to the nrfx demo, but now there is an unresolvable error that requires assistance.

This is an error printed by RTT:

00> [00:00:04.744,266] <err> os: Unhandled IRQn: 219
00> [00:00:04.744,285] <err> os: >>> ZEPHYR FATAL ERROR 1: Unhandled interrupt on CPU 0
00> [00:00:04.807,684] <err> os: Halting system

This is my test code. When I use nRF54 DK press button 0 or 1, an error pops up:

/*
 * Copyright (c) 2025 Nordic Semiconductor ASA
 *
 * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
 */

#include <zephyr/kernel.h> /* k_busy_wait() */
#include <zephyr/sys_clock.h> /* USEC_PER_MSEC */
#include <zephyr/logging/log.h>
#include <zephyr/logging/log_ctrl.h>

#include <nrfx_gpiote.h>
#include <hal/nrf_gpio.h>


LOG_MODULE_REGISTER(app, CONFIG_APP_LEDS_LOG_LEVEL);

//---------------------------------------------------------------------------------------------
// GPIOTE
#define BUTTON_0                        NRF_PIN_PORT_TO_PIN_NUMBER(13, 1)
#define BUTTON_1                        NRF_PIN_PORT_TO_PIN_NUMBER(9, 1)
#define BUTTON_2                        NRF_PIN_PORT_TO_PIN_NUMBER(8, 1)
#define BUTTON_3                        NRF_PIN_PORT_TO_PIN_NUMBER(4, 0)

#define GPIOTE_INST                     NRF_GPIOTE20
#define CONFIG_APP_GPIOTE_IRQ_PRIO      0

/* GPIOTE30 ʵ�� */
static nrfx_gpiote_t gpiote_inst = NRFX_GPIOTE_INSTANCE(GPIOTE_INST);

/* PORT �¼��ص���������Ź���ͬһ handler */
static void port_event_handler(nrfx_gpiote_pin_t pin,
                                nrfx_gpiote_trigger_t trigger,
                                void *context)
{
    /* nrfx �����ڲ����Զ�����¼� */
    if (pin == BUTTON_0) {
        LOG_INF("BUTTON_0");
        /* ���� BUTTON_0 �¼� */
    } else if (pin == BUTTON_1) {
        LOG_INF("BUTTON_1");
        /* ���� BUTTON_1 �¼� */
    }
}

ISR_DIRECT_DECLARE(gpiote_30_direct_isr)
{
	//nrfx_gpiote_irq_handler(&gpiote_inst);
	 nrfx_gpiote_irq_handler(&gpiote_inst);  /* ��ʹ�� NRFX_GPIOTE_INST_HANDLER_GET(20) */
	return 0;
}

void Key_Init(void)
{
    int err;

    /* ��ʼ�� GPIOTE20 */
    IRQ_DIRECT_CONNECT(NRFX_IRQ_NUMBER_GET(GPIOTE_INST),
			   CONFIG_APP_GPIOTE_IRQ_PRIO,
			   gpiote_20_direct_isr, 0);

	irq_enable(NRFX_IRQ_NUMBER_GET(GPIOTE_INST));
    
    err = nrfx_gpiote_init(&gpiote_inst, CONFIG_APP_GPIOTE_IRQ_PRIO);
    if (err) {
        LOG_ERR("nrfx_gpiote_init error: 0x%08X", err);
        return;
    }

    /* ʹ�� PORT �¼�������������ͨ����p_in_channel = NULL�� */
    nrf_gpio_pin_pull_t pull_config = NRF_GPIO_PIN_PULLUP;

    /* PORT �¼��������ã�p_in_channel ��Ϊ NULL ��ʾʹ�� PORT �¼��� */
    nrfx_gpiote_trigger_config_t trigger_config = {
        .trigger      = NRFX_GPIOTE_TRIGGER_HITOLO,
        .p_in_channel = NULL,  /* NULL = ʹ�� PORT �¼�����ռ�ö���ͨ�� */
    };

    nrfx_gpiote_handler_config_t handler_config = {
        .handler   = port_event_handler,
        .p_context = NULL,
    };

    nrfx_gpiote_input_pin_config_t input_config = {
        .p_pull_config    = &pull_config,
        .p_trigger_config = &trigger_config,
        .p_handler_config = &handler_config,
    };

    /* ���� BUTTON_0 */
    err = nrfx_gpiote_input_configure(&gpiote_inst, BUTTON_0, &input_config);
    if (err) {
        LOG_ERR("BUTTON_0 configure error: 0x%08X", err);
        return;
    }
    nrfx_gpiote_trigger_enable(&gpiote_inst, BUTTON_0, true);

    /* ���� BUTTON_1������ͬһ handler�� */
    err = nrfx_gpiote_input_configure(&gpiote_inst, BUTTON_1, &input_config);
    if (err) {
        LOG_ERR("BUTTON_1 configure error: 0x%08X", err);
        return;
    }
    nrfx_gpiote_trigger_enable(&gpiote_inst, BUTTON_1, true);
}

int main(void)
{
	LOG_INF("LEDs sample started");

	/* Initialize the LED */
	
    Key_Init();
	while (true) {
		while (LOG_PROCESS()) {
		}

		/* Turn the LED on *

		/* Turn the LED off */


	}

	return 0;
}
5241.prj.conf

Parents Reply Children
No Data
Related