/** * 配置gpio */ /****************************************************************************/ #include "hw_types.h" #include "soc_C6748.h" #include "hw_syscfg0_C6748.h" #include "nim_config.h" int flag = 0; /****************************************************************************/ /* */ /* 宏定义 */ /* */ /****************************************************************************/ #define PINMUX0_GPIO0_11_ENABLE (SYSCFG_PINMUX0_PINMUX0_19_16_GPIO0_11 << \ SYSCFG_PINMUX0_PINMUX0_19_16_SHIFT) #define PINMUX4_GPIO1_0_ENABLE (SYSCFG_PINMUX4_PINMUX4_31_28_GPIO1_0 << \ SYSCFG_PINMUX4_PINMUX4_31_28_SHIFT) #define PINMUX4_GPIO1_1_ENABLE (SYSCFG_PINMUX4_PINMUX4_27_24_GPIO1_1 << \ SYSCFG_PINMUX4_PINMUX4_27_24_SHIFT) #define PINMUX4_GPIO1_2_ENABLE (SYSCFG_PINMUX4_PINMUX4_23_20_GPIO1_2 << \ SYSCFG_PINMUX4_PINMUX4_23_20_SHIFT) #define PINMUX4_GPIO1_3_ENABLE (SYSCFG_PINMUX4_PINMUX4_19_16_GPIO1_3 << \ SYSCFG_PINMUX4_PINMUX4_19_16_SHIFT) #define PINMUX12_GPIO5_5_ENABLE (SYSCFG_PINMUX12_PINMUX12_11_8_GPIO5_5 << \ SYSCFG_PINMUX12_PINMUX12_11_8_SHIFT) static void Bank0Handle(void); static void GPIOBank0InterruptInit(); /****************************************************************************/ /* */ /* 管脚复用配置 */ /* */ /****************************************************************************/ void GOIOBank0Pin11MuxMuxSetup(void) { unsigned int savePinmux = 0; savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) & ~(SYSCFG_PINMUX0_PINMUX0_19_16)); HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(0)) = (PINMUX0_GPIO0_11_ENABLE | savePinmux); } void GOIOBank1Pin0MuxMuxSetup(void) { unsigned int savePinmux = 0; savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) & ~(SYSCFG_PINMUX4_PINMUX4_31_28)); HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) = (PINMUX4_GPIO1_0_ENABLE | savePinmux); } void GOIOBank1Pin1MuxMuxSetup(void) { unsigned int savePinmux = 0; savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) & ~(SYSCFG_PINMUX4_PINMUX4_27_24)); HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) = (PINMUX4_GPIO1_1_ENABLE | savePinmux); } void GOIOBank1Pin2MuxMuxSetup(void) { unsigned int savePinmux = 0; savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) & ~(SYSCFG_PINMUX4_PINMUX4_23_20)); HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) = (PINMUX4_GPIO1_2_ENABLE | savePinmux); } void GOIOBank1Pin3MuxMuxSetup(void) { unsigned int savePinmux = 0; savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) & ~(SYSCFG_PINMUX4_PINMUX4_19_16)); HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(4)) = (PINMUX4_GPIO1_3_ENABLE | savePinmux); } void GOIOBank5Pin5MuxMuxSetup(void) { unsigned int savePinmux = 0; savePinmux = (HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) & ~(SYSCFG_PINMUX12_PINMUX12_11_8)); HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) = (PINMUX12_GPIO5_5_ENABLE | savePinmux); } /** * GPIO0[11] 配置程输入模式,触控 */ void GPIOBank0Pin11Init() { GOIOBank0Pin11MuxMuxSetup(); // 触控输入 GPIODirModeSet(SOC_GPIO_0_REGS, 12, GPIO_DIR_INPUT); // GPIO0[11] GPIOBank0InterruptInit(); } /** * GPIO5[5] 配置程输入模式,GUI电源 */ void GPIOBank5Pin5Init() { GOIOBank5Pin5MuxMuxSetup(); // gui控制 GPIODirModeSet(SOC_GPIO_0_REGS, 86, GPIO_DIR_OUTPUT); // GPIO5[5] GPIOPinWrite(SOC_GPIO_0_REGS, 86, GPIO_PIN_LOW); } static void GPIOBank0InterruptInit() { // 配置 触控 为上升沿及下降沿触发 GPIOIntTypeSet(SOC_GPIO_0_REGS, 12, GPIO_INT_TYPE_BOTHEDGE); // 使能 GPIO BANK0 中断 GPIOBankIntEnable(SOC_GPIO_0_REGS, 0); IntRegister(C674X_MASK_INT11, Bank0Handle); IntEventMap(C674X_MASK_INT11, SYS_INT_GPIO_B0INT); IntEnable(C674X_MASK_INT11); } static void Bank0Handle(void) { // 禁用 GPIO BANK 0 中断 GPIOBankIntDisable(SOC_GPIO_0_REGS, 0); // 清除 GPIO BANK 0 中断事件 IntEventClear(SYS_INT_GPIO_B0INT); if(GPIOPinIntStatus(SOC_GPIO_0_REGS, 12) == GPIO_INT_PEND) { // 清除中断状态 GPIOPinIntClear(SOC_GPIO_0_REGS, 12); int value = GPIOPinRead(SOC_GPIO_0_REGS, 12); touch_switch(value); } // 使能 GPIO BANK 0 中断 GPIOBankIntEnable(SOC_GPIO_0_REGS, 0); }