📄 bsp.c
字号:
/*
*********************************************************************************************************
*
* EVB2107 Specific code
*
* File : bsp.c
* By : Dmitry Shvarts
*********************************************************************************************************
*/
#include "includes.h" /* Operating System Header */
#include "bsp.h" /* Board Support Header */
/************************************************************************/
/* Global Variables */
/************************************************************************/
UINT8 globalExceptionCounter = 0;
/************************************************************************/
/* Function: WaitForLockBit */
/* */
/* Purpose: Optional wait function for the Phase Locking function. */
/* */
/* Outputs: PLL error code */
/************************************************************************/
PLL_B_ReturnCode_t WaitforLockBit()
{
UINT32 i;
for (i = 0; i < PLL_B_WAIT_TIME; i++)
{
}
return PLL_B_ERR_NONE;
}
/************************************************************************/
/* Function: BSPInit */
/* */
/* Purpose: Initial M-Core settings */
/* */
/* Inputs: none */
/* */
/* Outputs: error line number */
/************************************************************************/
int BSPInit(void)
{
int status; /* device driver API return code */
PLL_B_StatusAlert_t StatusAlertBlock;
pPLL_B_StatusAlert_t StatusAlertPtr = &StatusAlertBlock;
/*----------------------------------------------------------------------*/
/* Initalize PLL */
/*----------------------------------------------------------------------*/
status = PLL_B_Init( (pPLL_B_t)__MMC2107_PLL,
PLL_B_RESET_ON_LOCK_FAILURE_DISABLE,
PLL_MFD, /* Multiplication factor */
PLL_B_RESET_ON_CLOCK_FAILURE_DISABLE,
PLL_RFD, /* Reduction(division) factor */
PLL_B_MONITOR_CLOCK_FAILURE_DISABLE,
PLL_B_CLOCK_OUT_ENABLE,
PLL_B_FAST_WAKEUP_DISABLE,
PLL_B_DISABLE_ALL,
StatusAlertPtr,
WaitforLockBit );
HANDLE_ERROR(status);
/*----------------------------------------------------------------------*/
/* Initalize Watchdog */
/*----------------------------------------------------------------------*/
status = Watchdog_A_Init( (pWatchdog_A_t)__MMC2107_WATCHDOG,
WATCHDOG_A_DISABLE,
WATCHDOG_A_FUNCTION_STOPPED_DEBUG_MODE,
WATCHDOG_A_FUNCTION_STOPPED_DOZE_MODE,
WATCHDOG_A_FUNCTION_STOPPED_WAIT_MODE );
HANDLE_ERROR(status);
/*------------------------------------------------------------------*/
/* Reset SCI */
/*------------------------------------------------------------------*/
status = SCI_D_Reset( (pSCI_D_t)__MMC2107_SCI2 );
HANDLE_ERROR(status);
/*------------------------------------------------------------------*/
/* Initalize SCI */
/*------------------------------------------------------------------*/
status = SCI_D_Init( (pSCI_D_t)__MMC2107_SCI2,
SCI2_BAUDRATE, /* SCI 2 baud rate */
SYSTEM_CLOCK, /* SCI Clock = System */
SCI_D_PINMODE_CMOS, /* use CMOS pin mode */
SCI_D_IDLE_LONG, /* use long idle mode */
SCI_D_PARITY_NONE, /* no parity */
SCI_D_DATA_8, /* 8 bit data frame */
SCI_D_WAKEUP_IDLE, /* use idle wakeup mode */
SCI_D_DISABLE /* disable SCI in doze mode*/
);
HANDLE_ERROR(status);
/*------------------------------------------------------------------*/
/* Enable the transmitter and receiver */
/*------------------------------------------------------------------*/
status = SCI_D_ControlOperation( (pSCI_D_t)__MMC2107_SCI2,
SCI_D_ENABLE, /* enable transmitter*/
SCI_D_ENABLE /* enable receiver */
);
HANDLE_ERROR(status);
return(0);
}
int InitHardware(void)
{
int status; /* device driver API return code */
/*----------------------------------------------------------------------*/
/* Initalize Interrupt Controller */
/*----------------------------------------------------------------------*/
status = ITCN_B_Init ( (pITCN_B_t)__MMC2107_ITCN,
ITCN_B_VECTORED_INTERRUPTS,
ITCN_B_FAST_INTERRUPT_ENABLE,
ITCN_B_MASK_DISABLE,
ITCN_B_HIGHEST_INTERRUPT_PRIORITY_LEVEL );
HANDLE_ERROR(status);
/*----------------------------------------------------------------------*/
/* Initalize OS tick service for PIT 1 interript priority */
/*----------------------------------------------------------------------*/
status = ITCN_B_SetInterruptServiceRoutine(
(pITCN_B_t)__MMC2107_ITCN,
ITCN_B_HIGHEST_INTERRUPT_PRIORITY_LEVEL,
ITCN_B_INTERRUPT_NORMAL,
(VectorValue_t)&OSTickISR,
ITCN_B_PIT1_PIF_SOURCE_30,
ITCN_B_VECTORED_INTERRUPTS );
HANDLE_ERROR(status);
/*----------------------------------------------------------------------*/
/* Enable ITCN interrupts */
/*----------------------------------------------------------------------*/
status = ITCN_B_ControlOperation ( (pITCN_B_t)__MMC2107_ITCN,
ITCN_B_HIGHEST_INTERRUPT_PRIORITY_LEVEL,
ITCN_B_INTERRUPT_NORMAL,
ITCN_B_INTERRUPT_ENABLE );
HANDLE_ERROR(status);
/*----------------------------------------------------------------------*/
/* Initialize PIT 1 */
/*----------------------------------------------------------------------*/
status = PIT_B_Init( (pPIT_B_t)__MMC2107_PIT1,
PIT_B_COUNTER_RELOAD_FROM_MODULUS,
PIT_B_DISABLE_COUNTER_OVERWRITE, /* PIT loads */
/* new modulus only when reaches the old one */
PIT_B_DISABLE_IN_DEBUG,
PIT_B_DISABLE_IN_DOZE,
PIT1_PRE, /* PIT1 pescaler */
PIT1_MODULUS ); /* PIT1 period in PIT ticks */
HANDLE_ERROR(status);
/*----------------------------------------------------------------------*/
/* Enable the PIT interrupt */
/*----------------------------------------------------------------------*/
status = PIT_B_ControlInterrupt( (pPIT_B_t)__MMC2107_PIT1,
PIT_B_INTERRUPT_FLAG_ALLOWED );
HANDLE_ERROR(status);
/*----------------------------------------------------------------------*/
/* Enable the PIT. If an error occurs, exit the program */
/*----------------------------------------------------------------------*/
status = PIT_B_ControlOperation((pPIT_B_t)__MMC2107_PIT1,
PIT_B_FUNCTION_ENABLE );
HANDLE_ERROR(status);
/*----------------------------------------------------------------------*/
/* Set processor status to enable interrupts and exceptions */
/*----------------------------------------------------------------------*/
status = CORE_B_SetProcessorStatus (
CORE_B_TRACE_NORMAL,
CORE_B_EXCEPTION_ENABLE,
CORE_B_INTERRUPT_ON_INSTRUCTION_BOUNDARIES,
CORE_B_INTERRUPT_ENABLE_ONLY_NORMAL );
HANDLE_ERROR(status);
/*----------------------------------------------------------------------*/
/* Return ITCN_B_ERR_NONE if no execution errors occur */
/*----------------------------------------------------------------------*/
return(0);
}
/*
*********************************************************************************************************
* START HARDWARE
* Description: This function is called to start the hardware timer tick and enable interrupts.
*
* Arguments : none
*********************************************************************************************************
*/
void OSStartHardware(void)
{
/* call another function to handle its return code */
InitHardware();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -