1、为什么关于中断边沿选择的函数GPIO_interruptEdgeSelect()的参数selectedPort可以有18个量可以选择,而不是像其他4个关于中断设置的函数,只有GPIO_PORT_P1、GPIO_PORT_P2、GPIO_PORT_PA 三个量可以选择?
问题一:
首先,要准备下基础知识:
1、端口P1和P2都具备中断功能。P1和P2两组端口的每一位管脚都可以单独配置成在输入一个上升沿或下降沿时候触发中断的功能。
2、单个端口可以作为可以以字节宽度进行访问,也可以合二为一组合成字宽,以字的格式进行访问。P1/P2, P3/P4, P5/P6, P7/P8,四对端口分别对应PA、PB、PC、PD。除了中断向量P1IV和P2IV外,所有的端口寄存器是按照这种命名约定方式处理的,也就是说不存在中断向量PAIV。
从这里我们可以看出,为什么只有GPIO_PORT_P1、GPIO_PORT_P2、GPIO_PORT_PA这三个量,而不是P3或者PB,因为只有端口P1和P2都具备中断功能。
那么下面我们继续来解释这个问题,解决这个问题前,依旧需要准备点知识,我们来看下这个五个中断函数以及功能:
void GPIO_enableInterrupt (uint8_t selectedPort, uint16_t selectedPins)
该函数使能所选管脚的端口中断功能
void GPIO_disableInterrupt (uint8_t selectedPort, uint16_t selectedPins)
该函数禁用所选管脚端口的中断
uint16 t GPIO_getInterruptStatus (uint8_t selectedPort, uint16_t selectedPins)
该函数可以获取被选中的端口的中断状态
void GPIO_clearInterruptFlag (uint8 t selectedPort, uint16 t selectedPins)
该函数可以清除所选管脚的中断标志
void GPIO_interruptEdgeSelect (uint8_t selectedPort, uint16_t selectedPins, uint8_t edgeSelect)
该函数可以对所选管脚的中断触发边沿类型进行选择(是上升沿触发还是下降沿触发)
从这里可以看到这GPIO_enableInterrupt 、GPIO_disableInterrupt 、GPIO_getInterruptStatus 、GPIO_clearInterruptFlag 这几个中断函数都是针对具备中断功能的端口的,所有根据之前的介绍,很容易明白“其他4个关于中断设置的函数,只有GPIO_PORT_P1、GPIO_PORT_P2、GPIO_PORT_PA 三个量可以选择”。
说了这么多,还有一个关键的没讲“为什么关于中断边沿选择的函数GPIO_interruptEdgeSelect()的参数selectedPort可以有18个量可以选择”,继续补充必要的知识:
1、该系列单片机具备的I/O端口数量最高可达12组(P1至P11,外加PJ端口)。
2、具体的18个值,selectedPort可选的有效值有18(11+7)个:GPIO_PORT_P1、GPIO_PORT_P2……GPIO_PORT_P11,GPIO_PORT_PA、GPIO_PORT_PB、GPIO_PORT_PC、GPIO_PORT_PD、GPIO_PORT_PE、GPIO_PORT_PF、GPIO_PORT_PJ。
从这里可以看出18个值是怎么来的,另外注意看下GPIO_interruptEdgeSelect的功能是“该函数可以对所选管脚的中断触发边沿类型进行选择(是上升沿触发还是下降沿触发)”也就是说所有的脚都是它可以选择的,也就是说所以的端口都是可以选择的,所有就有了18个量。
|