ea6d73f140
1. Upgrade Cortex driver library (CMSIS -> CMSIS & Device): version 2.3.2 -> 3.0.1 & 3.0.0 - Remove "bsp/efm32/Libraries/CMSIS/Lib/ARM", "bsp/efm32/Libraries/CMSIS/Lib/G++" and "bsp/efm32/Libraries/CMSIS/SVD" to save space 2. Upgrade EFM32 driver libraries (efm32lib -> emlib): version 2.3.2 -> 3.0.0 - Remove "bsp/efm32/Libraries/Device/EnergyMicro/EFM32LG" and "bsp/efm32/Libraries/Device/EnergyMicro/EFM32TG" to save space 3. Upgrade EFM32GG_DK3750 development kit driver library: version 1.2.2 -> 2.0.1 4. Upgrade EFM32_Gxxx_DK development kit driver library: version 1.7.3 -> 2.0.1 5. Add energy management unit driver and test code 6. Modify linker script and related code to compatible with new version of libraries 7. Change EFM32 branch version number to 1.0 8. Add photo frame demo application git-svn-id: https://rt-thread.googlecode.com/svn/trunk@2122 bbd45198-f89e-11dd-88c7-29a3b14d5316
235 lines
8.5 KiB
C
235 lines
8.5 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
|