目的:使用GPIO25/28/30作为输入,但检测到上升沿或下降沿时,触发中断,进入中断服务函数。
问题: 使用示波器可以看到GPIO引脚上的电平边沿,在CCS中用仿真器加载查看 GPIO引脚的状态也有变化,证明触发事件已经产生且CPU可以识别出电平变化。
GPIO16-31号是需要经过CIC的system events。 但触发事件后, CIC(Chip Interrupt Controller')中Status Raws/Set 寄存器对应GPIO25/28/30的事件标志位并没有被正常置位 (排除被中断ISR清掉标志位的可能),这个就是问题所在。
前提: GPIO配置正常: 仿真器查看寄存器, 1、GPIO的中断使能位已经置位(打开), 2、GPIO的SET_RIS_TRIG与SET_FAL_TRIG对应的位也已经置位(上升沿、下降沿触发生效) 3,CIC对应的System Interrupt Enable Index Set 寄存器也已经置位(打开事件触发使能标志)。 4,控制产生触发事件,在GPIO的Input Data中可以看到对应GPIO位的状态变化(保证触发事件已产生)。5.手动置位CIC的System Interrupt Status Raws/ Set 寄存器可以进入中断ISR程序,手动清CIC的 System Interrupt Enable Status Enable/Clear 寄存器可以清掉对应的CIC事件标志位。(CIC对应的事件标志位可以被手动置位,进入中断ISR,也可以被清标志)。
在确保各个寄存器配置正常的情况下, 触发GPIO事件, CIC寄存器中 Status Raws寄存器中对应的标志位就是不置位,也就进不了中断ISR了。
几个尝试验证:
1. 对GPIO0-15号进行事件触发验证,对应的system events标志位可以正常置位,(区别于16-31号,GPIO0-15号是不用经过CIC的系统事件)
2. 尝试把GPIO25/28/30设置为输出状态,手动设置寄存器切换GPIO的电平状态,手动产生触发事件,还是不能再CIC对应的事件标志位中置位。
3. GPIO中的 Data sheet相关资料太少了,且貌似存起文档不更新的问题,GPIO16-31仍未Reserved状态,但我们已经证实GPIO是可以作为输出控制,且寄存器的操作也证实了这一点。
试了几天都没能解决这个问题(事件产生后,CIC寄存器的Raws Status寄存器对应的位没有被置位),请教大神答疑解惑。
Shine:
同帖e2echina.ti.com/…/161984