请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR5969 复位时、我为函数中的所有未使用引脚设置 DIR 引脚。 我设置 P3DIR |= BIT5 + BIT6 + BIT7 (0xE0)。 在函数的后面部分、我设置 PBDIR |= 0xFF、因为我不使用任何 PB 引脚。 但是、P3DIR 设置为0xFF。 由于这是一个 FRAM 芯片、它通过复位来保持我的 ADC 设置。 当 P3.2设置为输出时、它会导致中断发生、因为超出了 ADC12HI 阈值。 我可以通过在调用函数之前禁用 ADC 并在之后重新启用 ADC 来解决此问题、但是否有人可以解释为什么写入 PBDIR 会导致写入 P3DIR? 谢谢。
/*******************************************************************!
\brief Initializes Unused Pins
\param[in] none
\return none
\note
\warning
*******************************************************************/
void initUnusedPins(void)
{
//Switched to port function, output direction (PxDIR.n = 1)
//P2.3 P2.7 3.5-7 P4.6
P2SEL0 &= ~BIT3 & ~BIT7; // clear select 0 bit P2.3 & P2.7
P2SEL1 &= ~BIT3 & ~BIT7; // clear select 1 bit P2.3 & P2.7
P2DIR |= BIT3 + BIT7; // select P2.3 & P2.7 as output
P3SEL0 &= ~BIT5 & ~BIT6 & ~BIT7; // clear select 0 bit P3.5, P3.6, & P3.7
P3SEL1 &= ~BIT5 & ~BIT6 & ~BIT7; // clear select 1 bit P3.5, P3.6, & P3.7
P3DIR |= BIT5 + BIT6 + BIT7; // select P3.5, P3.6, & P3.7 as output
P4SEL0 &= ~BIT6; // clear select 0 bit P4.6
P4SEL1 &= ~BIT6; // clear select 1 bit P4.6
P4DIR |= BIT6; // select P4.6
P5SEL0 &= P6SEL0 &= P7SEL0 &= P8SEL0 &= PASEL0 &= PBSEL0 &= PCSEL0 &= PDSEL0 &= 0x00;
P5SEL1 &= P6SEL1 &= P7SEL1 &= P8SEL1 &= PASEL1 &= PBSEL1 &= PCSEL1 &= PDSEL1 &= 0x00;
P5DIR |= 0xFF;
P6DIR |= 0xFF;
P7DIR |= 0xFF;
P8DIR |= 0xFF;
PADIR |= 0xFF;
PBDIR |= 0xFF;
PCDIR |= 0xFF;
PDDIR |= 0xFF;
P5OUT |= 0xFF;
P6OUT |= 0xFF;
P7OUT |= 0xFF;
P8OUT |= 0xFF;
PAOUT |= 0xFF;
PBOUT |= 0xFF;
PCOUT |= 0xFF;
PDOUT |= 0xFF;
}