false

false

EN

1、什么是AON_GPIO?  

        AON_GPIO,(Always-on GPIO)是常开域的GPIO口,在GR55xx进入睡眠之后,该域的GPIO不会进入睡眠,可以被外部事件用来唤醒芯片。 

 2、AON_GPIO的普通GPIO口使用 

     AON_GPIO的端口复用图如下: 


         从我么的硬件图纸上看到,刚好AON_GPIO1连接了一个ok键,我们可以通过此按键来调试,完成低功耗情况下的唤醒功能,其他功能跟普通GPIO口差异不大。 

                

        我们的设计构想是,结合前面的GPIO和MSIO口的例子中,可以通过按键来点亮或关闭led灯,通过设置AON_GPIO1为按键输入,然后设置一段时间按键不操作就会进入睡眠,此时gpio和msio口的按键将无作用,只能通过aon的按键来唤醒,然后gpio和msio的按键又可以点亮或熄灭led灯了。

3、代码实现  

        此时,当我再准备去写代码的时候我发现一个很严重的问题,如果要设置AON_GPIO_1脚为trigger方式,我需要设置的东西还有太多,中断配置,中断使能,GPIO的中断函数等等;到这里我们发现如果每个功能都自己去写,很不利于产品的开发进度,所以我们建议参考SDK中的peripheral或peripheral_app中的外设示例;直接把他们移植过来,加快我们的开发速度,建议移植peripheral_app中的代码,有低功耗处理功能。从这一节开始我们将直接使用SDK中的示例来学习。 

        当我参看了aon_gpio_wakeup的工程来之后,再把他们一直到ble的工程时,遇到一些无法解决的现象: 

            ①,hal_aon_gpio_callback()函数出现来重复定义,原因是ble的工程包含来bsp的处理,已经将函数hal_aon_gpio_callback定义好了,所以没办法使用; 

            ②,__WFI()会很快被唤醒,因为ble的工程后台是会有自动唤醒的程序,否则ble的协议栈将无法实时收发数据。         基于以上两点,我认为这样移植是无法实现的。所以aon的演示参考aon_gpio_wakeup工程就好。 

        后面可以基于sdk的代码去学习分析。     

1条评论

您的评论