首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

编程点滴:AVR timer0 配置模块

编程点滴:AVR timer0 配置模块

AVR
timer0配置模块,给定期望的定时器中断频率,并定义好中断处理函数,模块可自动完成配置工作。

模块由主体程序及头文件组成。


/* *************************************************
* File Name: timer0_set.h
* Function: AVR定时器0配置模块
* Description: 指定期望的定时器中断频率,及中断处理函数,
模块可自动完成配置
* Authon & Date: Joshua Chan, 2012/04/01
* *************************************************/
#ifndef _TIMER0_SET_H
#define _TIMER0_SET_H

#define COUNT_MAX 0xFF

/* 中断处理函数由外部定义 */
extern void timer0_isr(void);

/* 配置8位定时器timer0比较匹配中断使能
* @freq: 定时器中断发生频率
*/
extern void timer0_comp_init(int freq);

extern void timer0_enable(void);

extern void timer0_disable(void);

#endif


/* ************************************************* * File Name: timer0_set.c * Function:  AVR定时器0配置模块 * Description: 指定期望的定时器中断频率,及中断处理函数,                模块可自动完成配置 * Authon & Date: Joshua Chan, 2012/04/01 * *************************************************/#include <ioavr.h>#include #include #include #include #include "constant.h"#include "timer0_set.h"#include "uart_io.h"/* 寄存器配置与预分频值对应表 */__flash static int prescaling[][2] = {    {0, 0},    {1, 1},    {2, 8},    {3, 32},    {4, 64},    {5, 128},    {6, 256},    {7, 1024},};/* 定义timer0比较匹配中断处理函数 */#pragma vector = TIMER0_COMP_vect__interrupt void timer0_isr_orig(void){ /* 中断处理函数由外部传入 */    timer0_isr();}/* 根据初步计算值选择预分频值 */static unsigned char prescale_index(int num){    unsigned char i;    for (i = 0; i < 8; i++)        if (num <= prescaling[1])            return i;    return 0;}/* 配置8位定时器timer0比较匹配中断使能 * @freq: 定时器中断发生频率 */void timer0_comp_init(int freq){    unsigned char index;    int prescale_tmp;    int ocr0;    prescale_tmp = (FOSC / freq / COUNT_MAX); /* 初步计算预分频值 */    index = prescale_index(prescale_tmp);   /* 根据上一步结果选择预分频值 */    ocr0 = ((FOSC / prescaling[index][1] / freq) - 1); /* 计算比较值 */ /* 根据上面的运算结果配置寄存器 */    TCCR0 = (1<<wgm01) |="" (prescaling[index][0]<<cs00);="" ocr0="(unsigned" char)ocr0;="" timsk="" <<="" ocie0);="" tcnt0="0;" }="" void="" timer0_enable(void)="" {="" timer0_disable(void)="" &="~(1"
                                                                                                                                                                                              
                                                                                                                        关键字:AVR  timer0  配置模块</io
返回列表