123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534 |
- unit lpc8xx;
- {$goto on}
- {$define lpc8xx}
- interface
- {$PACKRECORDS 2}
- const
- //------------------------- Cortex-M0 Processor Exceptions Numbers -------------------------
- Reset_IRQn = -15; // 1 Reset Vector, invoked on Power up and warm reset
- NonMaskableInt_IRQn = -14; // 2 Non Maskable Interrupt
- HardFault_IRQn = -13; // 3 Cortex-M0 Hard Fault Interrupt
- SVCall_IRQn = -5; // 11 Cortex-M0 SV Call Interrupt
- PendSV_IRQn = -2; // 14 Cortex-M0 Pend SV Interrupt
- SysTick_IRQn = -1; // 15 Cortex-M0 System Tick Interrupt
- //------------------------- LPC8xx Specific Interrupt Numbers -------------------------
- SPI0_IRQn = 0; // SPI0
- SPI1_IRQn = 1; // SPI1
- UART0_IRQn = 3; // USART0
- UART1_IRQn = 4; // USART1
- UART2_IRQn = 5; // USART2
- I2C_IRQn = 8; // I2C
- SCT_IRQn = 9; // SCT
- MRT_IRQn = 10; // MRT
- CMP_IRQn = 11; // CMP
- WDT_IRQn = 12; // WDT
- BOD_IRQn = 13; // BOD
- WKT_IRQn = 15; // WKT Interrupt
- PININT0_IRQn = 24; // External Interrupt 0
- PININT1_IRQn = 25; // External Interrupt 1
- PININT2_IRQn = 26; // External Interrupt 2
- PININT3_IRQn = 27; // External Interrupt 3
- PININT4_IRQn = 28; // External Interrupt 4
- PININT5_IRQn = 29; // External Interrupt 5
- PININT6_IRQn = 30; // External Interrupt 6
- PININT7_IRQn = 31; // External Interrupt 7
- type
- { ------------- System Control (SYSCON) ------------- }
- TSYSCON_Registers = record
- SYSMEMREMAP : longword;
- PRESETCTRL : longword;
- SYSPLLCTRL : longword;
- SYSPLLSTAT : longword;
- RESERVED0 : array [0 .. 3] of longword;
- SYSOSCCTRL : longword;
- WDTOSCCTRL : longword;
- RESERVED1 : array [0 .. 1] of longword;
- SYSRSTSTAT : longword;
- RESERVED2 : array [0 .. 2] of longword;
- SYSPLLCLKSEL : longword;
- SYSPLLCLKUEN : longword;
- RESERVED3 : array [0 .. 9] of longword;
- MAINCLKSEL : longword;
- MAINCLKUEN : longword;
- SYSAHBCLKDIV : longword;
- RESERVED4 : longword;
- SYSAHBCLKCTRL: longword;
- RESERVED5 : array [0 .. 3] of longword;
- UARTCLKDIV : longword;
- RESERVED6 : array [0 .. 17] of longword;
- CLKOUTSEL : longword;
- CLKOUTUEN : longword;
- CLKOUTDIV : longword;
- RESERVED7 : longword;
- UARTFRGDIV : longword;
- UARTFRGMULT : longword;
- RESERVED8 : longword;
- EXTTRACECMD : longword;
- PIOPORCAP0 : longword;
- RESERVED9 : array [0 .. 11] of longword;
- IOCONCLKDIV : array [0 .. 6] of longword;
- BODCTRL : longword;
- SYSTCKCAL : longword;
- RESERVED10 : array [0 .. 5] of longword;
- IRQLATENCY : longword;
- NMISRC : longword;
- PINTSEL : array [0 .. 7] of longword;
- RESERVED11 : array [0 .. 26] of longword;
- STARTERP0 : longword;
- RESERVED12 : array [0 .. 2] of longword;
- STARTERP1 : longword;
- RESERVED13 : array [0 .. 5] of longword;
- PDSLEEPCFG : longword;
- PDAWAKECFG : longword;
- PDRUNCFG : longword;
- RESERVED14 : array [0 .. 109] of longword;
- DEVICE_ID : longword;
- end;
- { ------------- Pin Connect Block (IOCON) ------------- }
- TIOCON_Registers = record
- PIO0_17 : longword;
- PIO0_13 : longword;
- PIO0_12 : longword;
- PIO0_5 : longword;
- PIO0_4 : longword;
- PIO0_3 : longword;
- PIO0_2 : longword;
- PIO0_11 : longword;
- PIO0_10 : longword;
- PIO0_16 : longword;
- PIO0_15 : longword;
- PIO0_1 : longword;
- RESERVED0: longword;
- PIO0_9 : longword;
- PIO0_8 : longword;
- PIO0_7 : longword;
- PIO0_6 : longword;
- PIO0_0 : longword;
- PIO0_14 : longword;
- end;
- { ------------- Flash Controller (FLASHCTRL) ------------- }
- TFLASHCTRL_Registers = record
- RESERVED0: array [0 .. 3] of longword;
- FLASHCFG : longword;
- RESERVED1: array [0 .. 2] of longword;
- FMSSTART : longword;
- FMSSTOP : longword;
- RESERVED2: longword;
- FMSW0 : longword;
- end;
- { ------------- Power Management Unit (PMU) ------------- }
- TPMU_Registers = record
- PCON : longword;
- GPREG0 : longword;
- GPREG1 : longword;
- GPREG2 : longword;
- GPREG3 : longword;
- DPDCTRL: longword;
- end;
- { ------------- Switch Matrix Register (SWM) ------------- }
- TSWM_Registers = record
- PINASSIGN : array [0 .. 8] of longword;
- RESERVED0 : array [0 .. 102] of longword;
- PINENABLE0: longword;
- end;
- { ------------- General Purpose Input/Output (GPIO) ------------- }
- TGPIOPORT_Registers = record
- B0 : array [0 .. 17] of byte;
- RESERVED0: array [0 .. 2038] of word;
- W0 : array [0 .. 17] of longword;
- RESERVED1: array [0 .. 1005] of longword;
- DIR0 : longword;
- RESERVED2: array [0 .. 30] of longword;
- MASK0 : longword;
- RESERVED3: array [0 .. 30] of longword;
- PIN0 : longword;
- RESERVED4: array [0 .. 30] of longword;
- MPIN0 : longword;
- RESERVED5: array [0 .. 30] of longword;
- SET0 : longword;
- RESERVED6: array [0 .. 30] of longword;
- CLR0 : longword;
- RESERVED7: array [0 .. 30] of longword;
- NOT0 : longword;
- end;
- { ------------- Pin interrupts/pattern match engine (PIN_INT) ------------- }
- TPININT_Registers = record
- ISEL : longword;
- IENR : longword;
- SIENR : longword;
- CIENR : longword;
- IENF : longword;
- SIENF : longword;
- CIENF : longword;
- RISE : longword;
- FALL : longword;
- IST : longword;
- PMCTRL: longword;
- PMSRC : longword;
- PMCFG : longword;
- end;
- { ------------- CRC Engine (CRC) ------------- }
- TCRC_Registers = record
- MODE: longword;
- SEED: longword;
- SUM : longword;
- end;
- { ------------- Comparator (CMP) ------------- }
- TCMP_Registers = record
- CTRL: longword;
- LAD : longword;
- end;
- { ------------- Wakeup Timer (WKT) ------------- }
- TWKT_Registers = record
- CTRL : longword;
- RESERVED0: array [0 .. 1] of longword;
- COUNT : longword;
- end;
- { ------------- Multi-Rate Timer(MRT) ------------- }
- TMRTChannel = record
- INTVAL: longword;
- TIMER : longword;
- CTRL : longword;
- STAT : longword;
- end;
- TMRT_Registers = record
- CHANNEL : array [0 .. 3] of TMRTChannel;
- RESERVED0: array [0 .. 0] of longword;
- IDLE_CH : longword;
- IRQ_FLAG : longword;
- end;
- { ------------- Universal Asynchronous Receiver Transmitter (USART) ------------- }
- TUSART_Registers = record
- CFG : longword;
- CTRL : longword;
- STAT : longword;
- INTENSET : longword;
- INTENCLR : longword;
- RXDATA : longword;
- RXDATA_STAT: longword;
- TXDATA : longword;
- BRG : longword;
- INTSTAT : longword;
- end;
- { ------------- Synchronous Serial Interface Controller (SPI) ------------- }
- TSPI_Registers = record
- CFG : longword;
- DLY : longword;
- STAT : longword;
- INTENSET: longword;
- INTENCLR: longword;
- RXDAT : longword;
- TXDATCTL: longword;
- TXDAT : longword;
- TXCTRL : longword;
- _DIV : longword;
- INTSTAT : longword;
- end;
- { ------------- Inter-Integrated Circuit (I2C) ------------- }
- TI2C_Registers = record
- CFG : longword;
- STAT : longword;
- INTENSET : longword;
- INTENCLR : longword;
- TIMEOUT : longword;
- _DIV : longword;
- INTSTAT : longword;
- RESERVED0: longword;
- MSTCTL : longword;
- MSTTIME : longword;
- MSTDAT : longword;
- RESERVED1: array [0 .. 4] of longword;
- SLVCTL : longword;
- SLVDAT : longword;
- SLVADR0 : longword;
- SLVADR1 : longword;
- SLVADR2 : longword;
- SLVADR3 : longword;
- SLVQUAL0 : longword;
- RESERVED2: array [0 .. 8] of longword;
- MONRXDAT : longword;
- end;
- { ------------- State Configurable Timer (SCT) ------------- }
- const
- CONFIG_SCT_nEV = 6;
- { Number of match/compare registers }
- CONFIG_SCT_nRG = 5;
- { Number of outputs }
- CONFIG_SCT_nOU = 4;
- type
- TSCTState = record
- STATE : longword;
- CTRL : longword;
- end;
- TSCTSet = record
- _SET : longword;
- CLR : longword;
- end;
- type
- TSCT_Registers = record
- CONFIG : longword;
- CTRL : longword;
- LIMIT : longword;
- HALT : longword;
- STOP : longword;
- START : longword;
- RESERVED1 : array [0 .. 9] of longword;
- COUNT : longword;
- STATE : longword;
- INPUT : longword;
- REGMODE : longword;
- OUTPUT : longword;
- OUTPUTDIRCTRL : longword;
- RES : longword;
- RESERVED2 : array [0 .. 36] of longword;
- EVEN : longword;
- EVFLAG : longword;
- CONEN : longword;
- CONFLAG : longword;
- MATCH_CAP : array [0 .. (CONFIG_SCT_nRG) - 1] of longword;
- RESERVED3 : array [0 .. (32 - CONFIG_SCT_nRG) - 1] of longword;
- MATCHREL_CAPCTRL: array [0 .. (CONFIG_SCT_nRG) - 1] of longword;
- RESERVED6 : array [0 .. (32 - CONFIG_SCT_nRG) - 1] of longword;
- EVENT : array [0 .. (CONFIG_SCT_nEV) - 1] of TSCTState;
- RESERVED9 : array [0 .. (128 - (2 * CONFIG_SCT_nEV)) - 1] of longword;
- _OUT : array [0 .. (CONFIG_SCT_nOU) - 1] of TSCTSet;
- end;
- { ------------- Watchdog Timer (WDT) ------------- }
- TWDT_Registers = record
- _MOD : longword;
- TC : longword;
- FEED : longword;
- TV : longword;
- RESERVED0: longword;
- WARNINT : longword;
- WINDOW : longword;
- end;
- { **************************************************************************** }
- { Peripheral memory map }
- { **************************************************************************** }
- const
- { Base addresses }
- LPC_FLASH_BASE = $00000000;
- LPC_RAM_BASE = $10000000;
- LPC_ROM_BASE = $1FFF0000;
- LPC_APB0_BASE = $40000000;
- LPC_AHB_BASE = $50000000;
- { APB0 peripherals }
- LPC_WDT_BASE = LPC_APB0_BASE + $00000;
- LPC_MRT_BASE = LPC_APB0_BASE + $04000;
- LPC_WKT_BASE = LPC_APB0_BASE + $08000;
- LPC_SWM_BASE = LPC_APB0_BASE + $0C000;
- LPC_PMU_BASE = LPC_APB0_BASE + $20000;
- LPC_CMP_BASE = LPC_APB0_BASE + $24000;
- LPC_FLASHCTRL_BASE = LPC_APB0_BASE + $40000;
- LPC_IOCON_BASE = LPC_APB0_BASE + $44000;
- LPC_SYSCON_BASE = LPC_APB0_BASE + $48000;
- LPC_I2C_BASE = LPC_APB0_BASE + $50000;
- LPC_SPI0_BASE = LPC_APB0_BASE + $58000;
- LPC_SPI1_BASE = LPC_APB0_BASE + $5C000;
- LPC_USART0_BASE = LPC_APB0_BASE + $64000;
- LPC_USART1_BASE = LPC_APB0_BASE + $68000;
- LPC_USART2_BASE = LPC_APB0_BASE + $6C000;
- { AHB peripherals }
- LPC_CRC_BASE = LPC_AHB_BASE + $00000;
- LPC_SCT_BASE = LPC_AHB_BASE + $04000;
- LPC_GPIO_PORT_BASE = $A0000000;
- LPC_PIN_INT_BASE = LPC_GPIO_PORT_BASE + $4000;
- // ****************************************************************************
- // Peripheral declaration
- // ****************************************************************************
- {$ALIGN 2}
- var
- WDT : TWDT_Registers absolute LPC_WDT_BASE;
- MRT : TMRT_Registers absolute LPC_MRT_BASE;
- WKT : TWKT_Registers absolute LPC_WKT_BASE;
- SWM : TSWM_Registers absolute LPC_SWM_BASE;
- PMU : TPMU_Registers absolute LPC_PMU_BASE;
- CMP : TCMP_Registers absolute LPC_CMP_BASE;
- FLASHCTRL: TFLASHCTRL_Registers absolute LPC_FLASHCTRL_BASE;
- IOCON : TIOCON_Registers absolute LPC_IOCON_BASE;
- SYSCON : TSysCon_Registers absolute LPC_SYSCON_BASE;
- I2C : TI2C_Registers absolute LPC_I2C_BASE;
- SPI0 : TSPI_Registers absolute LPC_SPI0_BASE;
- SPI1 : TSPI_Registers absolute LPC_SPI1_BASE;
- USART0 : TUSART_Registers absolute LPC_USART0_BASE;
- USART1 : TUSART_Registers absolute LPC_USART0_BASE;
- USART2 : TUSART_Registers absolute LPC_USART0_BASE;
- CRC : TCRC_Registers absolute LPC_CRC_BASE;
- SCT : TSCT_Registers absolute LPC_SCT_BASE;
- GPIO_PORT: TGPIOPort_Registers absolute LPC_GPIO_PORT_BASE;
- PIN_INT : TPININT_Registers absolute LPC_PIN_INT_BASE;
- implementation
- procedure NonMaskableInt_interrupt; external name 'NonMaskableInt_interrupt';
- procedure Hardfault_interrupt; external name 'Hardfault_interrupt';
- procedure Startup_Checksum; external name 'Startup_Checksum';
- procedure SVCall_interrupt; external name 'SVCall_interrupt';
- procedure PendSV_interrupt; external name 'PendSV_interrupt';
- procedure SysTick_interrupt; external name 'SysTick_interrupt';
- procedure SPI0_Interrupt; external name 'SPI0_Interrupt';
- procedure SPI1_Interrupt; external name 'SPI1_Interrupt';
- procedure UART0_Interrupt; external name 'UART0_Interrupt';
- procedure UART1_Interrupt; external name 'UART1_Interrupt';
- procedure UART2_Interrupt; external name 'UART2_Interrupt';
- procedure I2C_Interrupt; external name 'I2C_Interrupt';
- procedure SCT_Interrupt; external name 'SCT_Interrupt';
- procedure MRT_Interrupt; external name 'MRT_Interrupt';
- procedure CMP_Interrupt; external name 'CMP_Interrupt';
- procedure WDT_Interrupt; external name 'WDT_Interrupt';
- procedure BOD_Interrupt; external name 'BOD_Interrupt';
- procedure WKT_Interrupt; external name 'WKT_Interrupt';
- procedure PINIT0_Interrupt; external name 'PINIT0_Interrupt';
- procedure PINIT1_Interrupt; external name 'PINIT1_Interrupt';
- procedure PINIT2_Interrupt; external name 'PINIT2_Interrupt';
- procedure PINIT3_Interrupt; external name 'PINIT3_Interrupt';
- procedure PINIT4_Interrupt; external name 'PINIT4_Interrupt';
- procedure PINIT5_Interrupt; external name 'PINIT5_Interrupt';
- procedure PINIT6_Interrupt; external name 'PINIT6_Interrupt';
- procedure PINIT7_Interrupt; external name 'PINIT7_Interrupt';
- {$I cortexm0_start.inc}
- procedure Vectors; assembler;
- nostackframe;
- label interrupt_vectors;
- asm
- .section ".init.interrupt_vectors"
- interrupt_vectors:
- .long _stack_top
- .long Startup
- .long NonMaskableInt_interrupt
- .long Hardfault_interrupt
- .long 0
- .long 0
- .long 0
- .long Startup_Checksum
- .long 0
- .long 0
- .long 0
- .long SVCall_interrupt
- .long 0
- .long 0
- .long PendSV_interrupt
- .long SysTick_interrupt
- .long SPI0_Interrupt
- .long SPI1_Interrupt
- .long 0
- .long UART0_Interrupt
- .long UART1_Interrupt
- .long UART2_Interrupt
- .long 0
- .long 0
- .long I2C_Interrupt
- .long SCT_Interrupt
- .long MRT_Interrupt
- .long CMP_Interrupt
- .long WDT_Interrupt
- .long BOD_Interrupt
- .long 0
- .long WKT_Interrupt
- .long 0
- .long 0
- .long 0
- .long 0
- .long 0
- .long 0
- .long 0
- .long 0
- .long PINIT0_Interrupt
- .long PINIT1_Interrupt
- .long PINIT2_Interrupt
- .long PINIT3_Interrupt
- .long PINIT4_Interrupt
- .long PINIT5_Interrupt
- .long PINIT6_Interrupt
- .long PINIT7_Interrupt
- .weak NonMaskableInt_interrupt
- .weak Hardfault_interrupt
- .weak Startup_Checksum
- .weak SVCall_interrupt
- .weak PendSV_interrupt
- .weak SysTick_interrupt
- .weak SPI0_Interrupt
- .weak SPI1_Interrupt
- .weak UART0_Interrupt
- .weak UART1_Interrupt
- .weak UART2_Interrupt
- .weak I2C_Interrupt
- .weak SCT_Interrupt
- .weak MRT_Interrupt
- .weak CMP_Interrupt
- .weak WDT_Interrupt
- .weak BOD_Interrupt
- .weak WKT_Interrupt
- .weak PINIT0_Interrupt
- .weak PINIT1_Interrupt
- .weak PINIT2_Interrupt
- .weak PINIT3_Interrupt
- .weak PINIT4_Interrupt
- .weak PINIT5_Interrupt
- .weak PINIT6_Interrupt
- .weak PINIT7_Interrupt
- .set NonMaskableInt_interrupt, Startup
- .set Hardfault_interrupt , Startup
- .set SVCall_interrupt , Startup
- .set PendSV_interrupt , Startup
- .set SysTick_interrupt , Startup
- .set SPI0_Interrupt , Startup
- .set SPI1_Interrupt , Startup
- .set UART0_Interrupt , Startup
- .set UART1_Interrupt , Startup
- .set UART2_Interrupt , Startup
- .set I2C_Interrupt , Startup
- .set SCT_Interrupt , Startup
- .set MRT_Interrupt , Startup
- .set CMP_Interrupt , Startup
- .set WDT_Interrupt , Startup
- .set BOD_Interrupt , Startup
- .set WKT_Interrupt , Startup
- .set PINIT0_Interrupt, Startup
- .set PINIT1_Interrupt, Startup
- .set PINIT2_Interrupt, Startup
- .set PINIT3_Interrupt, Startup
- .set PINIT4_Interrupt, Startup
- .set PINIT5_Interrupt, Startup
- .set PINIT6_Interrupt, Startup
- .set PINIT7_Interrupt, Startup
- .text
- end;
- end.
|