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

📄 xtime_l.c

📁 基于Xilinx-XUPV2P开发平台的嵌入式系统实验例程:实验4编写基本的应用程序
💻 C
字号:
/*-----------------------------------------------------------------------------//     $Date: 2004/07/31 23:46:47 $//     $RCSfile: xtime_l.c,v $//-----------------------------------------------------------------------------//// Copyright (c) 2004 Xilinx, Inc.  All rights reserved. // // Xilinx, Inc. // XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A // COURTESY TO YOU.  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.////---------------------------------------------------------------------------*/#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 Programmable Interval Timer (PIT).** @param    Value to be written to the PIT*    * @return   None.** @note     None.*****************************************************************************/void XTime_PITSetInterval(unsigned long Interval){   mtspr(XREG_SPR_PIT, Interval);}/****************************************************************************** Enable Programmable Interval Timer (PIT) interrupts.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_PITEnableInterrupt(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val | XREG_TCR_PIT_INTERRUPT_ENABLE);}/****************************************************************************** Disable Programmable Interval Timer (PIT) interrupts.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_PITDisableInterrupt(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val & ~XREG_TCR_PIT_INTERRUPT_ENABLE);}/****************************************************************************** Enable Programmable Interval Timer (PIT) auto-reload mode.  ** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_PITEnableAutoReload(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val | XREG_TCR_AUTORELOAD_ENABLE);}/****************************************************************************** Disable Programmable Interval Timer (PIT) auto-reload mode.  ** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_PITDisableAutoReload(void){   unsigned long val;   val=mfspr(XREG_SPR_TCR);   mtspr(XREG_SPR_TCR, val & ~XREG_TCR_AUTORELOAD_ENABLE);}/****************************************************************************** Clear Programmable Interval Timer (PIT) interrupt status bit.** @param    None.*    * @return   None.** @note     None.*****************************************************************************/void XTime_PITClearInterrupt(void){   XTime_TSRClearStatusBits(XREG_TSR_PIT_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^21 clocks),*           XREG_TCR_FIT_PERIOD_10 (2^17 clocks), *           XREG_TCR_FIT_PERIOD_01 (2^13 clocks) or*           XREG_TCR_FIT_PERIOD_00 (2^9 clocks).  *           These values are defined in xreg405.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^29 clocks),*           XREG_TCR_WDT_PERIOD_10 (2^25 clocks), *           XREG_TCR_WDT_PERIOD_01 (2^21 clocks) or*           XREG_TCR_WDT_PERIOD_00 (2^17 clocks). *           These values are defined in xreg405.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 xreg405.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 + -