📄 isr.c
字号:
// (c)2002 by Texas Instruments Incorporated, All Rights Reserved.
/*----------------------------------------------------------------------------+
| |
| Texas Instruments |
| |
| ISR |
| |
+-----------------------------------------------------------------------------+
| Source: isr.c, v00.01 2002/04/24 10:45 |
| Author: Ching-Hua Jim Chen Jim_Chen@ti.com |
| |
| For more information, please contact |
| |
| Jim Chen |
| Texas Instruments |
| 12500 TI Blvd, MS 8761 |
| Dallas, TX 75243 |
| USA |
| |
| Tel 214-480-4656 |
| Fax 972-761-6043 |
| |
| Release Notes: |
| |
| Logs: |
| |
| WHO WHEN WHAT |
| --- ---------- -------------------------------------------------- |
| CJH 04/24/2002 born |
| CJH 06/11/2002 Added timer 0 interrupt for dealy routines |
| |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| Include files |
+----------------------------------------------------------------------------*/
#ifdef KEIL
#include <reg51.h> // for KEIL compiler 8051 sfr definition
#else
#include <io51.h> // for IAR compiler 8051 sfr definition
#endif
#include "types.h" // Basic Type declarations
#include "tusb3410.h"
#include "watchdog.h"
#include "rs232dbg.h"
#include "sample.h"
/*----------------------------------------------------------------------------+
| External Function Prototype |
+----------------------------------------------------------------------------*/
extern VOID OEP0InterruptHandler(VOID);
extern VOID IEP0InterruptHandler(VOID);
extern VOID SetupPacketInterruptHandler(VOID);
extern VOID UsbReset(VOID);
// extra endpoint interrupt handlers defined here
extern VOID IEP1InterruptHandler(VOID);
/*----------------------------------------------------------------------------+
| External Variables |
+----------------------------------------------------------------------------*/
extern idata BYTE bFunctionSuspended;
#ifdef KEIL
extern xdata tEDB0 tEndPoint0DescriptorBlock;// _at_ 0xff80;
#else
#pragma memory = dataseg(TUSB3410_EP0_EDB_SEG)
extern tEDB0 tEndPoint0DescriptorBlock;
#pragma memory = default
#endif
/*----------------------------------------------------------------------------+
| Internal Type Definition & Macro |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| Internal Constant Definition |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| Internal Variables |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| Global Variables |
+----------------------------------------------------------------------------*/
BYTE gbqSec=0; // quarter second, decreased by timer interrupt 0
BYTE gbmSec=250; // mini second, decreased by timer interrupt 0
/*----------------------------------------------------------------------------+
| Hardware Related Structure Definition |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| System Initialization Routines |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| General Subroutines |
+----------------------------------------------------------------------------*/
#ifdef KEIL
VOID iUsbInterruptHandler(VOID) interrupt 0
#else
interrupt [0x03] VOID iUsbInterruptHandler(VOID) // External Interrupt 0
#endif
{
RESET_WATCHDOG;
switch (bVECINT){ // Identify Interrupt ID
// below are user defined endpoint interrupt handler
case VECINT_INPUT_ENDPOINT1:
IEP1InterruptHandler();
bVECINT = 0x00;
break;
// above are user defined endpoint interrupt handler
case VECINT_OUTPUT_ENDPOINT0:
OEP0InterruptHandler();
bVECINT = 0x00;
break;
case VECINT_INPUT_ENDPOINT0:
IEP0InterruptHandler();
bVECINT = 0x00;
break;
case VECINT_SETUP_PACKET_RECEIVED:
SetupPacketInterruptHandler();
// note:
// if setup bit is not cleared, hardware will keep NAKing.
// if setup bit is cleared, hardware will check endpoint
// byte count and NAK if NAK bit is et.
bUSBSTA = USBSTA_SETUP;
bVECINT = 0x00;
break;
case VECINT_RESR_INTERRUPT:
bFunctionSuspended = FALSE;
bUSBSTA = USBSTA_RESR;
bVECINT = 0x00;
break;
case VECINT_SUSR_INTERRUPT:
bFunctionSuspended = TRUE;
bUSBSTA = USBSTA_SUSR;
bVECINT = 0x00;
break;
case VECINT_RSTR_INTERRUPT:
bFunctionSuspended = FALSE;
UsbReset();
// clear reset flag
bUSBSTA = USBSTA_RSTR;
bVECINT = 0x00;
break;
case VECINT_RWUP_INTERRUPT:
bFunctionSuspended = FALSE;
bUSBSTA = USBSTA_WAKEUP;
bVECINT = 0x00;
bUSBCTL |= USBCTL_RWUP;
break;
default: // unknown interrupt ID
bVECINT = 0xff;
}
RESET_WATCHDOG;
}
// configured as mini second timer interrupt
#ifdef KEIL
VOID iTimer0InterruptHandler(VOID) interrupt 1
#else
interrupt [0x0b] VOID iTimer0InterruptHandler(VOID) // Timer 0 Interrupt
#endif
{
RESET_WATCHDOG;
// setup 1 mini second interval for timer 0, based on 24MHz clock
TH0 = DELAY_1MS_12X_24MHz_H; // (65536-2000)>>8, 2000 means 1 mSec
TL0 = DELAY_1MS_12X_24MHz_L; // (65536-2000)&0xff, 2000 means 1 mSec
if (gbqSec == 0) return;
gbmSec--;
if (gbmSec == 0) {
gbmSec = 250; // quarter second interval
gbqSec--;
// PUTCHAR('@');
}
}
/*----------------------------------------------------------------------------+
| Interrupt Sub-routines |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| Interrupt Service Routines |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| Main Routine |
+----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------+
| End of source file |
+----------------------------------------------------------------------------*/
/*------------------------ Nothing Below This Line --------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -