您好!
我们在运行 MSP430F5438A 的定制板上遇到了伪 GPIO 中断问题。
大多数端口1和2引脚启用了 PxIE 并根据连接的外设不同具有不同的 PxIES。
在~1KHz 时切换引脚 P1.2会加速/导致两个端口上设置了多个 IFG 的问题。
通过测试/记录系统、我们在问题发生时发现了以下伪代码序列。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
volatile unsigned int g_cnt = 0;
volatile unsigned char g_save_1 = 0;
volatile unsigned char g_save_2 = 0;
// 1. 在这里、主器件进入低功耗模式
_bis_SR_register (LPM3_bits + GIE);
// 2. 端口1 IRQ
_interrupt void Port1 (void)
{
IF (P1IFG & 0x04)
{
g_cnt++;
P1IFG &=~0x04;
}
其他
{
// P1注册表此时:
// in=0x32、out=0x32、DIR=0x00、SEL=0x00、REN=0x7A、 IES=0x10、IE=0x3E、IFG=0x11
G_SAVE_1 =(P1IFG 和 P1IE);
P1IFG = 0;
_low_power_mode_off_in_exit ();
}
}
// 3. 端口2 IRQ
_interrupt void Port2 (void)
{
// P2注册表此时:
// in=0xAA out=0xAA DIR=0x40 SEL=0x00 REN=0xBF IES=0xAA IE=0xBF IFG=0xAA
G_SAVE_2 =(P2IFG 和 P2IE);
P2IFG = 0;
_low_power_mode_off_in_exit ();
}
// 4. 主系统从低功耗模式返回到这里... 端口1和2中断例程都已执行
如果(g_save_1 || g_save_2)
{
//采取行动...
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
通过测量、我们无法在引脚上看到会解释多个 PxIFG 的任何实际电平转换
是否有人建议会导致此问题的原因?
我们有两种硬件设计在原理图上完全相同(达到99%)、但在布局上大多不同。
到目前为止,问题只在一个电路板设计上可见...
此致、TMA