|
19 | 19 | */ |
20 | 20 |
|
21 | 21 | #include "irq_arch.h" |
| 22 | +#include "log.h" |
22 | 23 |
|
23 | 24 | #include "esp_attr.h" |
24 | 25 | #include "esp_bit_defs.h" |
@@ -46,72 +47,66 @@ typedef struct intr_handle_data_t { |
46 | 47 |
|
47 | 48 | /* TODO change to a clearer approach */ |
48 | 49 | static const struct intr_handle_data_t _irq_data_table[] = { |
| 50 | +#ifndef __XTENSA__ |
49 | 51 | { ETS_FROM_CPU_INTR0_SOURCE, CPU_INUM_SOFTWARE, 1 }, |
| 52 | +#endif |
50 | 53 | { ETS_TG0_WDT_LEVEL_INTR_SOURCE, CPU_INUM_WDT, 1 }, |
51 | 54 | { ETS_TG0_T0_LEVEL_INTR_SOURCE, CPU_INUM_RTT, 1 }, |
52 | | -#if defined(CPU_FAM_ESP32) || defined(CPU_FAM_ESP32S2) || defined(CPU_FAM_ESP32S3) |
| 55 | +#if SOC_TIMER_GROUP_TIMERS_PER_GROUP > 1 |
53 | 56 | { ETS_TG0_T1_LEVEL_INTR_SOURCE, CPU_INUM_TIMER, 2 }, |
54 | 57 | #endif |
55 | | -#if !defined(CPU_FAM_ESP32C2) |
| 58 | +#if SOC_TIMER_GROUPS > 1 |
56 | 59 | { ETS_TG1_T0_LEVEL_INTR_SOURCE, CPU_INUM_TIMER, 2 }, |
57 | | -#endif |
58 | | -#if defined(CPU_FAM_ESP32) || defined(CPU_FAM_ESP32S2) || defined(CPU_FAM_ESP32S3) |
| 60 | +#if SOC_TIMER_GROUP_TIMERS_PER_GROUP > 1 |
59 | 61 | { ETS_TG1_T1_LEVEL_INTR_SOURCE, CPU_INUM_TIMER, 2 }, |
| 62 | +#endif /* SOC_TIMER_GROUP_TIMERS_PER_GROUP > 1 */ |
| 63 | +#endif /* SOC_TIMER_GROUPS > 1 */ |
| 64 | +#if defined(CPU_FAM_ESP32) |
| 65 | + { ETS_TG0_LACT_LEVEL_INTR_SOURCE, CPU_INUM_SYSTIMER, 2 }, |
| 66 | +#elif defined(CPU_FAM_ESP32S2) || defined(CPU_FAM_ESP32S3) || defined(CPU_FAM_ESP32C3) |
| 67 | + { ETS_SYSTIMER_TARGET2_EDGE_INTR_SOURCE, CPU_INUM_SYSTIMER, 2 }, |
| 68 | +#else |
| 69 | +#error "Platform implementation is missing" |
60 | 70 | #endif |
61 | 71 | { ETS_UART0_INTR_SOURCE, CPU_INUM_UART, 1 }, |
62 | 72 | { ETS_UART1_INTR_SOURCE, CPU_INUM_UART, 1 }, |
63 | | -#if defined(CPU_FAM_ESP32) || defined(CPU_FAM_ESP32S2) || defined(CPU_FAM_ESP32S3) |
| 73 | +#if SOC_UART_NUM > 2 |
64 | 74 | { ETS_UART2_INTR_SOURCE, CPU_INUM_UART, 1 }, |
65 | 75 | #endif |
66 | 76 | { ETS_GPIO_INTR_SOURCE, CPU_INUM_GPIO, 1 }, |
67 | 77 | { ETS_I2C_EXT0_INTR_SOURCE, CPU_INUM_I2C, 1 }, |
68 | | -#if defined(CPU_FAM_ESP32) || defined(CPU_FAM_ESP32S2) || defined(CPU_FAM_ESP32S3) |
| 78 | +#if SOC_I2C_NUM > 1 |
69 | 79 | { ETS_I2C_EXT1_INTR_SOURCE, CPU_INUM_I2C, 1 }, |
70 | 80 | #endif |
71 | | -#if defined(CPU_FAM_ESP32) |
72 | | - { ETS_ETH_MAC_INTR_SOURCE, CPU_INUM_ETH, 1 }, |
73 | | -#endif |
74 | | -#if !defined(CPU_FAM_ESP32C2) |
75 | | - { ETS_TWAI_INTR_SOURCE, CPU_INUM_CAN, 1 }, |
76 | | - { ETS_TIMER2_INTR_SOURCE, CPU_INUM_FRC2, 2 }, |
77 | | -#endif |
78 | | -#if defined(CPU_FAM_ESP32) |
79 | | - { ETS_TG0_LACT_LEVEL_INTR_SOURCE, CPU_INUM_SYSTIMER, 2 }, |
80 | | -#elif defined(CPU_FAM_ESP32S2) || defined(CPU_FAM_ESP32S3) || defined(CPU_FAM_ESP32C3) |
81 | | - { ETS_SYSTIMER_TARGET2_EDGE_INTR_SOURCE, CPU_INUM_SYSTIMER, 2 }, |
82 | | -#else |
83 | | -#error "Platform implementation is missing" |
84 | | -#endif |
85 | | -#if SOC_BLE_SUPPORTED |
| 81 | +#if defined(SOC_BLE_SUPPORTED) |
86 | 82 | #if defined(CPU_FAM_ESP32) || defined(CPU_FAM_ESP32S3) || defined(CPU_FAM_ESP32C3) |
87 | 83 | { ETS_RWBLE_INTR_SOURCE, CPU_INUM_BLE, 2 }, |
88 | 84 | #else |
89 | 85 | #error "Platform implementation is missing" |
90 | 86 | #endif |
91 | 87 | #endif /* SOC_BLE_SUPPORTED */ |
92 | | -#if defined(CPU_FAM_ESP32S2) || defined(CPU_FAM_ESP32S3) |
93 | | - { ETS_USB_INTR_SOURCE, CPU_INUM_USB, 1 }, |
94 | | -#endif |
95 | | -#if defined(ETS_USB_SERIAL_JTAG_INTR_SOURCE) |
96 | | - { ETS_USB_SERIAL_JTAG_INTR_SOURCE, CPU_INUM_SERIAL_JTAG, 1 }, |
| 88 | +#if defined(SOC_EMAC_SUPPORTED) |
| 89 | + { ETS_ETH_MAC_INTR_SOURCE, CPU_INUM_ETH, 1 }, |
97 | 90 | #endif |
| 91 | +#if defined(SOC_RMT_SUPPORTED) |
98 | 92 | { ETS_RMT_INTR_SOURCE, CPU_INUM_RMT, 1 }, |
99 | | -#if defined(CPU_FAM_ESP32) || defined(CPU_FAM_ESP32S2) |
100 | | - { ETS_I2S0_INTR_SOURCE, CPU_INUM_LCD, 1 }, |
101 | | -#elif defined(CPU_FAM_ESP32S3) |
102 | | - { ETS_LCD_CAM_INTR_SOURCE, CPU_INUM_LCD, 1 }, |
103 | 93 | #endif |
104 | | -#if defined(CPU_FAM_ESP32) || defined(CPU_FAM_ESP32S2) || defined(CPU_FAM_ESP32S3) |
| 94 | +#if defined(SOC_SDMMC_HOST_SUPPORTED) |
105 | 95 | { ETS_SDIO_HOST_INTR_SOURCE, CPU_INUM_SDMMC, 2 }, |
106 | 96 | #endif |
| 97 | +#if defined(SOC_TWAI_SUPPORTED) |
| 98 | + { ETS_TWAI_INTR_SOURCE, CPU_INUM_CAN, 1 }, |
| 99 | +#endif |
| 100 | +#if defined(SOC_USB_OTG_SUPPORTED) |
| 101 | + { ETS_USB_INTR_SOURCE, CPU_INUM_USB, 1 }, |
| 102 | +#endif |
| 103 | +#if defined(SOC_USB_SERIAL_JTAG_SUPPORTED) |
| 104 | + { ETS_USB_SERIAL_JTAG_INTR_SOURCE, CPU_INUM_SERIAL_JTAG, 1 }, |
| 105 | +#endif |
107 | 106 | }; |
108 | 107 |
|
109 | 108 | #define IRQ_DATA_TABLE_SIZE ARRAY_SIZE(_irq_data_table) |
110 | 109 |
|
111 | | -#if defined(CPU_FAM_ESP32) && MODULE_ESP_LCD && MODULE_ESP_ETH |
112 | | -#error "esp_eth and esp_lcd can't be used at the same time because of an interrupt conflict" |
113 | | -#endif |
114 | | - |
115 | 110 | void esp_irq_init(void) |
116 | 111 | { |
117 | 112 | #ifdef SOC_CPU_HAS_FLEXIBLE_INTC |
@@ -169,8 +164,8 @@ esp_err_t esp_intr_alloc(int source, int flags, intr_handler_t handler, |
169 | 164 | } |
170 | 165 |
|
171 | 166 | if (i == IRQ_DATA_TABLE_SIZE) { |
172 | | - DEBUG("%s source=%d not found in interrupt allocation table\n", |
173 | | - __func__, source); |
| 167 | + LOG_ERROR("%s source=%d not found in interrupt allocation table\n", |
| 168 | + __func__, source); |
174 | 169 | return ESP_ERR_NOT_FOUND; |
175 | 170 | } |
176 | 171 |
|
|
0 commit comments