123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- /**************************************************************************//**
- * @file
- * @brief EFM32GG_DK3750 board support package API
- * @author Energy Micro AS
- * @version 2.0.1
- ******************************************************************************
- * @section License
- * <b>(C) Copyright 2012 Energy Micro AS, http://www.energymicro.com</b>
- *******************************************************************************
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- * claim that you wrote the original software.
- * 2. Altered source versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.
- * 3. This notice may not be removed or altered from any source distribution.
- * 4. The source and compiled code may only be used on Energy Micro "EFM32"
- * microcontrollers and "EFR4" radios.
- *
- * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Energy Micro AS has no
- * obligation to support this Software. Energy Micro AS is providing the
- * Software "AS IS", with no express or implied warranties of any kind,
- * including, but not limited to, any implied warranties of merchantability
- * or fitness for any particular purpose or warranties against infringement
- * of any proprietary rights of a third party.
- *
- * Energy Micro AS will not be liable for any consequential, incidental, or
- * special damages, or any other relief, or for any claim by any third party,
- * arising from your use of this Software.
- *
- *****************************************************************************/
- #ifndef __DVK_H
- #define __DVK_H
- /***************************************************************************//**
- * @addtogroup BSP
- * @{
- ******************************************************************************/
- #include <stdbool.h>
- #include <stdint.h>
- #include "efm32.h"
- #include "dvk_bcregisters.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- /** DVK board control access method */
- typedef enum
- {
- DVK_Init_EBI, /**< Use EBI to interface board control functionality */
- DVK_Init_SPI, /**< Use SPI to interface board control functionality */
- DVK_Init_DIRECT, /**< No board control, only GPIO */
- DVK_Init_OFF, /**< Disabled */
- } DVK_Init_TypeDef;
- extern DVK_Init_TypeDef dvkOperationMode;
- /** Bus control access */
- typedef enum
- {
- DVK_BusControl_OFF, /**< Board control disable */
- DVK_BusControl_DIRECT, /**< GPIO direct drive (n/a) */
- DVK_BusControl_SPI, /**< Configure Board controller for SPI mode */
- DVK_BusControl_EBI, /**< Configure Board controller for EBI mode */
- } DVK_BusControl_TypeDef;
- /** Display Control */
- typedef enum
- {
- DVK_Display_EBI, /**< SSD2119 TFT controller driven by EFM32GG EBI interface */
- DVK_Display_SPI, /**< SSD2119 TFT controller driven by EFM32GG SPI interface */
- DVK_Display_BC, /**< SSD2119 TFT controller driven by board controller (AEM) */
- DVK_Display_PowerEnable, /**< SSD2119 Enable power */
- DVK_Display_PowerDisable, /**< SSD2119 Disable power */
- DVK_Display_ResetAssert, /**< Hold SSD2119 in reset */
- DVK_Display_ResetRelease, /**< Release SSD2119 in reset */
- DVK_Display_Mode8080, /**< Configure SSD2119 for 8080 mode of operation */
- DVK_Display_ModeGeneric, /**< Configure SSD2119 for Generic+SPI mode of operation */
- } DVK_Display_TypeDef;
- /** SPI control */
- typedef enum
- {
- DVK_SPI_Audio, /**< Configure switchable SPI interface to Audio I2S */
- DVK_SPI_Ethernet, /**< Configure switchable SPI interface to Ethernet */
- DVK_SPI_Display, /**< Configure switchable SPI interface to SSD2119 */
- DVK_SPI_OFF, /**< Disable SPI interface */
- } DVK_SpiControl_TypeDef;
- /** Peripherals control structure */
- typedef enum
- {
- DVK_RS232_SHUTDOWN, /**< Disable RS232 */
- DVK_RS232_UART, /**< UART control of RS232 */
- DVK_RS232_LEUART, /**< LEUART control of RS232 */
- DVK_I2C, /**< I2C */
- DVK_ETH, /**< Ethernet */
- DVK_I2S, /**< Audio I2S */
- DVK_TRACE, /**< ETM Trace */
- DVK_TOUCH, /**< Display touch interface */
- DVK_AUDIO_IN, /**< Audio In */
- DVK_AUDIO_OUT, /**< Audio Out */
- DVK_ANALOG_DIFF, /**< Analog DIFF */
- DVK_ANALOG_SE, /**< Analog SE */
- DVK_MICROSD, /**< MicroSD SPI interace */
- DVK_TFT, /**< SSD2119 TFT controller */
- } DVK_Peripheral_TypeDef;
- /* Initalize DVK board for access to external PSRAM, Flash and BC registers */
- void DVK_init(DVK_Init_TypeDef mode);
- void DVK_disable(void);
- /* Board controller control API */
- void DVK_busControlMode(DVK_BusControl_TypeDef mode);
- void DVK_peripheralAccess(DVK_Peripheral_TypeDef perf, bool enable);
- void DVK_spiControl(DVK_SpiControl_TypeDef device);
- /* Board controller access function */
- uint16_t DVK_getPushButtons(void);
- uint16_t DVK_getJoystick(void);
- uint16_t DVK_getDipSwitch(void);
- void DVK_setLEDs(uint16_t leds);
- uint16_t DVK_getLEDs(void);
- /* Miscellaneous */
- void DVK_setEnergyMode(uint16_t energyMode);
- void DVK_displayControl(DVK_Display_TypeDef option);
- /* Board controller interrupt support */
- void DVK_enableInterrupt(uint16_t flags);
- void DVK_disableInterrupt(uint16_t flags);
- uint16_t DVK_getInterruptFlags(void);
- void DVK_clearInterruptFlags(uint16_t flags);
- /* EBI access */
- bool DVK_EBI_init(void);
- void DVK_EBI_disable(void);
- void DVK_EBI_extendedAddressRange(bool enable);
- __STATIC_INLINE void DVK_EBI_writeRegister(volatile uint16_t *addr, uint16_t data);
- __STATIC_INLINE uint16_t DVK_EBI_readRegister(volatile uint16_t *addr);
- /* SPI access */
- bool DVK_SPI_init(void);
- void DVK_SPI_disable(void);
- uint16_t DVK_SPI_readRegister(volatile uint16_t *addr);
- void DVK_SPI_writeRegister(volatile uint16_t *addr, uint16_t data);
- /* MCU-plug-in-board (BRD3600) API */
- void DVK_BRD3600A_init(void);
- void DVK_BRD3600A_deInit(void);
- void DVK_BRD3600A_usbStatusLEDEnable(int enable);
- void DVK_BRD3600A_usbVBUSSwitchEnable(int enable);
- int DVK_BRD3600A_usbVBUSGetOCFlagState(void);
- /* For "backward compatibility" with DVK */
- /** DVK_enablePeripheral() backward compatibility */
- #define DVK_enablePeripheral(X) DVK_peripheralAccess(X, true)
- /** DVK_disablePeripheral() backward compatibility */
- #define DVK_disablePeripheral(X) DVK_peripheralAccess(X, false)
- /**************************************************************************//**
- * @brief Write data into 16-bit board control register using mem.mapped EBI
- * @param addr Address of board controller register
- * @param data Data to write into register
- *****************************************************************************/
- __STATIC_INLINE void DVK_EBI_writeRegister(volatile uint16_t *addr, uint16_t data)
- {
- *addr = data;
- }
- /**************************************************************************//**
- * @brief Read data from 16-bit board control register using memory mapped EBI
- * @param addr Register to read from
- * @return Value of board controller register
- *****************************************************************************/
- __STATIC_INLINE uint16_t DVK_EBI_readRegister(volatile uint16_t *addr)
- {
- return *addr;
- }
- /**************************************************************************//**
- * @brief Read data from 16-bit board control register
- * @param addr Register to read
- * @return Value of board controller register
- *****************************************************************************/
- __STATIC_INLINE uint16_t DVK_readRegister(volatile uint16_t *addr)
- {
- if (dvkOperationMode == DVK_Init_EBI)
- {
- return DVK_EBI_readRegister(addr);
- }
- else
- {
- return DVK_SPI_readRegister(addr);
- }
- }
- /**************************************************************************//**
- * @brief Write data into 16-bit board control register
- * @param addr Address to board control register
- * @param data Data to write into register
- *****************************************************************************/
- __STATIC_INLINE void DVK_writeRegister(volatile uint16_t *addr, uint16_t data)
- {
- if (dvkOperationMode == DVK_Init_EBI)
- {
- DVK_EBI_writeRegister(addr, data);
- }
- else
- {
- DVK_SPI_writeRegister(addr, data);
- }
- }
- #ifdef __cplusplus
- }
- #endif
- /** @} (end group BSP) */
- #endif
|