27 #if defined( BSP_DK_BRD3200 )
31 #define BSP_SPI_USART_USED USART2
32 #define BSP_SPI_USART_CLK cmuClock_USART2
35 #define BSP_PORT_SPIBUS_CONNECT gpioPortC
36 #define BSP_PIN_SPIBUS_CONNECT 13
37 #define BSP_PORT_EBIBUS_CONNECT gpioPortC
38 #define BSP_PIN_EBIBUS_CONNECT 12
39 #define BSP_PORT_SPI_TX gpioPortC
40 #define BSP_PIN_SPI_TX 2
41 #define BSP_PORT_SPI_RX gpioPortC
42 #define BSP_PIN_SPI_RX 3
43 #define BSP_PORT_SPI_CLK gpioPortC
44 #define BSP_PIN_SPI_CLK 4
45 #define BSP_PORT_SPI_CS gpioPortC
46 #define BSP_PIN_SPI_CS 5
48 static uint16_t SpiBcAccess(uint8_t addr, uint8_t rw, uint16_t data);
49 static void SpiBcInit(
void);
50 static void SpiBcDisable(
void);
51 static bool SpiInit(
void);
52 static uint16_t SpiRegisterRead(
volatile uint16_t *addr);
53 static void SpiRegisterWrite(
volatile uint16_t *addr, uint16_t data);
54 static volatile const uint16_t *lastAddr = 0;
56 #if defined( BSP_BC_CTRL_EBI )
57 static void EbiConfigure(
void);
58 static bool EbiInit(
void);
59 static void EbiDisable(
void);
75 uint32_t BSP_DipSwitchGet(
void)
82 #if defined( BSP_BC_CTRL_EBI )
103 int BSP_EbiExtendedAddressRange(
bool enable)
109 int BSP_EnergyModeSet(uint16_t energyMode)
111 BSP_RegisterWrite(
BC_EM, energyMode);
115 int BSP_Init(uint32_t flags)
120 #if defined( BSP_BC_CTRL_EBI )
135 BSP_RegisterWrite(
BC_EM, 0);
140 int BSP_InterruptDisable(uint16_t flags)
152 int BSP_InterruptEnable(uint16_t flags)
163 int BSP_InterruptFlagsClear(uint16_t flags)
169 uint16_t BSP_InterruptFlagsGet(
void)
174 uint16_t BSP_JoystickGet(
void)
176 uint16_t joyStick = 0;
184 joyStick = (~(BSP_RegisterRead(
BC_JOYSTICK))) & 0x001f;
189 int BSP_PeripheralAccess(BSP_Peripheral_TypeDef perf,
bool enable)
195 bit = (uint16_t)perf;
207 if ((perf == BSP_RS232A) || (perf == BSP_RS232B))
214 if (perf == BSP_IRDA)
226 if ((perf == BSP_RS232A) || (perf == BSP_RS232B))
233 if (perf == BSP_IRDA)
245 uint16_t BSP_PushButtonsGet(
void)
260 uint16_t BSP_RegisterRead(
volatile uint16_t *addr)
262 #if defined( BSP_BC_CTRL_EBI )
265 return SpiRegisterRead(addr);
269 int BSP_RegisterWrite(
volatile uint16_t *addr, uint16_t data)
271 #if defined( BSP_BC_CTRL_EBI )
274 SpiRegisterWrite(addr, data);
280 #if defined( BSP_BC_CTRL_EBI )
281 static void EbiConfigure(
void)
373 static void EbiDisable(
void)
421 static bool EbiInit(
void)
432 ebiMagic = BSP_RegisterRead(
BC_MAGIC);
439 ebiMagic = SpiRegisterRead(
BC_MAGIC);
447 ebiMagic = BSP_RegisterRead(
BC_MAGIC);
452 if (!retry)
return false;
454 BSP_RegisterWrite(
BC_LED, retry);
459 static uint16_t SpiBcAccess(uint8_t addr, uint8_t rw, uint16_t data)
467 USART_Tx(BSP_SPI_USART_USED, (addr & 0x3) | rw << 3);
472 USART_Tx(BSP_SPI_USART_USED, data & 0xFF);
474 tmp = (uint16_t)
USART_Rx(BSP_SPI_USART_USED);
477 USART_Tx(BSP_SPI_USART_USED, data >> 8);
478 tmp |= (uint16_t)
USART_Rx(BSP_SPI_USART_USED) << 8;
486 static void SpiBcDisable(
void)
506 static void SpiBcInit(
void)
539 static bool SpiInit(
void)
550 bcMagic = SpiRegisterRead(
BC_MAGIC);
561 static uint16_t SpiRegisterRead(
volatile uint16_t *addr)
565 if (addr != lastAddr)
567 SpiBcAccess(0x00, 0, 0xFFFF & ((uint32_t) addr));
568 SpiBcAccess(0x01, 0, 0xFF & ((uint32_t) addr >> 16));
569 SpiBcAccess(0x02, 0, (0x0C000000 & (uint32_t) addr) >> 26);
573 data = SpiBcAccess(0x03, 1, 0);
574 data = SpiBcAccess(0x03, 1, 0);
579 static void SpiRegisterWrite(
volatile uint16_t *addr, uint16_t data)
581 if (addr != lastAddr)
583 SpiBcAccess(0x00, 0, 0xFFFF & ((uint32_t) addr));
584 SpiBcAccess(0x01, 0, 0xFF & ((uint32_t) addr >> 16));
585 SpiBcAccess(0x02, 0, (0x0C000000 & (uint32_t) addr) >> 26);
587 SpiBcAccess(0x03, 0, data);
Clock management unit (CMU) API.
void USART_Tx(USART_TypeDef *usart, uint8_t data)
Transmit one 4-9 bit frame.
Board support package API definitions.
void USART_InitSync(USART_TypeDef *usart, const USART_InitSync_TypeDef *init)
Init USART for synchronous mode.
uint8_t USART_Rx(USART_TypeDef *usart)
Receive one 4-8 bit frame, (or part of 10-16 bit frame).
CMSIS Cortex-M Peripheral Access Layer for Silicon Laboratories microcontroller devices.
#define USART_ROUTE_CLKPEN
Universal synchronous/asynchronous receiver/transmitter (USART/UART) peripheral API.
#define USART_ROUTE_RXPEN
External Bus Iterface (EBI) peripheral API.
void GPIO_PinModeSet(GPIO_Port_TypeDef port, unsigned int pin, GPIO_Mode_TypeDef mode, unsigned int out)
Set the mode for a GPIO pin.
#define BSP_STATUS_NOT_IMPLEMENTED
General Purpose IO (GPIO) peripheral API.
__STATIC_INLINE void GPIO_PinOutSet(GPIO_Port_TypeDef port, unsigned int pin)
Set a single pin in GPIO data out register to 1.
void EBI_Init(const EBI_Init_TypeDef *ebiInit)
Configure and enable External Bus Interface.
void CMU_ClockEnable(CMU_Clock_TypeDef clock, bool enable)
Enable/disable a clock.
void USART_Reset(USART_TypeDef *usart)
Reset USART/UART to same state as after a HW reset.
#define BC_PERCTRL_IRDA_SHUTDOWN
__STATIC_INLINE uint16_t SYSTEM_GetPartNumber(void)
Get part number of the MCU.
Board Control register definitions.
#define BC_PERCTRL_RS232_SHUTDOWN
__STATIC_INLINE void GPIO_PinOutClear(GPIO_Port_TypeDef port, unsigned int pin)
Set a single pin in GPIO data out port register to 0.
#define USART_ROUTE_TXPEN
#define USART_INITSYNC_DEFAULT