235 lines
8.3 KiB
C
235 lines
8.3 KiB
C
/**************************************************************************//**
|
|
* @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
|