📄 c_isr.c
字号:
//*----------------------------------------------------------------------------
//* ATMEL Microcontroller Software Support - ROUSSET -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name : c_isr.c
//* Object : Interupt service routine called by assembler function in asm_isr.s
//* Creation : ODi 06/26/2002
//*
//*----------------------------------------------------------------------------
#include "main.h"
//*----------------------------------------------------------------------------
//* \fn AT91F_UDP_Handler
//* \brief This function is invoked by AT91F_ASM_UDP_Handler
//* This function is for demonstration purpose only
//*----------------------------------------------------------------------------
void AT91F_UDP_Handler(void)
{
unsigned int interrupt = (AT91C_BASE_UDP->UDP_ISR & AT91C_BASE_UDP->UDP_IMR);
while (interrupt ) {
if (interrupt & AT91C_UDP_ENDBUSRES) {
AT91C_BASE_UDP->UDP_ICR = AT91C_UDP_ENDBUSRES;
AT91C_BASE_UDP->UDP_ICR = AT91C_UDP_ENDBUSRES;
// reset all endpoints
AT91F_UDP_ResetEp(AT91C_BASE_UDP, (AT91C_UDP_EPINT1 | AT91C_UDP_EPINT2));
AT91F_UDP_ResetEp(AT91C_BASE_UDP, 0);
AT91F_UDP_EpSet(AT91C_BASE_UDP, 0, (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_CTRL)); // Endpoint 1 is a ctl endpoint
AT91F_UDP_EnableIt(AT91C_BASE_UDP, AT91C_UDP_EPINT0);
AT91F_UDP_DisableIt(AT91C_BASE_UDP, AT91C_UDP_EPINT1 | AT91C_UDP_EPINT2 | AT91C_UDP_EPINT3);
}
else if (interrupt & AT91C_UDP_EPINT0) {
usbEp0.Handler(&usbEp0);
AT91C_BASE_UDP->UDP_ICR = AT91C_UDP_EPINT0;
}
else if (interrupt & AT91C_UDP_EPINT2) {
usbEpIn.Handler(&usbEpIn);
AT91C_BASE_UDP->UDP_ICR = AT91C_UDP_EPINT2;
}
else if (interrupt & AT91C_UDP_EPINT1) {
usbEpOut.Handler(&usbEpOut);
AT91C_BASE_UDP->UDP_ICR = AT91C_UDP_EPINT1;
}
else if (interrupt & AT91C_UDP_EPINT3) {
usbEpInt.Handler(&usbEpInt);
AT91C_BASE_UDP->UDP_ICR = AT91C_UDP_EPINT3;
}
else {
AT91C_BASE_UDP->UDP_ICR = interrupt;
}
interrupt = (AT91C_BASE_UDP->UDP_ISR & AT91C_BASE_UDP->UDP_IMR);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -