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

📄 hrti.c

📁 第二届飞思卡尔杯智能车大赛
💻 C
字号:
/*
 * Copyright (c) 1998, Xiongfei Guo, Shanghai Second Polytechnic University 
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *     * Redistributions in binary form must reproduce the above copyright
 *       notice, this list of conditions and the following disclaimer in the
 *       documentation and/or other materials provided with the distribution.
 *     * Neither the name of the Shanghai Second Polytechnic University nor the
 *       names of its contributors may be used to endorse or promote products
 *       derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

// 实时中断 
#include "includes.h"

//INT8U STB_Flag = FALSE;
unsigned long absoluteTime = 0;
/*************************************************************************/
/* 中断服务程序 */

/*
  定时器1的时钟中断服务程序
*/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
__interrupt void RTI_ISR(void) {
    absoluteTime++;
    CRGFLG = 0x80;
}


/*
   时钟中断初始化
*/
#pragma CODE_SEG DEFAULT
void RTIInit(void) {
    //RTICTL = 0x1B ->> 约为1ms
    /* 0x10 时分频为16M/2^10 */
    RTICTL = 0x10; /* 0x1F 时分频为16M/16/2^10   2^10 ~= 10^3 */
    CRGINT = 0x80; /* enable RTI interrupts */
}

/*
  开始时钟中断
*/
void StartTimeBase(void) {
    //STB_Flag = TRUE;
    absoluteTime = 0;
    RTIInit();
    EnableInterrupts;
}

/*
  等待相应的毫秒
*/
void Wait(long ms) {
    unsigned long timeout;

    /* RTICTL = 0x10时需 乘16 */
    timeout = absoluteTime + ms * 16;
    while (timeout != absoluteTime) {
        __asm NOP;
    }
}

void WaitEnable(void) {
    //if(!STB_Flag) {
    StartTimeBase();
    //}
}

void WaitDisable(void) {
    CRGINT = 0x00;
}

⌨️ 快捷键说明

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