九、不工整的EXTI
EXTI是外部中断/事件的部件。它有20条输入线可以连接,16条GPIO线和4条。
EXTI工作的前提有时钟,它在AFIO模块下工作,所以要开启AFIO的时钟。
抛开GPIO外的4条输入不谈,专谈GPIO的16条输入。
先说事件,看图:
事件是监测PIN口的电平变化,有上升和下降事件,在EXTI的EMR、RTSR、FTSR寄存器里设置。
有趣是事件的执行:事件的接收者是CPU!CPU如果在正常运行,事件无作用。当CPU在执行WFE后睡眠,这时的事件唤醒CPU,CPU可以查询是哪根聪唤醒了自己,查询是上升还是下降行为导致唤醒,像不像CPU的自己的中断??
再说中断,看图:
EXTI监测PIN口的电平变化,在上升和下降中断,在EXTI的IMR、RTSR、FTSR寄存器里设置。
中断的执行中规中矩,电平的变化转化为NVIC的中断,CPU进中断函数执行。
那么问题来了,GPIO的8种工作模式,能和EXTI一起工作吗?
输入类的浮空、上拉和下拉,肯定能和EXTI一起工作。
输出类的普通推挽输出、开漏输出和复用推挽输出、复用开漏输出,如果和EXTI的事件一起工作,因为CPU正常工作,事件无作用。
如果四种输出和EXTI的中断一起工作,很可能中断正常工作。这个有待上机验证。
模拟输入和EXTI放在一起,估计EXTI没反应。这个也有待上机验证。
这种想法有些钻牛角尖,罪过罪过。智度法师答:“追求完美”是弥补缺陷,“而爱钻牛角尖”只会越钻、缺陷越大、越不完美,因为它总是“执著”于缺陷非要挤出个牛角来、非要挤破它不可。