boop/Asixtool/asix-testcode/interrupt_ax110xx.c
2017-07-01 21:56:25 +02:00

188 lines
2.9 KiB
C

#include "ax110xx.h"
#include "cpu_ax110xx.h"
#include "interrupt_ax110xx.h"
#include "types_ax110xx.h"
#if LBI_IRQ_ENABLE
#include "lbi.h"
#endif
#if ETH_IRQ_ENABLE
#include "ethernet/mac.h"
#include "ethernet/stoe.h"
#endif
#if I2C_IRQ_ENABLE
#include "i2c.h"
#endif
#if SPI_IRQ_ENABLE
#include "spi.h"
#endif
#if ONEWIRE_IRQ_ENABLE
#include "onewire.h"
#endif
#if CAN_IRQ_ENABLE
#include "can.h"
#endif
#if HSUART_IRQ_ENABLE
#include "hsuart.h"
#endif
void ax11000_PeripherialISR(void) __interrupt 9;
#if POWER_MANAGEMENT_IRQ_ENABLE
void ax11000_PmmISR(void);
#endif
#if WATCHDOG_IRQ_ENB
void ax11000_WatchDogISR(void);
#endif
void ax11000_PeripherialISR(void) __interrupt 9
{
unsigned int intrStt1 = 0;
unsigned int intrStt2 = 0;
/* Interrupt type check */
while (1)
{
EA = 0;
intrStt1 = PISSR1;
intrStt2 = PISSR2;
EA = 1;
if ((intrStt1 == 0) && (intrStt2 == 0))
break;
#if LBI_IRQ_ENABLE
if (intrStt1 & LB_INT_STU)
{
LocalBusFunc();
}
if (intrStt1 & LB_EXT_INT_STU)
{
LocalBusAccessCompleteFunc();
}
#endif
#if ETH_IRQ_ENABLE
#if (MAC_GET_INTSTATUS_MODE == MAC_INTERRUPT_MODE)
if (intrStt1 & ETH_INT_STU)
{
MAC_SetInterruptFlag();
}
#endif
#endif
#if ETH_IRQ_ENABLE
#if (STOE_GET_INTSTATUS_MODE == STOE_INTERRUPT_MODE)
if (intrStt1 & TOE_INT_STU)
{
STOE_SetInterruptFlag();
}
#endif
#endif
#if CAN_IRQ_ENABLE
if (intrStt1 & CAN_INT_STU)
{
CAN_Func();
}
#endif
#if I2C_IRQ_ENABLE
if (intrStt1 & I2C_INT_STU)
{
I2C_Func();
}
#endif
#if SPI_IRQ_ENABLE
if (intrStt1 & SPI_INT_STU)
{
SPI_Func();
}
#endif
#if ONEWIRE_IRQ_ENABLE
if (intrStt1 & OW_INT_STU)
{
ONEWIRE_Func();
}
#endif
#if HSUART_IRQ_ENABLE
if (intrStt2 & UART2_INT_STU)
{
HSUR_Func();
}
#endif
}
}
#if POWER_MANAGEMENT_IRQ_ENABLE
void ax11000_PmmISR(void) __interrupt 11
{
unsigned int wakeStatus = 0;
unsigned int mode = 0;
unsigned int sysClk = 0;
unsigned int canReg = 0;
unsigned int intEnb = 0;
EA = 0;
EIF &= ~INT6F; // Clear the flag of interrupt 6.
EA = 1;
wakeStatus = PCON;
if (!(wakeStatus & SWB_))
{
PCON &= ~ (PMM_ | STOP_);
}
#if ETH_IRQ_ENABLE
/* Ethernet wake up function */
/* disable wake up interrupt */
MDR = 0;
MCIR = MAC_STOP_PMM_INT_ENABLE_REG;
/* clear MAC status register */
CLI_MacRd((ULONG)MAC_STOP_PMM_INT_STATUS_REG, &WakeStatus, 1);
STOE_Standby = 0;
#endif
#if CAN_IRQ_ENABLE
/* CAN wake up function */
CAN_WakeUpEvent(0); // 0 for exit power management mode
#endif
}
#endif
#if WATCHDOG_IRQ_ENB
ax11000_WatchDogISR(void) __interrupt 12
{
if (EWDI)
{
if (EWT)
{
TA = 0xAA;
TA = 0x55;
WDIF = 0; // clear WatchDog Interrupt Flag.
WTRF = 0; // clear the Watchdog Timer Reset Flag.
RWT = 1; // reset watchdog timer.
}
else
{
TA = 0xAA;
TA = 0x55;
WDIF = 0; //clear WatchDog Interrupt Flag.
RWT = 1; // reset watchdog timer.
}
}
}
#endif