PokittoLib is the library needed for programming the Pokitto DIY game console (www.pokitto.com)
Dependents: YATTT sd_map_test cPong SnowDemo ... more
PokittoLib
Library for programming Pokitto hardware
How to Use
- Import this library to online compiler (see button "import" on the right hand side
- DO NOT import mbed-src anymore, a better version is now included inside PokittoLib
- Change My_settings.h according to your project
- Start coding!
POKITTO_HW/lpc_defs.h
- Committer:
- Pokitto
- Date:
- 2018-10-07
- Revision:
- 58:5f58a2846a20
- Parent:
- 30:796f9611d2ac
File content as of revision 58:5f58a2846a20:
#ifndef LPCDEFS_H #define LPCDEFS_H #include <stdint.h> #ifdef __cplusplus #define __I volatile /*!< Defines 'read only' permissions */ #else #define __I volatile const /*!< Defines 'read only' permissions */ #endif #define __O volatile /*!< Defines 'write only' permissions */ #define __IO volatile /*!< Defines 'read / write' permissions */ //#define LPC_PMU_BASE 0x40038000 //#define LPC_IOCON_BASE 0x40044000 #define LPC_SYSCTL_BASE 0x40048000 //#define LPC_GPIO_PORT_BASE 0xA0000000 #define LPC_GPIO_GROUP_INT0_BASE 0x4005C000 #define LPC_GPIO_GROUP_INT1_BASE 0x40060000 #define LPC_PIN_INT_BASE 0xA0004000 //#define LPC_USART0_BASE 0x40008000 //#define LPC_USART1_BASE 0x4006C000 //#define LPC_USART2_BASE 0x40070000 //#define LPC_USART3_BASE 0x40074000 //#define LPC_USART4_BASE 0x4004C000 //#define LPC_I2C0_BASE 0x40000000 //#define LPC_I2C1_BASE 0x40020000 //#define LPC_SSP0_BASE 0x40040000 //#define LPC_SSP1_BASE 0x40058000 #define LPC_USB0_BASE 0x40080000 //#define LPC_ADC_BASE 0x4001C000 //#define LPC_SCT0_BASE 0x5000C000 //#define LPC_SCT1_BASE 0x5000E000 #define LPC_TIMER16_0_BASE 0x4000C000 #define LPC_TIMER16_1_BASE 0x40010000 #define LPC_TIMER32_0_BASE 0x40014000 #define LPC_TIMER32_1_BASE 0x40018000 //#define LPC_RTC_BASE 0x40024000 //#define LPC_WWDT_BASE 0x40004000 //#define LPC_DMA_BASE 0x50004000 //#define LPC_CRC_BASE 0x50000000 #define LPC_FLASH_BASE 0x4003C000 #define LPC_DMATRIGMUX_BASE 0x40028000UL /** * @brief LPC11U6X System Control block structure */ typedef struct { /*!< SYSCTL Structure */ __IO uint32_t SYSMEMREMAP; /*!< System Memory remap register */ __IO uint32_t PRESETCTRL; /*!< Peripheral reset Control register */ __IO uint32_t SYSPLLCTRL; /*!< System PLL control register */ __I uint32_t SYSPLLSTAT; /*!< System PLL status register */ __IO uint32_t USBPLLCTRL; /*!< USB PLL control register */ __I uint32_t USBPLLSTAT; /*!< USB PLL status register */ __I uint32_t RESERVED1[1]; __IO uint32_t RTCOSCCTRL; /*!< RTC Oscillator control register */ __IO uint32_t SYSOSCCTRL; /*!< System Oscillator control register */ __IO uint32_t WDTOSCCTRL; /*!< Watchdog Oscillator control register */ __I uint32_t RESERVED2[2]; __IO uint32_t SYSRSTSTAT; /*!< System Reset Status register */ __I uint32_t RESERVED3[3]; __IO uint32_t SYSPLLCLKSEL; /*!< System PLL clock source select register */ __IO uint32_t SYSPLLCLKUEN; /*!< System PLL clock source update enable register*/ __IO uint32_t USBPLLCLKSEL; /*!< USB PLL clock source select register */ __IO uint32_t USBPLLCLKUEN; /*!< USB PLL clock source update enable register */ __I uint32_t RESERVED4[8]; __IO uint32_t MAINCLKSEL; /*!< Main clock source select register */ __IO uint32_t MAINCLKUEN; /*!< Main clock source update enable register */ __IO uint32_t SYSAHBCLKDIV; /*!< System Clock divider register */ __I uint32_t RESERVED5; __IO uint32_t SYSAHBCLKCTRL; /*!< System clock control register */ __I uint32_t RESERVED6[4]; __IO uint32_t SSP0CLKDIV; /*!< SSP0 clock divider register */ __IO uint32_t USART0CLKDIV; /*!< UART clock divider register */ __IO uint32_t SSP1CLKDIV; /*!< SSP1 clock divider register */ __IO uint32_t FRGCLKDIV; /*!< FRG clock divider (USARTS 1 - 4) register */ __I uint32_t RESERVED7[7]; __IO uint32_t USBCLKSEL; /*!< USB clock source select register */ __IO uint32_t USBCLKUEN; /*!< USB clock source update enable register */ __IO uint32_t USBCLKDIV; /*!< USB clock source divider register */ __I uint32_t RESERVED8[5]; __IO uint32_t CLKOUTSEL; /*!< Clock out source select register */ __IO uint32_t CLKOUTUEN; /*!< Clock out source update enable register */ __IO uint32_t CLKOUTDIV; /*!< Clock out divider register */ __I uint32_t RESERVED9; __IO uint32_t UARTFRGDIV; /*!< USART fractional generator divider (USARTS 1 - 4) register */ __IO uint32_t UARTFRGMULT; /*!< USART fractional generator multiplier (USARTS 1 - 4) register */ __I uint32_t RESERVED10; __IO uint32_t EXTTRACECMD; /*!< External trace buffer command register */ __I uint32_t PIOPORCAP[3]; /*!< POR captured PIO status registers */ __I uint32_t RESERVED11[10]; __IO uint32_t IOCONCLKDIV[7]; /*!< IOCON block for programmable glitch filter divider registers */ __IO uint32_t BODCTRL; /*!< Brown Out Detect register */ __IO uint32_t SYSTCKCAL; /*!< System tick counter calibration register */ __I uint32_t RESERVED12[6]; __IO uint32_t IRQLATENCY; /*!< IRQ delay register */ __IO uint32_t NMISRC; /*!< NMI source control register */ __IO uint32_t PINTSEL[8]; /*!< GPIO pin interrupt select register 0-7 */ __IO uint32_t USBCLKCTRL; /*!< USB clock control register */ __I uint32_t USBCLKST; /*!< USB clock status register */ __I uint32_t RESERVED13[25]; __IO uint32_t STARTERP0; /*!< Start logic 0 interrupt wake-up enable register */ __I uint32_t RESERVED14[3]; __IO uint32_t STARTERP1; /*!< Start logic 1 interrupt wake-up enable register */ __I uint32_t RESERVED15[6]; __IO uint32_t PDSLEEPCFG; /*!< Power down states in deep sleep mode register */ __IO uint32_t PDWAKECFG; /*!< Power down states in wake up from deep sleep register */ __IO uint32_t PDRUNCFG; /*!< Power configuration register*/ __I uint32_t RESERVED16[110]; __I uint32_t DEVICEID; /*!< Device ID register */ } LPC_SYSCTL_T; #define LPC_SYSCTL_BASE 0x40048000 #define LPC_SYSCTL ((LPC_SYSCTL_T *) LPC_SYSCTL_BASE) //#define LPC_DMA ((LPC_DMA_T *) LPC_DMA_BASE) /* DMA channel source/address/next descriptor */ typedef struct { uint32_t xfercfg; /*!< Transfer configuration (only used in linked lists and ping-pong configs) */ uint32_t source; /*!< DMA transfer source end address */ uint32_t dest; /*!< DMA transfer desintation end address */ uint32_t next; /*!< Link to next DMA descriptor, must be 16 byte aligned */ } DMA_CHDESC_T; /* DMA channel mapping - each channel is mapped to an individual peripheral and direction or a DMA imput mux trigger */ typedef enum { SSP0_RX_DMA = 0, /*!< SSP0 receive DMA channel */ DMA_CH0 = SSP0_RX_DMA, DMAREQ_SSP0_TX, /*!< SSP0 transmit DMA channel */ DMA_CH1 = DMAREQ_SSP0_TX, DMAREQ_SSP1_RX, /*!< SSP1 receive DMA channel */ DMA_CH2 = DMAREQ_SSP1_RX, DMAREQ_SSP1_TX, /*!< SSP1 transmit DMA channel */ DMA_CH3 = DMAREQ_SSP1_TX, DMAREQ_USART0_RX, /*!< USART0 receive DMA channel */ DMA_CH4 = DMAREQ_USART0_RX, DMAREQ_USART0_TX, /*!< USART0 transmit DMA channel */ DMA_CH5 = DMAREQ_USART0_TX, DMAREQ_USART1_RX, /*!< USART1 transmit DMA channel */ DMA_CH6 = DMAREQ_USART1_RX, DMAREQ_USART1_TX, /*!< USART1 transmit DMA channel */ DMA_CH7 = DMAREQ_USART1_TX, DMAREQ_USART2_RX, /*!< USART2 transmit DMA channel */ DMA_CH8 = DMAREQ_USART2_RX, DMAREQ_USART2_TX, /*!< USART2 transmit DMA channel */ DMA_CH9 = DMAREQ_USART2_TX, DMAREQ_USART3_RX, /*!< USART3 transmit DMA channel */ DMA_CH10 = DMAREQ_USART3_RX, DMAREQ_USART3_TX, /*!< USART3 transmit DMA channel */ DMA_CH11 = DMAREQ_USART3_TX, DMAREQ_USART4_RX, /*!< USART4 transmit DMA channel */ DMA_CH12 = DMAREQ_USART4_RX, DMAREQ_USART4_TX, /*!< USART4 transmit DMA channel */ DMA_CH13 = DMAREQ_USART4_TX, DMAREQ_RESERVED_14, DMA_CH14 = DMAREQ_RESERVED_14, DMAREQ_RESERVED_15, DMA_CH15 = DMAREQ_RESERVED_15 } DMA_CHID_T; /* On LPC412x, Max DMA channel is 22 */ #define MAX_DMA_CHANNEL (DMA_CH15 + 1) #undef _BIT /* Set bit macro */ #define _BIT(n) (1 << (n)) /* _SBF(f,v) sets the bit field starting at position "f" to value "v". * _SBF(f,v) is intended to be used in "OR" and "AND" expressions: * e.g., "((_SBF(5,7) | _SBF(12,0xF)) & 0xFFFF)" */ #undef _SBF /* Set bit field macro */ #define _SBF(f, v) ((v) << (f)) /* _BITMASK constructs a symbol with 'field_width' least significant * bits set. * e.g., _BITMASK(5) constructs '0x1F', _BITMASK(16) == 0xFFFF * The symbol is intended to be used to limit the bit field width * thusly: * <a_register> = (any_expression) & _BITMASK(x), where 0 < x <= 32. * If "any_expression" results in a value that is larger than can be * contained in 'x' bits, the bits above 'x - 1' are masked off. When * used with the _SBF example above, the example would be written: * a_reg = ((_SBF(5,7) | _SBF(12,0xF)) & _BITMASK(16)) * This ensures that the value written to a_reg is no wider than * 16 bits, and makes the code easier to read and understand. */ #undef _BITMASK /* Bitmask creation macro */ #define _BITMASK(field_width) ( _BIT(field_width) - 1) /* NULL pointer */ #ifndef NULL #define NULL ((void *) 0) #endif /* Number of elements in an array */ #define NELEMENTS(array) (sizeof(array) / sizeof(array[0])) //#define LPC_SCT0 ((LPC_SCT_T *) LPC_SCT0_BASE) //#define LPC_SCT1 ((LPC_SCT_T *) LPC_SCT1_BASE) #define LPC_TIMER16_0 ((LPC_TIMER_T *) LPC_TIMER16_0_BASE) #define LPC_TIMER16_1 ((LPC_TIMER_T *) LPC_TIMER16_1_BASE) #define LPC_TIMER32_0 ((LPC_TIMER_T *) LPC_TIMER32_0_BASE) #define LPC_TIMER32_1 ((LPC_TIMER_T *) LPC_TIMER32_1_BASE) #endif