📄 timer_isr.c
字号:
//
// Copyright (c) Renesas Technology Corp. 2002-2003 All Rights Reserved.
//
// OEM Adaptation Layer
//
//----------------------------------------------------------------------------
//
// FILE : TimerISR.C
// CREATED : 2001.09.27
// MODIFIED : 2003.08.06
// AUTHOR : Renesas Technology Corp.
// HARDWARE : RENESAS HS7751RSTC01H (S1-E, ITS-DS5)
// TARGET OS : Microsoft(R) Windows(R) CE .NET 4.2
// NOTES :
// FUNCTION : ISR body of HD64404 timer module
// HISTORY :
// 2001.09.27
// - Initially created.
// 2002.01.21
// - Modified to refer HD64404 common header file.
// 2002.5.30
// - Changed to include platform-independent platform header
// file "platform.h".
// 2002.09.26
// - Released for Hitachi HS7751RSTC01H (S1-E, ITS-DS5)
#include <windows.h>
#include <platform.h>
#include <HD64404.H>
#include <oalintr.h>
#include <drv_glob.h>
typedef struct _TIMER_CHANNEL {
volatile unsigned long dwInitCount;
volatile unsigned long dwCurCount;
volatile unsigned long dwSysintrNo;
} TIMER_CHANNEL;
typedef struct _UPDOWN_CHANNEL {
volatile unsigned long dwInitCount;
volatile unsigned long dwCurCount;
volatile unsigned long dwSysintrNo;
volatile unsigned long dwLimitCount;
} UPDOWN_CHANNEL;
typedef struct _UPCOUNT_CHANNEL {
volatile unsigned long dwCurCount;
volatile unsigned long dwSysintrNo;
volatile unsigned long dwLimitCount;
} UPCOUNT_CHANNEL;
typedef struct _TIMER_TABLE {
struct {
CRITICAL_SECTION cs;
volatile unsigned long dwFreeCHNo;
volatile long bCH_Active[16];
TIMER_CHANNEL TMRCH[16];
}timer;
struct {
CRITICAL_SECTION cs;
volatile unsigned long dwFreeCHNo;
volatile long bCH_Active[16];
UPCOUNT_CHANNEL TMRCH[16];
volatile unsigned long UpCounter;
}upcount;
struct {
CRITICAL_SECTION cs;
volatile unsigned long dwFreeCHNo;
volatile long bCH_Active[16];
UPDOWN_CHANNEL TMRCH[16];
volatile unsigned long UpDownCounter;
}updown;
}*PTIMER_TABLE;
#define Read(reg) (*(volatile unsigned long * const)(reg))
#define Write(reg, val) (*(volatile unsigned long * const)(reg)) = (val)
int TimerISR(void)
{
PTIMER_TABLE pTimer = (PTIMER_TABLE)TIMER_BUFFER_BASE;
int i;
int iRet = SYSINTR_NOP;
unsigned long status;
status = Read((TMR_BASE+0x0c));
Write((TMR_BASE+0x0c), 0); // Clear all timer event
Read((TMR_BASE+0x0c)); // dummy read
if ( status & 0x00000020 ){
if ( pTimer -> timer.dwFreeCHNo != 16 ){
for( i=0;i < 16;i++ ){
if ( pTimer -> timer.bCH_Active[i] ){
if ( pTimer -> timer.TMRCH[i].dwCurCount ){
(pTimer -> timer.TMRCH[i].dwCurCount) --;
if ( !pTimer -> timer.TMRCH[i].dwCurCount ){
if ( iRet == SYSINTR_NOP ){
iRet = pTimer -> timer.TMRCH[i].dwSysintrNo;
pTimer -> timer.TMRCH[i].dwCurCount = pTimer -> timer.TMRCH[i].dwInitCount;
}else{
pTimer -> timer.TMRCH[i].dwCurCount = 1;
}
}
}
}
}
}
}
if ( status & 0x00000001 ){
if ( pTimer -> upcount.dwFreeCHNo != 16 ){
for( i=0;i < 16;i++ ){
if ( pTimer -> upcount.bCH_Active[i] ){
pTimer -> upcount.TMRCH[i].dwCurCount ++;
if ( pTimer -> upcount.TMRCH[i].dwCurCount >= pTimer -> upcount.TMRCH[i].dwLimitCount ){
if ( iRet == SYSINTR_NOP ){
iRet = pTimer -> upcount.TMRCH[i].dwSysintrNo;
pTimer -> upcount.TMRCH[i].dwCurCount = 0;
}
}
}
}
}
}
if ( status & 0x0000000c ){
if ( pTimer -> updown.dwFreeCHNo != 16 ){
for( i=0;i < 16;i++ ){
if ( pTimer -> updown.TMRCH[i].dwCurCount ){
if ( status & 0x00000004 ){
pTimer -> updown.TMRCH[i].dwCurCount ++;
if ( pTimer -> updown.TMRCH[i].dwCurCount >= pTimer -> updown.TMRCH[i].dwLimitCount ){
if ( iRet == SYSINTR_NOP ){
iRet = pTimer -> updown.TMRCH[i].dwSysintrNo;
pTimer -> updown.TMRCH[i].dwCurCount = pTimer -> updown.TMRCH[i].dwInitCount;
}
}
}else{
pTimer -> updown.TMRCH[i].dwCurCount --;
if ( !pTimer -> updown.TMRCH[i].dwCurCount ){
if ( iRet == SYSINTR_NOP ){
iRet = pTimer -> updown.TMRCH[i].dwSysintrNo;
pTimer -> updown.TMRCH[i].dwCurCount = pTimer -> updown.TMRCH[i].dwInitCount;
}
}
}
}else if ( iRet == SYSINTR_NOP ){
iRet = pTimer -> updown.TMRCH[i].dwSysintrNo;
pTimer -> updown.TMRCH[i].dwCurCount = pTimer -> updown.TMRCH[i].dwInitCount;
}
}
}
}
return iRet;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -