175 lines
4.2 KiB
C
175 lines
4.2 KiB
C
/*******************************************************************************************
|
||
File Name: HWI.h
|
||
|
||
Version: 1.00
|
||
|
||
Discription:
|
||
|
||
|
||
Author:yulin deng
|
||
|
||
Email :flowingfeeze@163.com
|
||
|
||
Date:2013-09-14 16:47:39
|
||
|
||
Copyright:(c)JIELI 2011 @ , All Rights Reserved.
|
||
*******************************************************************************************/
|
||
|
||
#ifndef ASM_HWI_H
|
||
#define ASM_HWI_H
|
||
|
||
#include "generic/typedef.h"
|
||
|
||
|
||
/// \cond DO_NOT_DOCUMENT
|
||
// #define CPU_IRQ_USAGE_DEBUG
|
||
|
||
struct irq_info {
|
||
u8 index;
|
||
u8 prio;
|
||
u8 cpu_id;
|
||
};
|
||
|
||
/// \endcond
|
||
/**
|
||
* \name IRQ select
|
||
* \{
|
||
*/
|
||
#define IRQ_SDTAP_IDX 0
|
||
#define IRQ_EXCEPTION_IDX 1
|
||
#define IRQ_SYSCALL_IDX 2
|
||
#define IRQ_TICK_TMR_IDX 3
|
||
#define IRQ_TIMER0_IDX 4
|
||
#define IRQ_TIMER1_IDX 5
|
||
#define IRQ_TIMER2_IDX 6
|
||
#define IRQ_TIMER3_IDX 7
|
||
|
||
#define IRQ_USB_SOF_IDX 8
|
||
#define IRQ_USB_CTRL_IDX 9
|
||
#define IRQ_RTC_WDT_IDX 10
|
||
#define IRQ_ALNK_IDX 11
|
||
#define IRQ_ALNK1_IDX 12
|
||
#define IRQ_AUDIO_IDX 13
|
||
#define IRQ_PORT_IDX 14
|
||
#define IRQ_SPI0_IDX 15
|
||
|
||
#define IRQ_SPI1_IDX 16
|
||
#define IRQ_SD0_IDX 17
|
||
#define IRQ_SD1_IDX 18
|
||
#define IRQ_UART0_IDX 19
|
||
#define IRQ_UART1_IDX 20
|
||
#define IRQ_UART2_IDX 21
|
||
#define IRQ_PAP_IDX 22
|
||
#define IRQ_IIC_IDX 23
|
||
|
||
#define IRQ_SARADC_IDX 24
|
||
#define IRQ_SPI3_IDX 25
|
||
#define IRQ_GPC_IDX 26
|
||
#define IRQ_EMI_IDX 27
|
||
#define IRQ_OSA_IDX 28
|
||
#define IRQ_BLE_RX_IDX 29
|
||
#define IRQ_NFC_IDX 30
|
||
#define IRQ_AES_IDX 31
|
||
#define IRQ_RDEC_IDX 32
|
||
|
||
#define IRQ_MCTMRX_IDX 33
|
||
#define IRQ_CHX_PWM_IDX 34
|
||
#define IRQ_SPDETX 35
|
||
#define IRQ_CTM_IDX 36
|
||
#define IRQ_SPI2_IDX 37
|
||
#define IRQ_PLNK_IDX 38
|
||
#define IRQ_PLNK1_IDX 39
|
||
#define IRQ_BREDR_IDX 40
|
||
#define IRQ_BT_CLKN_IDX 41
|
||
|
||
#define IRQ_BT_DBG_IDX 42
|
||
#define IRQ_WL_LOFC_IDX 43
|
||
#define IRQ_LRCT_IDX 44
|
||
#define IRQ_BLE_EVENT_IDX 45
|
||
#define IRQ_SBC_IDX 46
|
||
#define IRQ_SS_IDX 47
|
||
#define IRQ_DMA_COPY_IDX 48
|
||
#define IRQ_PMU_PND0_IDX 49
|
||
|
||
#define IRQ_PMU_PND1_IDX 50
|
||
#define IRQ_LDMA_IDX 51
|
||
#define IRQ_WF_IDX 52
|
||
#define IRQ_USB1_SOF_IDX 53
|
||
#define IRQ_USB1_CTRL_IDX 54
|
||
#define IRQ_JPG_IDX 55
|
||
|
||
#define IRQ_SHA_IDX 56
|
||
#define IRQ_FFT_IDX 57
|
||
#define IRQ_SRC_IDX 58
|
||
#define IRQ_ISC0_IDX 59
|
||
#define IRQ_EQ_IDX 60
|
||
|
||
#define IRQ_WF_RSVD_IDX 61
|
||
#define IRQ_TIMER4_IDX 62
|
||
#define IRQ_TIMER5_IDX 63
|
||
#define IRQ_ISC1_IDX 64
|
||
|
||
#define IRQ_IMD_IDX 65
|
||
|
||
#define IRQ_SOFT0_IDX 120
|
||
#define IRQ_SOFT1_IDX 121
|
||
#define IRQ_SOFT2_IDX 122
|
||
#define IRQ_SOFT3_IDX 123
|
||
#define IRQ_SOFT4_IDX 124
|
||
#define IRQ_SOFT5_IDX 125
|
||
#define IRQ_SOFT6_IDX 126
|
||
#define IRQ_SOFT7_IDX 127
|
||
|
||
#define ISR_ENTRY 0x1c7fe00
|
||
/* \} name */
|
||
|
||
/// \cond DO_NOT_DOCUMENT
|
||
void bit_clr_ie(unsigned char index, u8 cpuid);
|
||
void bit_set_ie(unsigned char index, u8 cpuid);
|
||
void reg_set_ip(unsigned char index, unsigned char dat, u8 cpuid);
|
||
/// \endcond
|
||
|
||
/**
|
||
* @brief request_irq, 中断注册
|
||
* @param index : 使用的中断号,例如IRQ_TIMER0_IDX 等
|
||
* @param priority : 中断优先级0~7,越大优先级越高
|
||
* @param handler : 中断函数
|
||
* @param cpu_id : 中断注册到的cpu, 0是注册到cpu0,1是注册到cpu1,cpuid为0xff时注册到当前CPU。
|
||
*/
|
||
void request_irq(unsigned char index, unsigned char priority, void (*handler)(void), unsigned char cpu_id);
|
||
|
||
/**
|
||
* @brief unrequest_irq, 解除中断注册
|
||
* @param index : 使用的中断号,例如IRQ_TIMER0_IDX 等
|
||
* @param cpu_id : 中断注册到的cpu, 0是注册到cpu0,1是注册到cpu1
|
||
*/
|
||
void unrequest_irq(u8 index, u8 cpu_id);
|
||
|
||
/// \cond DO_NOT_DOCUMENT
|
||
bool check_pending(unsigned char index, u8 cpuid);
|
||
void interrupt_init();
|
||
void dump_cpu_irq_usage(void);
|
||
u8 irq_read(u32 index);
|
||
|
||
#define irq_disable(x) bit_clr_ie(x, 0)
|
||
#define irq_enable(x) bit_set_ie(x, 0)
|
||
|
||
//#define IRQ_TIME_COUNT_EN
|
||
|
||
#ifdef IRQ_TIME_COUNT_EN
|
||
void irq_handler_enter(int irq);
|
||
|
||
void irq_handler_exit(int irq);
|
||
|
||
void irq_handler_times_dump();
|
||
#else
|
||
|
||
#define irq_handler_enter(irq) do { }while(0)
|
||
#define irq_handler_exit(irq) do { }while(0)
|
||
#define irq_handler_times_dump() do { }while(0)
|
||
|
||
/// \endcond
|
||
#endif
|
||
|
||
#endif
|