您好!
我正在尝试读取 GPIO1[15]输入、但值始终相同。
当配置为输入时、其他 GPIO 引脚工作正常、而 GPIO 引脚在相关引脚多路复用器中配置。
用于重现问题的源代码:
#define HW_PINMUX2_GPIO1_MASK 0xFFFFFF00u
#define HW_PINMUX2_GPIO1_ENABLE 0x00004048u
#define GPIOPINNUMBER (组、引脚)((组<< 4)|(引脚+ 1))
#define GPIO_Bank_1_NR 1.
#define GPIO_1_12_PIN_NR 12.
#define GPIO_1_14_PIN_NR 14
#define GPIO_1_15_PIN_NR 15
#define GPIO_1_12_PIN GPIOPINNUMBER (GPIO_Bank_1_NR、GPIO_1_12_PIN_NR)
#define GPIO_1_14_PIN GPIOPINNUMBER (GPIO_Bank_1_NR、GPIO_1_14_PIN_NR)
#define GPIO_1_15_PIN GPIOPINNUMBER (GPIO_Bank_1_NR、GPIO_1_15_PIN_NR)
uint8_t 版本= 0;
//解锁脚踢寄存器(在 C6748上必需)
HWREG (SOC_SYSCFG_0_regs + SYSCFG0_KICK0R)= SYSCFG_KICK0R_UNLOCK;
HWREG (SOC_SYSCFG_0_regs + SYSCFG0_KICK1R)= SYSCFG_KICK1R_UNLOCK;
//将 GPIO 引脚配置为 GPIO
HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (2))&&= HW_PINMUX2_GPIO1_MASK;
HWREG (SOC_SYSCFG_0_regs + SYSCFG0_PINMUX (2))|= HW_PINMUX2_GPIO1_ENABLE;
Task_sleep (1);// 1ms 延迟
版本= GPIOPinRead (SOC_GPIO_0_regs、GPIO_1_14_PIN);
版本|= GPIOPinRead (SOC_GPIO_0_regs、GPIO_1_15_PIN)<< 1;
版本|= GPIOPinRead (SOC_GPIO_0_regs、GPIO_1_12_PIN)<< 2;
以下代码输出显示版本变量的第二位(GPIO1[15])始终为0。
如果我:
GPIODirModeSet (SOC_GPIO_0_regs、GPIO_1_15_PIN、GPIO_DIR_INPUT);
在读取该值之前、该值始终为1。
其他引脚 GPIO1[12]和 GPIO1[14]工作正常。
GPIO1[15]与 McASP I/O 引脚 AXR7共享。 当从 MCASP_PDIN 读取引脚时、该值会改变、但从相关 GPIO 寄存器读取时不会改变。
使用 McASP 寄存器时、读数正确:
HWREG (SOC_MCASP_0_CTRL_regs + MCASP_PFUNC)= 0xFEFF;
PDINvar = HWREG (SOC_MCASP_0_CTRL_regs + MCASP_PDIN);
有什么想法为什么?
最棒的餐厅
Teet