void Ex_NVIC_Config(GPIO_A,0, RTIR); //上升沿触发
void Ex_NVIC_Config(GPIO_A,13,FTIR);//下降沿触发
void MY_NVIC_Init(u8 抢占,u8 子优先,u8 中断名字,u8 组号) //抢占优先级,子优先级,通道0~59,组号)
例:MY_NVIC_Init( 3, 3, USART1_IRQChannel,2);//中断函数配置
//外部中断0服务程序
void EXTI0_IRQHandler(void)//中断EXTI0的中断内容
{
delay_ms(10);//消抖
if(KEY3==1) //WK_UP 按键
{
BEEP=!BEEP;
}
EXTI-> R=1<<0; //清除LINE0上的中断标志位
}
原子哥:如果我要配置PA0~15这16个引脚分别对应EXTIpa0_IRQHandler;EXTIpa1_IRQHandler;EXTIpa2_IRQHandler;EXTIpa3_IRQHandler;EXTIpa4_IRQHandler以下依此类推我在
#define WWDG_IRQChannel ((u8)0x00) /* Window WatchDog Interrupt */
#define PVD_IRQChannel ((u8)0x01) /* PVD through EXTI Line detection Interrupt */
#define TAMPER_IRQChannel ((u8)0x02) /* Tamper Interrupt */
#define RTC_IRQChannel ((u8)0x03) /* RTC global Interrupt */
#define FLASH_IRQChannel ((u8)0x04) /* FLASH global Interrupt */
#define RCC_IRQChannel ((u8)0x05) /* RCC global Interrupt */
#define EXTI0_IRQChannel ((u8)0x06) /* EXTI Line0 Interrupt */
#define EXTI1_IRQChannel ((u8)0x07) /* EXTI Line1 Interrupt */
#define EXTI2_IRQChannel ((u8)0x08) /* EXTI Line2 Interrupt */
#define EXTI3_IRQChannel ((u8)0x09) /* EXTI Line3 Interrupt */
#define EXTI4_IRQChannel ((u8)0x0A) /* EXTI Line4 Interrupt */
#define DMA1_Channel1_IRQChannel ((u8)0x0B) /* DMA1 Channel 1 global Interrupt */
#define DMA1_Channel2_IRQChannel ((u8)0x0C) /* DMA1 Channel 2 global Interrupt */
#define DMA1_Channel3_IRQChannel ((u8)0x0D) /* DMA1 Channel 3 global Interrupt */
#define DMA1_Channel4_IRQChannel ((u8)0x0E) /* DMA1 Channel 4 global Interrupt */
#define DMA1_Channel5_IRQChannel ((u8)0x0F) /* DMA1 Channel 5 global Interrupt */
#define DMA1_Channel6_IRQChannel ((u8)0x10) /* DMA1 Channel 6 global Interrupt */
#define DMA1_Channel7_IRQChannel ((u8)0x11) /* DMA1 Channel 7 global Interrupt */
#define ADC1_2_IRQChannel ((u8)0x12) /* ADC1 et ADC2 global Interrupt */
#define USB_HP_CAN_TX_IRQChannel ((u8)0x13) /* USB High Priority or CAN TX Interrupts */
#define USB_LP_CAN_RX0_IRQChannel ((u8)0x14) /* USB Low Priority or CAN RX0 Interrupts */
#define CAN_RX1_IRQChannel ((u8)0x15) /* CAN RX1 Interrupt */
#define CAN_SCE_IRQChannel ((u8)0x16) /* CAN SCE Interrupt */
#define EXTI9_5_IRQChannel ((u8)0x17) /* External Line[9:5] Interrupts */
#define TIM1_BRK_IRQChannel ((u8)0x18) /* TIM1 Break Interrupt */
#define TIM1_UP_IRQChannel ((u8)0x19) /* TIM1 Update Interrupt */
#define TIM1_TRG_COM_IRQChannel ((u8)0x1A) /* TIM1 Trigger and Commutation Interrupt */
#define TIM1_CC_IRQChannel ((u8)0x1B) /* TIM1 Capture Compare Interrupt */
#define TIM2_IRQChannel ((u8)0x1C) /* TIM2 global Interrupt */
#define TIM3_IRQChannel ((u8)0x1D) /* TIM3 global Interrupt */
#define TIM4_IRQChannel ((u8)0x1E) /* TIM4 global Interrupt */
#define I2C1_EV_IRQChannel ((u8)0x1F) /* I2C1 Event Interrupt */
#define I2C1_ER_IRQChannel ((u8)0x20) /* I2C1 Error Interrupt */
#define I2C2_EV_IRQChannel ((u8)0x21) /* I2C2 Event Interrupt */
#define I2C2_ER_IRQChannel ((u8)0x22) /* I2C2 Error Interrupt */
#define SPI1_IRQChannel ((u8)0x23) /* SPI1 global Interrupt */
#define SPI2_IRQChannel ((u8)0x24) /* SPI2 global Interrupt */
#define USART1_IRQChannel ((u8)0x25) /* USART1 global Interrupt */
#define USART2_IRQChannel ((u8)0x26) /* USART2 global Interrupt */
#define USART3_IRQChannel ((u8)0x27) /* USART3 global Interrupt */
#define EXTI15_10_IRQChannel ((u8)0x28) /* External Line[15:10] Interrupts */
#define RTCAlarm_IRQChannel ((u8)0x29) /* RTC Alarm through EXTI Line Interrupt */
#define USBWakeUp_IRQChannel ((u8)0x2A) /* USB WakeUp from suspend through EXTI Line Interrupt */
#define TIM8_BRK_IRQChannel ((u8)0x2B) /* TIM8 Break Interrupt */
#define TIM8_UP_IRQChannel ((u8)0x2C) /* TIM8 Update Interrupt */
#define TIM8_TRG_COM_IRQChannel ((u8)0x2D) /* TIM8 Trigger and Commutation Interrupt */
#define TIM8_CC_IRQChannel ((u8)0x2E) /* TIM8 Capture Compare Interrupt */
#define ADC3_IRQChannel ((u8)0x2F) /* ADC3 global Interrupt */
#define FSMC_IRQChannel ((u8)0x30) /* FSMC global Interrupt */
#define SDIO_IRQChannel ((u8)0x31) /* SDIO global Interrupt */
#define TIM5_IRQChannel ((u8)0x32) /* TIM5 global Interrupt */
#define SPI3_IRQChannel ((u8)0x33) /* SPI3 global Interrupt */
#define UART4_IRQChannel ((u8)0x34) /* UART4 global Interrupt */
#define UART5_IRQChannel ((u8)0x35) /* UART5 global Interrupt */
#define TIM6_IRQChannel ((u8)0x36) /* TIM6 global Interrupt */
#define TIM7_IRQChannel ((u8)0x37) /* TIM7 global Interrupt */
#define DMA2_Channel1_IRQChannel ((u8)0x38) /* DMA2 Channel 1 global Interrupt */
#define DMA2_Channel2_IRQChannel ((u8)0x39) /* DMA2 Channel 2 global Interrupt */
#define DMA2_Channel3_IRQChannel ((u8)0x3A) /* DMA2 Channel 3 global Interrupt */
#define DMA2_Channel4_5_IRQChannel ((u8)0x3B) /* DMA2 Channel 4 and DMA2 Channel 5 global Interrupt */
发现这些是宏定义中断排序(中断0到中断59)
所以我想把中断pa0脚排在中断30开始 那pa15就排到中断45
要求pa0~7上升沿触发 pa8~16下降沿触发
void EXTIpa0_IRQHandler(void)//pa0脚上升沿触发,中断30号与中断31~45的中断内容不一样
void EXTIpa1_IRQHandler(void)
void EXTIpa2_IRQHandler(void)
void EXTIpa3_IRQHandler(void)
void EXTIpa4_IRQHandler(void)
void EXTIpa5_IRQHandler(void)
void EXTIpa6_IRQHandler(void)
void EXTIpa7_IRQHandler(void)
void EXTIpa8_IRQHandler(void)//pa8脚下降沿触发,中断号38
void EXTIpa9_IRQHandler(void)
void EXTIpa10_IRQHandler(void)
void EXTIpa11_IRQHandler(void)
void EXTIpa12_IRQHandler(void)
void EXTIpa13_IRQHandler(void)
void EXTIpa14_IRQHandler(void)
void EXTIpa15_IRQHandler(void)//pa15脚中断号45
原子哥,这函数怎么写?还有如何知道void MY_NVIC_Init(u8 抢占,u8 子优先,u8 EXTIpa15_IRQHandler,u8 组号) //抢占优先级,子优先级,通道0~59,组号)
怎么对应的PA15引脚和void EXTIpa15_IRQHandler(void)这函数的。
还有pa7脚中断触发需要暂时屏蔽pa8~10脚的中断,等Pa7中断运行结束了再开启pa8~10脚的中断。
跪求原子哥详细解说中断的工作原理。我在本论坛仔细查过中断的帖子,你们都是一笔带过,讲的很笼统。。。。。还有开发指南V1.2的85页注释下PLLMUL是倍频器(把频率翻倍x2,x3,x4。。。倍 我看了几天才发现是倍频器。你书上只说是PLL,我哪知道这是什么东东啊。。。)
还有抢占级1位,子优先级3位是指: 抢占级范围0和1 子优先级000和001和010和011。。。111吗?
求详细解说
|