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

📄 drv_ledtimer.c.bak

📁 在EPSON开发平台上实现键盘控制 并通过外部LED显示出来
💻 BAK
字号:
/************************************************************************
 *									*
 *	Copyright (C) SEIKO EPSON CORP. 1999				*
 *									*
 *	File name: drv_16timer.c					*
 *	  This is 16bit timer driver program for E0C33208		*
 *	  demonstration.						*
 *									*
 *	Revision history						*
 *		1998.03.02	T.Mineshima	Start.			*
 *		1999.04.20	T.Mineshima	Modify prescaler	*
 *						setting.		*
 *									*
 ************************************************************************/

#include "16timer.h"
#include "common.h"
#include "int.h"
#include "presc.h"

#define TIME 6000000/4096  
//时间设定
/* Prototype */
extern void vLEDOff( void );
void init_lectimer(void);
void int_16timer_c0(void);
unsigned char ledflg=0;

/*******************************************************************************
 * init_16timer0
 *   Type :	void
 *   Ret val :	none
 *   Argument :	void
 *   Function :	Initialize 16bit timer0.
 *******************************************************************************/
void init_ledtimer(void)
{
	*(volatile unsigned char *)PRESC_P16TS0_ADDR = PRESC_PTONL_ON | PRESC_CLKDIVL_SEL7;	// 时钟源设定 (CLK/4096)

	/* Set 16bit timer0 comparison match A data */
	*(volatile unsigned short *)T16P_CR0A_ADDR = TIME;		// 设定timer0比较寄存器

	/* timer0 控制寄存器 */
	*(volatile unsigned char *)T16P_PRUN0_ADDR = T16P_SELFM_NOR | T16P_SELCRB_DIS | T16P_OUTINV_NOR | T16P_CKSL_INT | T16P_PTM_OFF | T16P_PSET_ON | T16P_PRUN_STOP;
  /*输出普通模式/禁止数据buffer/输出普通模式/选择内部时钟/关闭输出控制/计数器复位为0/停止计数器//*/
	/* Set 16bit timer0 interrupt CPU request on interrupt controller */
	*(volatile unsigned char *)INT_RP0_RHDM_R16T0_ADDR &= 0x3f;	// IDMA request disable and CPU request enable

	/* Set 16bit timer0 interrupt priority level 3 on interrupt controller */
	*(volatile unsigned char *)INT_P16T0_P16T1_ADDR |= INT_PRIL_LVL3;

	/* Reset 16bit timer0 interrupt factor flag on interrupt controller */
	*(volatile unsigned char *)INT_F16T0_F16T1_ADDR &= ~INT_F16TC0;		// 清除timer0的比较器A中断标志

	/* Set 16bit timer0 interrupt enable on interrupt controller */
	*(volatile unsigned char *)INT_E16T0_E16T1_ADDR |= INT_E16TC0;		// Set 16bit timer0 comparison match A interrupt enable
       
       // Run 16bit timer0 [0x4819E]
	//*(volatile unsigned char *)T16P_PRUN0_ADDR |= T16P_PRUN_RUN;
}


/*******************************************************************************
 * int_16timer_c0
 *   Type :	void
 *   Ret val :	none
 *   Argument :	void
 *   Function :	16bit timer0 comparison match A interrupt function.
 *******************************************************************************/
void int_16timer_c0(void)
{       
	asm("pushn %r15");
	*(volatile unsigned char *)INT_E16T0_E16T1_ADDR &= ~INT_E16TC0;		//关闭中断使能

	*(volatile unsigned char *)T16P_PRUN0_ADDR &= ~T16P_PRUN_RUN;     //停止定时器
	*(volatile unsigned char *)T16P_PRUN0_ADDR |= T16P_PSET_ON;       //复位定时器
	//打开键盘	
	*(volatile unsigned char *)INT_FP0_FK_ADDR &= 0xef;	             	// 清除键盘中断标志
	*(volatile unsigned char *)INT_EP0_EK_ADDR |= 0x10;		            // 使能键盘总中断     
	*(volatile unsigned char *)INT_F16T0_F16T1_ADDR &= ~INT_F16TC0;	  //清除中断标志
	*(volatile unsigned char *)INT_E16T0_E16T1_ADDR |= INT_E16TC0;		//开启中断使能
	asm("popn %r15");
	asm("reti");
}



⌨️ 快捷键说明

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