⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsp.c

📁 摩托罗拉MMC2107在ucosII的移植代码
💻 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 + -