M0内核PLC11C14的中断和其他arm产品的中断不一样,PLC11C14芯片手册上说有32个中断0-31,其中27号中断保留,0-11共十二个是静态的中断向量,有外部引脚P0端口的,
P0_0到P0_11,一一对应,12号中断由P1_0对应。PLC11C14一共四个端口,P0到P3,其中P0到P2每个端口十二个引脚,P3口四个引脚。
内部中断有四个定时器中断,看门狗中断,串口,SPI,等等。这些也大同小异,但是在最后的有一个中断状态的中断源
28 PIO_3 GPIO interrupt status of port 3
29 PIO_2 GPIO interrupt status of port 2
30 PIO_1 GPIO interrupt status of port 1
31 PIO_0 GPIO interrupt status of port 0
经过仔细研究BSP包内的软件源码,发现上诉四个中断可以监控四个端口,当这些端口中有引脚电位变化时,出发中断,进入中断服务函数,PIOINT0_IRQHandler(void);
在中断中判断是哪个引脚发生了中断
if(GPIOIntStatus(PORT2, 8))
{
//对应PORT2_8端口的中断事件,
}
这样一来所有外部的GPIO,都可以作为外部中断使用,大大提高了资源的利用率,我们可以在下半部机制完成中断处理函数,在中断中只置位标志位,在main()函数中
轮询标志位是否发生变化,发生变化后跳转到对应的下半部处理函数中,这样中断触发后可以很快完成处理,不会在中断中浪费过多资源。
同时我们可以设置触发中断的条件,BSP包中提供了一个函数
GPIOSetInterrupt(PORT2, 8, 1,0, 0 );
GPIOIntEnable(PORT2,8);
对应参数,
第一个端口号;
第二个参数管脚号;
第三个参数电平触发还是跳变沿触发(0为跳变沿触发,1为电平触发);
第四个参数当第三参数设置为跳变沿出发时,0位单边沿触发,1为双边沿触发;当第三参数设置为点评触发是,0代表低电平,1代表高电平。
第五个参数设置上升沿还是下降沿触发,对单边沿触发有效。
上面设置PORT2_8引脚,低电平触发方式。