📄 timer.c
字号:
/****************************************Copyright (c)**************************************************/
/**
;** 西南科技大学计算机科学学院
;**
;** http://www.cs.suswt.edu.cn
;**
;** 日期: 2006.4.1
;** 描述: DataLedDriver.c 西南科技大学计算机学院CS-II型实验板数码管工作程序,控制
;** 数码管底层显示功能,负责将数据传输到目标,并控制595对数码管键盘进行扫描,
;** 完成键盘工作的功能,该文件给DataLed.c提供底层接口
;** 作者:
;**
;**--------------Timer.c文件
;**------------------------------------------------------------------------------------------------------*/
/**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define _TIMER_C_
#ifdef _TIMER_C_
/************************************************
* Header File *
***********************************************/
#include "Timer.h"
#include "config.h"
#include "LED.h"
#include "Keyboard.h"
#include "uart.h"
/************************************************
* Globale variable *
***********************************************/
uint8 gc_oldkeyvalue = 0xff; //保存上一次的按键的值(注:如果没有键按下时,会变为oxff)
uint8 gc_keytemp = 0xff; //保存按值的值
/*************************************************
名称:void __irq IRQ_Timer0Interrupt()
功能:Timer0中断服务函数,显示按下的键值
*************************************************/
void __irq IRQ_Timer0Interrupt()
{
gc_keytemp = KEYBScan(); //按键扫描
if(gc_keytemp != gc_oldkeyvalue && gc_keytemp != 0xff) //如果有键按下
{
UART0SendByte(gc_keytemp); // 如果有键按下,则把此键值通过串口0发送
}
gc_oldkeyvalue = gc_keytemp;
LEDScan(); //数码管扫描
T0IR = 0x01;
VICVectAddr = 0x00;
}
/*************************************************
名称:Timer0_InterrupSet()
功能:Timer0的中断初使化,设置其中断优先级,中断地址,使能中断
*************************************************/
void Timer0_InterruptSet()
{
VICIntSelect &= 0xffffffef; //设置Timer0为IRQ中断,其余的为FIQ中断
VICVectCntl2 = 0x24; //向量IRQ(Timer0)使能,并设其中断编号为4,其中断优先级为2
VICVectAddr2 = (int)IRQ_Timer0Interrupt; //设置此中断此中断的服务程序地址为IRQ_Timer0Interrupt
VICIntEnable = 0x00000010; //中断(Timer0)使能
}
/*************************************************
名称:Timer0_Init(uint32 div, uint32 ovf)
功能:定时器初使化,设置定时器的分频值,匹配值,中断后的方式等
参数:div 为分频值,ovf为匹配值
*************************************************/
void Timer0_Init(uint32 div, uint32 ovf)
{
T0PR = div; //设置分频值,32位的TC每经过div+1个pclk周期加1
T0MCR = 0x03; //设置定时器匹配控制,0x03表示MR0与TC值匹配将产生中断并复位
T0MR0 = ovf; //给T0MR0置数
T0TCR = 0x03; //启动并复位Timer0
Timer0_InterruptSet();
T0TCR = 0x01;
}
#endif
/*****************************************************************************
* End of Entire File *
****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -