dvk.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576
  1. /**************************************************************************//**
  2. * @file
  3. * @brief EFM32GG_DK3750 board support package
  4. * @author Energy Micro AS
  5. * @version 2.0.1
  6. ******************************************************************************
  7. * @section License
  8. * <b>(C) Copyright 2012 Energy Micro AS, http://www.energymicro.com</b>
  9. *******************************************************************************
  10. *
  11. * Permission is granted to anyone to use this software for any purpose,
  12. * including commercial applications, and to alter it and redistribute it
  13. * freely, subject to the following restrictions:
  14. *
  15. * 1. The origin of this software must not be misrepresented; you must not
  16. * claim that you wrote the original software.
  17. * 2. Altered source versions must be plainly marked as such, and must not be
  18. * misrepresented as being the original software.
  19. * 3. This notice may not be removed or altered from any source distribution.
  20. * 4. The source and compiled code may only be used on Energy Micro "EFM32"
  21. * microcontrollers and "EFR4" radios.
  22. *
  23. * DISCLAIMER OF WARRANTY/LIMITATION OF REMEDIES: Energy Micro AS has no
  24. * obligation to support this Software. Energy Micro AS is providing the
  25. * Software "AS IS", with no express or implied warranties of any kind,
  26. * including, but not limited to, any implied warranties of merchantability
  27. * or fitness for any particular purpose or warranties against infringement
  28. * of any proprietary rights of a third party.
  29. *
  30. * Energy Micro AS will not be liable for any consequential, incidental, or
  31. * special damages, or any other relief, or for any claim by any third party,
  32. * arising from your use of this Software.
  33. *
  34. *****************************************************************************/
  35. /**************************************************************************//**
  36. * @addtogroup BSP
  37. * @{
  38. *****************************************************************************/
  39. #include "efm32.h"
  40. #include "em_gpio.h"
  41. #include "em_cmu.h"
  42. #include "em_usart.h"
  43. #include "dvk.h"
  44. #include "dvk_bcregisters.h"
  45. /** Keep intialization mode */
  46. DVK_Init_TypeDef dvkOperationMode;
  47. /**************************************************************************//**
  48. * @brief Initialize EFM32GG_DK3750 board support package functionality
  49. * @param[in] mode Initialize in EBI or SPI mode
  50. *****************************************************************************/
  51. void DVK_init(DVK_Init_TypeDef mode)
  52. {
  53. bool ret = false;
  54. if (mode == DVK_Init_EBI)
  55. {
  56. dvkOperationMode = mode;
  57. DVK_busControlMode(DVK_BusControl_EBI);
  58. ret = DVK_EBI_init();
  59. }
  60. if (mode == DVK_Init_SPI)
  61. {
  62. dvkOperationMode = mode;
  63. DVK_busControlMode(DVK_BusControl_SPI);
  64. ret = DVK_SPI_init();
  65. }
  66. if (ret == false)
  67. {
  68. /* Unable to access board control, this is an abornomal situation. */
  69. /* Try to restart kit and reprogram EFM32 with a standard example */
  70. /* as this is most likely caused by a peripheral misconfiguration. */
  71. while (1) ;
  72. }
  73. DVK_setEnergyMode(0);
  74. }
  75. /**************************************************************************//**
  76. * @brief Disable EFM32GG_DK3750 board support package functionality
  77. *****************************************************************************/
  78. void DVK_disable(void)
  79. {
  80. if (dvkOperationMode == DVK_Init_EBI)
  81. {
  82. DVK_EBI_disable();
  83. }
  84. if (dvkOperationMode == DVK_Init_SPI)
  85. {
  86. DVK_SPI_disable();
  87. }
  88. DVK_busControlMode(DVK_BusControl_OFF);
  89. }
  90. /**************************************************************************//**
  91. * @brief Configure Board Controller bus decode logic
  92. * @param[in] mode Mode of operation for decode logic
  93. *****************************************************************************/
  94. void DVK_busControlMode(DVK_BusControl_TypeDef mode)
  95. {
  96. /* Configure GPIO pins for Board Bus mode */
  97. /* Note: Inverter on GPIO lines to BC, so signals are active low */
  98. CMU_ClockEnable(cmuClock_GPIO, true);
  99. switch (mode)
  100. {
  101. case DVK_BusControl_OFF:
  102. /* Configure board for OFF mode on PB15 MCU_EBI_CONNECT */
  103. GPIO_PinModeSet(gpioPortB, 15, gpioModePushPull, 1);
  104. /* Configure board for OFF mode on PD13 MCU_SPI_CONNECT */
  105. GPIO_PinModeSet(gpioPortD, 13, gpioModePushPull, 1);
  106. break;
  107. case DVK_BusControl_DIRECT:
  108. /* Configure board for DIRECT on PB15 MCU_EBI_CONNECT */
  109. GPIO_PinModeSet(gpioPortB, 15, gpioModePushPull, 0);
  110. /* Configure board for DIRECT on PD13 MCU_SPI_CONNECT */
  111. GPIO_PinModeSet(gpioPortD, 13, gpioModePushPull, 0);
  112. break;
  113. case DVK_BusControl_SPI:
  114. /* Configure board for SPI mode on PB15 MCU_EBI_CONNECT */
  115. GPIO_PinModeSet(gpioPortB, 15, gpioModePushPull, 1);
  116. /* Configure board for SPI mode on PD13 MCU_SPI_CONNECT */
  117. GPIO_PinModeSet(gpioPortD, 13, gpioModePushPull, 0);
  118. break;
  119. case DVK_BusControl_EBI:
  120. default:
  121. /* Configure board for EBI mode on PB15 MCU_EBI_CONNECT */
  122. GPIO_PinModeSet(gpioPortB, 15, gpioModePushPull, 0);
  123. /* Configure board for EBI mode on PD13 MCU_SPI_CONNECT */
  124. GPIO_PinModeSet(gpioPortD, 13, gpioModePushPull, 1);
  125. break;
  126. }
  127. }
  128. /**************************************************************************//**
  129. * @brief Set board LEDs
  130. *
  131. * @param[in] leds
  132. * 16 bits enabling or disabling individual board LEDs
  133. *****************************************************************************/
  134. void DVK_setLEDs(uint16_t leds)
  135. {
  136. DVK_writeRegister(&BC_REGISTER->UIF_LEDS, leds);
  137. }
  138. /**************************************************************************//**
  139. * @brief Get board LED configuration
  140. *
  141. * @return
  142. * 16 bits of LED status
  143. *****************************************************************************/
  144. uint16_t DVK_getLEDs(void)
  145. {
  146. return DVK_readRegister(&BC_REGISTER->UIF_LEDS);
  147. }
  148. /**************************************************************************//**
  149. * @brief DK3750 Peripheral Access Control
  150. * Enable or disable access to on-board peripherals through switches
  151. * and SPI switch where applicable. Turn off conflicting peripherals when
  152. * enabling another.
  153. * @param[in] perf
  154. * Which peripheral to configure
  155. * @param[in] enable
  156. * If true, sets up access to peripheral, if false disables it
  157. *****************************************************************************/
  158. void DVK_peripheralAccess(DVK_Peripheral_TypeDef perf, bool enable)
  159. {
  160. uint16_t perfControl;
  161. perfControl = DVK_readRegister(&BC_REGISTER->PERICON);
  162. /* Enable or disable the specificed peripheral by setting board control switch */
  163. if (enable)
  164. {
  165. switch (perf)
  166. {
  167. case DVK_RS232_SHUTDOWN:
  168. perfControl |= (1 << BC_PERICON_RS232_SHUTDOWN_SHIFT);
  169. break;
  170. case DVK_RS232_UART:
  171. perfControl &= ~(1 << BC_PERICON_RS232_SHUTDOWN_SHIFT);
  172. perfControl &= ~(1 << BC_PERICON_RS232_LEUART_SHIFT);
  173. perfControl |= (1 << BC_PERICON_RS232_UART_SHIFT);
  174. break;
  175. case DVK_RS232_LEUART:
  176. perfControl &= ~(1 << BC_PERICON_RS232_SHUTDOWN_SHIFT);
  177. perfControl &= ~(1 << BC_PERICON_RS232_UART_SHIFT);
  178. perfControl |= (1 << BC_PERICON_RS232_LEUART_SHIFT);
  179. break;
  180. case DVK_I2C:
  181. perfControl |= (1 << BC_PERICON_I2C_SHIFT);
  182. break;
  183. case DVK_ETH:
  184. /* Enable SPI interface */
  185. DVK_spiControl(DVK_SPI_Ethernet);
  186. /* Enable Ethernet analog switches */
  187. perfControl |= (1 << BC_PERICON_I2S_ETH_SHIFT);
  188. perfControl |= (1 << BC_PERICON_I2S_ETH_SEL_SHIFT);
  189. /* Disable Analog Diff Input - pins PD0 and PD1 is shared */
  190. perfControl &= ~(1 << BC_PERICON_ANALOG_DIFF_SHIFT);
  191. /* Disable Touch Inputs - pin PD3 is shared */
  192. perfControl &= ~(1 << BC_PERICON_TOUCH_SHIFT);
  193. /* Disable Analog SE Input - pin PD2 is shared */
  194. perfControl &= ~(1 << BC_PERICON_ANALOG_SE_SHIFT);
  195. break;
  196. case DVK_I2S:
  197. /* Direct SPI interface to I2S DAC */
  198. DVK_spiControl(DVK_SPI_Audio);
  199. /* Also make surea Audio out is connected for I2S operation */
  200. perfControl |= (1 << BC_PERICON_AUDIO_OUT_SHIFT);
  201. perfControl |= (1 << BC_PERICON_AUDIO_OUT_SEL_SHIFT);
  202. perfControl |= (1 << BC_PERICON_I2S_ETH_SHIFT);
  203. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SEL_SHIFT);
  204. /* Disable Analog Diff Input - pins PD0 and PD1 is shared */
  205. perfControl &= ~(1 << BC_PERICON_ANALOG_DIFF_SHIFT);
  206. /* Disable Touch Inputs - pin PD3 is shared */
  207. perfControl &= ~(1 << BC_PERICON_TOUCH_SHIFT);
  208. /* Disable Analog SE Input - pin PD2 is shared */
  209. perfControl &= ~(1 << BC_PERICON_ANALOG_SE_SHIFT);
  210. break;
  211. case DVK_TRACE:
  212. perfControl |= (1 << BC_PERICON_TRACE_SHIFT);
  213. break;
  214. case DVK_TOUCH:
  215. perfControl |= (1 << BC_PERICON_TOUCH_SHIFT);
  216. /* Disconnect SPI switch, pin PD3 is shared */
  217. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SHIFT);
  218. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SEL_SHIFT);
  219. DVK_spiControl(DVK_SPI_OFF);
  220. break;
  221. case DVK_AUDIO_IN:
  222. perfControl |= (1 << BC_PERICON_AUDIO_IN_SHIFT);
  223. break;
  224. case DVK_AUDIO_OUT:
  225. perfControl &= ~(1 << BC_PERICON_AUDIO_OUT_SEL_SHIFT);
  226. perfControl |= (1 << BC_PERICON_AUDIO_OUT_SHIFT);
  227. break;
  228. case DVK_ANALOG_DIFF:
  229. perfControl |= (1 << BC_PERICON_ANALOG_DIFF_SHIFT);
  230. /* Disconnect SPI switch, pin PD0 and PD1 is shared */
  231. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SHIFT);
  232. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SEL_SHIFT);
  233. DVK_spiControl(DVK_SPI_OFF);
  234. break;
  235. case DVK_ANALOG_SE:
  236. perfControl |= (1 << BC_PERICON_ANALOG_SE_SHIFT);
  237. /* Disconnect SPI switch, pin PD2 is shared */
  238. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SHIFT);
  239. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SEL_SHIFT);
  240. DVK_spiControl(DVK_SPI_OFF);
  241. break;
  242. case DVK_MICROSD:
  243. perfControl |= (1 << BC_PERICON_SPI_SHIFT);
  244. break;
  245. case DVK_TFT:
  246. /* Enable SPI to SSD2119 */
  247. DVK_spiControl(DVK_SPI_Display);
  248. /* Enable SPI analog switch */
  249. perfControl |= (1 << BC_PERICON_I2S_ETH_SHIFT);
  250. /* Disable Analog Diff Input - pins D0 and D1 is shared */
  251. perfControl &= ~(1 << BC_PERICON_ANALOG_DIFF_SHIFT);
  252. /* Disable Touch Inputs - pin D3 is shared */
  253. perfControl &= ~(1 << BC_PERICON_TOUCH_SHIFT);
  254. /* Disable Analog SE Input - pin D2 is shared */
  255. perfControl &= ~(1 << BC_PERICON_ANALOG_SE_SHIFT);
  256. break;
  257. }
  258. }
  259. else
  260. {
  261. switch (perf)
  262. {
  263. case DVK_RS232_SHUTDOWN:
  264. perfControl &= ~(1 << BC_PERICON_RS232_SHUTDOWN_SHIFT);
  265. break;
  266. case DVK_RS232_UART:
  267. perfControl |= (1 << BC_PERICON_RS232_SHUTDOWN_SHIFT);
  268. perfControl &= ~(1 << BC_PERICON_RS232_UART_SHIFT);
  269. break;
  270. case DVK_RS232_LEUART:
  271. perfControl |= (1 << BC_PERICON_RS232_SHUTDOWN_SHIFT);
  272. perfControl &= ~(1 << BC_PERICON_RS232_LEUART_SHIFT);
  273. break;
  274. case DVK_I2C:
  275. perfControl &= ~(1 << BC_PERICON_I2C_SHIFT);
  276. break;
  277. case DVK_ETH:
  278. /* Disable SPI interface */
  279. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SHIFT);
  280. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SEL_SHIFT);
  281. DVK_spiControl(DVK_SPI_OFF);
  282. break;
  283. case DVK_I2S:
  284. /* Disable SPI interface and audio out */
  285. perfControl &= ~(1 << BC_PERICON_AUDIO_OUT_SHIFT);
  286. perfControl &= ~(1 << BC_PERICON_AUDIO_OUT_SEL_SHIFT);
  287. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SHIFT);
  288. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SEL_SHIFT);
  289. DVK_spiControl(DVK_SPI_OFF);
  290. break;
  291. case DVK_TRACE:
  292. perfControl &= ~(1 << BC_PERICON_TRACE_SHIFT);
  293. break;
  294. case DVK_TOUCH:
  295. perfControl &= ~(1 << BC_PERICON_TOUCH_SHIFT);
  296. break;
  297. case DVK_AUDIO_IN:
  298. perfControl &= ~(1 << BC_PERICON_AUDIO_IN_SHIFT);
  299. break;
  300. case DVK_AUDIO_OUT:
  301. perfControl &= ~(1 << BC_PERICON_AUDIO_OUT_SEL_SHIFT);
  302. perfControl &= ~(1 << BC_PERICON_AUDIO_OUT_SHIFT);
  303. break;
  304. case DVK_ANALOG_DIFF:
  305. perfControl &= ~(1 << BC_PERICON_ANALOG_DIFF_SHIFT);
  306. break;
  307. case DVK_ANALOG_SE:
  308. perfControl &= ~(1 << BC_PERICON_ANALOG_SE_SHIFT);
  309. break;
  310. case DVK_MICROSD:
  311. perfControl &= ~(1 << BC_PERICON_SPI_SHIFT);
  312. break;
  313. case DVK_TFT:
  314. /* Disable SPI interface */
  315. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SHIFT);
  316. perfControl &= ~(1 << BC_PERICON_I2S_ETH_SEL_SHIFT);
  317. DVK_spiControl(DVK_SPI_OFF);
  318. break;
  319. }
  320. }
  321. /* Write back register */
  322. DVK_writeRegister(&BC_REGISTER->PERICON, perfControl);
  323. }
  324. /**************************************************************************//**
  325. * @brief Get status of push buttons on kit
  326. *
  327. * @return
  328. * Button state, each bit representing each push button PB0-PB4
  329. *****************************************************************************/
  330. uint16_t DVK_getPushButtons(void)
  331. {
  332. uint16_t tmp;
  333. tmp = DVK_readRegister(&BC_REGISTER->UIF_PB);
  334. return (~tmp) & 0x000F;
  335. }
  336. /**************************************************************************//**
  337. * @brief Configure SPI for correct peripheral
  338. *
  339. * @param[in] device
  340. * Device to enable SPI bus for
  341. *****************************************************************************/
  342. void DVK_spiControl(DVK_SpiControl_TypeDef device)
  343. {
  344. switch (device)
  345. {
  346. case DVK_SPI_Audio:
  347. DVK_writeRegister(&BC_REGISTER->SPI_DEMUX, BC_SPI_DEMUX_SLAVE_AUDIO);
  348. break;
  349. case DVK_SPI_Ethernet:
  350. DVK_writeRegister(&BC_REGISTER->SPI_DEMUX, BC_SPI_DEMUX_SLAVE_ETHERNET);
  351. break;
  352. case DVK_SPI_Display:
  353. DVK_writeRegister(&BC_REGISTER->SPI_DEMUX, BC_SPI_DEMUX_SLAVE_DISPLAY);
  354. break;
  355. case DVK_SPI_OFF:
  356. USART_Reset(USART1);
  357. CMU_ClockEnable(cmuClock_USART1, false);
  358. break;
  359. }
  360. }
  361. /**************************************************************************//**
  362. * @brief Inform AEM/Board Controller about what energy mode we are currently
  363. * entering. This information can be used for better visual feedback of
  364. * EFM32GG activity for the board controller and PC applications
  365. * @param energyMode What energy mode we are going to use next
  366. *****************************************************************************/
  367. void DVK_setEnergyMode(uint16_t energyMode)
  368. {
  369. DVK_writeRegister(&BC_REGISTER->EM, energyMode);
  370. }
  371. /**************************************************************************//**
  372. * @brief Enable "Control" buttons/joystick/dip switch interrupts
  373. * @param flags Board control interrupt flags, INTEN_<something>
  374. *****************************************************************************/
  375. void DVK_enableInterrupt(uint16_t flags)
  376. {
  377. uint16_t tmp;
  378. /* Add flags to interrupt enable register */
  379. tmp = DVK_readRegister(&BC_REGISTER->INTEN);
  380. tmp |= flags;
  381. DVK_writeRegister(&BC_REGISTER->INTEN, tmp);
  382. }
  383. /**************************************************************************//**
  384. * @brief Disable "Control" buttons/joystick/dip switch interrupts
  385. * @param flags Board control interrupt flags, BC_INTEN_<something>
  386. *****************************************************************************/
  387. void DVK_disableInterrupt(uint16_t flags)
  388. {
  389. uint16_t tmp;
  390. /* Clear flags from interrupt enable register */
  391. tmp = DVK_readRegister(&BC_REGISTER->INTEN);
  392. flags = ~(flags);
  393. tmp &= flags;
  394. DVK_writeRegister(&BC_REGISTER->INTEN, tmp);
  395. }
  396. /**************************************************************************//**
  397. * @brief Clear interrupts
  398. * @param flags Board control interrupt flags, BC_INTEN_<something>
  399. *****************************************************************************/
  400. void DVK_clearInterruptFlags(uint16_t flags)
  401. {
  402. uint16_t tmp;
  403. tmp = DVK_readRegister(&BC_REGISTER->INTFLAG);
  404. tmp &= ~(flags);
  405. DVK_writeRegister(&BC_REGISTER->INTFLAG, tmp);
  406. }
  407. /**************************************************************************//**
  408. * @brief Read interrupt flags
  409. * @return Returns currently triggered interrupts
  410. *****************************************************************************/
  411. uint16_t DVK_getInterruptFlags(void)
  412. {
  413. return DVK_readRegister(&BC_REGISTER->INTFLAG);
  414. }
  415. /**************************************************************************//**
  416. * @brief Get joystick button status
  417. * @return Joystick controller status
  418. *****************************************************************************/
  419. uint16_t DVK_getJoystick(void)
  420. {
  421. uint16_t joyStick = 0;
  422. joyStick = ~(DVK_readRegister(&BC_REGISTER->UIF_JOYSTICK)) & 0x001f;
  423. return joyStick;
  424. }
  425. /**************************************************************************//**
  426. * @brief Get dipswitch status
  427. * The DIP switches are free for user programmable purposes
  428. * @return Dip switch
  429. *****************************************************************************/
  430. uint16_t DVK_getDipSwitch(void)
  431. {
  432. return DVK_readRegister(&BC_REGISTER->UIF_DIP) & 0x000f;
  433. }
  434. /**************************************************************************//**
  435. * @brief Configure display control
  436. *****************************************************************************/
  437. void DVK_displayControl(DVK_Display_TypeDef option)
  438. {
  439. uint16_t tmp;
  440. switch (option)
  441. {
  442. case DVK_Display_EBI:
  443. DVK_writeRegister(&BC_REGISTER->ARB_CTRL, BC_ARB_CTRL_EBI);
  444. break;
  445. case DVK_Display_SPI:
  446. DVK_writeRegister(&BC_REGISTER->ARB_CTRL, BC_ARB_CTRL_SPI);
  447. break;
  448. case DVK_Display_BC:
  449. DVK_writeRegister(&BC_REGISTER->ARB_CTRL, BC_ARB_CTRL_BC);
  450. break;
  451. case DVK_Display_PowerEnable:
  452. tmp = DVK_readRegister(&BC_REGISTER->DISPLAY_CTRL);
  453. tmp |= (BC_DISPLAY_CTRL_POWER_ENABLE);
  454. DVK_writeRegister(&BC_REGISTER->DISPLAY_CTRL, tmp);
  455. break;
  456. case DVK_Display_PowerDisable:
  457. tmp = DVK_readRegister(&BC_REGISTER->DISPLAY_CTRL);
  458. tmp &= ~(BC_DISPLAY_CTRL_POWER_ENABLE);
  459. DVK_writeRegister(&BC_REGISTER->DISPLAY_CTRL, tmp);
  460. break;
  461. case DVK_Display_ResetAssert:
  462. tmp = DVK_readRegister(&BC_REGISTER->DISPLAY_CTRL);
  463. tmp |= (BC_DISPLAY_CTRL_RESET);
  464. DVK_writeRegister(&BC_REGISTER->DISPLAY_CTRL, tmp);
  465. break;
  466. case DVK_Display_ResetRelease:
  467. tmp = DVK_readRegister(&BC_REGISTER->DISPLAY_CTRL);
  468. tmp &= ~(BC_DISPLAY_CTRL_RESET);
  469. DVK_writeRegister(&BC_REGISTER->DISPLAY_CTRL, tmp);
  470. break;
  471. case DVK_Display_Mode8080:
  472. tmp = DVK_readRegister(&BC_REGISTER->DISPLAY_CTRL);
  473. tmp &= ~(BC_DISPLAY_CTRL_MODE_GENERIC);
  474. DVK_writeRegister(&BC_REGISTER->DISPLAY_CTRL, tmp);
  475. break;
  476. case DVK_Display_ModeGeneric:
  477. tmp = DVK_readRegister(&BC_REGISTER->DISPLAY_CTRL);
  478. tmp |= (BC_DISPLAY_CTRL_MODE_GENERIC);
  479. DVK_writeRegister(&BC_REGISTER->DISPLAY_CTRL, tmp);
  480. break;
  481. default:
  482. /* Unknown command */
  483. while (1) ;
  484. }
  485. }
  486. /** @} (end group BSP) */