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

📄 osccal.c

📁 AVR_usb_ISP
💻 C
字号:
/* Name: osccal.c * Author: Christian Starkjohann * Creation Date: 2008-04-10 * Tabsize: 4 * Copyright: (c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt) * This Revision: $Id: osccal.c 692 2008-11-07 15:07:40Z cs $ */#include <avr/io.h>/* ------------------------------------------------------------------------- *//* ------------------------ Oscillator Calibration ------------------------- *//* ------------------------------------------------------------------------- *//* Calibrate the RC oscillator. Our timing reference is the Start Of Frame * signal (a single SE0 bit) repeating every millisecond immediately after * a USB RESET. We first do a binary search for the OSCCAL value and then * optimize this value with a neighboorhod search. */void    calibrateOscillator(void){uchar       step = 128;uchar       trialValue = 0, optimumValue;int         x, optimumDev, targetValue = (unsigned)(1499 * (double)F_CPU / 10.5e6 + 0.5);    /* do a binary search: */    do{        OSCCAL = trialValue + step;        x = usbMeasureFrameLength();    /* proportional to current real frequency */        if(x < targetValue)             /* frequency still too low */            trialValue += step;        step >>= 1;    }while(step > 0);    /* We have a precision of +/- 1 for optimum OSCCAL here */    /* now do a neighborhood search for optimum value */    optimumValue = trialValue;    optimumDev = x; /* this is certainly far away from optimum */    for(OSCCAL = trialValue - 1; OSCCAL <= trialValue + 1; OSCCAL++){        x = usbMeasureFrameLength() - targetValue;        if(x < 0)            x = -x;        if(x < optimumDev){            optimumDev = x;            optimumValue = OSCCAL;        }    }    OSCCAL = optimumValue;}/*Note: This calibration algorithm may try OSCCAL values of up to 192 even ifthe optimum value is far below 192. It may therefore exceed the allowed clockfrequency of the CPU in low voltage designs!You may replace this search algorithm with any other algorithm you like ifyou have additional constraints such as a maximum CPU clock.For version 5.x RC oscillators (those with a split range of 2x128 steps, e.g.ATTiny25, ATTiny45, ATTiny85), it may be useful to search for the optimum inboth regions.*/

⌨️ 快捷键说明

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