基于CH592藍(lán)牙Peripheral例程改的,增加了一個(gè)Timer定時(shí),在中斷程序中做GPIO管腳的高低電平轉(zhuǎn)換。為了功耗將HAL_SLEEP打開了,功耗是降下來了,GPIO管腳就一直是高電平,沒有變化。感覺像是沒有進(jìn)入中斷。不知道是什么問題呢
找到了一個(gè)其他地方的回復(fù)“芯片睡眠時(shí)主頻是不工作的,定時(shí)器是依賴主頻工作的,可以使用tmos任務(wù)來實(shí)現(xiàn)一些定時(shí)任務(wù)。”那ADC中斷、GPIO中斷會(huì)受到休眠的影響么?GPIO中斷貌似需要加入“SetSysClock(CLK_SOURCE_PLL_60MHz);?mDelaymS(1);” ADC中斷需要什么特別處置么?或者說都通過tmos任務(wù)來更合適?
您好,sleep休眠期間,只有RTC喚醒(從內(nèi)部喚醒)、GPIO喚醒(外部觸發(fā)喚醒)兩種途徑喚醒。
RTC本身是基于32K時(shí)鐘運(yùn)行的;GPIO在用作喚醒時(shí),也是異步的不依賴32M時(shí)序的。
TMOS事件中的代碼是可以在RTC喚醒后執(zhí)行的,此時(shí)主頻已運(yùn)行穩(wěn)定。
GPIO中斷的運(yùn)行需要32M時(shí)序提供主頻,前提是在喚醒后,32M晶振已經(jīng)工作穩(wěn)定。不用再手動(dòng)添加“SetSysClock(CLK_SOURCE_PLL_60MHz);?mDelaymS(1);”,BLE例程sleep.c中,喚醒后已經(jīng)做了等待晶振穩(wěn)定的處理。
ADC在每次喚醒后需要在TMOS事件中重新初始化,部分寄存器在休眠期間不保持。