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

📄 xtime_l.c

📁 xilinx内嵌CPU下的UCOS移植
💻 C
字号:
/*-----------------------------------------------------------------------------//     $Date: 2006/07/25 22:17:28 $//     $RCSfile: xtime_l.c,v $//-----------------------------------------------------------------------------////         XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"//         SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR//         XILINX DEVICES.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION//         AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION//         OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS//         IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,//         AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE//         FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY DISCLAIMS ANY//         WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE//         IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR//         REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF//         INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS//         FOR A PARTICULAR PURPOSE.//         //         (c) Copyright 2006 Xilinx, Inc.//         All rights reserved.//// Revision History:// 1.1     mbates   2005/07/12  -  updated code to 440 specs   ////---------------------------------------------------------------------------*/#include "xtime_l.h"#include "xpseudo_asm.h"/****************************************************************************** Set the time in the Time Base Register ** @param    Value to be written to the Time Base Register*    * @return   None.** @note     None.******************************************************************************/void XTime_SetTime(XTime Xtime){  mtspr(XREG_SPR_TBL_WRITE, 0);          /* set TBL to 0 to avoid ripple */  mtspr(XREG_SPR_TBU_WRITE, (unsigned int) (Xtime >> 32));   /* set TBU */  mtspr(XREG_SPR_TBL_WRITE, (unsigned int) Xtime);           /* set TBL */}/****************************************************************************** Get the time from the Time Base Register ** @param    Pointer to the location to be updated with the time*    * @return   None.** @note     None.******************************************************************************/void XTime_GetTime(XTime *Xtime){  unsigned int high;  unsigned int low;    /* loop until we got a consistent register pair */  do  {    high = mfspr(XREG_SPR_TBU_READ);    low = mfspr(XREG_SPR_TBL_READ);  } while (high != mfspr(XREG_SPR_TBU_READ));  *Xtime = (((XTime) high) << 32) | (XTime) low;}/****************************************************************************** Clear the specified bits of the Timer Status Register (TSR)** @param    Bitmask that specifies the bits of the TSR to be cleared.*           The bit masks are defined in xreg405.h*    * @return   None.** @note     None.******************************************************************************/void XTime_TSRClearStatusBits(unsigned long Bitmask){   mtspr(XREG_SPR_TSR, Bitmask);}/****************************************************************************** Write a value to the Decrementer (DEC).** @param    Value to be written to the DEC*    * @return   None.** @note     None.*****************************************************************************/void XTime_DECSetInterval(unsigned long Interval){   mtspr(XREG_SPR_DEC, Interval); //load initial DEC interval   mtspr(XREG_SPR_DECAR, Interval); //load reload value}/****************************************************************************** Enable Decrementer (DEC) interrupts.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_DECEnableInterrupt(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val | XREG_TCR_DEC_INTERRUPT_ENABLE);}/****************************************************************************** Disable Decrementer (DEC) interrupts.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_DECDisableInterrupt(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val & ~XREG_TCR_DEC_INTERRUPT_ENABLE);}/****************************************************************************** Enable Decrementer (DEC) auto-reload mode.  ** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_DECEnableAutoReload(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val | XREG_TCR_AUTORELOAD_ENABLE);}/****************************************************************************** Disable Decrementer (DEC) auto-reload mode.  ** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_DECDisableAutoReload(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val & ~XREG_TCR_AUTORELOAD_ENABLE);}/****************************************************************************** Clear Decrementer (DEC) interrupt status bit.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_DECClearInterrupt(void){   XTime_TSRClearStatusBits(XREG_TSR_DEC_INTERRUPT_STATUS);}/****************************************************************************** Enable Fixed Interval Timer (FIT) interrupts.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_FITEnableInterrupt(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val | XREG_TCR_FIT_INTERRUPT_ENABLE);}/****************************************************************************** Disable Fixed Interval Timer (FIT) interrupts.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_FITDisableInterrupt(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val & ~XREG_TCR_FIT_INTERRUPT_ENABLE);}/****************************************************************************** Clear Fixed Interval Timer (FIT) interrupt status bit.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_FITClearInterrupt(void){   XTime_TSRClearStatusBits(XREG_TSR_FIT_INTERRUPT_STATUS);}/****************************************************************************** Set the Fixed Interval Timer (FIT) period** @param    Period.  This value may be one of *           XREG_TCR_FIT_PERIOD_11 (2^25 clocks),*           XREG_TCR_FIT_PERIOD_10 (2^21 clocks), *           XREG_TCR_FIT_PERIOD_01 (2^17 clocks) or*           XREG_TCR_FIT_PERIOD_00 (2^13 clocks).  *           These values are defined in xreg440.h*    * @return   None.** @note     None.*****************************************************************************/void XTime_FITSetPeriod(unsigned long Period){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   val = (val & ~XREG_TCR_FIT_PERIOD_11);   mtspr(XREG_SPR_TCR, val | Period);}/****************************************************************************** Enable Watchdog Timer (WDT) interrupts.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_WDTEnableInterrupt(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val | XREG_TCR_WDT_INTERRUPT_ENABLE);}/****************************************************************************** Disable Watchdog Timer (WDT) interrupts.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_WDTDisableInterrupt(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val & ~XREG_TCR_WDT_INTERRUPT_ENABLE);}/****************************************************************************** Clear Watchdog Timer (WDT) interrupt status bit.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_WDTClearInterrupt(void){   XTime_TSRClearStatusBits(XREG_TSR_WDT_INTERRUPT_STATUS);}/****************************************************************************** Set the period for a Watchdog Timer (WDT) event.** @param    Period.  This value may be one of *           XREG_TCR_WDT_PERIOD_11 (2^33 clocks),*           XREG_TCR_WDT_PERIOD_10 (2^29 clocks), *           XREG_TCR_WDT_PERIOD_01 (2^25 clocks) or*           XREG_TCR_WDT_PERIOD_00 (2^21 clocks). *           These values are defined in xreg440.h*    * @return   None.** @note     None.*****************************************************************************/void XTime_WDTSetPeriod(unsigned long Period){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   val = (val & ~XREG_TCR_WDT_PERIOD_11);   mtspr(XREG_SPR_TCR, val | Period);}/****************************************************************************** Specify the type of reset that occurs as a result of a Watchdog Timer (WDT) event.** @param    Reset Control.  This value may be one of *           XREG_WDT_RESET_CONTROL_11 (System reset),*           XREG_WDT_RESET_CONTROL_10 (Chip reset), *           XREG_WDT_RESET_CONTROL_01 (Processor reset),*           or XREG_WDT_RESET_CONTROL_00 (no reset). *           These values are defined in xreg440.h*    * @return   None.** @note     None.*****************************************************************************/void XTime_WDTResetControl(unsigned long ControlVal){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   val = (val & ~XREG_TCR_WDT_RESET_CONTROL_11);   mtspr(XREG_SPR_TCR, val | ControlVal);}/****************************************************************************** Enables Watchdog Timer (WDT) event** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_WDTEnableNextWatchdog(void){   XTime_TSRClearStatusBits(XREG_TSR_WDT_ENABLE_NEXT_WATCHDOG);}/****************************************************************************** Clear Watchdog Timer (WDT) reset status bits.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_WDTClearResetStatus(void){   XTime_TSRClearStatusBits(XREG_TSR_WDT_RESET_STATUS_11);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -