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

📄 timer.c

📁 ISD1700语音芯片放音的ISP实现
💻 C
字号:
#include <iom64v.h>
#include <macros.h>
#include "main.h"

unsigned char WdtTimer = 0; //外部看门狗定时器
volatile unsigned int Timer1BaseClk = 0; //Timer1基准时钟

// 看门狗初始化函数
// prescale: 512K cycles,overtime 417ms
void watchdog_init(void)
{
    WDR(); //this prevents a timout on enabling
    WDTCR = 0x18;	//WDCE、WDE位置1,再改变超时时间
    WDTCR = 0x0D; 	//WATCHDOG ENABLED - dont forget to issue WDRs
}

//TIMER1 initialize - prescale:8
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 2000Hz
// actual value: 2000.000Hz (0.0%)
void timer1_init(void)
{
    TCCR1B = 0x00; //stop
    TCNT1H = 0xFC; //setup
    TCNT1L = 0x18;
    OCR1AH = 0x03;
    OCR1AL = 0xE8;
    OCR1BH = 0x03;
    OCR1BL = 0xE8;
    OCR1CH = 0x03;
    OCR1CL = 0xE8;
    ICR1H = 0x03;
    ICR1L = 0xE8;
    TCCR1A = 0x00;
    TCCR1B = 0x02; //start Timer
}

//-------------------------------------------------------------------------

#pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
void timer1_ovf_isr(void)
{
    //TIMER1 has overflowed
    static unsigned char timer1int = 0;

    TCNT1H = 0xFC; //reload counter high value
    TCNT1L = 0x18; //reload counter low value

    timer1int++;
    if (timer1int >= 2)
    {
        //1ms
        timer1int = 0;
        Timer1BaseClk++;
        if (Timer1BaseClk >= 60000)
        {
            Timer1BaseClk = 0;
        }

        WdtTimer++;
		}
}

unsigned int GetTime(void)
{
	unsigned int iTime1,iTime2;
	do{
		iTime1 = Timer1BaseClk;
		iTime2 = Timer1BaseClk;
	}while(iTime2 != iTime1);
	return iTime2;
}
//-------------------------------------------------------------------------

unsigned int GetPassTime(unsigned int iPreTime)
{
    unsigned int temp_i = 0;
		unsigned int iCurTime = GetTime();

    if (iCurTime >= iPreTime)
    {
        return (iCurTime - iPreTime);
    }
    else
    {
        return (60000 - iPreTime + iCurTime);
    }
}

⌨️ 快捷键说明

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