Hello everybody,
I am trying to get the RTC0 peripheral working on Nordic nrf9151-DK using libraries from Nordic (nrfx_rtc.h, nrfx_clock.h and hal/nrf_rtc.h). I am not able to run rtc_handler using IRQ. Could you please help me with getting RTC0 up and running?
Main.c looks like this:
#include <zephyr/kernel.h> #include <zephyr/device.h> #include <zephyr/devicetree.h> #include <zephyr/drivers/rtc.h> #include <nrfx_rtc.h> #include <nrfx_clock.h> #include <hal/nrf_rtc.h> bool pripravenost=false; int navratova=0; int pocitadlo=0; struct rtc_time time; static const nrfx_rtc_t rtc0=NRFX_RTC_INSTANCE(0); void rtc_handler(nrfx_rtc_int_type_t int_type) { if (int_type == NRFX_RTC_INT_TICK) { printk("RTC tick\n"); } pocitadlo=pocitadlo+1; if(pocitadlo==10000) { pocitadlo=0; printk("Hoja hoj\n"); } } int main(void) { if (!nrfx_clock_lfclk_is_running()) { nrfx_clock_enable(); nrfx_clock_lfclk_start(); printk("Povoleno + start\n"); while (!nrfx_clock_lfclk_is_running()) { /* čekej na start */ } } printk("Hodiny jedou\n"); nrfx_rtc_config_t config = NRFX_RTC_DEFAULT_CONFIG; config.prescaler = NRF_RTC_FREQ_TO_PRESCALER(10); config.tick_latency = NRFX_RTC_US_TO_TICKS(1000, 32768), config.reliable=true; nrfx_err_t err = nrfx_rtc_init(&rtc0, &config, rtc_handler); if (err != NRFX_SUCCESS) { printk("RTC init error: %d\n", err); } else { printk("RTC slape\n"); } // Povol tick interrupt nrfx_rtc_tick_enable(&rtc0, true); // Start RTC nrfx_rtc_enable(&rtc0); //IRQ_CONNECT(RTC0_IRQn, 1, rtc_handler, NULL, 0); //irq_enable(RTC0_IRQn); while(1) { uint32_t ticks; ticks=nrfx_rtc_counter_get(&rtc0); k_msleep(1000); // zpomal pro debug printk("RTC hodnota: %d\n",ticks); } return 0; }
prj.conf looks like this:
# Povolení konzole CONFIG_CONSOLE=y # Povolení standardního výstupu (např. printf) CONFIG_PRINTK=y CONFIG_RTC=y CONFIG_CLOCK_CONTROL=y CONFIG_CLOCK_CONTROL_NRF=y CONFIG_NRFX_CLOCK=y #CONFIG_NRFX_RTC=y CONFIG_NRFX_RTC0=y #CONFIG_NRFX_RTC1=y CONFIG_MAIN_STACK_SIZE=2048 CONFIG_RTC_ALARM=y CONFIG_RTC_UPDATE=y
nrf9151dk_nrf9151_defconfig looks like this:
# SPDX-License-Identifier: Apache-2.0 # Enable MPU CONFIG_ARM_MPU=y # Enable hardware stack protection CONFIG_HW_STACK_PROTECTION=y # Enable TrustZone-M CONFIG_ARM_TRUSTZONE_M=y # Enable GPIO CONFIG_GPIO=y # Enable UART driver CONFIG_SERIAL=y # Enable console CONFIG_CONSOLE=y CONFIG_UART_CONSOLE=y #CONFIG_RTC=y CONFIG_CLOCK_CONTROL=y CONFIG_CLOCK_CONTROL_NRF=y CONFIG_NRFX_CLOCK=y #CONFIG_NRFX_RTC=y CONFIG_NRFX_RTC0=y #CONFIG_NRFX_RTC1=y
nrf9151dk_nrf9151_ns.overlay looks like this:
/* * Copyright (c) 2024 Nordic Semiconductor ASA * * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause */ &rtc0 { status="okay"; }; &clock { status = "okay"; }; &systick { zephyr,deferred-init; };
nrf9151dk_nrf9151.dts looks like this:
/* * Copyright (c) 2023 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ /dts-v1/; #include <nordic/nrf9151_laca.dtsi> #include "nrf9151dk_nrf9151_common.dtsi" / { chosen { zephyr,sram = &sram0_s; zephyr,flash = &flash0; zephyr,code-partition = &slot0_partition; zephyr,sram-secure-partition = &sram0_s; zephyr,sram-non-secure-partition = &sram0_ns; }; }; &rtc0 { status="okay"; }; &clock { status = "okay"; }; &systick { zephyr,deferred-init; };
My build configuration:
Could I use IRQ_CONNECT and irg_enable?
Kind regards
Jaroslav Havel