Browse Source

Added support for NRF52832 controllers.

git-svn-id: trunk@34170 -
Jeppe Johansen 9 years ago
parent
commit
6a1c1e4f29

+ 1 - 0
.gitattributes

@@ -8533,6 +8533,7 @@ rtl/embedded/arm/mk20d5.pp svneol=native#text/pascal
 rtl/embedded/arm/mk20d7.pp svneol=native#text/plain
 rtl/embedded/arm/mk22f51212.pp svneol=native#text/pascal
 rtl/embedded/arm/mk64f12.pp svneol=native#text/pascal
+rtl/embedded/arm/nrf52832.pp svneol=native#text/pascal
 rtl/embedded/arm/sam3x8e.pp svneol=native#text/pascal
 rtl/embedded/arm/sc32442b.pp svneol=native#text/pascal
 rtl/embedded/arm/stm32f0xx.pp svneol=native#text/plain

+ 6 - 0
compiler/arm/cpuinfo.pas

@@ -462,6 +462,9 @@ Type
       ct_sam3x8e,
       ct_arduino_due,
       ct_flip_n_click,
+      
+      { Nordic Semiconductor }
+      ct_nrf52832,
 
       // generic Thumb2 target
       ct_thumb2bare
@@ -962,6 +965,9 @@ Const
       (controllertypestr:'ATSAM3X8E';     controllerunitstr:'SAM3X8E'; cputype:cpu_armv7m; fputype:fpu_soft; flashbase:$00080000; flashsize:$00040000; srambase:$20000000; sramsize:$00010000),
       (controllertypestr:'ARDUINO_DUE';   controllerunitstr:'SAM3X8E'; cputype:cpu_armv7m; fputype:fpu_soft; flashbase:$00080000; flashsize:$00040000; srambase:$20000000; sramsize:$00010000),
       (controllertypestr:'FLIP_N_CLICK';  controllerunitstr:'SAM3X8E'; cputype:cpu_armv7m; fputype:fpu_soft; flashbase:$00080000; flashsize:$00040000; srambase:$20000000; sramsize:$00010000),
+      
+      { Nordic Semiconductor }
+      (controllertypestr:'NRF52832'; controllerunitstr:'NRF52832'; cputype:cpu_armv7em; fputype:fpu_soft; flashbase:$00000000; flashsize:$00080000; srambase:$20000000; sramsize:$00010000),
 
       { Bare bones }
       (controllertypestr:'THUMB2_BARE';	controllerunitstr:'THUMB2_BARE';	cputype:cpu_armv7m; fputype:fpu_soft; flashbase:$00000000;	flashsize:$00002000;	srambase:$20000000;	sramsize:$00000400)

+ 3 - 0
compiler/systems/t_embed.pas

@@ -600,6 +600,9 @@ begin
       ct_arduino_due,
       ct_flip_n_click,
       
+      { Nordic Semiconductor }
+      ct_nrf52832,
+      
       ct_sc32442b,
       ct_thumb2bare:
         begin

+ 2 - 2
rtl/embedded/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2016-06-18 rev 34006]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2016/07/17]
 #
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian i386-nativent i386-iphonesim i386-android i386-aros m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded powerpc-wii powerpc-aix sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-netbsd x86_64-solaris x86_64-openbsd x86_64-darwin x86_64-win64 x86_64-embedded x86_64-iphonesim x86_64-aros x86_64-dragonfly arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian arm-android powerpc64-linux powerpc64-darwin powerpc64-embedded powerpc64-aix avr-embedded armeb-linux armeb-embedded mips-linux mipsel-linux mipsel-embedded mipsel-android jvm-java jvm-android i8086-embedded i8086-msdos i8086-win16 aarch64-linux aarch64-darwin
@@ -360,7 +360,7 @@ CPU_UNITS=lm3fury lm3tempest stm32f10x_ld stm32f10x_md stm32f10x_hd stm32f10x_xl
 CPU_UNITS_DEFINED=1
 endif
 ifeq ($(SUBARCH),armv7em)
-CPU_UNITS=lm4f120 xmc4500 mk20d5 mk20d7 mk22f51212 mk64f12 stm32f401xx stm32f407xx stm32f411xe stm32f429xx stm32f446xx stm32f745 stm32f746 stm32f756 cortexm3 cortexm4 cortexm7 # thumb2_bare
+CPU_UNITS=lm4f120 xmc4500 mk20d5 mk20d7 mk22f51212 mk64f12 stm32f401xx stm32f407xx stm32f411xe stm32f429xx stm32f446xx stm32f745 stm32f746 stm32f756 nrf52832 cortexm3 cortexm4 cortexm7 # thumb2_bare
 CPU_UNITS_DEFINED=1
 endif
 ifeq ($(SUBARCH),armv4t)

+ 1 - 1
rtl/embedded/Makefile.fpc

@@ -68,7 +68,7 @@ CPU_UNITS=lm3fury lm3tempest stm32f10x_ld stm32f10x_md stm32f10x_hd stm32f10x_xl
 CPU_UNITS_DEFINED=1
 endif
 ifeq ($(SUBARCH),armv7em)
-CPU_UNITS=lm4f120 xmc4500 mk20d5 mk20d7 mk22f51212 mk64f12 stm32f401xx stm32f407xx stm32f411xe stm32f429xx stm32f446xx stm32f745 stm32f746 stm32f756 cortexm3 cortexm4 cortexm7 # thumb2_bare
+CPU_UNITS=lm4f120 xmc4500 mk20d5 mk20d7 mk22f51212 mk64f12 stm32f401xx stm32f407xx stm32f411xe stm32f429xx stm32f446xx stm32f745 stm32f746 stm32f756 nrf52832 cortexm3 cortexm4 cortexm7 # thumb2_bare
 CPU_UNITS_DEFINED=1
 endif
 ifeq ($(SUBARCH),armv4t)

+ 2431 - 0
rtl/embedded/arm/nrf52832.pp

@@ -0,0 +1,2431 @@
+unit nrf52832;
+
+{$goto on}
+
+interface
+
+{************************************************************************************************** }  {*
+ * @file     nrf52.h
+ *
+ * @brief    CMSIS Cortex-M4 Peripheral Access Layer Header File for
+ *           nrf52 from Nordic Semiconductor.
+ *
+ * @version  V1
+ * @date     23. February 2016
+ *
+ * @note     Generated with SVDConv V2.81d
+ *           from CMSIS SVD File 'nrf52.xml' Version 1,
+ *
+ *           The Contents of this file are made available subject to the terms of
+ *           the BSD license.
+ *
+ * @par      Copyright (c) 2015, Nordic Semiconductor ASA
+ *           All rights reserved.
+ *
+ *           Redistribution and use in source and binary forms, with or without
+ *           modification, are permitted provided that the following conditions are met:
+ *
+ *           * Redistributions of source code must retain the above copyright notice, this
+ *           list of conditions and the following disclaimer.
+ *
+ *           * Redistributions in binary form must reproduce the above copyright notice,
+ *           this list of conditions and the following disclaimer in the documentation
+ *           and/or other materials provided with the distribution.
+ *
+ *           * Neither the name of Nordic Semiconductor ASA nor the names of its
+ *           contributors may be used to endorse or promote products derived from
+ *           this software without specific prior written permission.
+ *
+ *           THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ *           AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ *           IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ *           DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ *           FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *           DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ *           SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ *           CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ *           OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *           OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ *
+ ****************************************************************************************************** }
+
+
+{ -------------------------  Interrupt Number Definition  ------------------------ }
+
+type
+TIRQn_Enum = (
+{ -------------------  Cortex-M4 Processor Exceptions Numbers  ------------------- }
+  Reset_IRQn                    = -15,              {   1  Reset Vector, invoked on Power up and warm reset                 }
+  NonMaskableInt_IRQn           = -14,              {   2  Non maskable Interrupt, cannot be stopped or preempted           }
+  HardFault_IRQn                = -13,              {   3  Hard Fault, all classes of Fault                                 }
+  MemoryManagement_IRQn         = -12,              {   4  Memory Management, MPU mismatch, including Access Violation
+                                                       and No Match                                                          }
+  BusFault_IRQn                 = -11,              {   5  Bus Fault, Pre-Fetch-, Memory Access Fault, other address/memory
+                                                       related Fault                                                         }
+  UsageFault_IRQn               = -10,              {   6  Usage Fault, i.e. Undef Instruction, Illegal State Transition    }
+  SVCall_IRQn                   =  -5,              {  11  System Service Call via SVC instruction                          }
+  DebugMonitor_IRQn             =  -4,              {  12  Debug Monitor                                                    }
+  PendSV_IRQn                   =  -2,              {  14  Pendable request for system service                              }
+  SysTick_IRQn                  =  -1,              {  15  System Tick Timer                                                }
+{ ----------------------  nrf52 Specific Interrupt Numbers  ---------------------- }
+  POWER_CLOCK_IRQn              =   0,              {   0  POWER_CLOCK                                                      }
+  RADIO_IRQn                    =   1,              {   1  RADIO                                                            }
+  UARTE0_UART0_IRQn             =   2,              {   2  UARTE0_UART0                                                     }
+  SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQn=   3,      {   3  SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0                                }
+  SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQn=   4,      {   4  SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1                                }
+  NFCT_IRQn                     =   5,              {   5  NFCT                                                             }
+  GPIOTE_IRQn                   =   6,              {   6  GPIOTE                                                           }
+  SAADC_IRQn                    =   7,              {   7  SAADC                                                            }
+  TIMER0_IRQn                   =   8,              {   8  TIMER0                                                           }
+  TIMER1_IRQn                   =   9,              {   9  TIMER1                                                           }
+  TIMER2_IRQn                   =  10,              {  10  TIMER2                                                           }
+  RTC0_IRQn                     =  11,              {  11  RTC0                                                             }
+  TEMP_IRQn                     =  12,              {  12  TEMP                                                             }
+  RNG_IRQn                      =  13,              {  13  RNG                                                              }
+  ECB_IRQn                      =  14,              {  14  ECB                                                              }
+  CCM_AAR_IRQn                  =  15,              {  15  CCM_AAR                                                          }
+  WDT_IRQn                      =  16,              {  16  WDT                                                              }
+  RTC1_IRQn                     =  17,              {  17  RTC1                                                             }
+  QDEC_IRQn                     =  18,              {  18  QDEC                                                             }
+  COMP_LPCOMP_IRQn              =  19,              {  19  COMP_LPCOMP                                                      }
+  SWI0_EGU0_IRQn                =  20,              {  20  SWI0_EGU0                                                        }
+  SWI1_EGU1_IRQn                =  21,              {  21  SWI1_EGU1                                                        }
+  SWI2_EGU2_IRQn                =  22,              {  22  SWI2_EGU2                                                        }
+  SWI3_EGU3_IRQn                =  23,              {  23  SWI3_EGU3                                                        }
+  SWI4_EGU4_IRQn                =  24,              {  24  SWI4_EGU4                                                        }
+  SWI5_EGU5_IRQn                =  25,              {  25  SWI5_EGU5                                                        }
+  TIMER3_IRQn                   =  26,              {  26  TIMER3                                                           }
+  TIMER4_IRQn                   =  27,              {  27  TIMER4                                                           }
+  PWM0_IRQn                     =  28,              {  28  PWM0                                                             }
+  PDM_IRQn                      =  29,              {  29  PDM                                                              }
+  MWU_IRQn                      =  32,              {  32  MWU                                                              }
+  PWM1_IRQn                     =  33,              {  33  PWM1                                                             }
+  PWM2_IRQn                     =  34,              {  34  PWM2                                                             }
+  SPIM2_SPIS2_SPI2_IRQn         =  35,              {  35  SPIM2_SPIS2_SPI2                                                 }
+  RTC2_IRQn                     =  36,              {  36  RTC2                                                             }
+  I2S_IRQn                      =  37,              {  37  I2S                                                              }
+  FPU_IRQn                      =  38               {  38  FPU                                                              }
+);
+
+
+{ ================================================================================  }
+{ ================      Processor and Core Peripheral Section     ================  }
+{ ================================================================================  }
+
+{ ----------------Configuration of the Cortex-M4 Processor and Core Peripherals----------------  }
+
+const
+  __CM4_REV              = $0001;                    { Cortex-M4 Core Revision                                               }
+  __MPU_PRESENT          = 1;                        { MPU present or not                                                    }
+  __NVIC_PRIO_BITS       = 3;                        { Number of Bits used for Priority Levels                               }
+  __Vendor_SysTickConfig = 0;                        { Set to 1 if different SysTick Config is used                          }
+  __FPU_PRESENT          = 1;                        { FPU present or not                                                    }
+
+
+{ ================================================================================  }
+{ ================       Device Specific Peripheral Section       ================  }
+{ ================================================================================  }
+
+type
+FICR_INFO_Type = record
+  PART,                                              { Part code                                                             }
+  VARIANT_,                                          { Part Variant, Hardware version and Production configuration           }
+  PACKAGE,                                           { Package option                                                        }
+  RAM,                                               { RAM variant                                                           }
+  FLASH: longword;                                   { Flash variant                                                         }
+  UNUSED0: array [0..2] of longword;                 { Description collection[0]: Unspecified                                }
+end;
+
+FICR_TEMP_Type = record
+  A0,                                                { Slope definition A0.                                                  }
+  A1,                                                { Slope definition A1.                                                  }
+  A2,                                                { Slope definition A2.                                                  }
+  A3,                                                { Slope definition A3.                                                  }
+  A4,                                                { Slope definition A4.                                                  }
+  A5,                                                { Slope definition A5.                                                  }
+  B0,                                                { y-intercept B0.                                                       }
+  B1,                                                { y-intercept B1.                                                       }
+  B2,                                                { y-intercept B2.                                                       }
+  B3,                                                { y-intercept B3.                                                       }
+  B4,                                                { y-intercept B4.                                                       }
+  B5,                                                { y-intercept B5.                                                       }
+  T0,                                                { Segment end T0.                                                       }
+  T1,                                                { Segment end T1.                                                       }
+  T2,                                                { Segment end T2.                                                       }
+  T3,                                                { Segment end T3.                                                       }
+  T4: longword;                                      { Segment end T4.                                                       }
+end;
+
+FICR_NFC_Type = record
+  TAGHEADER0,                                        { Default header for NFC Tag. Software can read these values to
+                                                       populate NFCID1_3RD_LAST, NFCID1_2ND_LAST and NFCID1_LAST.            }
+  TAGHEADER1,                                        { Default header for NFC Tag. Software can read these values to
+                                                       populate NFCID1_3RD_LAST, NFCID1_2ND_LAST and NFCID1_LAST.            }
+  TAGHEADER2,                                        { Default header for NFC Tag. Software can read these values to
+                                                       populate NFCID1_3RD_LAST, NFCID1_2ND_LAST and NFCID1_LAST.            }
+  TAGHEADER3: longword;                              { Default header for NFC Tag. Software can read these values to
+                                                       populate NFCID1_3RD_LAST, NFCID1_2ND_LAST and NFCID1_LAST.            }
+end;
+
+POWER_RAM_Type = record
+  POWER,                                             { Description cluster[0]: RAM0 power control register                   }
+  POWERSET,                                          { Description cluster[0]: RAM0 power control set register               }
+  POWERCLR,                                          { Description cluster[0]: RAM0 power control clear register             }
+  RESERVED0: longword;
+end;
+
+AMLI_RAMPRI_Type = record
+  CPU0,                                              { AHB bus master priority register for CPU0                             }
+  SPIS1,                                             { AHB bus master priority register for SPIM1, SPIS1, TWIM1 and
+                                                       TWIS1                                                                 }
+  RADIO,                                             { AHB bus master priority register for RADIO                            }
+  ECB,                                               { AHB bus master priority register for ECB                              }
+  CCM,                                               { AHB bus master priority register for CCM                              }
+  AAR,                                               { AHB bus master priority register for AAR                              }
+  SAADC,                                             { AHB bus master priority register for SAADC                            }
+  UARTE,                                             { AHB bus master priority register for UARTE                            }
+  SERIAL0,                                           { AHB bus master priority register for SPIM0, SPIS0, TWIM0 and
+                                                       TWIS0                                                                 }
+  SERIAL2,                                           { AHB bus master priority register for SPIM2 and SPIS2                  }
+  NFCT,                                              { AHB bus master priority register for NFCT                             }
+  I2S,                                               { AHB bus master priority register for I2S                              }
+  PDM,                                               { AHB bus master priority register for PDM                              }
+  PWM: longword;                                     { AHB bus master priority register for PWM0, PWM1 and PWM2              }
+end;
+
+UARTE_PSEL_Type = record
+  RTS,                                               { Pin select for RTS signal                                             }
+  TXD,                                               { Pin select for TXD signal                                             }
+  CTS,                                               { Pin select for CTS signal                                             }
+  RXD: longword;                                     { Pin select for RXD signal                                             }
+end;
+
+UARTE_RXD_Type = record
+  PTR,                                               { Data pointer                                                          }
+  MAXCNT,                                            { Maximum number of bytes in receive buffer                             }
+  AMOUNT: longword;                                  { Number of bytes transferred in the last transaction                   }
+end;
+
+UARTE_TXD_Type = record
+  PTR,                                               { Data pointer                                                          }
+  MAXCNT,                                            { Maximum number of bytes in transmit buffer                            }
+  AMOUNT: longword;                                  { Number of bytes transferred in the last transaction                   }
+end;
+
+SPIM_PSEL_Type = record
+  SCK,                                               { Pin select for SCK                                                    }
+  MOSI,                                              { Pin select for MOSI signal                                            }
+  MISO: longword;                                    { Pin select for MISO signal                                            }
+end;
+
+SPIM_RXD_Type = record
+  PTR,                                               { Data pointer                                                          }
+  MAXCNT,                                            { Maximum number of bytes in receive buffer                             }
+  AMOUNT,                                            { Number of bytes transferred in the last transaction                   }
+  LIST: longword;                                    { EasyDMA list type                                                     }
+end;
+
+SPIM_TXD_Type = record
+  PTR,                                               { Data pointer                                                          }
+  MAXCNT,                                            { Maximum number of bytes in transmit buffer                            }
+  AMOUNT,                                            { Number of bytes transferred in the last transaction                   }
+  LIST: longword;                                    { EasyDMA list type                                                     }
+end;
+
+SPIS_PSEL_Type = record
+  SCK,                                               { Pin select for SCK                                                    }
+  MISO,                                              { Pin select for MISO signal                                            }
+  MOSI,                                              { Pin select for MOSI signal                                            }
+  CSN: longword;                                     { Pin select for CSN signal                                             }
+end;
+
+SPIS_RXD_Type = record
+  PTR,                                               { RXD data pointer                                                      }
+  MAXCNT,                                            { Maximum number of bytes in receive buffer                             }
+  AMOUNT: longword;                                  { Number of bytes received in last granted transaction                  }
+end;
+
+SPIS_TXD_Type = record
+  PTR,                                               { TXD data pointer                                                      }
+  MAXCNT,                                            { Maximum number of bytes in transmit buffer                            }
+  AMOUNT: longword;                                  { Number of bytes transmitted in last granted transaction               }
+end;
+
+TWIM_PSEL_Type = record
+  SCL,                                               { Pin select for SCL signal                                             }
+  SDA: longword;                                     { Pin select for SDA signal                                             }
+end;
+
+TWIM_RXD_Type = record
+  PTR,                                               { Data pointer                                                          }
+  MAXCNT,                                            { Maximum number of bytes in receive buffer                             }
+  AMOUNT,                                            { Number of bytes transferred in the last transaction                   }
+  LIST: longword;                                    { EasyDMA list type                                                     }
+end;
+
+TWIM_TXD_Type = record
+  PTR,                                               { Data pointer                                                          }
+  MAXCNT,                                            { Maximum number of bytes in transmit buffer                            }
+  AMOUNT,                                            { Number of bytes transferred in the last transaction                   }
+  LIST: longword;                                    { EasyDMA list type                                                     }
+end;
+
+TWIS_PSEL_Type = record
+  SCL,                                               { Pin select for SCL signal                                             }
+  SDA: longword;                                     { Pin select for SDA signal                                             }
+end;
+
+TWIS_RXD_Type = record
+  PTR,                                               { RXD Data pointer                                                      }
+  MAXCNT,                                            { Maximum number of bytes in RXD buffer                                 }
+  AMOUNT: longword;                                  { Number of bytes transferred in the last RXD transaction               }
+end;
+
+TWIS_TXD_Type = record
+  PTR,                                               { TXD Data pointer                                                      }
+  MAXCNT,                                            { Maximum number of bytes in TXD buffer                                 }
+  AMOUNT: longword;                                  { Number of bytes transferred in the last TXD transaction               }
+end;
+
+SPI_PSEL_Type = record
+  SCK,                                               { Pin select for SCK                                                    }
+  MOSI,                                              { Pin select for MOSI                                                   }
+  MISO: longword;                                    { Pin select for MISO                                                   }
+end;
+
+NFCT_FRAMESTATUS_Type = record
+  RX: longword;                                      { Result of last incoming frames                                        }
+end;
+
+NFCT_TXD_Type = record
+  FRAMECONFIG,                                       { Configuration of outgoing frames                                      }
+  AMOUNT: longword;                                  { Size of outgoing frame                                                }
+end;
+
+NFCT_RXD_Type = record
+  FRAMECONFIG,                                       { Configuration of incoming frames                                      }
+  AMOUNT: longword;                                  { Size of last incoming frame                                           }
+end;
+
+SAADC_EVENTS_CH_Type = record
+  LIMITH,                                            { Description cluster[0]: Last results is equal or above CH[0].LIMIT.HIGH }
+  LIMITL: longword;                                  { Description cluster[0]: Last results is equal or below CH[0].LIMIT.LOW }
+end;
+
+SAADC_CH_Type = record
+  PSELP,                                             { Description cluster[0]: Input positive pin selection for CH[0]        }
+  PSELN,                                             { Description cluster[0]: Input negative pin selection for CH[0]        }
+  CONFIG,                                            { Description cluster[0]: Input configuration for CH[0]                 }
+  LIMIT: longword;                                   { Description cluster[0]: High/low limits for event monitoring
+                                                       a channel                                                             }
+end;
+
+SAADC_RESULT_Type = record
+  PTR,                                               { Data pointer                                                          }
+  MAXCNT,                                            { Maximum number of buffer words to transfer                            }
+  AMOUNT: longword;                                  { Number of buffer words transferred since last START                   }
+end;
+
+QDEC_PSEL_Type = record
+  LED,                                               { Pin select for LED signal                                             }
+  A,                                                 { Pin select for A signal                                               }
+  B: longword;                                       { Pin select for B signal                                               }
+end;
+
+PWM_SEQ_Type = record
+  PTR,                                               { Description cluster[0]: Beginning address in Data RAM of sequence
+                                                       A                                                                     }
+  CNT,                                               { Description cluster[0]: Amount of values (duty cycles) in sequence
+                                                       A                                                                     }
+  REFRESH,                                           { Description cluster[0]: Amount of additional PWM periods between
+                                                       samples loaded to compare register (load every CNT+1 PWM periods)     }
+  ENDDELAY: longword;                                { Description cluster[0]: Time added after the sequence                 }
+  RESERVED1: array [0..3] of longword;
+end;
+
+PWM_PSEL_Type = record
+  OUT: array [0..3] of longword;                     { Description collection[0]: Output pin select for PWM channel
+                                                       0                                                                     }
+end;
+
+PDM_PSEL_Type = record
+  CLK,                                               { Pin number configuration for PDM CLK signal                           }
+  DIN: longword;                                     { Pin number configuration for PDM DIN signal                           }
+end;
+
+PDM_SAMPLE_Type = record
+  PTR,                                               { RAM address pointer to write samples to with EasyDMA                  }
+  MAXCNT: longword;                                  { Number of samples to allocate memory for in EasyDMA mode              }
+end;
+
+PPI_TASKS_CHG_Type = record
+  EN,                                                { Description cluster[0]: Enable channel group 0                        }
+  DIS: longword;                                     { Description cluster[0]: Disable channel group 0                       }
+end;
+
+PPI_CH_Type = record
+  EEP,                                               { Description cluster[0]: Channel 0 event end-point                     }
+  TEP: longword;                                     { Description cluster[0]: Channel 0 task end-point                      }
+end;
+
+PPI_FORK_Type = record
+  TEP: longword;                                     { Description cluster[0]: Channel 0 task end-point                      }
+end;
+
+MWU_EVENTS_REGION_Type = record
+  WA,                                                { Description cluster[0]: Write access to region 0 detected             }
+  RA: longword;                                      { Description cluster[0]: Read access to region 0 detected              }
+end;
+
+MWU_EVENTS_PREGION_Type = record
+  WA,                                                { Description cluster[0]: Write access to peripheral region 0
+                                                       detected                                                              }
+  RA: longword;                                      { Description cluster[0]: Read access to peripheral region 0 detected   }
+end;
+
+MWU_PERREGION_Type = record
+  SUBSTATWA,                                         { Description cluster[0]: Source of event/interrupt in region 0,
+                                                       write access detected while corresponding subregion was enabled
+                                                       for watching                                                          }
+  SUBSTATRA: longword;                               { Description cluster[0]: Source of event/interrupt in region 0,
+                                                       read access detected while corresponding subregion was enabled
+                                                       for watching                                                          }
+end;
+
+MWU_REGION_Type = record
+  START,                                             { Description cluster[0]: Start address for region 0                    }
+  END_,                                              { Description cluster[0]: End address of region 0                       }
+  RESERVED2: array [0..1] of longword;
+end;
+
+MWU_PREGION_Type = record
+  START,                                             { Description cluster[0]: Reserved for future use                       }
+  END_,                                              { Description cluster[0]: Reserved for future use                       }
+  SUBS,                                              { Description cluster[0]: Subregions of region 0                        }
+  RESERVED3: longword;
+end;
+
+I2S_CONFIG_Type = record
+  MODE,                                              { I<sup>2</sup>S mode.                                                  }
+  RXEN,                                              { Reception (RX) enable.                                                }
+  TXEN,                                              { Transmission (TX) enable.                                             }
+  MCKEN,                                             { Master clock generator enable.                                        }
+  MCKFREQ,                                           { Master clock generator frequency.                                     }
+  RATIO,                                             { MCK / LRCK ratio.                                                     }
+  SWIDTH,                                            { Sample width.                                                         }
+  ALIGN,                                             { Alignment of sample within a frame.                                   }
+  FORMAT,                                            { Frame format.                                                         }
+  CHANNELS: longword;                                { Enable channels.                                                      }
+end;
+
+I2S_RXD_Type = record
+  PTR: longword;                                     { Receive buffer RAM start address.                                     }
+end;
+
+I2S_TXD_Type = record
+  PTR: longword;                                     { Transmit buffer RAM start address.                                    }
+end;
+
+I2S_RXTXD_Type = record
+  MAXCNT: longword;                                  { Size of RXD and TXD buffers.                                          }
+end;
+
+I2S_PSEL_Type = record
+  MCK,                                               { Pin select for MCK signal.                                            }
+  SCK,                                               { Pin select for SCK signal.                                            }
+  LRCK,                                              { Pin select for LRCK signal.                                           }
+  SDIN,                                              { Pin select for SDIN signal.                                           }
+  SDOUT: longword;                                   { Pin select for SDOUT signal.                                          }
+end;
+
+
+{ ================================================================================ }
+{ ================                      FICR                      ================ }
+{ ================================================================================ }
+
+{
+  Factory Information Configuration Registers (FICR)
+}
+
+NRF_FICR_Type = record                               { FICR Structure                                                        }
+  RESERVED0: array [0..3] of longword;
+  CODEPAGESIZE,                                      { Code memory page size                                                 }
+  CODESIZE: longword;                                { Code memory size                                                      }
+  RESERVED1: array [0..17] of longword;
+  DEVICEID: array [0..1] of longword;                { Description collection[0]: Device identifier                          }
+  RESERVED2: array [0..5] of longword;
+  ER: array [0..3] of longword;                      { Description collection[0]: Encryption Root, word 0                    }
+  IR: array [0..3] of longword;                      { Description collection[0]: Identity Root, word 0                      }
+  DEVICEADDRTYPE: longword;                          { Device address type                                                   }
+  DEVICEADDR: array [0..1] of longword;              { Description collection[0]: Device address 0                           }
+  RESERVED3: array [0..20] of longword;
+  INFO: FICR_INFO_Type;                              { Device info                                                           }
+  RESERVED4: array [0..184] of longword;
+  TEMP: FICR_TEMP_Type;                              { Registers storing factory TEMP module linearization coefficients      }
+  RESERVED5: array [0..1] of longword;
+  NFC: FICR_NFC_Type;                                { Unspecified                                                           }
+end;
+
+
+{ ================================================================================ }
+{ ================                      UICR                      ================ }
+{ ================================================================================ }
+
+{
+  User Information Configuration Registers (UICR)
+}
+
+NRF_UICR_Type = record                               { UICR Structure                                                        }
+  UNUSED0,                                           { Unspecified                                                           }
+  UNUSED1,                                           { Unspecified                                                           }
+  UNUSED2,                                           { Unspecified                                                           }
+  RESERVED0,
+  UNUSED3: longword;                                 { Unspecified                                                           }
+  NRFFW: array [0..14] of longword;                  { Description collection[0]: Reserved for Nordic firmware design        }
+  NRFHW: array [0..11] of longword;                  { Description collection[0]: Reserved for Nordic hardware design        }
+  CUSTOMER: array [0..31] of longword;               { Description collection[0]: Reserved for customer                      }
+  RESERVED1: array [0..63] of longword;
+  PSELRESET: array [0..1] of longword;               { Description collection[0]: Mapping of the nRESET function (see
+                                                       POWER chapter for details)                                            }
+  APPROTECT,                                         { Access Port protection                                                }
+  NFCPINS: longword;                                 { Setting of pins dedicated to NFC functionality: NFC antenna
+                                                       or GPIO                                                               }
+end;
+
+
+{ ================================================================================ }
+{ ================                      BPROT                     ================ }
+{ ================================================================================ }
+
+{
+  Block Protect (BPROT)
+}
+
+NRF_BPROT_Type = record                              { BPROT Structure                                                       }
+  RESERVED0: array [0..383] of longword;
+  CONFIG0,                                           { Block protect configuration register 0                                }
+  CONFIG1,                                           { Block protect configuration register 1                                }
+  DISABLEINDEBUG,                                    { Disable protection mechanism in debug interface mode                  }
+  UNUSED0,                                           { Unspecified                                                           }
+  CONFIG2,                                           { Block protect configuration register 2                                }
+  CONFIG3: longword;                                 { Block protect configuration register 3                                }
+end;
+
+
+{ ================================================================================ }
+{ ================                      POWER                     ================ }
+{ ================================================================================ }
+
+{
+  Power control (POWER)
+}
+
+NRF_POWER_Type = record                              { POWER Structure                                                       }
+  RESERVED0: array [0..29] of longword;
+  TASKS_CONSTLAT,                                    { Enable constant latency mode                                          }
+  TASKS_LOWPWR: longword;                            { Enable low power mode (variable latency)                              }
+  RESERVED1: array [0..33] of longword;
+  EVENTS_POFWARN: longword;                          { Power failure warning                                                 }
+  RESERVED2: array [0..1] of longword;
+  EVENTS_SLEEPENTER,                                 { CPU entered WFI/WFE sleep                                             }
+  EVENTS_SLEEPEXIT: longword;                        { CPU exited WFI/WFE sleep                                              }
+  RESERVED3: array [0..121] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED4: array [0..60] of longword;
+  RESETREAS: longword;                               { Reset reason                                                          }
+  RESERVED5: array [0..8] of longword;
+  RAMSTATUS: longword;                               { Deprecated register - RAM status register                             }
+  RESERVED6: array [0..52] of longword;
+  SYSTEMOFF: longword;                               { System OFF register                                                   }
+  RESERVED7: array [0..2] of longword;
+  POFCON: longword;                                  { Power failure comparator configuration                                }
+  RESERVED8: array [0..1] of longword;
+  GPREGRET,                                          { General purpose retention register                                    }
+  GPREGRET2,                                         { General purpose retention register                                    }
+  RAMON: longword;                                   { Deprecated register - RAM on/off register (this register is
+                                                       retained)                                                             }
+  RESERVED9: array [0..10] of longword;
+  RAMONB: longword;                                  { Deprecated register - RAM on/off register (this register is
+                                                       retained)                                                             }
+  RESERVED10: array [0..7] of longword;
+  DCDCEN: longword;                                  { DC/DC enable register                                                 }
+  RESERVED11: array [0..224] of longword;
+  RAM: array [0..7] of POWER_RAM_Type;               { Unspecified                                                           }
+end;
+
+
+{ ================================================================================ }
+{ ================                      CLOCK                     ================ }
+{ ================================================================================ }
+
+{
+  Clock control (CLOCK)
+}
+
+NRF_CLOCK_Type = record                              { CLOCK Structure                                                       }
+  TASKS_HFCLKSTART,                                  { Start HFCLK crystal oscillator                                        }
+  TASKS_HFCLKSTOP,                                   { Stop HFCLK crystal oscillator                                         }
+  TASKS_LFCLKSTART,                                  { Start LFCLK source                                                    }
+  TASKS_LFCLKSTOP,                                   { Stop LFCLK source                                                     }
+  TASKS_CAL,                                         { Start calibration of LFRC oscillator                                  }
+  TASKS_CTSTART,                                     { Start calibration timer                                               }
+  TASKS_CTSTOP: longword;                            { Stop calibration timer                                                }
+  RESERVED0: array [0..56] of longword;
+  EVENTS_HFCLKSTARTED,                               { HFCLK oscillator started                                              }
+  EVENTS_LFCLKSTARTED,                               { LFCLK started                                                         }
+  RESERVED1,
+  EVENTS_DONE,                                       { Calibration of LFCLK RC oscillator complete event                     }
+  EVENTS_CTTO: longword;                             { Calibration timer timeout                                             }
+  RESERVED2: array [0..123] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED3: array [0..62] of longword;
+  HFCLKRUN,                                          { Status indicating that HFCLKSTART task has been triggered             }
+  HFCLKSTAT,                                         { HFCLK status                                                          }
+  RESERVED4,
+  LFCLKRUN,                                          { Status indicating that LFCLKSTART task has been triggered             }
+  LFCLKSTAT,                                         { LFCLK status                                                          }
+  LFCLKSRCCOPY: longword;                            { Copy of LFCLKSRC register, set when LFCLKSTART task was triggered     }
+  RESERVED5: array [0..61] of longword;
+  LFCLKSRC: longword;                                { Clock source for the LFCLK                                            }
+  RESERVED6: array [0..6] of longword;
+  CTIV: longword;                                    { Calibration timer interval (retained register, same reset behaviour
+                                                       as RESETREAS)                                                         }
+  RESERVED7: array [0..7] of longword;
+  TRACECONFIG: longword;                             { Clocking options for the Trace Port debug interface                   }
+end;
+
+
+{ ================================================================================ }
+{ ================                      AMLI                      ================ }
+{ ================================================================================ }
+
+{
+  AHB Multi-Layer Interface (AMLI)
+}
+
+NRF_AMLI_Type = record                               { AMLI Structure                                                        }
+  RESERVED0: array [0..895] of longword;
+  RAMPRI: AMLI_RAMPRI_Type;                          { RAM configurable priority configuration structure                     }
+end;
+
+
+{ ================================================================================ }
+{ ================                      RADIO                     ================ }
+{ ================================================================================ }
+
+{
+  2.4 GHz Radio (RADIO)
+}
+
+NRF_RADIO_Type = record                              { RADIO Structure                                                       }
+  TASKS_TXEN,                                        { Enable RADIO in TX mode                                               }
+  TASKS_RXEN,                                        { Enable RADIO in RX mode                                               }
+  TASKS_START,                                       { Start RADIO                                                           }
+  TASKS_STOP,                                        { Stop RADIO                                                            }
+  TASKS_DISABLE,                                     { Disable RADIO                                                         }
+  TASKS_RSSISTART,                                   { Start the RSSI and take one single sample of the receive signal
+                                                       strength.                                                             }
+  TASKS_RSSISTOP,                                    { Stop the RSSI measurement                                             }
+  TASKS_BCSTART,                                     { Start the bit counter                                                 }
+  TASKS_BCSTOP: longword;                            { Stop the bit counter                                                  }
+  RESERVED0: array [0..54] of longword;
+  EVENTS_READY,                                      { RADIO has ramped up and is ready to be started                        }
+  EVENTS_ADDRESS,                                    { Address sent or received                                              }
+  EVENTS_PAYLOAD,                                    { Packet payload sent or received                                       }
+  EVENTS_END,                                        { Packet sent or received                                               }
+  EVENTS_DISABLED,                                   { RADIO has been disabled                                               }
+  EVENTS_DEVMATCH,                                   { A device address match occurred on the last received packet           }
+  EVENTS_DEVMISS,                                    { No device address match occurred on the last received packet          }
+  EVENTS_RSSIEND: longword;                          { Sampling of receive signal strength complete.                         }
+  RESERVED1: array [0..1] of longword;
+  EVENTS_BCMATCH,                                    { Bit counter reached bit count value.                                  }
+  RESERVED2,
+  EVENTS_CRCOK,                                      { Packet received with CRC ok                                           }
+  EVENTS_CRCERROR: longword;                         { Packet received with CRC error                                        }
+  RESERVED3: array [0..49] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED4: array [0..63] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED5: array [0..60] of longword;
+  CRCSTATUS,                                         { CRC status                                                            }
+  RESERVED6,
+  RXMATCH,                                           { Received address                                                      }
+  RXCRC,                                             { CRC field of previously received packet                               }
+  DAI: longword;                                     { Device address match index                                            }
+  RESERVED7: array [0..59] of longword;
+  PACKETPTR,                                         { Packet pointer                                                        }
+  FREQUENCY,                                         { Frequency                                                             }
+  TXPOWER,                                           { Output power                                                          }
+  MODE,                                              { Data rate and modulation                                              }
+  PCNF0,                                             { Packet configuration register 0                                       }
+  PCNF1,                                             { Packet configuration register 1                                       }
+  BASE0,                                             { Base address 0                                                        }
+  BASE1,                                             { Base address 1                                                        }
+  PREFIX0,                                           { Prefixes bytes for logical addresses 0-3                              }
+  PREFIX1,                                           { Prefixes bytes for logical addresses 4-7                              }
+  TXADDRESS,                                         { Transmit address select                                               }
+  RXADDRESSES,                                       { Receive address select                                                }
+  CRCCNF,                                            { CRC configuration                                                     }
+  CRCPOLY,                                           { CRC polynomial                                                        }
+  CRCINIT,                                           { CRC initial value                                                     }
+  UNUSED0,                                           { Unspecified                                                           }
+  TIFS,                                              { Inter Frame Spacing in us                                             }
+  RSSISAMPLE,                                        { RSSI sample                                                           }
+  RESERVED8,
+  STATE,                                             { Current radio state                                                   }
+  DATAWHITEIV: longword;                             { Data whitening initial value                                          }
+  RESERVED9: array [0..1] of longword;
+  BCC: longword;                                     { Bit counter compare                                                   }
+  RESERVED10: array [0..38] of longword;
+  DAB: array [0..7] of longword;                     { Description collection[0]: Device address base segment 0              }
+  DAP: array [0..7] of longword;                     { Description collection[0]: Device address prefix 0                    }
+  DACNF: longword;                                   { Device address match configuration                                    }
+  RESERVED11: array [0..2] of longword;
+  MODECNF0: longword;                                { Radio mode configuration register 0                                   }
+  RESERVED12: array [0..617] of longword;
+  POWER: longword;                                   { Peripheral power control                                              }
+end;
+
+
+{ ================================================================================ }
+{ ================                      UARTE                     ================ }
+{ ================================================================================ }
+
+{
+  UART with EasyDMA (UARTE)
+}
+
+NRF_UARTE_Type = record                              { UARTE Structure                                                       }
+  TASKS_STARTRX,                                     { Start UART receiver                                                   }
+  TASKS_STOPRX,                                      { Stop UART receiver                                                    }
+  TASKS_STARTTX,                                     { Start UART transmitter                                                }
+  TASKS_STOPTX: longword;                            { Stop UART transmitter                                                 }
+  RESERVED0: array [0..6] of longword;
+  TASKS_FLUSHRX: longword;                           { Flush RX FIFO into RX buffer                                          }
+  RESERVED1: array [0..51] of longword;
+  EVENTS_CTS,                                        { CTS is activated (set low). Clear To Send.                            }
+  EVENTS_NCTS: longword;                             { CTS is deactivated (set high). Not Clear To Send.                     }
+  RESERVED2: array [0..1] of longword;
+  EVENTS_ENDRX: longword;                            { Receive buffer is filled up                                           }
+  RESERVED3: array [0..2] of longword;
+  EVENTS_ENDTX,                                      { Last TX byte transmitted                                              }
+  EVENTS_ERROR: longword;                            { Error detected                                                        }
+  RESERVED4: array [0..6] of longword;
+  EVENTS_RXTO,                                       { Receiver timeout                                                      }
+  RESERVED5,
+  EVENTS_RXSTARTED,                                  { UART receiver has started                                             }
+  EVENTS_TXSTARTED,                                  { UART transmitter has started                                          }
+  RESERVED6,
+  EVENTS_TXSTOPPED: longword;                        { Transmitter stopped                                                   }
+  RESERVED7: array [0..40] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED8: array [0..62] of longword;
+  INTEN,                                             { Enable or disable interrupt                                           }
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED9: array [0..92] of longword;
+  ERRORSRC: longword;                                { Error source                                                          }
+  RESERVED10: array [0..30] of longword;
+  ENABLE,                                            { Enable UART                                                           }
+  RESERVED11,
+  PSEL: UARTE_PSEL_Type;                             { Unspecified                                                           }
+  RESERVED12: array [0..2] of longword;
+  BAUDRATE: longword;                                { Baud rate                                                             }
+  RESERVED13: array [0..2] of longword;
+  RXD: UARTE_RXD_Type;                               { RXD EasyDMA channel                                                   }
+  RESERVED14,
+  TXD: UARTE_TXD_Type;                               { TXD EasyDMA channel                                                   }
+  RESERVED15: array [0..6] of longword;
+  CONFIG: longword;                                  { Configuration of parity and hardware flow control                     }
+end;
+
+
+{ ================================================================================ }
+{ ================                      UART                      ================ }
+{ ================================================================================ }
+
+{
+  Universal Asynchronous Receiver/Transmitter (UART)
+}
+
+NRF_UART_Type = record                               { UART Structure                                                        }
+  TASKS_STARTRX,                                     { Start UART receiver                                                   }
+  TASKS_STOPRX,                                      { Stop UART receiver                                                    }
+  TASKS_STARTTX,                                     { Start UART transmitter                                                }
+  TASKS_STOPTX: longword;                            { Stop UART transmitter                                                 }
+  RESERVED0: array [0..2] of longword;
+  TASKS_SUSPEND: longword;                           { Suspend UART                                                          }
+  RESERVED1: array [0..55] of longword;
+  EVENTS_CTS,                                        { CTS is activated (set low). Clear To Send.                            }
+  EVENTS_NCTS,                                       { CTS is deactivated (set high). Not Clear To Send.                     }
+  EVENTS_RXDRDY: longword;                           { Data received in RXD                                                  }
+  RESERVED2: array [0..3] of longword;
+  EVENTS_TXDRDY,                                     { Data sent from TXD                                                    }
+  RESERVED3,
+  EVENTS_ERROR: longword;                            { Error detected                                                        }
+  RESERVED4: array [0..6] of longword;
+  EVENTS_RXTO: longword;                             { Receiver timeout                                                      }
+  RESERVED5: array [0..45] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED6: array [0..63] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED7: array [0..92] of longword;
+  ERRORSRC: longword;                                { Error source                                                          }
+  RESERVED8: array [0..30] of longword;
+  ENABLE,                                            { Enable UART                                                           }
+  RESERVED9,
+  PSELRTS,                                           { Pin select for RTS                                                    }
+  PSELTXD,                                           { Pin select for TXD                                                    }
+  PSELCTS,                                           { Pin select for CTS                                                    }
+  PSELRXD,                                           { Pin select for RXD                                                    }
+  RXD,                                               { RXD register                                                          }
+  TXD,                                               { TXD register                                                          }
+  RESERVED10,
+  BAUDRATE: longword;                                { Baud rate                                                             }
+  RESERVED11: array [0..16] of longword;
+  CONFIG: longword;                                  { Configuration of parity and hardware flow control                     }
+end;
+
+
+{ ================================================================================ }
+{ ================                      SPIM                      ================ }
+{ ================================================================================ }
+
+{
+  Serial Peripheral Interface Master with EasyDMA 0 (SPIM)
+}
+
+NRF_SPIM_Type = record                               { SPIM Structure                                                        }
+  RESERVED0: array [0..3] of longword;
+  TASKS_START,                                       { Start SPI transaction                                                 }
+  TASKS_STOP,                                        { Stop SPI transaction                                                  }
+  RESERVED1,
+  TASKS_SUSPEND,                                     { Suspend SPI transaction                                               }
+  TASKS_RESUME: longword;                            { Resume SPI transaction                                                }
+  RESERVED2: array [0..55] of longword;
+  EVENTS_STOPPED: longword;                          { SPI transaction has stopped                                           }
+  RESERVED3: array [0..1] of longword;
+  EVENTS_ENDRX,                                      { End of RXD buffer reached                                             }
+  RESERVED4,
+  EVENTS_END,                                        { End of RXD buffer and TXD buffer reached                              }
+  RESERVED5,
+  EVENTS_ENDTX: longword;                            { End of TXD buffer reached                                             }
+  RESERVED6: array [0..9] of longword;
+  EVENTS_STARTED: longword;                          { Transaction started                                                   }
+  RESERVED7: array [0..43] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED8: array [0..63] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED9: array [0..124] of longword;
+  ENABLE,                                            { Enable SPIM                                                           }
+  RESERVED10,
+  PSEL: SPIM_PSEL_Type;                              { Unspecified                                                           }
+  RESERVED11: array [0..3] of longword;
+  FREQUENCY: longword;                               { SPI frequency                                                         }
+  RESERVED12: array [0..2] of longword;
+  RXD: SPIM_RXD_Type;                                { RXD EasyDMA channel                                                   }
+  TXD: SPIM_TXD_Type;                                { TXD EasyDMA channel                                                   }
+  CONFIG: longword;                                  { Configuration register                                                }
+  RESERVED13: array [0..25] of longword;
+  ORC: longword;                                     { Over-read character. Character clocked out in case and over-read
+                                                       of the TXD buffer.                                                    }
+end;
+
+
+{ ================================================================================ }
+{ ================                      SPIS                      ================ }
+{ ================================================================================ }
+
+{
+  SPI Slave 0 (SPIS)
+}
+
+NRF_SPIS_Type = record                               { SPIS Structure                                                        }
+  RESERVED0: array [0..8] of longword;
+  TASKS_ACQUIRE,                                     { Acquire SPI semaphore                                                 }
+  TASKS_RELEASE: longword;                           { Release SPI semaphore, enabling the SPI slave to acquire it           }
+  RESERVED1: array [0..53] of longword;
+  EVENTS_END: longword;                              { Granted transaction completed                                         }
+  RESERVED2: array [0..1] of longword;
+  EVENTS_ENDRX: longword;                            { End of RXD buffer reached                                             }
+  RESERVED3: array [0..4] of longword;
+  EVENTS_ACQUIRED: longword;                         { Semaphore acquired                                                    }
+  RESERVED4: array [0..52] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED5: array [0..63] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED6: array [0..60] of longword;
+  SEMSTAT: longword;                                 { Semaphore status register                                             }
+  RESERVED7: array [0..14] of longword;
+  STATUS: longword;                                  { Status from last transaction                                          }
+  RESERVED8: array [0..46] of longword;
+  ENABLE,                                            { Enable SPI slave                                                      }
+  RESERVED9: longword;
+  PSEL: SPIS_PSEL_Type;                              { Unspecified                                                           }
+  RESERVED10: array [0..6] of longword;
+  RXD: SPIS_RXD_Type;                                { Unspecified                                                           }
+  RESERVED11,
+  TXD: SPIS_TXD_Type;                                { Unspecified                                                           }
+  RESERVED12,
+  CONFIG,                                            { Configuration register                                                }
+  RESERVED13,
+  DEF: longword;                                     { Default character. Character clocked out in case of an ignored
+                                                       transaction.                                                          }
+  RESERVED14: array [0..23] of longword;
+  ORC: longword;                                     { Over-read character                                                   }
+end;
+
+
+{ ================================================================================ }
+{ ================                      TWIM                      ================ }
+{ ================================================================================ }
+
+{
+  I2C compatible Two-Wire Master Interface with EasyDMA 0 (TWIM)
+}
+
+NRF_TWIM_Type = record                               { TWIM Structure                                                        }
+  TASKS_STARTRX,                                     { Start TWI receive sequence                                            }
+  RESERVED0,
+  TASKS_STARTTX: longword;                           { Start TWI transmit sequence                                           }
+  RESERVED1: array [0..1] of longword;
+  TASKS_STOP,                                        { Stop TWI transaction. Must be issued while the TWI master is
+                                                       not suspended.                                                        }
+  RESERVED2,
+  TASKS_SUSPEND,                                     { Suspend TWI transaction                                               }
+  TASKS_RESUME: longword;                            { Resume TWI transaction                                                }
+  RESERVED3: array [0..55] of longword;
+  EVENTS_STOPPED: longword;                          { TWI stopped                                                           }
+  RESERVED4: array [0..6] of longword;
+  EVENTS_ERROR: longword;                            { TWI error                                                             }
+  RESERVED5: array [0..7] of longword;
+  EVENTS_SUSPENDED,                                  { Last byte has been sent out after the SUSPEND task has been
+                                                       issued, TWI traffic is now suspended.                                 }
+  EVENTS_RXSTARTED,                                  { Receive sequence started                                              }
+  EVENTS_TXSTARTED: longword;                        { Transmit sequence started                                             }
+  RESERVED6: array [0..1] of longword;
+  EVENTS_LASTRX,                                     { Byte boundary, starting to receive the last byte                      }
+  EVENTS_LASTTX: longword;                           { Byte boundary, starting to transmit the last byte                     }
+  RESERVED7: array [0..38] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED8: array [0..62] of longword;
+  INTEN,                                             { Enable or disable interrupt                                           }
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED9: array [0..109] of longword;
+  ERRORSRC: longword;                                { Error source                                                          }
+  RESERVED10: array [0..13] of longword;
+  ENABLE,                                            { Enable TWIM                                                           }
+  RESERVED11: longword;
+  PSEL: TWIM_PSEL_Type;                              { Unspecified                                                           }
+  RESERVED12: array [0..4] of longword;
+  FREQUENCY: longword;                               { TWI frequency                                                         }
+  RESERVED13: array [0..2] of longword;
+  RXD: TWIM_RXD_Type;                                { RXD EasyDMA channel                                                   }
+  TXD: TWIM_TXD_Type;                                { TXD EasyDMA channel                                                   }
+  RESERVED14: array [0..12] of longword;
+  ADDRESS: longword;                                 { Address used in the TWI transfer                                      }
+end;
+
+
+{ ================================================================================ }
+{ ================                      TWIS                      ================ }
+{ ================================================================================ }
+
+{
+  I2C compatible Two-Wire Slave Interface with EasyDMA 0 (TWIS)
+}
+
+NRF_TWIS_Type = record                               { TWIS Structure                                                        }
+  RESERVED0: array [0..4] of longword;
+  TASKS_STOP,                                        { Stop TWI transaction                                                  }
+  RESERVED1,
+  TASKS_SUSPEND,                                     { Suspend TWI transaction                                               }
+  TASKS_RESUME: longword;                            { Resume TWI transaction                                                }
+  RESERVED2: array [0..2] of longword;
+  TASKS_PREPARERX,                                   { Prepare the TWI slave to respond to a write command                   }
+  TASKS_PREPARETX: longword;                         { Prepare the TWI slave to respond to a read command                    }
+  RESERVED3: array [0..50] of longword;
+  EVENTS_STOPPED: longword;                          { TWI stopped                                                           }
+  RESERVED4: array [0..6] of longword;
+  EVENTS_ERROR: longword;                            { TWI error                                                             }
+  RESERVED5: array [0..8] of longword;
+  EVENTS_RXSTARTED,                                  { Receive sequence started                                              }
+  EVENTS_TXSTARTED: longword;                        { Transmit sequence started                                             }
+  RESERVED6: array [0..3] of longword;
+  EVENTS_WRITE,                                      { Write command received                                                }
+  EVENTS_READ: longword;                             { Read command received                                                 }
+  RESERVED7: array [0..36] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED8: array [0..62] of longword;
+  INTEN,                                             { Enable or disable interrupt                                           }
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED9: array [0..112] of longword;
+  ERRORSRC,                                          { Error source                                                          }
+  MATCH: longword;                                   { Status register indicating which address had a match                  }
+  RESERVED10: array [0..9] of longword;
+  ENABLE,                                            { Enable TWIS                                                           }
+  RESERVED11: longword;
+  PSEL: TWIS_PSEL_Type;                              { Unspecified                                                           }
+  RESERVED12: array [0..8] of longword;
+  RXD: TWIS_RXD_Type;                                { RXD EasyDMA channel                                                   }
+  RESERVED13,
+  TXD: TWIS_TXD_Type;                                { TXD EasyDMA channel                                                   }
+  RESERVED14: array [0..13] of longword;
+  ADDRESS: array [0..1] of longword;                 { Description collection[0]: TWI slave address 0                        }
+  RESERVED15,
+  CONFIG: longword;                                  { Configuration register for the address match mechanism                }
+  RESERVED16: array [0..9] of longword;
+  ORC: longword;                                     { Over-read character. Character sent out in case of an over-read
+                                                       of the transmit buffer.                                               }
+end;
+
+
+{ ================================================================================ }
+{ ================                       SPI                      ================ }
+{ ================================================================================ }
+
+{
+  Serial Peripheral Interface 0 (SPI)
+}
+
+NRF_SPI_Type = record                                { SPI Structure                                                         }
+  RESERVED0: array [0..65] of longword;
+  EVENTS_READY: longword;                            { TXD byte sent and RXD byte received                                   }
+  RESERVED1: array [0..125] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED2: array [0..124] of longword;
+  ENABLE,                                            { Enable SPI                                                            }
+  RESERVED3: longword;
+  PSEL: SPI_PSEL_Type;                               { Unspecified                                                           }
+  RESERVED4,
+  RXD,                                               { RXD register                                                          }
+  TXD,                                               { TXD register                                                          }
+  RESERVED5,
+  FREQUENCY: longword;                               { SPI frequency                                                         }
+  RESERVED6: array [0..10] of longword;
+  CONFIG: longword;                                  { Configuration register                                                }
+end;
+
+
+{ ================================================================================ }
+{ ================                       TWI                      ================ }
+{ ================================================================================ }
+
+{
+  I2C compatible Two-Wire Interface 0 (TWI)
+}
+
+NRF_TWI_Type = record                                { TWI Structure                                                         }
+  TASKS_STARTRX,                                     { Start TWI receive sequence                                            }
+  RESERVED0,
+  TASKS_STARTTX: longword;                           { Start TWI transmit sequence                                           }
+  RESERVED1: array [0..1] of longword;
+  TASKS_STOP,                                        { Stop TWI transaction                                                  }
+  RESERVED2,
+  TASKS_SUSPEND,                                     { Suspend TWI transaction                                               }
+  TASKS_RESUME: longword;                            { Resume TWI transaction                                                }
+  RESERVED3: array [0..55] of longword;
+  EVENTS_STOPPED,                                    { TWI stopped                                                           }
+  EVENTS_RXDREADY: longword;                         { TWI RXD byte received                                                 }
+  RESERVED4: array [0..3] of longword;
+  EVENTS_TXDSENT,                                    { TWI TXD byte sent                                                     }
+  RESERVED5,
+  EVENTS_ERROR: longword;                            { TWI error                                                             }
+  RESERVED6: array [0..3] of longword;
+  EVENTS_BB: longword;                               { TWI byte boundary, generated before each byte that is sent or
+                                                       received                                                              }
+  RESERVED7: array [0..2] of longword;
+  EVENTS_SUSPENDED: longword;                        { TWI entered the suspended state                                       }
+  RESERVED8: array [0..44] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED9: array [0..63] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED10: array [0..109] of longword;
+  ERRORSRC: longword;                                { Error source                                                          }
+  RESERVED11: array [0..13] of longword;
+  ENABLE,                                            { Enable TWI                                                            }
+  RESERVED12,
+  PSELSCL,                                           { Pin select for SCL                                                    }
+  PSELSDA: longword;                                 { Pin select for SDA                                                    }
+  RESERVED13: array [0..1] of longword;
+  RXD,                                               { RXD register                                                          }
+  TXD,                                               { TXD register                                                          }
+  RESERVED14,
+  FREQUENCY: longword;                               { TWI frequency                                                         }
+  RESERVED15: array [0..23] of longword;
+  ADDRESS: longword;                                 { Address used in the TWI transfer                                      }
+end;
+
+
+{ ================================================================================ }
+{ ================                      NFCT                      ================ }
+{ ================================================================================ }
+
+{
+  NFC-A compatible radio (NFCT)
+}
+
+NRF_NFCT_Type = record                               { NFCT Structure                                                        }
+  TASKS_ACTIVATE,                                    { Activate NFC peripheral for incoming and outgoing frames, change
+                                                       state to activated                                                    }
+  TASKS_DISABLE,                                     { Disable NFC peripheral                                                }
+  TASKS_SENSE,                                       { Enable NFC sense field mode, change state to sense mode               }
+  TASKS_STARTTX: longword;                           { Start transmission of a outgoing frame, change state to transmit      }
+  RESERVED0: array [0..2] of longword;
+  TASKS_ENABLERXDATA,                                { Initializes the EasyDMA for receive.                                  }
+  RESERVED1,
+  TASKS_GOIDLE,                                      { Force state machine to IDLE state                                     }
+  TASKS_GOSLEEP: longword;                           { Force state machine to SLEEP_A state                                  }
+  RESERVED2: array [0..52] of longword;
+  EVENTS_READY,                                      { The NFC peripheral is ready to receive and send frames                }
+  EVENTS_FIELDDETECTED,                              { Remote NFC field detected                                             }
+  EVENTS_FIELDLOST,                                  { Remote NFC field lost                                                 }
+  EVENTS_TXFRAMESTART,                               { Marks the start of the first symbol of a transmitted frame            }
+  EVENTS_TXFRAMEEND,                                 { Marks the end of the last transmitted on-air symbol of a frame        }
+  EVENTS_RXFRAMESTART,                               { Marks the end of the first symbol of a received frame                 }
+  EVENTS_RXFRAMEEND,                                 { Received data have been checked (CRC, parity) and transferred
+                                                       to RAM, and EasyDMA has ended accessing the RX buffer                 }
+  EVENTS_ERROR: longword;                            { NFC error reported. The ERRORSTATUS register contains details
+                                                       on the source of the error.                                           }
+  RESERVED3: array [0..1] of longword;
+  EVENTS_RXERROR,                                    { NFC RX frame error reported. The FRAMESTATUS.RX register contains
+                                                       details on the source of the error.                                   }
+  EVENTS_ENDRX,                                      { RX buffer (as defined by PACKETPTR and MAXLEN) in Data RAM full.      }
+  EVENTS_ENDTX,                                      { Transmission of data in RAM has ended, and EasyDMA has ended
+                                                       accessing the TX buffer                                               }
+  RESERVED4,
+  EVENTS_AUTOCOLRESSTARTED: longword;                { Auto collision resolution process has started                         }
+  RESERVED5: array [0..2] of longword;
+  EVENTS_COLLISION,                                  { NFC Auto collision resolution error reported.                         }
+  EVENTS_SELECTED,                                   { NFC Auto collision resolution successfully completed                  }
+  EVENTS_STARTED: longword;                          { EasyDMA is ready to receive or send frames.                           }
+  RESERVED6: array [0..42] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED7: array [0..62] of longword;
+  INTEN,                                             { Enable or disable interrupt                                           }
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED8: array [0..61] of longword;
+  ERRORSTATUS,                                       { NFC Error Status register                                             }
+  RESERVED9: longword;
+  FRAMESTATUS: NFCT_FRAMESTATUS_Type;                { Unspecified                                                           }
+  RESERVED10: array [0..7] of longword;
+  CURRENTLOADCTRL: longword;                         { Current value driven to the NFC Load Control                          }
+  RESERVED11: array [0..1] of longword;
+  FIELDPRESENT: longword;                            { Indicates the presence or not of a valid field                        }
+  RESERVED12: array [0..48] of longword;
+  FRAMEDELAYMIN,                                     { Minimum frame delay                                                   }
+  FRAMEDELAYMAX,                                     { Maximum frame delay                                                   }
+  FRAMEDELAYMODE,                                    { Configuration register for the Frame Delay Timer                      }
+  PACKETPTR,                                         { Packet pointer for TXD and RXD data storage in Data RAM               }
+  MAXLEN: longword;                                  { Size of allocated for TXD and RXD data storage buffer in Data
+                                                       RAM                                                                   }
+  TXD: NFCT_TXD_Type;                                { Unspecified                                                           }
+  RXD: NFCT_RXD_Type;                                { Unspecified                                                           }
+  RESERVED13: array [0..25] of longword;
+  NFCID1_LAST,                                       { Last NFCID1 part (4, 7 or 10 bytes ID)                                }
+  NFCID1_2ND_LAST,                                   { Second last NFCID1 part (7 or 10 bytes ID)                            }
+  NFCID1_3RD_LAST,                                   { Third last NFCID1 part (10 bytes ID)                                  }
+  RESERVED14,
+  SENSRES,                                           { NFC-A SENS_RES auto-response settings                                 }
+  SELRES: longword;                                  { NFC-A SEL_RES auto-response settings                                  }
+end;
+
+
+{ ================================================================================ }
+{ ================                     GPIOTE                     ================ }
+{ ================================================================================ }
+
+{
+  GPIO Tasks and Events (GPIOTE)
+}
+
+NRF_GPIOTE_Type = record                             { GPIOTE Structure                                                      }
+  TASKS_OUT: array [0..7] of longword;               { Description collection[0]: Task for writing to pin specified
+                                                       in CONFIG[0].PSEL. Action on pin is configured in CONFIG[0].POLARITY. }
+  RESERVED0: array [0..3] of longword;
+  TASKS_SET: array [0..7] of longword;               { Description collection[0]: Task for writing to pin specified
+                                                       in CONFIG[0].PSEL. Action on pin is to set it high.                   }
+  RESERVED1: array [0..3] of longword;
+  TASKS_CLR: array [0..7] of longword;               { Description collection[0]: Task for writing to pin specified
+                                                       in CONFIG[0].PSEL. Action on pin is to set it low.                    }
+  RESERVED2: array [0..31] of longword;
+  EVENTS_IN: array [0..7] of longword;               { Description collection[0]: Event generated from pin specified
+                                                       in CONFIG[0].PSEL                                                     }
+  RESERVED3: array [0..22] of longword;
+  EVENTS_PORT: longword;                             { Event generated from multiple input GPIO pins with SENSE mechanism
+                                                       enabled                                                               }
+  RESERVED4: array [0..96] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED5: array [0..128] of longword;
+  CONFIG: array [0..7] of longword;                  { Description collection[0]: Configuration for OUT[n], SET[n]
+                                                       and CLR[n] tasks and IN[n] event                                      }
+end;
+
+
+{ ================================================================================ }
+{ ================                      SAADC                     ================ }
+{ ================================================================================ }
+
+{
+  Analog to Digital Converter (SAADC)
+}
+
+NRF_SAADC_Type = record                              { SAADC Structure                                                       }
+  TASKS_START,                                       { Start the ADC and prepare the result buffer in RAM                    }
+  TASKS_SAMPLE,                                      { Take one ADC sample, if scan is enabled all channels are sampled      }
+  TASKS_STOP,                                        { Stop the ADC and terminate any on-going conversion                    }
+  TASKS_CALIBRATEOFFSET: longword;                   { Starts offset auto-calibration                                        }
+  RESERVED0: array [0..59] of longword;
+  EVENTS_STARTED,                                    { The ADC has started                                                   }
+  EVENTS_END,                                        { The ADC has filled up the Result buffer                               }
+  EVENTS_DONE,                                       { A conversion task has been completed. Depending on the mode,
+                                                       multiple conversions might be needed for a result to be transferred
+                                                       to RAM.                                                               }
+  EVENTS_RESULTDONE,                                 { A result is ready to get transferred to RAM.                          }
+  EVENTS_CALIBRATEDONE,                              { Calibration is complete                                               }
+  EVENTS_STOPPED: longword;                          { The ADC has stopped                                                   }
+  EVENTS_CH: array [0..7] of SAADC_EVENTS_CH_Type;   { Unspecified                                                           }
+  RESERVED1: array [0..105] of longword;
+  INTEN,                                             { Enable or disable interrupt                                           }
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED2: array [0..60] of longword;
+  STATUS: longword;                                  { Status                                                                }
+  RESERVED3: array [0..62] of longword;
+  ENABLE: longword;                                  { Enable or disable ADC                                                 }
+  RESERVED4: array [0..2] of longword;
+  CH: array [0..7] of SAADC_CH_Type;                 { Unspecified                                                           }
+  RESERVED5: array [0..23] of longword;
+  RESOLUTION,                                        { Resolution configuration                                              }
+  OVERSAMPLE,                                        { Oversampling configuration. OVERSAMPLE should not be combined
+                                                       with SCAN. The RESOLUTION is applied before averaging, thus
+                                                       for high OVERSAMPLE a higher RESOLUTION should be used.               }
+  SAMPLERATE: longword;                              { Controls normal or continuous sample rate                             }
+  RESERVED6: array [0..11] of longword;
+  RESULT: SAADC_RESULT_Type;                         { RESULT EasyDMA channel                                                }
+end;
+
+
+{ ================================================================================ }
+{ ================                      TIMER                     ================ }
+{ ================================================================================ }
+
+{
+  Timer/Counter 0 (TIMER)
+}
+
+NRF_TIMER_Type = record                              { TIMER Structure                                                       }
+  TASKS_START,                                       { Start Timer                                                           }
+  TASKS_STOP,                                        { Stop Timer                                                            }
+  TASKS_COUNT,                                       { Increment Timer (Counter mode only)                                   }
+  TASKS_CLEAR,                                       { Clear time                                                            }
+  TASKS_SHUTDOWN: longword;                          { Deprecated register - Shut down timer                                 }
+  RESERVED0: array [0..10] of longword;
+  TASKS_CAPTURE: array [0..5] of longword;           { Description collection[0]: Capture Timer value to CC[0] register      }
+  RESERVED1: array [0..57] of longword;
+  EVENTS_COMPARE: array [0..5] of longword;          { Description collection[0]: Compare event on CC[0] match               }
+  RESERVED2: array [0..41] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED3: array [0..63] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED4: array [0..125] of longword;
+  MODE,                                              { Timer mode selection                                                  }
+  BITMODE,                                           { Configure the number of bits used by the TIMER                        }
+  RESERVED5,
+  PRESCALER: longword;                               { Timer prescaler register                                              }
+  RESERVED6: array [0..10] of longword;
+  CC: array [0..5] of longword;                      { Description collection[0]: Capture/Compare register 0                 }
+end;
+
+
+{ ================================================================================ }
+{ ================                       RTC                      ================ }
+{ ================================================================================ }
+
+{
+  Real time counter 0 (RTC)
+}
+
+NRF_RTC_Type = record                                { RTC Structure                                                         }
+  TASKS_START,                                       { Start RTC COUNTER                                                     }
+  TASKS_STOP,                                        { Stop RTC COUNTER                                                      }
+  TASKS_CLEAR,                                       { Clear RTC COUNTER                                                     }
+  TASKS_TRIGOVRFLW: longword;                        { Set COUNTER to 0xFFFFF0                                               }
+  RESERVED0: array [0..59] of longword;
+  EVENTS_TICK,                                       { Event on COUNTER increment                                            }
+  EVENTS_OVRFLW: longword;                           { Event on COUNTER overflow                                             }
+  RESERVED1: array [0..13] of longword;
+  EVENTS_COMPARE: array [0..3] of longword;          { Description collection[0]: Compare event on CC[0] match               }
+  RESERVED2: array [0..108] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED3: array [0..12] of longword;
+  EVTEN,                                             { Enable or disable event routing                                       }
+  EVTENSET,                                          { Enable event routing                                                  }
+  EVTENCLR: longword;                                { Disable event routing                                                 }
+  RESERVED4: array [0..109] of longword;
+  COUNTER,                                           { Current COUNTER value                                                 }
+  PRESCALER: longword;                               { 12 bit prescaler for COUNTER frequency (32768/(PRESCALER+1)).Must
+                                                       be written when RTC is stopped                                        }
+  RESERVED5: array [0..12] of longword;
+  CC: array [0..3] of longword;                      { Description collection[0]: Compare register 0                         }
+end;
+
+
+{ ================================================================================ }
+{ ================                      TEMP                      ================ }
+{ ================================================================================ }
+
+{
+  Temperature Sensor (TEMP)
+}
+
+NRF_TEMP_Type = record                               { TEMP Structure                                                        }
+  TASKS_START,                                       { Start temperature measurement                                         }
+  TASKS_STOP: longword;                              { Stop temperature measurement                                          }
+  RESERVED0: array [0..61] of longword;
+  EVENTS_DATARDY: longword;                          { Temperature measurement complete, data ready                          }
+  RESERVED1: array [0..127] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED2: array [0..126] of longword;
+  TEMP: longint;                                     { Temperature in degC (0.25deg steps)                                   }
+  RESERVED3: array [0..4] of longword;
+  A0,                                                { Slope of 1st piece wise linear function                               }
+  A1,                                                { Slope of 2nd piece wise linear function                               }
+  A2,                                                { Slope of 3rd piece wise linear function                               }
+  A3,                                                { Slope of 4th piece wise linear function                               }
+  A4,                                                { Slope of 5th piece wise linear function                               }
+  A5: longword;                                      { Slope of 6th piece wise linear function                               }
+  RESERVED4: array [0..1] of longword;
+  B0,                                                { y-intercept of 1st piece wise linear function                         }
+  B1,                                                { y-intercept of 2nd piece wise linear function                         }
+  B2,                                                { y-intercept of 3rd piece wise linear function                         }
+  B3,                                                { y-intercept of 4th piece wise linear function                         }
+  B4,                                                { y-intercept of 5th piece wise linear function                         }
+  B5: longword;                                      { y-intercept of 6th piece wise linear function                         }
+  RESERVED5: array [0..1] of longword;
+  T0,                                                { End point of 1st piece wise linear function                           }
+  T1,                                                { End point of 2nd piece wise linear function                           }
+  T2,                                                { End point of 3rd piece wise linear function                           }
+  T3,                                                { End point of 4th piece wise linear function                           }
+  T4: longword;                                      { End point of 5th piece wise linear function                           }
+end;
+
+
+{ ================================================================================ }
+{ ================                       RNG                      ================ }
+{ ================================================================================ }
+
+{
+  Random Number Generator (RNG)
+}
+
+NRF_RNG_Type = record                                { RNG Structure                                                         }
+  TASKS_START,                                       { Task starting the random number generator                             }
+  TASKS_STOP: longword;                              { Task stopping the random number generator                             }
+  RESERVED0: array [0..61] of longword;
+  EVENTS_VALRDY: longword;                           { Event being generated for every new random number written to
+                                                       the VALUE register                                                    }
+  RESERVED1: array [0..62] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED2: array [0..63] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED3: array [0..125] of longword;
+  CONFIG,                                            { Configuration register                                                }
+  VALUE: longword;                                   { Output random number                                                  }
+end;
+
+
+{ ================================================================================ }
+{ ================                       ECB                      ================ }
+{ ================================================================================ }
+
+{
+  AES ECB Mode Encryption (ECB)
+}
+
+NRF_ECB_Type = record                                { ECB Structure                                                         }
+  TASKS_STARTECB,                                    { Start ECB block encrypt                                               }
+  TASKS_STOPECB: longword;                           { Abort a possible executing ECB operation                              }
+  RESERVED0: array [0..61] of longword;
+  EVENTS_ENDECB,                                     { ECB block encrypt complete                                            }
+  EVENTS_ERRORECB: longword;                         { ECB block encrypt aborted because of a STOPECB task or due to
+                                                       an error                                                              }
+  RESERVED1: array [0..126] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED2: array [0..125] of longword;
+  ECBDATAPTR: longword;                              { ECB block encrypt memory pointers                                     }
+end;
+
+
+{ ================================================================================ }
+{ ================                       CCM                      ================ }
+{ ================================================================================ }
+
+{
+  AES CCM Mode Encryption (CCM)
+}
+
+NRF_CCM_Type = record                                { CCM Structure                                                         }
+  TASKS_KSGEN,                                       { Start generation of key-stream. This operation will stop by
+                                                       itself when completed.                                                }
+  TASKS_CRYPT,                                       { Start encryption/decryption. This operation will stop by itself
+                                                       when completed.                                                       }
+  TASKS_STOP: longword;                              { Stop encryption/decryption                                            }
+  RESERVED0: array [0..60] of longword;
+  EVENTS_ENDKSGEN,                                   { Key-stream generation complete                                        }
+  EVENTS_ENDCRYPT,                                   { Encrypt/decrypt complete                                              }
+  EVENTS_ERROR: longword;                            { CCM error event                                                       }
+  RESERVED1: array [0..60] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED2: array [0..63] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED3: array [0..60] of longword;
+  MICSTATUS: longword;                               { MIC check result                                                      }
+  RESERVED4: array [0..62] of longword;
+  ENABLE,                                            { Enable                                                                }
+  MODE,                                              { Operation mode                                                        }
+  CNFPTR,                                            { Pointer to data structure holding AES key and NONCE vector            }
+  INPTR,                                             { Input pointer                                                         }
+  OUTPTR,                                            { Output pointer                                                        }
+  SCRATCHPTR: longword;                              { Pointer to data area used for temporary storage                       }
+end;
+
+
+{ ================================================================================ }
+{ ================                       AAR                      ================ }
+{ ================================================================================ }
+
+{
+  Accelerated Address Resolver (AAR)
+}
+
+NRF_AAR_Type = record                                { AAR Structure                                                         }
+  TASKS_START,                                       { Start resolving addresses based on IRKs specified in the IRK
+                                                       data structure                                                        }
+  RESERVED0,
+  TASKS_STOP: longword;                              { Stop resolving addresses                                              }
+  RESERVED1: array [0..60] of longword;
+  EVENTS_END,                                        { Address resolution procedure complete                                 }
+  EVENTS_RESOLVED,                                   { Address resolved                                                      }
+  EVENTS_NOTRESOLVED: longword;                      { Address not resolved                                                  }
+  RESERVED2: array [0..125] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED3: array [0..60] of longword;
+  STATUS: longword;                                  { Resolution status                                                     }
+  RESERVED4: array [0..62] of longword;
+  ENABLE,                                            { Enable AAR                                                            }
+  NIRK,                                              { Number of IRKs                                                        }
+  IRKPTR,                                            { Pointer to IRK data structure                                         }
+  RESERVED5,
+  ADDRPTR,                                           { Pointer to the resolvable address                                     }
+  SCRATCHPTR: longword;                              { Pointer to data area used for temporary storage                       }
+end;
+
+
+{ ================================================================================ }
+{ ================                       WDT                      ================ }
+{ ================================================================================ }
+
+{
+  Watchdog Timer (WDT)
+}
+
+NRF_WDT_Type = record                                { WDT Structure                                                         }
+  TASKS_START: longword;                             { Start the watchdog                                                    }
+  RESERVED0: array [0..62] of longword;
+  EVENTS_TIMEOUT: longword;                          { Watchdog timeout                                                      }
+  RESERVED1: array [0..127] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED2: array [0..60] of longword;
+  RUNSTATUS,                                         { Run status                                                            }
+  REQSTATUS: longword;                               { Request status                                                        }
+  RESERVED3: array [0..62] of longword;
+  CRV,                                               { Counter reload value                                                  }
+  RREN,                                              { Enable register for reload request registers                          }
+  CONFIG: longword;                                  { Configuration register                                                }
+  RESERVED4: array [0..59] of longword;
+  RR: array [0..7] of longword;                      { Description collection[0]: Reload request 0                           }
+end;
+
+
+{ ================================================================================ }
+{ ================                      QDEC                      ================ }
+{ ================================================================================ }
+
+{
+  Quadrature Decoder (QDEC)
+}
+
+NRF_QDEC_Type = record                               { QDEC Structure                                                        }
+  TASKS_START,                                       { Task starting the quadrature decoder                                  }
+  TASKS_STOP,                                        { Task stopping the quadrature decoder                                  }
+  TASKS_READCLRACC,                                  { Read and clear ACC and ACCDBL                                         }
+  TASKS_RDCLRACC,                                    { Read and clear ACC                                                    }
+  TASKS_RDCLRDBL: longword;                          { Read and clear ACCDBL                                                 }
+  RESERVED0: array [0..58] of longword;
+  EVENTS_SAMPLERDY,                                  { Event being generated for every new sample value written to
+                                                       the SAMPLE register                                                   }
+  EVENTS_REPORTRDY,                                  { Non-null report ready                                                 }
+  EVENTS_ACCOF,                                      { ACC or ACCDBL register overflow                                       }
+  EVENTS_DBLRDY,                                     { Double displacement(s) detected                                       }
+  EVENTS_STOPPED: longword;                          { QDEC has been stopped                                                 }
+  RESERVED1: array [0..58] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED2: array [0..63] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED3: array [0..124] of longword;
+  ENABLE,                                            { Enable the quadrature decoder                                         }
+  LEDPOL,                                            { LED output pin polarity                                               }
+  SAMPLEPER: longword;                               { Sample period                                                         }
+  SAMPLE: longint;                                   { Motion sample value                                                   }
+  REPORTPER: longword;                               { Number of samples to be taken before REPORTRDY and DBLRDY events
+                                                       can be generated                                                      }
+  ACC,                                               { Register accumulating the valid transitions                           }
+  ACCREAD: longint;                                  { Snapshot of the ACC register, updated by the READCLRACC or RDCLRACC
+                                                       task                                                                  }
+  PSEL: QDEC_PSEL_Type;                              { Unspecified                                                           }
+  DBFEN: longword;                                   { Enable input debounce filters                                         }
+  RESERVED4: array [0..4] of longword;
+  LEDPRE,                                            { Time period the LED is switched ON prior to sampling                  }
+  ACCDBL,                                            { Register accumulating the number of detected double transitions       }
+  ACCDBLREAD: longword;                              { Snapshot of the ACCDBL, updated by the READCLRACC or RDCLRDBL
+                                                       task                                                                  }
+end;
+
+
+{ ================================================================================ }
+{ ================                      COMP                      ================ }
+{ ================================================================================ }
+
+{
+  Comparator (COMP)
+}
+
+NRF_COMP_Type = record                               { COMP Structure                                                        }
+  TASKS_START,                                       { Start comparator                                                      }
+  TASKS_STOP,                                        { Stop comparator                                                       }
+  TASKS_SAMPLE: longword;                            { Sample comparator value                                               }
+  RESERVED0: array [0..60] of longword;
+  EVENTS_READY,                                      { COMP is ready and output is valid                                     }
+  EVENTS_DOWN,                                       { Downward crossing                                                     }
+  EVENTS_UP,                                         { Upward crossing                                                       }
+  EVENTS_CROSS: longword;                            { Downward or upward crossing                                           }
+  RESERVED1: array [0..59] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED2: array [0..62] of longword;
+  INTEN,                                             { Enable or disable interrupt                                           }
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED3: array [0..60] of longword;
+  RESULT: longword;                                  { Compare result                                                        }
+  RESERVED4: array [0..62] of longword;
+  ENABLE,                                            { COMP enable                                                           }
+  PSEL,                                              { Pin select                                                            }
+  REFSEL,                                            { Reference source select                                               }
+  EXTREFSEL: longword;                               { External reference select                                             }
+  RESERVED5: array [0..7] of longword;
+  TH,                                                { Threshold configuration for hysteresis unit                           }
+  MODE,                                              { Mode configuration                                                    }
+  HYST,                                              { Comparator hysteresis enable                                          }
+  ISOURCE: longword;                                 { Current source select on analog input                                 }
+end;
+
+
+{ ================================================================================ }
+{ ================                     LPCOMP                     ================ }
+{ ================================================================================ }
+
+{
+  Low Power Comparator (LPCOMP)
+}
+
+NRF_LPCOMP_Type = record                             { LPCOMP Structure                                                      }
+  TASKS_START,                                       { Start comparator                                                      }
+  TASKS_STOP,                                        { Stop comparator                                                       }
+  TASKS_SAMPLE: longword;                            { Sample comparator value                                               }
+  RESERVED0: array [0..60] of longword;
+  EVENTS_READY,                                      { LPCOMP is ready and output is valid                                   }
+  EVENTS_DOWN,                                       { Downward crossing                                                     }
+  EVENTS_UP,                                         { Upward crossing                                                       }
+  EVENTS_CROSS: longword;                            { Downward or upward crossing                                           }
+  RESERVED1: array [0..59] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED2: array [0..63] of longword;
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED3: array [0..60] of longword;
+  RESULT: longword;                                  { Compare result                                                        }
+  RESERVED4: array [0..62] of longword;
+  ENABLE,                                            { Enable LPCOMP                                                         }
+  PSEL,                                              { Input pin select                                                      }
+  REFSEL,                                            { Reference select                                                      }
+  EXTREFSEL: longword;                               { External reference select                                             }
+  RESERVED5: array [0..3] of longword;
+  ANADETECT: longword;                               { Analog detect configuration                                           }
+  RESERVED6: array [0..4] of longword;
+  HYST: longword;                                    { Comparator hysteresis enable                                          }
+end;
+
+
+{ ================================================================================ }
+{ ================                       SWI                      ================ }
+{ ================================================================================ }
+
+{
+  Software interrupt 0 (SWI)
+}
+
+NRF_SWI_Type = record                                { SWI Structure                                                         }
+  UNUSED: longword;                                  { Unused.                                                               }
+end;
+
+
+{ ================================================================================ }
+{ ================                       EGU                      ================ }
+{ ================================================================================ }
+
+{
+  Event Generator Unit 0 (EGU)
+}
+
+NRF_EGU_Type = record                                { EGU Structure                                                         }
+  TASKS_TRIGGER: array [0..15] of longword;          { Description collection[0]: Trigger 0 for triggering the corresponding
+                                                       TRIGGERED[0] event                                                    }
+  RESERVED0: array [0..47] of longword;
+  EVENTS_TRIGGERED: array [0..15] of longword;       { Description collection[0]: Event number 0 generated by triggering
+                                                       the corresponding TRIGGER[0] task                                     }
+  RESERVED1: array [0..111] of longword;
+  INTEN,                                             { Enable or disable interrupt                                           }
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+end;
+
+
+{ ================================================================================ }
+{ ================                       PWM                      ================ }
+{ ================================================================================ }
+
+{
+  Pulse Width Modulation Unit 0 (PWM)
+}
+
+NRF_PWM_Type = record                                { PWM Structure                                                         }
+  RESERVED0,
+  TASKS_STOP: longword;                              { Stops PWM pulse generation on all channels at the end of current
+                                                       PWM period, and stops sequence playback                               }
+  TASKS_SEQSTART: array [0..1] of longword;          { Description collection[0]: Loads the first PWM value on all
+                                                       enabled channels from sequence 0, and starts playing that sequence
+                                                       at the rate defined in SEQ[0]REFRESH and/or DECODER.MODE. Causes
+                                                       PWM generation to start it was not running.                           }
+  TASKS_NEXTSTEP: longword;                          { Steps by one value in the current sequence on all enabled channels
+                                                       if DECODER.MODE=NextStep. Does not cause PWM generation to start
+                                                       it was not running.                                                   }
+  RESERVED1: array [0..59] of longword;
+  EVENTS_STOPPED: longword;                          { Response to STOP task, emitted when PWM pulses are no longer
+                                                       generated                                                             }
+  EVENTS_SEQSTARTED: array [0..1] of longword;       { Description collection[0]: First PWM period started on sequence
+                                                       0                                                                     }
+  EVENTS_SEQEND: array [0..1] of longword;           { Description collection[0]: Emitted at end of every sequence
+                                                       0, when last value from RAM has been applied to wave counter          }
+  EVENTS_PWMPERIODEND,                               { Emitted at the end of each PWM period                                 }
+  EVENTS_LOOPSDONE: longword;                        { Concatenated sequences have been played the amount of times
+                                                       defined in LOOP.CNT                                                   }
+  RESERVED2: array [0..55] of longword;
+  SHORTS: longword;                                  { Shortcut register                                                     }
+  RESERVED3: array [0..62] of longword;
+  INTEN,                                             { Enable or disable interrupt                                           }
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED4: array [0..124] of longword;
+  ENABLE,                                            { PWM module enable register                                            }
+  MODE,                                              { Selects operating mode of the wave counter                            }
+  COUNTERTOP,                                        { Value up to which the pulse generator counter counts                  }
+  PRESCALER,                                         { Configuration for PWM_CLK                                             }
+  DECODER,                                           { Configuration of the decoder                                          }
+  LOOP: longword;                                    { Amount of playback of a loop                                          }
+  RESERVED5: array [0..1] of longword;
+  SEQ: array [0..1] of PWM_SEQ_Type;                 { Unspecified                                                           }
+  PSEL: PWM_PSEL_Type;                               { Unspecified                                                           }
+end;
+
+
+{ ================================================================================ }
+{ ================                       PDM                      ================ }
+{ ================================================================================ }
+
+{
+  Pulse Density Modulation (Digital Microphone) Interface (PDM)
+}
+
+NRF_PDM_Type = record                                { PDM Structure                                                         }
+  TASKS_START,                                       { Starts continuous PDM transfer                                        }
+  TASKS_STOP: longword;                              { Stops PDM transfer                                                    }
+  RESERVED0: array [0..61] of longword;
+  EVENTS_STARTED,                                    { PDM transfer has started                                              }
+  EVENTS_STOPPED,                                    { PDM transfer has finished                                             }
+  EVENTS_END: longword;                              { The PDM has written the last sample specified by SAMPLE.MAXCNT
+                                                       (or the last sample after a STOP task has been received) to
+                                                       Data RAM                                                              }
+  RESERVED1: array [0..124] of longword;
+  INTEN,                                             { Enable or disable interrupt                                           }
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED2: array [0..124] of longword;
+  ENABLE,                                            { PDM module enable register                                            }
+  PDMCLKCTRL,                                        { PDM clock generator control                                           }
+  MODE: longword;                                    { Defines the routing of the connected PDM microphones' signals         }
+  RESERVED3: array [0..2] of longword;
+  GAINL,                                             { Left output gain adjustment                                           }
+  GAINR: longword;                                   { Right output gain adjustment                                          }
+  RESERVED4: array [0..7] of longword;
+  PSEL: PDM_PSEL_Type;                               { Unspecified                                                           }
+  RESERVED5: array [0..5] of longword;
+  SAMPLE: PDM_SAMPLE_Type;                           { Unspecified                                                           }
+end;
+
+
+{ ================================================================================ }
+{ ================                      NVMC                      ================ }
+{ ================================================================================ }
+
+{
+  Non Volatile Memory Controller (NVMC)
+}
+
+NRF_NVMC_Type = record                               { NVMC Structure                                                        }
+  RESERVED0: array [0..255] of longword;
+  READY: longword;                                   { Ready flag                                                            }
+  RESERVED1: array [0..63] of longword;
+  CONFIG: longword;                                  { Configuration register                                                }
+
+
+  ERASEPAGE: longword;                               { Register for erasing a page in Code area                              }
+  ERASEALL,                                          { Register for erasing all non-volatile user memory                     }
+  ERASEPCR0,                                         { Deprecated register - Register for erasing a page in Code area.
+                                                       Equivalent to ERASEPAGE.                                              }
+  ERASEUICR: longword;                               { Register for erasing User Information Configuration Registers         }
+  RESERVED2: array [0..9] of longword;
+  ICACHECNF,                                         { I-Code cache configuration register.                                  }
+  RESERVED3,
+  IHIT,                                              { I-Code cache hit counter.                                             }
+  IMISS: longword;                                   { I-Code cache miss counter.                                            }
+end;
+
+
+{ ================================================================================ }
+{ ================                       PPI                      ================ }
+{ ================================================================================ }
+
+{
+  Programmable Peripheral Interconnect (PPI)
+}
+
+NRF_PPI_Type = record                                { PPI Structure                                                         }
+  TASKS_CHG: array [0..5] of PPI_TASKS_CHG_Type;     { Channel group tasks                                                   }
+  RESERVED0: array [0..307] of longword;
+  CHEN,                                              { Channel enable register                                               }
+  CHENSET,                                           { Channel enable set register                                           }
+  CHENCLR,                                           { Channel enable clear register                                         }
+  RESERVED1: longint;
+  CH: array [0..19] of PPI_CH_Type;                  { PPI Channel                                                           }
+  RESERVED2: array [0..147] of longword;
+  CHG: array [0..5] of longword;                     { Description collection[0]: Channel group 0                            }
+  RESERVED3: array [0..61] of longword;
+  FORK: array [0..31] of PPI_FORK_Type;              { Fork                                                                  }
+end;
+
+
+{ ================================================================================ }
+{ ================                       MWU                      ================ }
+{ ================================================================================ }
+
+{
+  Memory Watch Unit (MWU)
+}
+
+NRF_MWU_Type = record                                { MWU Structure                                                         }
+  RESERVED0: array [0..63] of longword;
+  EVENTS_REGION: array [0..3] of MWU_EVENTS_REGION_Type;   { Unspecified                                                     }
+  RESERVED1: array [0..15] of longword;
+  EVENTS_PREGION: array [0..1] of MWU_EVENTS_PREGION_Type; { Unspecified                                                     }
+  RESERVED2: array [0..99] of longword;
+  INTEN,                                             { Enable or disable interrupt                                           }
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED3: array [0..4] of longword;
+  NMIEN,                                             { Enable or disable non-maskable interrupt                              }
+  NMIENSET,                                          { Enable non-maskable interrupt                                         }
+  NMIENCLR: longword;                                { Disable non-maskable interrupt                                        }
+  RESERVED4: array [0..52] of longword;
+  PERREGION: array [0..1] of MWU_PERREGION_Type;     { Unspecified                                                           }
+  RESERVED5: array [0..63] of longword;
+  REGIONEN,                                          { Enable/disable regions watch                                          }
+  REGIONENSET,                                       { Enable regions watch                                                  }
+  REGIONENCLR: longword;                             { Disable regions watch                                                 }
+  RESERVED6: array [0..56] of longword;
+  REGION: array [0..3] of MWU_REGION_Type;           { Unspecified                                                           }
+  RESERVED7: array [0..31] of longword;
+  PREGION: array [0..1] of MWU_PREGION_Type;         { Unspecified                                                           }
+end;
+
+
+{ ================================================================================ }
+{ ================                       I2S                      ================ }
+{ ================================================================================ }
+
+{
+  Inter-IC Sound (I2S)
+}
+
+NRF_I2S_Type = record                                { I2S Structure                                                         }
+  TASKS_START,                                       { Starts continuous I<sup>2</sup>S transfer. Also starts MCK generator
+                                                       when this is enabled.                                                 }
+  TASKS_STOP: longword;                              { Stops I<sup>2</sup>S transfer. Also stops MCK generator. Triggering
+                                                       this task will cause the STOPPED event to be generated.               }
+  RESERVED0: array [0..62] of longword;
+  EVENTS_RXPTRUPD,                                   { The RXD.PTR register has been copied to internal double-buffers.
+                                                       When the I2S module is started and RX is enabled, this event
+                                                       will be generated for every RXTXD.MAXCNT words that are received
+                                                       on the SDIN pin.                                                      }
+  EVENTS_STOPPED: longword;                          { I<sup>2</sup>S transfer stopped.                                      }
+  RESERVED1: array [0..1] of longword;
+  EVENTS_TXPTRUPD: longword;                         { The TDX.PTR register has been copied to internal double-buffers.
+                                                       When the I2S module is started and TX is enabled, this event
+                                                       will be generated for every RXTXD.MAXCNT words that are sent
+                                                       on the SDOUT pin.                                                     }
+  RESERVED2: array [0..121] of longword;
+  INTEN,                                             { Enable or disable interrupt                                           }
+  INTENSET,                                          { Enable interrupt                                                      }
+  INTENCLR: longword;                                { Disable interrupt                                                     }
+  RESERVED3: array [0..124] of longword;
+  ENABLE: longword;                                  { Enable I<sup>2</sup>S module.                                         }
+  CONFIG: I2S_CONFIG_Type;                           { Unspecified                                                           }
+  RESERVED4: array [0..2] of longword;
+  RXD: I2S_RXD_Type;                                 { Unspecified                                                           }
+  RESERVED5,
+  TXD: I2S_TXD_Type;                                 { Unspecified                                                           }
+  RESERVED6: array [0..2] of longword;
+  RXTXD: I2S_RXTXD_Type;                             { Unspecified                                                           }
+  RESERVED7: array [0..2] of longword;
+  PSEL: I2S_PSEL_Type;                               { Unspecified                                                           }
+end;
+
+
+{ ================================================================================ }
+{ ================                       FPU                      ================ }
+{ ================================================================================ }
+
+{
+  FPU (FPU)
+}
+
+NRF_FPU_Type = record                               { FPU Structure                                                          }
+  UNUSED: longword;                                 { Unused.                                                                }
+end;
+
+
+{ ================================================================================ }
+{ ================                      GPIO                      ================ }
+{ ================================================================================ }
+
+{
+  GPIO Port 1 (GPIO)
+}
+
+NRF_GPIO_Type = record                               { GPIO Structure                                                        }
+  RESERVED0: array [0..320] of longword;
+  OUT,                                               { Write GPIO port                                                       }
+  OUTSET,                                            { Set individual bits in GPIO port                                      }
+  OUTCLR,                                            { Clear individual bits in GPIO port                                    }
+  IN_,                                               { Read GPIO port                                                        }
+  DIR,                                               { Direction of GPIO pins                                                }
+  DIRSET,                                            { DIR set register                                                      }
+  DIRCLR,                                            { DIR clear register                                                    }
+  LATCH,                                             { Latch register indicating what GPIO pins that have met the criteria
+                                                       set in the PIN_CNF[n].SENSE registers                                 }
+  DETECTMODE: longword;                              { Select between default DETECT signal behaviour and LDETECT mode       }
+  RESERVED1: array [0..117] of longword;
+  PIN_CNF: array [0..31] of longword;                { Description collection[0]: Configuration of GPIO pins                 }
+end;
+
+
+{ ================================================================================ }
+{ ================              Peripheral memory map             ================ }
+{ ================================================================================ }
+
+const
+  NRF_FICR_BASE                 = $10000000;
+  NRF_UICR_BASE                 = $10001000;
+  NRF_BPROT_BASE                = $40000000;
+  NRF_POWER_BASE                = $40000000;
+  NRF_CLOCK_BASE                = $40000000;
+  NRF_AMLI_BASE                 = $40000000;
+  NRF_RADIO_BASE                = $40001000;
+  NRF_UARTE0_BASE               = $40002000;
+  NRF_UART0_BASE                = $40002000;
+  NRF_SPIM0_BASE                = $40003000;
+  NRF_SPIS0_BASE                = $40003000;
+  NRF_TWIM0_BASE                = $40003000;
+  NRF_TWIS0_BASE                = $40003000;
+  NRF_SPI0_BASE                 = $40003000;
+  NRF_TWI0_BASE                 = $40003000;
+  NRF_SPIM1_BASE                = $40004000;
+  NRF_SPIS1_BASE                = $40004000;
+  NRF_TWIM1_BASE                = $40004000;
+  NRF_TWIS1_BASE                = $40004000;
+  NRF_SPI1_BASE                 = $40004000;
+  NRF_TWI1_BASE                 = $40004000;
+  NRF_NFCT_BASE                 = $40005000;
+  NRF_GPIOTE_BASE               = $40006000;
+  NRF_SAADC_BASE                = $40007000;
+  NRF_TIMER0_BASE               = $40008000;
+  NRF_TIMER1_BASE               = $40009000;
+  NRF_TIMER2_BASE               = $4000A000;
+  NRF_RTC0_BASE                 = $4000B000;
+  NRF_TEMP_BASE                 = $4000C000;
+  NRF_RNG_BASE                  = $4000D000;
+  NRF_ECB_BASE                  = $4000E000;
+  NRF_CCM_BASE                  = $4000F000;
+  NRF_AAR_BASE                  = $4000F000;
+  NRF_WDT_BASE                  = $40010000;
+  NRF_RTC1_BASE                 = $40011000;
+  NRF_QDEC_BASE                 = $40012000;
+  NRF_COMP_BASE                 = $40013000;
+  NRF_LPCOMP_BASE               = $40013000;
+  NRF_SWI0_BASE                 = $40014000;
+  NRF_EGU0_BASE                 = $40014000;
+  NRF_SWI1_BASE                 = $40015000;
+  NRF_EGU1_BASE                 = $40015000;
+  NRF_SWI2_BASE                 = $40016000;
+  NRF_EGU2_BASE                 = $40016000;
+  NRF_SWI3_BASE                 = $40017000;
+  NRF_EGU3_BASE                 = $40017000;
+  NRF_SWI4_BASE                 = $40018000;
+  NRF_EGU4_BASE                 = $40018000;
+  NRF_SWI5_BASE                 = $40019000;
+  NRF_EGU5_BASE                 = $40019000;
+  NRF_TIMER3_BASE               = $4001A000;
+  NRF_TIMER4_BASE               = $4001B000;
+  NRF_PWM0_BASE                 = $4001C000;
+  NRF_PDM_BASE                  = $4001D000;
+  NRF_NVMC_BASE                 = $4001E000;
+  NRF_PPI_BASE                  = $4001F000;
+  NRF_MWU_BASE                  = $40020000;
+  NRF_PWM1_BASE                 = $40021000;
+  NRF_PWM2_BASE                 = $40022000;
+  NRF_SPIM2_BASE                = $40023000;
+  NRF_SPIS2_BASE                = $40023000;
+  NRF_SPI2_BASE                 = $40023000;
+  NRF_RTC2_BASE                 = $40024000;
+  NRF_I2S_BASE                  = $40025000;
+  NRF_FPU_BASE                  = $40026000;
+  NRF_P0_BASE                   = $50000000;
+
+
+{ ================================================================================ }
+{ ================             Peripheral declaration             ================ }
+{ ================================================================================ }
+
+var
+  NRF_FICR  : NRF_FICR_Type   absolute NRF_FICR_BASE;
+  NRF_UICR  : NRF_UICR_Type   absolute NRF_UICR_BASE;
+  NRF_BPROT : NRF_BPROT_Type  absolute NRF_BPROT_BASE;
+  NRF_POWER : NRF_POWER_Type  absolute NRF_POWER_BASE;
+  NRF_CLOCK : NRF_CLOCK_Type  absolute NRF_CLOCK_BASE;
+  NRF_AMLI  : NRF_AMLI_Type   absolute NRF_AMLI_BASE;
+  NRF_RADIO : NRF_RADIO_Type  absolute NRF_RADIO_BASE;
+  NRF_UARTE0: NRF_UARTE_Type  absolute NRF_UARTE0_BASE;
+  NRF_UART0 : NRF_UART_Type   absolute NRF_UART0_BASE;
+  NRF_SPIM0 : NRF_SPIM_Type   absolute NRF_SPIM0_BASE;
+  NRF_SPIS0 : NRF_SPIS_Type   absolute NRF_SPIS0_BASE;
+  NRF_TWIM0 : NRF_TWIM_Type   absolute NRF_TWIM0_BASE;
+  NRF_TWIS0 : NRF_TWIS_Type   absolute NRF_TWIS0_BASE;
+  NRF_SPI0  : NRF_SPI_Type    absolute NRF_SPI0_BASE;
+  NRF_TWI0  : NRF_TWI_Type    absolute NRF_TWI0_BASE;
+  NRF_SPIM1 : NRF_SPIM_Type   absolute NRF_SPIM1_BASE;
+  NRF_SPIS1 : NRF_SPIS_Type   absolute NRF_SPIS1_BASE;
+  NRF_TWIM1 : NRF_TWIM_Type   absolute NRF_TWIM1_BASE;
+  NRF_TWIS1 : NRF_TWIS_Type   absolute NRF_TWIS1_BASE;
+  NRF_SPI1  : NRF_SPI_Type    absolute NRF_SPI1_BASE;
+  NRF_TWI1  : NRF_TWI_Type    absolute NRF_TWI1_BASE;
+  NRF_NFCT  : NRF_NFCT_Type   absolute NRF_NFCT_BASE;
+  NRF_GPIOTE: NRF_GPIOTE_Type absolute NRF_GPIOTE_BASE;
+  NRF_SAADC : NRF_SAADC_Type  absolute NRF_SAADC_BASE;
+  NRF_TIMER0: NRF_TIMER_Type  absolute NRF_TIMER0_BASE;
+  NRF_TIMER1: NRF_TIMER_Type  absolute NRF_TIMER1_BASE;
+  NRF_TIMER2: NRF_TIMER_Type  absolute NRF_TIMER2_BASE;
+  NRF_RTC0  : NRF_RTC_Type    absolute NRF_RTC0_BASE;
+  NRF_TEMP  : NRF_TEMP_Type   absolute NRF_TEMP_BASE;
+  NRF_RNG   : NRF_RNG_Type    absolute NRF_RNG_BASE;
+  NRF_ECB   : NRF_ECB_Type    absolute NRF_ECB_BASE;
+  NRF_CCM   : NRF_CCM_Type    absolute NRF_CCM_BASE;
+  NRF_AAR   : NRF_AAR_Type    absolute NRF_AAR_BASE;
+  NRF_WDT   : NRF_WDT_Type    absolute NRF_WDT_BASE;
+  NRF_RTC1  : NRF_RTC_Type    absolute NRF_RTC1_BASE;
+  NRF_QDEC  : NRF_QDEC_Type   absolute NRF_QDEC_BASE;
+  NRF_COMP  : NRF_COMP_Type   absolute NRF_COMP_BASE;
+  NRF_LPCOMP: NRF_LPCOMP_Type absolute NRF_LPCOMP_BASE;
+  NRF_SWI0  : NRF_SWI_Type    absolute NRF_SWI0_BASE;
+  NRF_EGU0  : NRF_EGU_Type    absolute NRF_EGU0_BASE;
+  NRF_SWI1  : NRF_SWI_Type    absolute NRF_SWI1_BASE;
+  NRF_EGU1  : NRF_EGU_Type    absolute NRF_EGU1_BASE;
+  NRF_SWI2  : NRF_SWI_Type    absolute NRF_SWI2_BASE;
+  NRF_EGU2  : NRF_EGU_Type    absolute NRF_EGU2_BASE;
+  NRF_SWI3  : NRF_SWI_Type    absolute NRF_SWI3_BASE;
+  NRF_EGU3  : NRF_EGU_Type    absolute NRF_EGU3_BASE;
+  NRF_SWI4  : NRF_SWI_Type    absolute NRF_SWI4_BASE;
+  NRF_EGU4  : NRF_EGU_Type    absolute NRF_EGU4_BASE;
+  NRF_SWI5  : NRF_SWI_Type    absolute NRF_SWI5_BASE;
+  NRF_EGU5  : NRF_EGU_Type    absolute NRF_EGU5_BASE;
+  NRF_TIMER3: NRF_TIMER_Type  absolute NRF_TIMER3_BASE;
+  NRF_TIMER4: NRF_TIMER_Type  absolute NRF_TIMER4_BASE;
+  NRF_PWM0  : NRF_PWM_Type    absolute NRF_PWM0_BASE;
+  NRF_PDM   : NRF_PDM_Type    absolute NRF_PDM_BASE;
+  NRF_NVMC  : NRF_NVMC_Type   absolute NRF_NVMC_BASE;
+  NRF_PPI   : NRF_PPI_Type    absolute NRF_PPI_BASE;
+  NRF_MWU   : NRF_MWU_Type    absolute NRF_MWU_BASE;
+  NRF_PWM1  : NRF_PWM_Type    absolute NRF_PWM1_BASE;
+  NRF_PWM2  : NRF_PWM_Type    absolute NRF_PWM2_BASE;
+  NRF_SPIM2 : NRF_SPIM_Type   absolute NRF_SPIM2_BASE;
+  NRF_SPIS2 : NRF_SPIS_Type   absolute NRF_SPIS2_BASE;
+  NRF_SPI2  : NRF_SPI_Type    absolute NRF_SPI2_BASE;
+  NRF_RTC2  : NRF_RTC_Type    absolute NRF_RTC2_BASE;
+  NRF_I2S   : NRF_I2S_Type    absolute NRF_I2S_BASE;
+  NRF_FPU   : NRF_FPU_Type    absolute NRF_FPU_BASE;
+  NRF_P0    : NRF_GPIO_Type   absolute NRF_P0_BASE;
+
+
+implementation
+
+procedure NMI_Handler; external name 'NMI_Handler';
+procedure HardFault_Handler; external name 'HardFault_Handler';
+procedure MemoryManagement_Handler; external name 'MemoryManagement_Handler';
+procedure BusFault_Handler; external name 'BusFault_Handler';
+procedure UsageFault_Handler; external name 'UsageFault_Handler';
+procedure SVC_Handler; external name 'SVC_Handler';
+procedure DebugMonitor_Handler; external name 'DebugMonitor_Handler';
+procedure PendSV_Handler; external name 'PendSV_Handler';
+procedure SysTick_Handler; external name 'SysTick_Handler';
+
+procedure POWER_CLOCK_IRQHandler; external name 'POWER_CLOCK_IRQHandler';
+procedure RADIO_IRQHandler; external name 'RADIO_IRQHandler';
+procedure UARTE0_UART0_IRQHandler; external name 'UARTE0_UART0_IRQHandler';
+procedure SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler; external name 'SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler';
+procedure SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler; external name 'SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler';
+procedure NFCT_IRQHandler; external name 'NFCT_IRQHandler';
+procedure GPIOTE_IRQHandler; external name 'GPIOTE_IRQHandler';
+procedure SAADC_IRQHandler; external name 'SAADC_IRQHandler';
+procedure TIMER0_IRQHandler; external name 'TIMER0_IRQHandler';
+procedure TIMER1_IRQHandler; external name 'TIMER1_IRQHandler';
+procedure TIMER2_IRQHandler; external name 'TIMER2_IRQHandler';
+procedure RTC0_IRQHandler; external name 'RTC0_IRQHandler';
+procedure TEMP_IRQHandler; external name 'TEMP_IRQHandler';
+procedure RNG_IRQHandler; external name 'RNG_IRQHandler';
+procedure ECB_IRQHandler; external name 'ECB_IRQHandler';
+procedure CCM_AAR_IRQHandler; external name 'CCM_AAR_IRQHandler';
+procedure WDT_IRQHandler; external name 'WDT_IRQHandler';
+procedure RTC1_IRQHandler; external name 'RTC1_IRQHandler';
+procedure QDEC_IRQHandler; external name 'QDEC_IRQHandler';
+procedure COMP_LPCOMP_IRQHandler; external name 'COMP_LPCOMP_IRQHandler';
+procedure SWI0_EGU0_IRQHandler; external name 'SWI0_EGU0_IRQHandler';
+procedure SWI1_EGU1_IRQHandler; external name 'SWI1_EGU1_IRQHandler';
+procedure SWI2_EGU2_IRQHandler; external name 'SWI2_EGU2_IRQHandler';
+procedure SWI3_EGU3_IRQHandler; external name 'SWI3_EGU3_IRQHandler';
+procedure SWI4_EGU4_IRQHandler; external name 'SWI4_EGU4_IRQHandler';
+procedure SWI5_EGU5_IRQHandler; external name 'SWI5_EGU5_IRQHandler';
+procedure TIMER3_IRQHandler; external name 'TIMER3_IRQHandler';
+procedure TIMER4_IRQHandler; external name 'TIMER4_IRQHandler';
+procedure PWM0_IRQHandler; external name 'PWM0_IRQHandler';
+procedure PDM_IRQHandler; external name 'PDM_IRQHandler';
+procedure MWU_IRQHandler; external name 'MWU_IRQHandler';
+procedure PWM1_IRQHandler; external name 'PWM1_IRQHandler';
+procedure PWM2_IRQHandler; external name 'PWM2_IRQHandler';
+procedure SPIM2_SPIS2_SPI2_IRQHandler; external name 'SPIM2_SPIS2_SPI2_IRQHandler';
+procedure RTC2_IRQHandler; external name 'RTC2_IRQHandler';
+procedure I2S_IRQHandler; external name 'I2S_IRQHandler';
+
+
+{$i cortexm4f_start.inc}
+
+
+procedure Vectors; assembler; nostackframe;
+label interrupt_vectors;
+asm
+  .section ".init.interrupt_vectors"
+  interrupt_vectors:
+  .long   _stack_top
+  .long   Startup
+  .long   NMI_Handler
+  .long   HardFault_Handler
+  .long   MemoryManagement_Handler
+  .long   BusFault_Handler
+  .long   UsageFault_Handler
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   SVC_Handler
+  .long   DebugMonitor_Handler
+  .long   0
+  .long   PendSV_Handler
+  .long   SysTick_Handler
+
+  .long   POWER_CLOCK_IRQHandler
+  .long   RADIO_IRQHandler
+  .long   UARTE0_UART0_IRQHandler
+  .long   SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler
+  .long   SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler
+  .long   NFCT_IRQHandler
+  .long   GPIOTE_IRQHandler
+  .long   SAADC_IRQHandler
+  .long   TIMER0_IRQHandler
+  .long   TIMER1_IRQHandler
+  .long   TIMER2_IRQHandler
+  .long   RTC0_IRQHandler
+  .long   TEMP_IRQHandler
+  .long   RNG_IRQHandler
+  .long   ECB_IRQHandler
+  .long   CCM_AAR_IRQHandler
+  .long   WDT_IRQHandler
+  .long   RTC1_IRQHandler
+  .long   QDEC_IRQHandler
+  .long   COMP_LPCOMP_IRQHandler
+  .long   SWI0_EGU0_IRQHandler
+  .long   SWI1_EGU1_IRQHandler
+  .long   SWI2_EGU2_IRQHandler
+  .long   SWI3_EGU3_IRQHandler
+  .long   SWI4_EGU4_IRQHandler
+  .long   SWI5_EGU5_IRQHandler
+  .long   TIMER3_IRQHandler
+  .long   TIMER4_IRQHandler
+  .long   PWM0_IRQHandler
+  .long   PDM_IRQHandler
+  .long   0
+  .long   0
+  .long   MWU_IRQHandler
+  .long   PWM1_IRQHandler
+  .long   PWM2_IRQHandler
+  .long   SPIM2_SPIS2_SPI2_IRQHandler
+  .long   RTC2_IRQHandler
+  .long   I2S_IRQHandler
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+  .long   0
+
+  .weak   NMI_Handler
+  .weak   HardFault_Handler
+  .weak   MemoryManagement_Handler
+  .weak   BusFault_Handler
+  .weak   UsageFault_Handler
+  .weak   SVC_Handler
+  .weak   DebugMonitor_Handler
+  .weak   PendSV_Handler
+  .weak   SysTick_Handler
+
+  .weak   POWER_CLOCK_IRQHandler
+  .weak   RADIO_IRQHandler
+  .weak   UARTE0_UART0_IRQHandler
+  .weak   SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler
+  .weak   SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler
+  .weak   NFCT_IRQHandler
+  .weak   GPIOTE_IRQHandler
+  .weak   SAADC_IRQHandler
+  .weak   TIMER0_IRQHandler
+  .weak   TIMER1_IRQHandler
+  .weak   TIMER2_IRQHandler
+  .weak   RTC0_IRQHandler
+  .weak   TEMP_IRQHandler
+  .weak   RNG_IRQHandler
+  .weak   ECB_IRQHandler
+  .weak   CCM_AAR_IRQHandler
+  .weak   WDT_IRQHandler
+  .weak   RTC1_IRQHandler
+  .weak   QDEC_IRQHandler
+  .weak   COMP_LPCOMP_IRQHandler
+  .weak   SWI0_EGU0_IRQHandler
+  .weak   SWI1_EGU1_IRQHandler
+  .weak   SWI2_EGU2_IRQHandler
+  .weak   SWI3_EGU3_IRQHandler
+  .weak   SWI4_EGU4_IRQHandler
+  .weak   SWI5_EGU5_IRQHandler
+  .weak   TIMER3_IRQHandler
+  .weak   TIMER4_IRQHandler
+  .weak   PWM0_IRQHandler
+  .weak   PDM_IRQHandler
+  .weak   MWU_IRQHandler
+  .weak   PWM1_IRQHandler
+  .weak   PWM2_IRQHandler
+  .weak   SPIM2_SPIS2_SPI2_IRQHandler
+  .weak   RTC2_IRQHandler
+  .weak   I2S_IRQHandler
+
+  .set   NMI_Handler, HaltProc
+  .set   HardFault_Handler, HaltProc
+  .set   MemoryManagement_Handler, HaltProc
+  .set   BusFault_Handler, HaltProc
+  .set   UsageFault_Handler, HaltProc
+  .set   SVC_Handler, HaltProc
+  .set   DebugMonitor_Handler, HaltProc
+  .set   PendSV_Handler, HaltProc
+  .set   SysTick_Handler, HaltProc
+
+  .set   POWER_CLOCK_IRQHandler, HaltProc
+  .set   RADIO_IRQHandler, HaltProc
+  .set   UARTE0_UART0_IRQHandler, HaltProc
+  .set   SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler, HaltProc
+  .set   SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler, HaltProc
+  .set   NFCT_IRQHandler, HaltProc
+  .set   GPIOTE_IRQHandler, HaltProc
+  .set   SAADC_IRQHandler, HaltProc
+  .set   TIMER0_IRQHandler, HaltProc
+  .set   TIMER1_IRQHandler, HaltProc
+  .set   TIMER2_IRQHandler, HaltProc
+  .set   RTC0_IRQHandler, HaltProc
+  .set   TEMP_IRQHandler, HaltProc
+  .set   RNG_IRQHandler, HaltProc
+  .set   ECB_IRQHandler, HaltProc
+  .set   CCM_AAR_IRQHandler, HaltProc
+  .set   WDT_IRQHandler, HaltProc
+  .set   RTC1_IRQHandler, HaltProc
+  .set   QDEC_IRQHandler, HaltProc
+  .set   COMP_LPCOMP_IRQHandler, HaltProc
+  .set   SWI0_EGU0_IRQHandler, HaltProc
+  .set   SWI1_EGU1_IRQHandler, HaltProc
+  .set   SWI2_EGU2_IRQHandler, HaltProc
+  .set   SWI3_EGU3_IRQHandler, HaltProc
+  .set   SWI4_EGU4_IRQHandler, HaltProc
+  .set   SWI5_EGU5_IRQHandler, HaltProc
+  .set   TIMER3_IRQHandler, HaltProc
+  .set   TIMER4_IRQHandler, HaltProc
+  .set   PWM0_IRQHandler, HaltProc
+  .set   PDM_IRQHandler, HaltProc
+  .set   MWU_IRQHandler, HaltProc
+  .set   PWM1_IRQHandler, HaltProc
+  .set   PWM2_IRQHandler, HaltProc
+  .set   SPIM2_SPIS2_SPI2_IRQHandler, HaltProc
+  .set   RTC2_IRQHandler, HaltProc
+  .set   I2S_IRQHandler, HaltProc
+  .text
+end;
+end.