diff options
| author | nerwalt <[email protected]> | 2024-06-28 07:11:50 -0600 |
|---|---|---|
| committer | nerwalt <[email protected]> | 2024-06-28 07:11:50 -0600 |
| commit | 5e1a6a97535f86f74495dafc1f75db73689ddad5 (patch) | |
| tree | 01c7765f18fc9f51769d39fbf347a2fe7c603f8f /embassy-nrf/src/chips | |
| parent | 8a6b71b0bba450687c48b36c60273f825c3f6d4b (diff) | |
Adding support for 9120
Diffstat (limited to 'embassy-nrf/src/chips')
| -rw-r--r-- | embassy-nrf/src/chips/nrf9120.rs | 430 |
1 files changed, 430 insertions, 0 deletions
diff --git a/embassy-nrf/src/chips/nrf9120.rs b/embassy-nrf/src/chips/nrf9120.rs new file mode 100644 index 000000000..b53510118 --- /dev/null +++ b/embassy-nrf/src/chips/nrf9120.rs | |||
| @@ -0,0 +1,430 @@ | |||
| 1 | /// Peripheral Access Crate | ||
| 2 | #[allow(unused_imports)] | ||
| 3 | #[rustfmt::skip] | ||
| 4 | pub mod pac { | ||
| 5 | // The nRF9120 has a secure and non-secure (NS) mode. | ||
| 6 | // To avoid cfg spam, we remove _ns or _s suffixes here. | ||
| 7 | |||
| 8 | pub use nrf9120_pac::NVIC_PRIO_BITS; | ||
| 9 | |||
| 10 | #[cfg(feature="rt")] | ||
| 11 | #[doc(no_inline)] | ||
| 12 | pub use nrf9120_pac::interrupt; | ||
| 13 | |||
| 14 | #[doc(no_inline)] | ||
| 15 | pub use nrf9120_pac::{ | ||
| 16 | Interrupt, | ||
| 17 | |||
| 18 | cc_host_rgf_s as cc_host_rgf, | ||
| 19 | clock_ns as clock, | ||
| 20 | cryptocell_s as cryptocell, | ||
| 21 | ctrl_ap_peri_s as ctrl_ap_peri, | ||
| 22 | dppic_ns as dppic, | ||
| 23 | egu0_ns as egu0, | ||
| 24 | ficr_s as ficr, | ||
| 25 | fpu_ns as fpu, | ||
| 26 | gpiote0_s as gpiote, | ||
| 27 | i2s_ns as i2s, | ||
| 28 | ipc_ns as ipc, | ||
| 29 | kmu_ns as kmu, | ||
| 30 | nvmc_ns as nvmc, | ||
| 31 | p0_ns as p0, | ||
| 32 | pdm_ns as pdm, | ||
| 33 | power_ns as power, | ||
| 34 | pwm0_ns as pwm0, | ||
| 35 | regulators_ns as regulators, | ||
| 36 | rtc0_ns as rtc0, | ||
| 37 | saadc_ns as saadc, | ||
| 38 | spim0_ns as spim0, | ||
| 39 | spis0_ns as spis0, | ||
| 40 | spu_s as spu, | ||
| 41 | tad_s as tad, | ||
| 42 | timer0_ns as timer0, | ||
| 43 | twim0_ns as twim0, | ||
| 44 | twis0_ns as twis0, | ||
| 45 | uarte0_ns as uarte0, | ||
| 46 | uicr_s as uicr, | ||
| 47 | vmc_ns as vmc, | ||
| 48 | wdt_ns as wdt, | ||
| 49 | }; | ||
| 50 | |||
| 51 | /// Non-Secure mode (NS) peripherals | ||
| 52 | pub mod ns { | ||
| 53 | #[doc(no_inline)] | ||
| 54 | pub use nrf9120_pac::{ | ||
| 55 | CLOCK_NS as CLOCK, | ||
| 56 | DPPIC_NS as DPPIC, | ||
| 57 | EGU0_NS as EGU0, | ||
| 58 | EGU1_NS as EGU1, | ||
| 59 | EGU2_NS as EGU2, | ||
| 60 | EGU3_NS as EGU3, | ||
| 61 | EGU4_NS as EGU4, | ||
| 62 | EGU5_NS as EGU5, | ||
| 63 | FPU_NS as FPU, | ||
| 64 | GPIOTE1_NS as GPIOTE1, | ||
| 65 | I2S_NS as I2S, | ||
| 66 | IPC_NS as IPC, | ||
| 67 | KMU_NS as KMU, | ||
| 68 | NVMC_NS as NVMC, | ||
| 69 | P0_NS as P0, | ||
| 70 | PDM_NS as PDM, | ||
| 71 | POWER_NS as POWER, | ||
| 72 | PWM0_NS as PWM0, | ||
| 73 | PWM1_NS as PWM1, | ||
| 74 | PWM2_NS as PWM2, | ||
| 75 | PWM3_NS as PWM3, | ||
| 76 | REGULATORS_NS as REGULATORS, | ||
| 77 | RTC0_NS as RTC0, | ||
| 78 | RTC1_NS as RTC1, | ||
| 79 | SAADC_NS as SAADC, | ||
| 80 | SPIM0_NS as SPIM0, | ||
| 81 | SPIM1_NS as SPIM1, | ||
| 82 | SPIM2_NS as SPIM2, | ||
| 83 | SPIM3_NS as SPIM3, | ||
| 84 | SPIS0_NS as SPIS0, | ||
| 85 | SPIS1_NS as SPIS1, | ||
| 86 | SPIS2_NS as SPIS2, | ||
| 87 | SPIS3_NS as SPIS3, | ||
| 88 | TIMER0_NS as TIMER0, | ||
| 89 | TIMER1_NS as TIMER1, | ||
| 90 | TIMER2_NS as TIMER2, | ||
| 91 | TWIM0_NS as TWIM0, | ||
| 92 | TWIM1_NS as TWIM1, | ||
| 93 | TWIM2_NS as TWIM2, | ||
| 94 | TWIM3_NS as TWIM3, | ||
| 95 | TWIS0_NS as TWIS0, | ||
| 96 | TWIS1_NS as TWIS1, | ||
| 97 | TWIS2_NS as TWIS2, | ||
| 98 | TWIS3_NS as TWIS3, | ||
| 99 | UARTE0_NS as UARTE0, | ||
| 100 | UARTE1_NS as UARTE1, | ||
| 101 | UARTE2_NS as UARTE2, | ||
| 102 | UARTE3_NS as UARTE3, | ||
| 103 | VMC_NS as VMC, | ||
| 104 | WDT_NS as WDT, | ||
| 105 | }; | ||
| 106 | } | ||
| 107 | |||
| 108 | /// Secure mode (S) peripherals | ||
| 109 | pub mod s { | ||
| 110 | #[doc(no_inline)] | ||
| 111 | pub use nrf9120_pac::{ | ||
| 112 | CC_HOST_RGF_S as CC_HOST_RGF, | ||
| 113 | CLOCK_S as CLOCK, | ||
| 114 | CRYPTOCELL_S as CRYPTOCELL, | ||
| 115 | CTRL_AP_PERI_S as CTRL_AP_PERI, | ||
| 116 | DPPIC_S as DPPIC, | ||
| 117 | EGU0_S as EGU0, | ||
| 118 | EGU1_S as EGU1, | ||
| 119 | EGU2_S as EGU2, | ||
| 120 | EGU3_S as EGU3, | ||
| 121 | EGU4_S as EGU4, | ||
| 122 | EGU5_S as EGU5, | ||
| 123 | FICR_S as FICR, | ||
| 124 | FPU as FPU, | ||
| 125 | GPIOTE0_S as GPIOTE0, | ||
| 126 | I2S_S as I2S, | ||
| 127 | IPC_S as IPC, | ||
| 128 | KMU_S as KMU, | ||
| 129 | NVMC_S as NVMC, | ||
| 130 | P0_S as P0, | ||
| 131 | PDM_S as PDM, | ||
| 132 | POWER_S as POWER, | ||
| 133 | PWM0_S as PWM0, | ||
| 134 | PWM1_S as PWM1, | ||
| 135 | PWM2_S as PWM2, | ||
| 136 | PWM3_S as PWM3, | ||
| 137 | REGULATORS_S as REGULATORS, | ||
| 138 | RTC0_S as RTC0, | ||
| 139 | RTC1_S as RTC1, | ||
| 140 | SAADC_S as SAADC, | ||
| 141 | SPIM0_S as SPIM0, | ||
| 142 | SPIM1_S as SPIM1, | ||
| 143 | SPIM2_S as SPIM2, | ||
| 144 | SPIM3_S as SPIM3, | ||
| 145 | SPIS0_S as SPIS0, | ||
| 146 | SPIS1_S as SPIS1, | ||
| 147 | SPIS2_S as SPIS2, | ||
| 148 | SPIS3_S as SPIS3, | ||
| 149 | SPU_S as SPU, | ||
| 150 | TAD_S as TAD, | ||
| 151 | TIMER0_S as TIMER0, | ||
| 152 | TIMER1_S as TIMER1, | ||
| 153 | TIMER2_S as TIMER2, | ||
| 154 | TWIM0_S as TWIM0, | ||
| 155 | TWIM1_S as TWIM1, | ||
| 156 | TWIM2_S as TWIM2, | ||
| 157 | TWIM3_S as TWIM3, | ||
| 158 | TWIS0_S as TWIS0, | ||
| 159 | TWIS1_S as TWIS1, | ||
| 160 | TWIS2_S as TWIS2, | ||
| 161 | TWIS3_S as TWIS3, | ||
| 162 | UARTE0_S as UARTE0, | ||
| 163 | UARTE1_S as UARTE1, | ||
| 164 | UARTE2_S as UARTE2, | ||
| 165 | UARTE3_S as UARTE3, | ||
| 166 | UICR_S as UICR, | ||
| 167 | VMC_S as VMC, | ||
| 168 | WDT_S as WDT, | ||
| 169 | }; | ||
| 170 | } | ||
| 171 | |||
| 172 | #[cfg(feature = "_ns")] | ||
| 173 | pub use ns::*; | ||
| 174 | #[cfg(feature = "_s")] | ||
| 175 | pub use s::*; | ||
| 176 | } | ||
| 177 | |||
| 178 | /// The maximum buffer size that the EasyDMA can send/recv in one operation. | ||
| 179 | pub const EASY_DMA_SIZE: usize = (1 << 13) - 1; | ||
| 180 | pub const FORCE_COPY_BUFFER_SIZE: usize = 1024; | ||
| 181 | |||
| 182 | pub const FLASH_SIZE: usize = 1024 * 1024; | ||
| 183 | |||
| 184 | embassy_hal_internal::peripherals! { | ||
| 185 | // RTC | ||
| 186 | RTC0, | ||
| 187 | RTC1, | ||
| 188 | |||
| 189 | // WDT | ||
| 190 | WDT, | ||
| 191 | |||
| 192 | // NVMC | ||
| 193 | NVMC, | ||
| 194 | |||
| 195 | // UARTE, TWI & SPI | ||
| 196 | SERIAL0, | ||
| 197 | SERIAL1, | ||
| 198 | SERIAL2, | ||
| 199 | SERIAL3, | ||
| 200 | |||
| 201 | // SAADC | ||
| 202 | SAADC, | ||
| 203 | |||
| 204 | // PWM | ||
| 205 | PWM0, | ||
| 206 | PWM1, | ||
| 207 | PWM2, | ||
| 208 | PWM3, | ||
| 209 | |||
| 210 | // TIMER | ||
| 211 | TIMER0, | ||
| 212 | TIMER1, | ||
| 213 | TIMER2, | ||
| 214 | |||
| 215 | // GPIOTE | ||
| 216 | GPIOTE_CH0, | ||
| 217 | GPIOTE_CH1, | ||
| 218 | GPIOTE_CH2, | ||
| 219 | GPIOTE_CH3, | ||
| 220 | GPIOTE_CH4, | ||
| 221 | GPIOTE_CH5, | ||
| 222 | GPIOTE_CH6, | ||
| 223 | GPIOTE_CH7, | ||
| 224 | |||
| 225 | // PPI | ||
| 226 | PPI_CH0, | ||
| 227 | PPI_CH1, | ||
| 228 | PPI_CH2, | ||
| 229 | PPI_CH3, | ||
| 230 | PPI_CH4, | ||
| 231 | PPI_CH5, | ||
| 232 | PPI_CH6, | ||
| 233 | PPI_CH7, | ||
| 234 | PPI_CH8, | ||
| 235 | PPI_CH9, | ||
| 236 | PPI_CH10, | ||
| 237 | PPI_CH11, | ||
| 238 | PPI_CH12, | ||
| 239 | PPI_CH13, | ||
| 240 | PPI_CH14, | ||
| 241 | PPI_CH15, | ||
| 242 | |||
| 243 | PPI_GROUP0, | ||
| 244 | PPI_GROUP1, | ||
| 245 | PPI_GROUP2, | ||
| 246 | PPI_GROUP3, | ||
| 247 | PPI_GROUP4, | ||
| 248 | PPI_GROUP5, | ||
| 249 | |||
| 250 | // GPIO port 0 | ||
| 251 | P0_00, | ||
| 252 | P0_01, | ||
| 253 | P0_02, | ||
| 254 | P0_03, | ||
| 255 | P0_04, | ||
| 256 | P0_05, | ||
| 257 | P0_06, | ||
| 258 | P0_07, | ||
| 259 | P0_08, | ||
| 260 | P0_09, | ||
| 261 | P0_10, | ||
| 262 | P0_11, | ||
| 263 | P0_12, | ||
| 264 | P0_13, | ||
| 265 | P0_14, | ||
| 266 | P0_15, | ||
| 267 | P0_16, | ||
| 268 | P0_17, | ||
| 269 | P0_18, | ||
| 270 | P0_19, | ||
| 271 | P0_20, | ||
| 272 | P0_21, | ||
| 273 | P0_22, | ||
| 274 | P0_23, | ||
| 275 | P0_24, | ||
| 276 | P0_25, | ||
| 277 | P0_26, | ||
| 278 | P0_27, | ||
| 279 | P0_28, | ||
| 280 | P0_29, | ||
| 281 | P0_30, | ||
| 282 | P0_31, | ||
| 283 | |||
| 284 | // PDM | ||
| 285 | PDM, | ||
| 286 | |||
| 287 | // EGU | ||
| 288 | EGU0, | ||
| 289 | EGU1, | ||
| 290 | EGU2, | ||
| 291 | EGU3, | ||
| 292 | EGU4, | ||
| 293 | EGU5, | ||
| 294 | } | ||
| 295 | |||
| 296 | impl_uarte!(SERIAL0, UARTE0, SPIM0_SPIS0_TWIM0_TWIS0_UARTE0); | ||
| 297 | impl_uarte!(SERIAL1, UARTE1, SPIM1_SPIS1_TWIM1_TWIS1_UARTE1); | ||
| 298 | impl_uarte!(SERIAL2, UARTE2, SPIM2_SPIS2_TWIM2_TWIS2_UARTE2); | ||
| 299 | impl_uarte!(SERIAL3, UARTE3, SPIM3_SPIS3_TWIM3_TWIS3_UARTE3); | ||
| 300 | |||
| 301 | impl_spim!(SERIAL0, SPIM0, SPIM0_SPIS0_TWIM0_TWIS0_UARTE0); | ||
| 302 | impl_spim!(SERIAL1, SPIM1, SPIM1_SPIS1_TWIM1_TWIS1_UARTE1); | ||
| 303 | impl_spim!(SERIAL2, SPIM2, SPIM2_SPIS2_TWIM2_TWIS2_UARTE2); | ||
| 304 | impl_spim!(SERIAL3, SPIM3, SPIM3_SPIS3_TWIM3_TWIS3_UARTE3); | ||
| 305 | |||
| 306 | impl_spis!(SERIAL0, SPIS0, SPIM0_SPIS0_TWIM0_TWIS0_UARTE0); | ||
| 307 | impl_spis!(SERIAL1, SPIS1, SPIM1_SPIS1_TWIM1_TWIS1_UARTE1); | ||
| 308 | impl_spis!(SERIAL2, SPIS2, SPIM2_SPIS2_TWIM2_TWIS2_UARTE2); | ||
| 309 | impl_spis!(SERIAL3, SPIS3, SPIM3_SPIS3_TWIM3_TWIS3_UARTE3); | ||
| 310 | |||
| 311 | impl_twim!(SERIAL0, TWIM0, SPIM0_SPIS0_TWIM0_TWIS0_UARTE0); | ||
| 312 | impl_twim!(SERIAL1, TWIM1, SPIM1_SPIS1_TWIM1_TWIS1_UARTE1); | ||
| 313 | impl_twim!(SERIAL2, TWIM2, SPIM2_SPIS2_TWIM2_TWIS2_UARTE2); | ||
| 314 | impl_twim!(SERIAL3, TWIM3, SPIM3_SPIS3_TWIM3_TWIS3_UARTE3); | ||
| 315 | |||
| 316 | impl_twis!(SERIAL0, TWIS0, SPIM0_SPIS0_TWIM0_TWIS0_UARTE0); | ||
| 317 | impl_twis!(SERIAL1, TWIS1, SPIM1_SPIS1_TWIM1_TWIS1_UARTE1); | ||
| 318 | impl_twis!(SERIAL2, TWIS2, SPIM2_SPIS2_TWIM2_TWIS2_UARTE2); | ||
| 319 | impl_twis!(SERIAL3, TWIS3, SPIM3_SPIS3_TWIM3_TWIS3_UARTE3); | ||
| 320 | |||
| 321 | impl_pwm!(PWM0, PWM0, PWM0); | ||
| 322 | impl_pwm!(PWM1, PWM1, PWM1); | ||
| 323 | impl_pwm!(PWM2, PWM2, PWM2); | ||
| 324 | impl_pwm!(PWM3, PWM3, PWM3); | ||
| 325 | |||
| 326 | impl_pdm!(PDM, PDM, PDM); | ||
| 327 | |||
| 328 | impl_timer!(TIMER0, TIMER0, TIMER0); | ||
| 329 | impl_timer!(TIMER1, TIMER1, TIMER1); | ||
| 330 | impl_timer!(TIMER2, TIMER2, TIMER2); | ||
| 331 | |||
| 332 | impl_pin!(P0_00, 0, 0); | ||
| 333 | impl_pin!(P0_01, 0, 1); | ||
| 334 | impl_pin!(P0_02, 0, 2); | ||
| 335 | impl_pin!(P0_03, 0, 3); | ||
| 336 | impl_pin!(P0_04, 0, 4); | ||
| 337 | impl_pin!(P0_05, 0, 5); | ||
| 338 | impl_pin!(P0_06, 0, 6); | ||
| 339 | impl_pin!(P0_07, 0, 7); | ||
| 340 | impl_pin!(P0_08, 0, 8); | ||
| 341 | impl_pin!(P0_09, 0, 9); | ||
| 342 | impl_pin!(P0_10, 0, 10); | ||
| 343 | impl_pin!(P0_11, 0, 11); | ||
| 344 | impl_pin!(P0_12, 0, 12); | ||
| 345 | impl_pin!(P0_13, 0, 13); | ||
| 346 | impl_pin!(P0_14, 0, 14); | ||
| 347 | impl_pin!(P0_15, 0, 15); | ||
| 348 | impl_pin!(P0_16, 0, 16); | ||
| 349 | impl_pin!(P0_17, 0, 17); | ||
| 350 | impl_pin!(P0_18, 0, 18); | ||
| 351 | impl_pin!(P0_19, 0, 19); | ||
| 352 | impl_pin!(P0_20, 0, 20); | ||
| 353 | impl_pin!(P0_21, 0, 21); | ||
| 354 | impl_pin!(P0_22, 0, 22); | ||
| 355 | impl_pin!(P0_23, 0, 23); | ||
| 356 | impl_pin!(P0_24, 0, 24); | ||
| 357 | impl_pin!(P0_25, 0, 25); | ||
| 358 | impl_pin!(P0_26, 0, 26); | ||
| 359 | impl_pin!(P0_27, 0, 27); | ||
| 360 | impl_pin!(P0_28, 0, 28); | ||
| 361 | impl_pin!(P0_29, 0, 29); | ||
| 362 | impl_pin!(P0_30, 0, 30); | ||
| 363 | impl_pin!(P0_31, 0, 31); | ||
| 364 | |||
| 365 | impl_ppi_channel!(PPI_CH0, 0 => configurable); | ||
| 366 | impl_ppi_channel!(PPI_CH1, 1 => configurable); | ||
| 367 | impl_ppi_channel!(PPI_CH2, 2 => configurable); | ||
| 368 | impl_ppi_channel!(PPI_CH3, 3 => configurable); | ||
| 369 | impl_ppi_channel!(PPI_CH4, 4 => configurable); | ||
| 370 | impl_ppi_channel!(PPI_CH5, 5 => configurable); | ||
| 371 | impl_ppi_channel!(PPI_CH6, 6 => configurable); | ||
| 372 | impl_ppi_channel!(PPI_CH7, 7 => configurable); | ||
| 373 | impl_ppi_channel!(PPI_CH8, 8 => configurable); | ||
| 374 | impl_ppi_channel!(PPI_CH9, 9 => configurable); | ||
| 375 | impl_ppi_channel!(PPI_CH10, 10 => configurable); | ||
| 376 | impl_ppi_channel!(PPI_CH11, 11 => configurable); | ||
| 377 | impl_ppi_channel!(PPI_CH12, 12 => configurable); | ||
| 378 | impl_ppi_channel!(PPI_CH13, 13 => configurable); | ||
| 379 | impl_ppi_channel!(PPI_CH14, 14 => configurable); | ||
| 380 | impl_ppi_channel!(PPI_CH15, 15 => configurable); | ||
| 381 | |||
| 382 | impl_saadc_input!(P0_13, ANALOG_INPUT0); | ||
| 383 | impl_saadc_input!(P0_14, ANALOG_INPUT1); | ||
| 384 | impl_saadc_input!(P0_15, ANALOG_INPUT2); | ||
| 385 | impl_saadc_input!(P0_16, ANALOG_INPUT3); | ||
| 386 | impl_saadc_input!(P0_17, ANALOG_INPUT4); | ||
| 387 | impl_saadc_input!(P0_18, ANALOG_INPUT5); | ||
| 388 | impl_saadc_input!(P0_19, ANALOG_INPUT6); | ||
| 389 | impl_saadc_input!(P0_20, ANALOG_INPUT7); | ||
| 390 | |||
| 391 | impl_egu!(EGU0, EGU0, EGU0); | ||
| 392 | impl_egu!(EGU1, EGU1, EGU1); | ||
| 393 | impl_egu!(EGU2, EGU2, EGU2); | ||
| 394 | impl_egu!(EGU3, EGU3, EGU3); | ||
| 395 | impl_egu!(EGU4, EGU4, EGU4); | ||
| 396 | impl_egu!(EGU5, EGU5, EGU5); | ||
| 397 | |||
| 398 | embassy_hal_internal::interrupt_mod!( | ||
| 399 | SPU, | ||
| 400 | CLOCK_POWER, | ||
| 401 | SPIM0_SPIS0_TWIM0_TWIS0_UARTE0, | ||
| 402 | SPIM1_SPIS1_TWIM1_TWIS1_UARTE1, | ||
| 403 | SPIM2_SPIS2_TWIM2_TWIS2_UARTE2, | ||
| 404 | SPIM3_SPIS3_TWIM3_TWIS3_UARTE3, | ||
| 405 | GPIOTE0, | ||
| 406 | SAADC, | ||
| 407 | TIMER0, | ||
| 408 | TIMER1, | ||
| 409 | TIMER2, | ||
| 410 | RTC0, | ||
| 411 | RTC1, | ||
| 412 | WDT, | ||
| 413 | EGU0, | ||
| 414 | EGU1, | ||
| 415 | EGU2, | ||
| 416 | EGU3, | ||
| 417 | EGU4, | ||
| 418 | EGU5, | ||
| 419 | PWM0, | ||
| 420 | PWM1, | ||
| 421 | PWM2, | ||
| 422 | PDM, | ||
| 423 | PWM3, | ||
| 424 | I2S, | ||
| 425 | IPC, | ||
| 426 | FPU, | ||
| 427 | GPIOTE1, | ||
| 428 | KMU, | ||
| 429 | CRYPTOCELL, | ||
| 430 | ); | ||
