一个“特殊”的模块 Ø问题 客户想实现如下目标: 首先,将引脚P1_20设置成复用功能:T0_CAP2,同时配置Timer0实现此引脚上升沿捕获并使能中断触发功能,接着,将频率100Hz,占空比50%的PWM波与此引脚相接。虽然,示波器很明显的显示着PWM波已连接到P1_20脚,但中断始终未被触发,程序也未进入到中断函数中去?
图 1 Ø错误分析 在排查错误的过程中,在一开始,自然地目光聚焦于Timer0 的捕获功能配置是否正确,在仔细对照参考手册,查看寄存器配置后,可将此故障来源给排除掉,并在最后,将问题锁定于GIMA(Global Input Multiplexer)模块,其中文名称叫做:全局多路输入阵列,允许交叉连接事件驱动外设的多个输入和输出,比如定时器(Timer)、SCT和ADC0/1等。
而对Timer 0 CAP_2引脚来讲,由对应的CAP0_2_IN 寄存器控制,而且CAP0_2_IN [SELECT] 就用于CAP_2引脚的分配,发现没,T0_CAP2并不是默认选项,这才是问题的根源。所以,以后涉及到定时器(Timer)、SCT和ADC0/1事件驱动外设配置时,要多留个心哦!!
图 2 图 3 |