mirror of https://github.com/ARMmbed/mbed-os.git
153 lines
5.6 KiB
C
153 lines
5.6 KiB
C
/****************************************************************************//**
|
|
* @file ebi.c
|
|
* @version V0.10
|
|
* $Revision: 3 $
|
|
* $Date: 14/02/05 10:36a $
|
|
* @brief NANO100 series EBI driver source file
|
|
*
|
|
* @note
|
|
* Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
|
|
*****************************************************************************/
|
|
#include "Nano100Series.h"
|
|
//#include "ebi.h"
|
|
|
|
|
|
/** @addtogroup NANO100_Device_Driver NANO100 Device Driver
|
|
@{
|
|
*/
|
|
|
|
/** @addtogroup NANO100_EBI_Driver EBI Driver
|
|
@{
|
|
*/
|
|
|
|
|
|
/** @addtogroup NANO100_EBI_EXPORTED_FUNCTIONS EBI Exported Functions
|
|
@{
|
|
*/
|
|
|
|
/**
|
|
* @brief Initialize and enable EBI
|
|
* @param[in] u32Bank argument is reserved in NANO100 series.
|
|
* @param[in] u32DataWidth Data bus width. Valid values are:
|
|
* - \ref EBI_BUSWIDTH_8BIT
|
|
* - \ref EBI_BUSWIDTH_16BIT
|
|
* @param[in] u32TimingClass Default timing configuration. Valid values are:
|
|
* - \ref EBI_TIMING_FASTEST
|
|
* - \ref EBI_TIMING_VERYFAST
|
|
* - \ref EBI_TIMING_FAST
|
|
* - \ref EBI_TIMING_NORMAL
|
|
* - \ref EBI_TIMING_SLOW
|
|
* - \ref EBI_TIMING_VERYSLOW
|
|
* - \ref EBI_TIMING_SLOWEST
|
|
* @param[in] u32BusMode argument is reserved in NANO100 series.
|
|
* @param[in] u32CSActiveLevel argument is reserved in NANO100 series.
|
|
* @return none
|
|
*/
|
|
void EBI_Open(uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel)
|
|
{
|
|
EBI->EBICON = 0;
|
|
|
|
if (u32DataWidth == EBI_BUSWIDTH_8BIT)
|
|
EBI->EBICON &= ~EBI_EBICON_ExtBW16_Msk;
|
|
else
|
|
EBI->EBICON |= EBI_EBICON_ExtBW16_Msk;
|
|
|
|
EBI->EBICON &= ~(EBI_EBICON_ExttALE_Msk | EBI_EBICON_MCLKDIV_Msk);
|
|
switch (u32TimingClass) {
|
|
case EBI_TIMING_FASTEST:
|
|
EBI->EBICON |= (0 << EBI_EBICON_ExttALE_Pos);
|
|
EBI->EBICON |= (EBI_MCLKDIV_1 << EBI_EBICON_MCLKDIV_Pos);
|
|
EBI->EXTIME = 0;
|
|
break;
|
|
|
|
case EBI_TIMING_VERYFAST:
|
|
EBI->EBICON |= (1 << EBI_EBICON_ExttALE_Pos);
|
|
EBI->EBICON |= (EBI_MCLKDIV_2 << EBI_EBICON_MCLKDIV_Pos);
|
|
EBI->EXTIME = (4 << EBI_EXTIME_ExttACC_Pos) | (1 << EBI_EXTIME_ExttAHD_Pos) |
|
|
(2 << EBI_EXTIME_ExtIW2X_Pos) | (2 << EBI_EXTIME_ExtIR2W_Pos) |
|
|
(2 << EBI_EXTIME_ExtIR2R_Pos);
|
|
break;
|
|
|
|
case EBI_TIMING_FAST:
|
|
EBI->EBICON |= (2 << EBI_EBICON_ExttALE_Pos);
|
|
EBI->EBICON |= (EBI_MCLKDIV_4 << EBI_EBICON_MCLKDIV_Pos);
|
|
EBI->EXTIME = (8 << EBI_EXTIME_ExttACC_Pos) | (2 << EBI_EXTIME_ExttAHD_Pos) |
|
|
(4 << EBI_EXTIME_ExtIW2X_Pos) | (4 << EBI_EXTIME_ExtIR2W_Pos) |
|
|
(4 << EBI_EXTIME_ExtIR2R_Pos);
|
|
break;
|
|
|
|
case EBI_TIMING_NORMAL:
|
|
EBI->EBICON |= (3 << EBI_EBICON_ExttALE_Pos);
|
|
EBI->EBICON |= (EBI_MCLKDIV_8 << EBI_EBICON_MCLKDIV_Pos);
|
|
EBI->EXTIME = (16 << EBI_EXTIME_ExttACC_Pos) | (3 << EBI_EXTIME_ExttAHD_Pos) |
|
|
(8 << EBI_EXTIME_ExtIW2X_Pos) | (8 << EBI_EXTIME_ExtIR2W_Pos) |
|
|
(8 << EBI_EXTIME_ExtIR2R_Pos);
|
|
break;
|
|
|
|
case EBI_TIMING_SLOW:
|
|
EBI->EBICON |= (4 << EBI_EBICON_ExttALE_Pos);
|
|
EBI->EBICON |= (EBI_MCLKDIV_16 << EBI_EBICON_MCLKDIV_Pos);
|
|
EBI->EXTIME = (20 << EBI_EXTIME_ExttACC_Pos) | (4 << EBI_EXTIME_ExttAHD_Pos) |
|
|
(12 << EBI_EXTIME_ExtIW2X_Pos) | (12 << EBI_EXTIME_ExtIR2W_Pos) |
|
|
(12 << EBI_EXTIME_ExtIR2R_Pos);
|
|
break;
|
|
|
|
case EBI_TIMING_VERYSLOW:
|
|
EBI->EBICON |= (5 << EBI_EBICON_ExttALE_Pos);
|
|
EBI->EBICON |= (EBI_MCLKDIV_32 << EBI_EBICON_MCLKDIV_Pos);
|
|
EBI->EXTIME = (26 << EBI_EXTIME_ExttACC_Pos) | (5 << EBI_EXTIME_ExttAHD_Pos) |
|
|
(14 << EBI_EXTIME_ExtIW2X_Pos) | (14 << EBI_EXTIME_ExtIR2W_Pos) |
|
|
(14 << EBI_EXTIME_ExtIR2R_Pos);
|
|
break;
|
|
|
|
case EBI_TIMING_SLOWEST:
|
|
EBI->EBICON |= (6 << EBI_EBICON_ExttALE_Pos);
|
|
EBI->EBICON |= (EBI_MCLKDIV_32 << EBI_EBICON_MCLKDIV_Pos);
|
|
EBI->EXTIME = (31 << EBI_EXTIME_ExttACC_Pos) | (7 << EBI_EXTIME_ExttAHD_Pos) |
|
|
(15 << EBI_EXTIME_ExtIW2X_Pos) | (15 << EBI_EXTIME_ExtIR2W_Pos) |
|
|
(15 << EBI_EXTIME_ExtIR2R_Pos);
|
|
break;
|
|
}
|
|
|
|
EBI->EBICON |= EBI_EBICON_MCLKEN_Msk | EBI_EBICON_ExtEN_Msk;
|
|
}
|
|
|
|
/**
|
|
* @brief Disable EBI
|
|
* @param[in] u32Bank argument is reserved in NANO100 series.
|
|
* @return none
|
|
*/
|
|
void EBI_Close(uint8_t u32Bank)
|
|
{
|
|
EBI->EBICON = 0;
|
|
EBI->EXTIME = 0;
|
|
}
|
|
|
|
/**
|
|
* @brief Set EBI bus timings
|
|
* @param[in] u32Bank argument is reserved in NANO100 series.
|
|
* @param[in] u32TimingConfig The new EBI timing settings. This value will be written to EXTIME register.
|
|
* @param[in] u32MclkDiv Divider for MCLK. Valid values are:
|
|
* - \ref EBI_MCLKDIV_1
|
|
* - \ref EBI_MCLKDIV_2
|
|
* - \ref EBI_MCLKDIV_4
|
|
* - \ref EBI_MCLKDIV_8
|
|
* - \ref EBI_MCLKDIV_16
|
|
* - \ref EBI_MCLKDIV_32
|
|
* @return none
|
|
*/
|
|
void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv)
|
|
{
|
|
EBI->EXTIME = u32TimingConfig;
|
|
EBI->EBICON = (EBI->EBICON & ~EBI_EBICON_MCLKDIV_Msk) | (u32MclkDiv << EBI_EBICON_MCLKDIV_Pos);
|
|
}
|
|
|
|
|
|
/*@}*/ /* end of group NANO100_EBI_EXPORTED_FUNCTIONS */
|
|
|
|
/*@}*/ /* end of group NANO100_EBI_Driver */
|
|
|
|
/*@}*/ /* end of group NANO100_Device_Driver */
|
|
|
|
/*** (C) COPYRIGHT 2014 Nuvoton Technology Corp. ***/
|