主题中讨论的其他器件: TPS61221
大家好!
我有一个有趣的例子、在这种情况下、MSP430G2202的行为会有所不同、具体取决于封装。
在第一个设计中、我使用了一个 IN20型号。 PIR 传感器的信号经过调节后转换为数字 H/L。 微控制器处于 LPM4状态、并在 P2.7的上升沿唤醒。 传感器电路工作正常、我验证了没有误报。 固件执行以下操作。
BIT_CLEAR (P2IFG、GPIO_IR_DETECT_PIN);
BIT_SET (P2IE、GPIO_IR_DETECT_PIN);
__ bis_SR_register (LPM4_bits);
// ZZZ...
NextState = StateCheckUndervoltageLockout;
其中:
void GpioInit (){
//通过下拉使 GPIO 进入
P1OUT = 0x00;
P1REN=0xff;
P1DIR = 0x00;
P2OUT = 0x00;
P2REN = 0xff;
P2DIR = 0x00;
//禁用有源驱动引脚上的拉电阻器
BIT_CLEAR (P2REN、GPIO_IR_DETECT_PIN);
BIT_CLEAR (P1REN、GPIO_日光_DETECT_PIN);
...
// IR 检测信号的上升沿
Bit_Clear (P2IES、GPIO_IR_DETECT_PIN);
BIT_CLEAR (P2SEL2、GPIO_IR_DETECT_PIN);
BIT_CLEAR (P2SEL、GPIO_IR_DETECT_PIN);
}
和
#pragma vector=port2_vector
__interrupt void Port2Isr (void){
开关(P2IFG){
案例 GPIO_IR_DETECT_PIN:{
//避免卡在这里
GPIO_EDGE_INTERRUPT_DISABLE ();
BIT_CLEAR (P2IFG、GPIO_IR_DETECT_PIN);
__ bic_SR_register_on_exit (LPM4_bits);
中断;
}
默认值:{
中断;
}
}
}
微控制器在 DCO (1 MHz)上运行、WDT 被关闭。 没有启用其他中断源。
该函数运行得非常好。 它在几周内一直在三个原型上运行。
在第二批处理中、使用了 IRSA16封装。 传感器电路可根据需要工作、这已经过我的验证。 但是、微型器件在被置于 LPM4后会立即唤醒。 即使传感器朝完全没有热移动的墙壁转动、它也会一直开启。 我的第一个猜测是 XIN/XOUT 的行为不同、因为它们在数据表中看起来有点杂乱。 连接调试器(MSP430G2 Launchpad)后、我将单步执行以上各行。 它起作用了! 没有检测到假中断、微型器件将保持睡眠状态、直到我将手放在传感器前面。 只要我让它自由运行、微控制器就会忘记 LPM4并再次唤醒。
CCS:12.4.0.00007
操作系统: Linux Mint 20.3 Cinnamon
编译器:TI v21.6.0.LTS
有人知道、它可能来自哪里吗? 显然、它必须链接到调试器。
原理图:
e2e.ti.com/.../Nachtlicht_5F00_Schema_5F00_Rev_5F00_2.00.pdf