请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2355 是否有人能告诉我、如果情况(见下文)似乎无法满足以下条件、为什么会出现这种情况? 当 PORT1、PORT3或 PORT5被称为....时,其它器件工作正常
void Timer_PWM(Timer_RegDef_t *pTIMERx, uint8_t WhichCCRegister, uint8_t Output, uint16_t LoadValue, \
GPIO_RegDef_t *pGPIOx, uint8_t Pin)
{
uint16_t *p;
pGPIOx->POUT |= (1 << Pin);
pGPIOx->DIR |= (1 << Pin);
p = (uint16_t *)(&pGPIOx->SEL[0]);
if ((pGPIOx == PORT2) || (pGPIOx == PORT4) || (pGPIOx == PORT6))
*(p+1) |= (1 << Pin);
else
*p = (1 << Pin);
p = (uint16_t *)(&pTIMERx->TB_CTL);
*(p + CCVALUE_OFFSET + WhichCCRegister) = LoadValue;
*(p + CCCNTRL_OFFSET + WhichCCRegister) &= (0x7 << 5);
*(p + CCCNTRL_OFFSET + WhichCCRegister) |= (Output << 5);
}
端口定义如下、如果需要的话、与 GPIO_RegDef_t 一起....
typedef struct
{
__vo uint16_t PIN; /*GPIO port input value register Offset 0x00 */
__vo uint16_t POUT; /*GPIO port output value register Offset 0x02 */
__vo uint16_t DIR; /*GPIO port direction register Offset 0x04 */
__vo uint16_t PREN; /*GPIO resistor enable register Offset 0x06 */
uint16_t RESERVED; /* Reserved Offset 0x08 */
__vo uint16_t SEL[2];/*GPIO port function select register Offset 0x0A SEL[0] - 0x0C SEL[1] */
__vo uint16_t IV; /*GPIO port output data register Offset 0x0E */
uint16_t RSVDA[3]; /*Reserved Offset 0x10, 0x12, 0x14 */
__vo uint16_t PSELC; /*GPIO Complement selection Offset 0x16 */
__vo uint16_t PIES; /*GPIO Interrupt edge select Offset 0x18 */
__vo uint16_t PIE; /*GPIO Interrupt edge Offset 0x1A */
__vo uint16_t PIFG; /*GPIO Interrupt flag Offset 0x1C */
}GPIO_RegDef_t;
#define PORT1 (GPIO_RegDef_t *)P1_BASE
#define PORT2 (GPIO_RegDef_t *)P2_BASE
#define PORT3 (GPIO_RegDef_t *)P3_BASE
#define PORT4 (GPIO_RegDef_t *)P4_BASE
#define PORT5 (GPIO_RegDef_t *)P5_BASE
#define PORT6 (GPIO_RegDef_t *)P6_BASE