@@ -2435,11 +2435,30 @@ static int uarte_instance_init(const struct device *dev,
24352435 return pm_device_driver_init (dev , uarte_nrfx_pm_action );
24362436}
24372437
2438- #define UARTE_IRQ_CONFIGURE (idx , isr_handler ) \
2439- do { \
2440- IRQ_CONNECT(DT_IRQN(UARTE(idx)), DT_IRQ(UARTE(idx), priority), \
2441- isr_handler, DEVICE_DT_GET(UARTE(idx)), 0); \
2442- irq_enable(DT_IRQN(UARTE(idx))); \
2438+ #define UARTE_GET_ISR (idx ) \
2439+ COND_CODE_1(CONFIG_UART_##idx##_ASYNC, (uarte_nrfx_isr_async), (uarte_nrfx_isr_int))
2440+
2441+ /* Declare interrupt handler for direct ISR. */
2442+ #define UARTE_DIRECT_ISR_DECLARE (idx ) \
2443+ IF_ENABLED(CONFIG_UART_NRFX_UARTE_DIRECT_ISR, ( \
2444+ ISR_DIRECT_DECLARE(uarte_##idx##_direct_isr) \
2445+ { \
2446+ ISR_DIRECT_PM(); \
2447+ UARTE_GET_ISR(idx)(DEVICE_DT_GET(UARTE(idx))); \
2448+ return 1; \
2449+ } \
2450+ ))
2451+
2452+ /* Depending on configuration standard or direct IRQ is connected. */
2453+ #define UARTE_IRQ_CONNECT (idx , irqn , prio ) \
2454+ COND_CODE_1(CONFIG_UART_NRFX_UARTE_DIRECT_ISR, \
2455+ (IRQ_DIRECT_CONNECT(irqn, prio, uarte_##idx##_direct_isr, 0)), \
2456+ (IRQ_CONNECT(irqn, prio, UARTE_GET_ISR(idx), DEVICE_DT_GET(UARTE(idx)), 0)))
2457+
2458+ #define UARTE_IRQ_CONFIGURE (idx ) \
2459+ do { \
2460+ UARTE_IRQ_CONNECT(idx, DT_IRQN(UARTE(idx)), DT_IRQ(UARTE(idx), priority)); \
2461+ irq_enable(DT_IRQN(UARTE(idx))); \
24432462 } while (false)
24442463
24452464/* Low power mode is used when disable_rx is not defined or in async mode if
@@ -2573,11 +2592,10 @@ static int uarte_instance_init(const struct device *dev,
25732592 .precision = NRF_CLOCK_CONTROL_PRECISION_DEFAULT,\
25742593 },)) \
25752594 }; \
2595+ UARTE_DIRECT_ISR_DECLARE(idx) \
25762596 static int uarte_##idx##_init(const struct device *dev) \
25772597 { \
2578- COND_CODE_1(CONFIG_UART_##idx##_ASYNC, \
2579- (UARTE_IRQ_CONFIGURE(idx, uarte_nrfx_isr_async);), \
2580- (UARTE_IRQ_CONFIGURE(idx, uarte_nrfx_isr_int);)) \
2598+ UARTE_IRQ_CONFIGURE(idx); \
25812599 return uarte_instance_init( \
25822600 dev, \
25832601 IS_ENABLED(CONFIG_UART_##idx##_INTERRUPT_DRIVEN)); \
0 commit comments