阅读:2849回复:0
GPIO高低电平开机
AML支持的开机方式很多种:CEC,BT, WIFI, HRTC, IR REMOTE, SAR ADC, GPIO等
BT开机有点一言难尽,明明可以做的,模组厂说为了推广新芯片,旧的模组不再提供技术支持. GPIO用得比较少,但这几天正好遇到了。 需求: GPIOC_6为高电平时开机(两种情形:上电时就是高电平/上电初始化后外部拉高) 修改: pwr_ctrl.c: void get_wakeup_source(void *response, unsigned int suspend_from) if (1) { struct wakeup_gpio_info *gpio; gpio = &(p->gpio_info); gpio->wakeup_id = POWER_KEY_WAKEUP; gpio->gpio_in_idx = GPIOC_6; gpio->gpio_in_ao = 0; gpio->gpio_out_idx = -1; gpio->gpio_out_ao = 0; gpio->irq = IRQ_GPIO2_NUM; gpio->trig_type = GPIO_IRQ_RISING_EDGE; p->gpio_info_count = ++i; } static unsigned int detect_key(unsigned int suspend_from) do-while: if (readl(PREG_PAD_GPIO3_I) & (0x01 << 6)) { uart_puts("GPIO WAKE UP\n"); exit_reason = POWER_KEY_WAKEUP; } 关键2点: 1. GPIO_IRQ_RISING_EDGE,发出中断的条件 2. 寄存器读取:PREG_PAD_GPIO3_I,查阅datasheet,有些GPIO的高低电平可能是反的:高0低1 本质来说,HRTC、BT、HRTC都是GPIO方式来开机的。 |
|