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

📄 timer.c

📁 周立功开发板
💻 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 + -