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

📄 drv_timer160.c

📁 uCOS-II V2.51在爱普森的32位处理器S1C33209上的移植
💻 C
字号:
/************************************************************************
 *									*
 *	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 "includes.h"
#include "..\include\16timer.h"
#include "..\include\common.h"
#include "..\include\int.h"
#include "..\include\presc.h"



extern INT8U             OSIntNesting;  
unsigned char ledflg=1;
/*******************************************************************************
 * init_16timer0
 *   Type :	void
 *   Ret val :	none
 *   Argument :	void
 *   Function :	Initialize 16bit timer0.
 *******************************************************************************/
void init_timer160(void)
{
	/* Set 16bit timer0 prescaler */
	*(volatile unsigned char *)PRESC_P16TS0_ADDR = PRESC_PTONL_ON | PRESC_CLKDIVL_SEL7;	// Set 16bit timer0 prescaler (CLK/4096)

	/* Set 16bit timer0 comparison match A data */
	*(volatile unsigned short *)T16P_CR0A_ADDR = 60000000 / 4096/100 - 10;		// Set comparison match A data (60 MHZ clock)
       *(volatile unsigned short *)T16P_CR0B_ADDR = 60000000 / 4096/100 -1;//Adamdcg time for 10ms
	/* Set 16bit timer0 mode */
	*(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;

	/* Set 16bit timer0 interrupt CPU request on interrupt controller */
	*(volatile unsigned char *)INT_RP0_RHDM_R16T0_ADDR |= INT_RIDMA_DIS;	// 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;		// Reset 16bit timer0 comparison match A interrupt flag

	/* 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 OSTickISR()//Adamdcg 16timer0  interrupt services
{
	asm("pushn	%r15");			// save r1,r2...r15		

	//OSIntEnter();
	if (OSIntNesting < 255) {
        OSIntNesting++;                          // Increment ISR nesting level                   
       }
	if(OSIntNesting==1)//if it is the first interrupt ,then  OSTCBCur->OSTCBStkPtr=SP
		{
			//OSTCBCur->OSTCBStkPtr=SP
		      asm("xld.w %r0,[OSTCBCur]");//load absolute address of OSTCBCur
		      asm("ld.w %r1,%sp");
		      asm("ld.w [%r0],%r1");  
			
		}

	asm("ld.w	%r9,%psr");		// IE,enable interrupt 允许中断嵌套
	asm("or 	%r9,0x10");
	asm("ld.w	%psr,%r9");
	*(volatile unsigned char *)INT_F16T0_F16T1_ADDR = INT_F16TC0;	// Reset 16bit timer0 comparison match A interrupt factor flag

	/*switch(ledflg)
	   {
	   	case 0:
	   	     *( volatile unsigned char * )0x402D1 &=~0x04;//led off
	   	     ledflg=1;
	   	     break;
	        case 1:
	             *( volatile unsigned char * )0x402D1 |=0x04;//led on
	             ledflg=0;
	             break;		
	     }*/
	OSTimeTick();
	OSIntExit();
	asm("popn %r15");//from r0 to r15 outoff stack 
	asm("reti");// PSW  PC	
}




⌨️ 快捷键说明

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