chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

AS32S601型MCU芯片電源管理(PMU)模塊詳解

安芯 ? 來(lái)源:jf_29981791 ? 作者:jf_29981791 ? 2025-12-15 00:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、電源管理模塊 PMU(Power Management Unit)

電源管理模塊 PMU是芯片的 “能耗與電源管家”,核心目標(biāo)是平衡功耗與供電穩(wěn)定性,適配嵌入式設(shè)備的低功耗、長(zhǎng)續(xù)航需求,具體作用包括:

1. 多電源域的獨(dú)立管控

為了有效地控制 MCU 的功耗,對(duì)模塊的劃分包括 AON(Always On)模塊、Main 模塊和 ANA 模塊。

AON 模塊:其供電有 RTC 模擬 IP 提供 1.2V 的電源,并提供工作的 32KHz時(shí)鐘。該模塊會(huì)控制 Main 和 ANA 模塊的電源開(kāi)關(guān)。在深度睡眠模式下,AON 會(huì)關(guān)閉 Main 和ANA 的電源。

Main 模塊:該模塊包含所有的內(nèi)核邏輯和外設(shè)邏輯。其電源由 PMB 提供。

ANA 模塊:該模塊包含 ADC、DAC、PLL、ROSC16M、EFLASH 等模擬 IP模塊。

例如,當(dāng)芯片進(jìn)入深度休眠模式時(shí),PMU 可切斷內(nèi)核和外設(shè)電源域的供電,僅保留 RTC 和喚醒源對(duì)應(yīng)的電源域,將靜態(tài)功耗降至 uA 級(jí);而喚醒后又能按優(yōu)先級(jí)依次恢復(fù)各電源域供電,避免上電時(shí)序紊亂。

2.低功耗模式的調(diào)度與切換

PMU 是 RISC-V 芯片低功耗模式(如 Sleep、Deep Sleep等)的核心控制單元:一方面,它負(fù)責(zé)解析軟件下發(fā)的低功耗指令,完成核心時(shí)鐘關(guān)閉、外設(shè)休眠、寄存器數(shù)據(jù)備份等流程;另一方面,它管理所有喚醒源(如特定GPIO 電平變化、看門狗、RTC等),當(dāng)檢測(cè)到有效喚醒信號(hào)時(shí),觸發(fā)芯片從低功耗模式快速恢復(fù)到正常工作模式,同時(shí)保證喚醒時(shí)序的準(zhǔn)確性。

3.動(dòng)態(tài)電壓頻率調(diào)節(jié)(DVFS)

針對(duì)支持變頻調(diào)壓的 RISC-V 芯片,PMU 可聯(lián)動(dòng)時(shí)鐘模塊(PLL/CLKGEN)實(shí)現(xiàn)DVFS 機(jī)制:根據(jù) CPU 負(fù)載(如指令執(zhí)行密度、外設(shè)工作狀態(tài))自動(dòng)調(diào)整內(nèi)核的供電電壓和工作頻率。例如,當(dāng)芯片僅執(zhí)行低速傳感器數(shù)據(jù)采集任務(wù)時(shí),PMU 將內(nèi)核主頻從 160MHz 降至 80MHz,同時(shí)降低供電電壓,大幅降低動(dòng)態(tài)功耗;當(dāng)需要執(zhí)行復(fù)雜運(yùn)算時(shí),再快速提升主頻和電壓,保障性能需求。

4.電源監(jiān)測(cè)與安全保護(hù)

PMU 內(nèi)置電壓、電流監(jiān)測(cè)電路,可實(shí)時(shí)監(jiān)控芯片各電源域的供電狀態(tài):若出現(xiàn)過(guò)壓、欠壓、過(guò)流等異常,PMU 會(huì)觸發(fā)硬件保護(hù)機(jī)制(如自動(dòng)切斷對(duì)應(yīng)電源域、上報(bào)中斷),防止芯片燒毀。

5.時(shí)鐘系統(tǒng)的協(xié)同管理

RISC-V 芯片的多時(shí)鐘源(內(nèi)部 32KRC、外部晶振、PLL)由 PMU 統(tǒng)一協(xié)調(diào),它可根據(jù)工作模式切換時(shí)鐘源(如休眠時(shí)切換到低功耗 32K 時(shí)鐘,正常工作時(shí)切換到高頻 PLL 時(shí)鐘),同時(shí)關(guān)閉未使用的時(shí)鐘分支,減少時(shí)鐘樹(shù)的冗余功耗。

二、 特性

  1. 支持低功耗模式(SLEEP/DEEP_SLEEP/WAKEUP)的切換
  2. 支持喚醒源的配置(外部 IO/RTC/IWDG)
  3. 支持 FIRC 的開(kāi)啟與關(guān)閉

系統(tǒng)的電源管理狀態(tài)有 4 種,分別是正常模式、省電模式、睡眠模式和深度睡眠模式。其四種狀態(tài)之間的轉(zhuǎn)換如下圖所示:

進(jìn)入省電模式下,系統(tǒng)低頻時(shí)鐘運(yùn)行(關(guān)閉 PLL,系統(tǒng)的工作頻率由 OSC 或FIRC 提供),而且可以關(guān)閉部分外設(shè)。用戶可以在正常模式或睡眠模式下進(jìn)入省電模式。

?1 省電模式需要關(guān)閉PLL

?2 進(jìn)入省電模式后,由于時(shí)鐘變化需要對(duì)串口、IIC等外設(shè)進(jìn)行重新配置

?3 睡眠模式進(jìn)入省電模式的前提是進(jìn)入睡眠模式之前MCU是工作在省電模式

對(duì)應(yīng)代碼如下所示:

if(key3_flag)

{

key3_flag = 0;

key3_cnt++;

if(old_key3_cnt == key3_cnt)

{

Printf( "SRUN Statern" );

Systemclock_SRUN**_Init();**

User_Print_Init(115200);

Printf( "SRUN Statern" );

}

else

{

key3_cnt=0;

Printf( "Normal Statern");

Systemclock_Init();

User_Print_Init(115200);

Printf( "Normal Statern");

}

}

/ *

*** Function: Systemclock**_SRUN**_Init**

*** Description: Configure Systemclock_Init.**

*** Param: None**

*** Return: None.**

*/

void****Systemclock_SRUN**_Init()**

{

//注意:此處需要開(kāi)啟系統(tǒng)總線級(jí)的時(shí)鐘配置,具體外設(shè)時(shí)鐘配置可在各模塊初始化函數(shù)中具體開(kāi)啟 ,具體請(qǐng)參考時(shí)鐘樹(shù)或者下圖注釋

/ AXIBus3 clock operation Guide /**

AXIBUS3_CLK_ENABLE();

AXI4TOAPB0_CLK_ENABLE();

APBBUS0_CLK_ENABLE();

AXILITEBUS1_CLK_ENABLE();

AXILITEBUS2_CLK_ENABLE();

EFLASH_CLK_ENABLE();

PLIC_CLK_ENABLE();

CLINT_CLK_ENABLE();

USART0_CLK_ENABLE();

DMA0_CLK_ENABLE();

SMU_PLLInitTypeDef SMU_PLLInitStruct;

SMU_ClockInitTypeDef SMU_ClockInitStruct;

/ Set System Clock parameters values /

SMU_ClockInitStruct.SYSCLKSelect = SMU_SYSCLK_FIRC;

SMU_ClockInitStruct.AXI4Bus3CLKDiv = AXI4Bus3CLKDiv1;

SMU_ClockInitStruct.APBBus0CLKDiv = APBBus0CLKDiv1;

SMU_ClockInitStruct.APBBus1CLKDiv = APBBus1CLKDiv1;

SMU_ClockInitStruct.CANX2CLKDiv = CANX2CLKDiv1;

SMU_ClockInit (&SMU_ClockInitStruct);

SMU_PLLCmd(DISABLE);

EFLASH_CLK_UPDATE_ENABLE();

EFLASH_CLK_UPDATE_DISABLE();

FLASH_LockCtrl();

/ Get System Clock values /

SMU_GetClocksFreq (&SMU_ClocksStruct);

}

void****Systemclock_Init()

{

//注意:此處需要開(kāi)啟系統(tǒng)總線級(jí)的時(shí)鐘配置,具體外設(shè)時(shí)鐘配置可在各模塊初始化函數(shù)中具體開(kāi)啟 ,具體請(qǐng)參考時(shí)鐘樹(shù)或者下圖注釋

/ AXIBus3 clock operation Guide /**

AXIBUS3_CLK_ENABLE();

AXI4TOAPB0_CLK_ENABLE();

APBBUS0_CLK_ENABLE();

AXILITEBUS1_CLK_ENABLE();

AXILITEBUS2_CLK_ENABLE();

EFLASH_CLK_ENABLE();

PLIC_CLK_ENABLE();

CLINT_CLK_ENABLE();

USART0_CLK_ENABLE();

DMA0_CLK_ENABLE();

SMU_PLLInitTypeDef SMU_PLLInitStruct;

SMU_ClockInitTypeDef SMU_ClockInitStruct;

/ Set PLL parameters values /

SMU_PLLInitStruct.OscillatorType = SMU_OSCILLATORTYPE_OSC;

SMU_PLLInitStruct.FIRCOscState = DISABLE;

SMU_PLLInitStruct.FIRCCalibrationValue = 0x00;

SMU_PLLInitStruct.PLLConfig.PLLState = ENABLE;

SMU_PLLInitStruct.PLLConfig.PLLSource = SMU_PLLCLK_OSC;

SMU_PLLInitStruct.PLLConfig.PLLDivR = 0x04;

SMU_PLLInitStruct.PLLConfig.PLLDivQ = 0x01;

SMU_PLLInitStruct.PLLConfig.PLLDivN = 0x14;

SMU_PLLInitStruct.PLLConfig.PLLDivF = 0x78;

SMU_PLLInit (&SMU_PLLInitStruct);

/ Ensure that the EFLASH is consistent with the system clock /

FLASH_UnlockCtrl();

FLASH_SetCLKFreq(0x78)

/ Set System Clock parameters values /

SMU_ClockInitStruct.SYSCLKSelect = SMU_SYSCLK_PLL;

SMU_ClockInitStruct.AXI4Bus3CLKDiv = AXI4Bus3CLKDiv1;

SMU_ClockInitStruct.APBBus0CLKDiv = APBBus0CLKDiv1;

SMU_ClockInitStruct.APBBus1CLKDiv = APBBus1CLKDiv1;

SMU_ClockInitStruct.CANX2CLKDiv = CANX2CLKDiv1;

SMU_ClockInit (&SMU_ClockInitStruct);

EFLASH_CLK_UPDATE_ENABLE();

EFLASH_CLK_UPDATE_DISABLE();

FLASH_LockCtrl();

/ Get System Clock values /

SMU_GetClocksFreq (&SMU_ClocksStruct);

}

在睡眠模式下,用戶需要復(fù)位/禁止 PLL 輸出、禁止 FIRC 輸出時(shí)鐘、ADC、DAC 等處于低功耗模式,要進(jìn)入睡眠/深度睡眠模式,請(qǐng)遵循以下步驟:

  1. 讀取喚醒信息:讀取 PMU_WKP 寄存器,若有位為 1 則寫(xiě) 1 清除該位,若皆為 0 則進(jìn)入下一步操作;
  2. 配置喚醒通道:將 PMU_WKEN 寄存器的對(duì)應(yīng)喚醒通道配置為 1,其他通道配置為0;
  3. 保存?zhèn)浞菪畔ⅲ簩⑿枰獋浞莸男畔⒋鎯?chǔ)到 Bkp RAM 內(nèi);
  4. 配置睡眠模式:配置 PMU_MODE 寄存器的值,配置 1 進(jìn)入深度睡眠模式,配置 2 進(jìn)入睡眠模式;
  5. 系統(tǒng)將自動(dòng)睡眠。 喚醒后,可通過(guò) PMU_WKP 寄存器讀取喚醒信息,獲取喚醒源。

注意:

*1:進(jìn)入睡眠/深度睡眠前要確認(rèn)喚醒寄存器狀態(tài)是否清空,喚醒后要及時(shí)清除喚醒寄存器

*2:DeepSleep 喚醒:等效于系統(tǒng)軟重啟,程序從復(fù)位入口重新執(zhí)行,片內(nèi)常規(guī) RAM數(shù)據(jù)完全丟失;關(guān)鍵數(shù)據(jù)需預(yù)先存入備份 RAM(Backup RAM)以實(shí)現(xiàn)掉電 / 深睡保留。

*3:Sleep 喚醒:系統(tǒng)僅恢復(fù) CPU 運(yùn)行,程序從 Sleep 指令下一條語(yǔ)句繼續(xù)執(zhí)行(通常是 while (1) 循環(huán)內(nèi)斷點(diǎn)),常規(guī) RAM 數(shù)據(jù)完整保留,無(wú)需重新初始化時(shí)鐘、外設(shè)等硬件配置。

以下為進(jìn)入喚醒睡眠模式流程圖

此圖為我司提供的開(kāi)發(fā)板對(duì)應(yīng)電流3.62mA

在深度睡眠模式下,需要 PMU 關(guān)閉 PMB 輸出,使 Main 和 ANA 進(jìn)入掉電狀態(tài)。此時(shí)喚醒只能通過(guò) RTC 或外部引腳喚醒進(jìn)入正常工作模式。以下為進(jìn)入喚醒深度睡眠模式流程圖

此圖為我司提供的開(kāi)發(fā)板對(duì)應(yīng)電流291uA

對(duì)應(yīng)代碼:

/ *

*** Brief: Main program**

*** Description:**

*** Param: None.**

*** Return: None.**

*/

void****main()

{

uint32_t led_count = 0;

Systemclock_Init();

delay_init(SMU_ClocksStruct.AXIBus0_Frequency/1000000);

/ Initialize print usart /

User_Print_Init(115200);

User_KEY_Init();

Wake_KEY_Init();

/ Configure the FCU /

//FCUConfig();

/ USART send data /

Printf( "AS32X601 Power mode switching!rn");

PMU_WKFlagJudg();

#if IWDG

IWDG_SetPrescaler(200);

IWDG_SetDivider(745);

IWDG_SetTimeout(4);

IWDG_ENCmd(I_CFG_EN,ENABLE);

IWDG_ResetCounter();

num = IWDG_GetCounter();

#endif

#if IWDG

PMU_WakeUpSourceCmd(PMU_WKSource_IWDG, ENABLE);

#endif

#if RTC

RTC_Config() ;//10S后喚醒

PMU_WakeUpSourceCmd(PMU_WKSource_RTC, ENABLE);

#endif

/ Enable PH2 wakeup source /

PMU_WakeUpSourceCmd(PMU_WKSource_PH2, ENABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH3, ENABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH4, ENABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH5, ENABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH6, ENABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH7, ENABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH8, ENABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH9, ENABLE);

pwk = (PMU->WKEN)&0x3FFF;

Printf( "WKEN %xrn", pwk);

while(1)

{

if(key1_flag)

{

key1_flag = 0;

/ Set sleep mode /

power_status = PMU_GetPowerModeStatus();

if((power_status == PMU_PowerMode_INIT)||(power_status == PMU_PowerMode_Normal))

{

PMU_ClearFlag(0x3FFF);

Printf( "POWER_SATUS %drn", power_status);

Printf( "DEEP SLEEP!rn");

PMU_PowerModeConfig(PMU_PowerMode_DeepSleep);

}

}

if(key2_flag)

{

key2_flag = 0;

power_status = PMU_GetPowerModeStatus();

if((power_status == PMU_PowerMode_INIT)||(power_status == PMU_PowerMode_Normal))

{

PMU_ClearFlag(0x3FFF);

Printf( "POWER_SATUS %drn", power_status);

Printf( "SLEEP!rn");

PMU_PowerModeConfig(PMU_PowerMode_Sleep);

}

}

}

}

/ *

*** Function: PMU_WKFlagJudg**

*** Description: Wake up source status judgment.**

*** Param: None.**

*** Return: None.**

*/

voidPMU_WKFlagJudg(void)

{

Printf( "WKFR: 0x%x ! rn" , PMU->WKFR);

if(PMU_GetFlagStatus(PMU_FLAG_IWDGWK) == SET)

{

Printf( "IWDG wake up!rn");

PMU_ClearFlag(PMU_CLEAR_IWDGWKF);

}

if(PMU_GetFlagStatus(PMU_FLAG_RTCWK) == SET)

{

Printf( "RTC wake up!rn");

PMU_ClearFlag(PMU_CLEAR_RTCWKF);

}

if(PMU_GetFlagStatus(PMU_FLAG_PH0WK) == SET)

{

Printf( "PH0 wake up!rn");

PMU_ClearFlag(PMU_CLEAR_PH0WKF);

}

if(PMU_GetFlagStatus(PMU_FLAG_PH1WK) == SET)

{

Printf( "PH1 wake up!rn");

PMU_ClearFlag(PMU_CLEAR_PH1WKF);

}

if(PMU_GetFlagStatus(PMU_FLAG_PH2WK) == SET)

{

Printf( "PH2 wake up!rn");

PMU_ClearFlag(PMU_CLEAR_PH2WKF);

}

if(PMU_GetFlagStatus(PMU_FLAG_PH3WK) == SET)

{

Printf( "PH3 wake up!rn");

PMU_ClearFlag(PMU_CLEAR_PH3WKF);

}

if(PMU_GetFlagStatus(PMU_FLAG_PH4WK) == SET)

{

Printf( "PH4 wake up!rn");

PMU_ClearFlag(PMU_CLEAR_PH4WKF);

}

if(PMU_GetFlagStatus(PMU_FLAG_PH5WK) == SET)

{

Printf( "PH5 wake up!rn");

PMU_ClearFlag(PMU_CLEAR_PH5WKF);

}

if(PMU_GetFlagStatus(PMU_FLAG_PH6WK) == SET)

{

Printf( "PH6 wake up!rn");

PMU_ClearFlag(PMU_CLEAR_PH6WKF);

}

if(PMU_GetFlagStatus(PMU_FLAG_PH7WK) == SET)

{

Printf( "PH7 wake up!rn");

PMU_ClearFlag(PMU_CLEAR_PH7WKF);

}

if(PMU_GetFlagStatus(PMU_FLAG_PH8WK) == SET)

{

Printf( "PH8 wake up!rn");

PMU_ClearFlag(PMU_CLEAR_PH8WKF);

}

if(PMU_GetFlagStatus(PMU_FLAG_PH9WK) == SET)

{

Printf( "PH9 wake up!rn");

PMU_ClearFlag(PMU_CLEAR_PH9WKF);

}

PMU_WakeUpSourceCmd(PMU_WKSource_PH2, DISABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH3, DISABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH4, DISABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH5, DISABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH6, DISABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH7, DISABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH8, DISABLE);

PMU_WakeUpSourceCmd(PMU_WKSource_PH9, DISABLE);

Printf( "WKFR: 0x%x ! rn" , PMU->WKFR);

}

/ *

*** Function: Systemclock_Init**

*** Description: Configure Systemclock_Init.**

*** Param: None**

*** Return: None.**

*/

void****Systemclock_Init()

{

//注意:此處需要開(kāi)啟系統(tǒng)總線級(jí)的時(shí)鐘配置,具體外設(shè)時(shí)鐘配置可在各模塊初始化函數(shù)中具體開(kāi)啟 ,具體請(qǐng)參考時(shí)鐘樹(shù)或者下圖注釋

// 1. 使用串口時(shí),由于串口掛在APB0總線下,需要在此處開(kāi)啟AXIBUS3時(shí)鐘、AXI4TOAPB0時(shí)鐘以及APBBUS0時(shí)鐘。

// 2. 使用延時(shí)函數(shù)時(shí),需要開(kāi)啟CLINT時(shí)鐘

// 3. 使用eflash、qspi時(shí),需要開(kāi)啟AXIBUS3時(shí)鐘、AXILITEBUS2時(shí)鐘

//注意:osc經(jīng)過(guò)PLLDIVN分頻之后頻率應(yīng)在0.95-2.1MHz之間

// core_clock (無(wú)需使能) = pll_Q = osc % PLLDIVN x PLLDIVF % PLLDIVQ (注:此部分時(shí)鐘計(jì)算范圍應(yīng)在 16-180MHz之間 )

// AXI4Bus0 (無(wú)需使能) = pll_Q = osc % PLLDIVN x PLLDIVF % PLLDIVQ (注:此部分時(shí)鐘計(jì)算范圍應(yīng)在 16-180MHz之間 )

// AXI4Bus1 (無(wú)需使能) = pll_Q % 2 (注:此部分時(shí)鐘計(jì)算范圍應(yīng)在 8-90MHz之間 )

// AXI4Bus2 (無(wú)需使能) = pll_Q (注:此部分時(shí)鐘計(jì)算范圍應(yīng)在 16-180MHz之間 )

// |__AXILite4Bus0 (無(wú)需使能) = AXI4Bus2

// AXI4Bus3 (按需使能) = pll_Q % 2 % AXI4Bus3CLKDiv (注:此部分時(shí)鐘計(jì)算范圍應(yīng)在 8-90MHz之間 )

// |__AXI4TOAPB0_CLK (按需使能)

// | |__APBBus0 (按需使能) = AXI4Bus3 % APBBus0CLKDiv (注:此部分時(shí)鐘計(jì)算范圍應(yīng)在 4-45MHz之間 )

// |__AXI4TOAPB1_CLK (按需使能)

// | |__APBBus1 (按需使能) = AXI4Bus3 % APBBus1CLKDiv (注:此部分時(shí)鐘計(jì)算范圍應(yīng)在 4-45MHz之間 )

// |__AXILite4Bus1 (按需使能) = AXI4Bus3

// |__AXILite4Bus2 (按需使能) = AXI4Bus3

// CANCLK (接口使能) = pll_R = osc % PLLDIVN x PLLDIVF % PLLDIVR (注:此部分時(shí)鐘計(jì)算范圍應(yīng)在 8-80MHz之間 )

// APBBusS (無(wú)需使能) = 32.768kHz

/ AXIBus3 clock operation Guide /**

AXIBUS3_CLK_ENABLE();

AXI4TOAPB0_CLK_ENABLE();

APBBUS0_CLK_ENABLE();

AXILITEBUS1_CLK_ENABLE();

AXILITEBUS2_CLK_ENABLE();

EFLASH_CLK_ENABLE();

PLIC_CLK_ENABLE();

CLINT_CLK_ENABLE();

USART0_CLK_ENABLE();

DMA0_CLK_ENABLE();

SMU_PLLInitTypeDef SMU_PLLInitStruct;

SMU_ClockInitTypeDef SMU_ClockInitStruct;

/ Set PLL parameters values /

SMU_PLLInitStruct.OscillatorType = SMU_OSCILLATORTYPE_OSC;

SMU_PLLInitStruct.FIRCOscState = DISABLE;

SMU_PLLInitStruct.FIRCCalibrationValue = 0x00;

SMU_PLLInitStruct.PLLConfig.PLLState = ENABLE;

SMU_PLLInitStruct.PLLConfig.PLLSource = SMU_PLLCLK_OSC;

SMU_PLLInitStruct.PLLConfig.PLLDivR = 0x04;

SMU_PLLInitStruct.PLLConfig.PLLDivQ = 0x01;

SMU_PLLInitStruct.PLLConfig.PLLDivN = 0x14;

SMU_PLLInitStruct.PLLConfig.PLLDivF = 0x78;

SMU_PLLInit(&SMU_PLLInitStruct);

/ Ensure that the EFLASH is consistent with the system clock /

FLASH_UnlockCtrl();

FLASH_SetCLKFreq(0x78);

/ Set System Clock parameters values /

SMU_ClockInitStruct.SYSCLKSelect = SMU_SYSCLK_PLL;

SMU_ClockInitStruct.AXI4Bus3CLKDiv = AXI4Bus3CLKDiv1;

SMU_ClockInitStruct.APBBus0CLKDiv = APBBus0CLKDiv1;

SMU_ClockInitStruct.APBBus1CLKDiv = APBBus1CLKDiv1;

SMU_ClockInitStruct.CANX2CLKDiv = CANX2CLKDiv1;

SMU_ClockInit(&SMU_ClockInitStruct);

EFLASH_CLK_UPDATE_ENABLE();

EFLASH_CLK_UPDATE_DISABLE();

FLASH_LockCtrl();

/ Get System Clock values /

SMU_GetClocksFreq(&SMU_ClocksStruct);

}

/ *

*** Function : FCUConfig**

*** Description: Configure the FPU behavior**

*** Param : None**

*** Return : None**

*/

voidFCUConfig(void)

{

FCU_CLK_ENABLE();

FCU_InitTypeDef FCU_InitStructure;

FCU_StructInit(&FCU_InitStructure);

FCU_InitStructure.FCU_Channel = FCU_CHANNEL_IWDG;/ Specifies the channel to be configured /

FCU_InitStructure.FCU_FaultToResetCnt = 0;/ Specifies the count to reset under the fault level /

FCU_InitStructure.FCU_AlarmToFaultCnt = 1;/ Specifies the count to change the level from alarm to fault /

FCU_InitStructure.FCU_FaultAction = GLOBAL_SOFTWARE_RESET;/ Specifies the actin when the fault occured every time /

FCU_InitStructure.FCU_AlarmAction = NONE;/ Specifies the actin when the alarm occured every time /

FCU_InitStructure.FCU_FaultLevel = FAULT;/ Specifies the fault level /

FCU_InitStructure.FCU_MaskEnable = DISABLE;/ Specifies the mask enable /

FCU_Init(&FCU_InitStructure);

FCU_ClearSoftwareFault(FCU_CHANNEL_IWDG);

FCU_Cmd(FCU_CHANNEL_IWDG,ENABLE);

}

/ *

*** Function: User_KEY_Init**

*** Description: Configure KEY GPIO.**

*** Param: None.**

*** Return: None.**

*/

void****Wake_KEY_Init()

{

GPIO_InitTypeDef GPIO_InitStructure;

/ GPIOB Configure /

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;

GPIO_InitStructure.GPIO_IType = GPIO_IPU;

GPIO_InitStructure.GPIO_OType = GPIO_Out_PP;

GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_9mA;

GPIO_Init(GPIOH, &GPIO_InitStructure);

}

/ *

*** Function: User_KEY_Init**

*** Description: Configure KEY GPIO.**

*** Param: None.**

*** Return: None.**

*/

void****User_KEY_Init()

{

GPIO_InitTypeDef GPIO_InitStructure;

PLIC_InitTypeDef PLIC_InitStructure;

GPIOB_CLK_ENABLE();

GPIOE_CLK_ENABLE();

PLIC_CLK_ENABLE();

/ GPIOE Configure /

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;

GPIO_InitStructure.GPIO_IType = GPIO_IPU;

GPIO_InitStructure.GPIO_OType = GPIO_Out_PP;

GPIO_InitStructure.GPIO_OStrength = GPIO_OStrength_9mA;

GPIO_Init(GPIOE, &GPIO_InitStructure);

/ GPIOB Configure /

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3;

GPIO_Init(GPIOB, &GPIO_InitStructure);

PLIC_InitStructure.PLIC_IRQChannel = GPIOE_IRQn;

PLIC_InitStructure.PLIC_IRQPriority = 1;

PLIC_InitStructure.PLIC_IRQChannelCmd = ENABLE;

PLIC_Init(&PLIC_InitStructure);

PLIC_InitStructure.PLIC_IRQChannel = GPIOB_IRQn;

PLIC_InitStructure.PLIC_IRQPriority = 2;

PLIC_InitStructure.PLIC_IRQChannelCmd = ENABLE;

PLIC_Init(&PLIC_InitStructure);

/ Clear Interrupt start state /

GPIO_ClearITPendingBit(GPIOE, GPIO_Pin_10);

GPIO_ClearITPendingBit(GPIOB, GPIO_Pin_4|GPIO_Pin_3);

/ Config Interrupt trigger type /

GPIO_ITConfig(GPIOE, GPIO_Pin_10, GPIO_ITType_EDGEDOWN, ENABLE);

GPIO_ITConfig(GPIOB, GPIO_Pin_4|GPIO_Pin_3, GPIO_ITType_EDGEDOWN, ENABLE);

}

void****GPIOE_IRQ_Handler()

{

if(GPIO_GetITStatus(GPIOE, GPIO_Pin_10) == SET)

{

key1_flag = 1;

/ Clear Interrupt start state /

GPIO_ClearITPendingBit(GPIOE, GPIO_Pin_10);

}

}

void****GPIOB_IRQ_Handler()

{

if(GPIO_GetITStatus(GPIOB, GPIO_Pin_4) == SET)

{

key2_flag = 1;

/ Clear Interrupt start state /

GPIO_ClearITPendingBit(GPIOB, GPIO_Pin_4);

}

if(GPIO_GetITStatus(GPIOB, GPIO_Pin_3) == SET)

{

key3_flag = 1;

/ Clear Interrupt start state /

GPIO_ClearITPendingBit(GPIOB, GPIO_Pin_3);

}

}

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    147

    文章

    18646

    瀏覽量

    388300
  • PMU
    PMU
    +關(guān)注

    關(guān)注

    1

    文章

    126

    瀏覽量

    23045
  • 芯片電源
    +關(guān)注

    關(guān)注

    0

    文章

    9

    瀏覽量

    10122
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    基于AS32A601MCU芯片的屏幕驅(qū)動(dòng)IC方案的技術(shù)研究

    摘要 :在電子技術(shù)快速迭代的當(dāng)下,屏幕驅(qū)動(dòng)IC作為人機(jī)交互的關(guān)鍵環(huán)節(jié),其技術(shù)演進(jìn)受到廣泛關(guān)注。本文聚焦于基于國(guó)科安芯推出的AS32A601MCU芯片的屏幕驅(qū)動(dòng)IC方案,通過(guò)深入剖析A
    的頭像 發(fā)表于 10-31 15:04 ?232次閱讀

    AS32S601MCU芯片在商業(yè)衛(wèi)星電源系統(tǒng)伺服控制器中的性能分析與應(yīng)用解析

    摘要: 隨著商業(yè)航天的蓬勃發(fā)展,對(duì)高可靠、高性能且具備成本效益的MCU(微控制單元)需求日益增長(zhǎng)。本文聚焦于國(guó)科安芯推出的AS32S601MCU
    的頭像 發(fā)表于 10-28 21:58 ?576次閱讀

    AS32S601ZIT2MCU:基于RISC-V架構(gòu)的抗輻照設(shè)計(jì)與試驗(yàn)評(píng)估

    摘要 隨著航天、核能等高輻射環(huán)境領(lǐng)域?qū)﹄娮釉O(shè)備可靠性的要求不斷提高,抗輻照MCU(微控制單元)在保障系統(tǒng)穩(wěn)定運(yùn)行方面的重要性日益凸顯。本文聚焦于國(guó)科安芯推出的AS32S601ZIT2MCU
    的頭像 發(fā)表于 09-25 17:15 ?685次閱讀

    AS32S601在軌重構(gòu)(OTA)方案的優(yōu)化與分析

    摘要 在軌重構(gòu)(OTA)技術(shù)因其在航天、工業(yè)控制、物聯(lián)網(wǎng)等領(lǐng)域的高可靠性和持續(xù)服務(wù)需求而備受關(guān)注。本文以國(guó)科安芯推出的AS32S601芯片為研究對(duì)象,深入分析其OTA方案的設(shè)計(jì)原理、技術(shù)細(xì)節(jié)及優(yōu)化
    的頭像 發(fā)表于 09-13 14:52 ?2287次閱讀
    <b class='flag-5'>AS32S601</b>在軌重構(gòu)(OTA)方案的優(yōu)化與分析

    AS32S601與ASP4644S芯片抗輻照性能解析及核電站消防應(yīng)用

    摘要: 本文對(duì)國(guó)科安芯推出的AS32S601MCU和ASP4644S電源芯片的抗輻照性能進(jìn)行深
    的頭像 發(fā)表于 08-14 16:39 ?785次閱讀
    <b class='flag-5'>AS32S601</b>與ASP4644<b class='flag-5'>S</b><b class='flag-5'>芯片</b>抗輻照性能解析及核電站消防應(yīng)用

    AS32S601 芯片 ADC 模塊交流耦合測(cè)試:技術(shù)要點(diǎn)與實(shí)踐

    一、概述 (一)芯片簡(jiǎn)介 AS32S601是廈門國(guó)科安芯科技有限公司推出的一款高性能32位RISC-V指令集MCU產(chǎn)品,具有豐富的Flash容量,支持ASIL-B等級(jí)的功能安全I(xiàn)SO26262標(biāo)準(zhǔn)
    的頭像 發(fā)表于 08-06 09:39 ?586次閱讀
    <b class='flag-5'>AS32S601</b> <b class='flag-5'>芯片</b> ADC <b class='flag-5'>模塊</b>交流耦合測(cè)試:技術(shù)要點(diǎn)與實(shí)踐

    RY1303 3通道5.5V 2A 1.2MHz DC/DC降壓電源管理單元(PMU)數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《RY1303 3通道5.5V 2A 1.2MHz DC/DC降壓電源管理單元(PMU)數(shù)據(jù)手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 07-25 15:41 ?0次下載

    MCU芯片AS32S601在衛(wèi)星光纖放大器(EDFA)中的應(yīng)用探索

    摘要: 本文聚焦于國(guó)科安芯推出的AS32S601MCU芯片在衛(wèi)星光纖放大器(EDFA)中的潛在應(yīng)用,探討其技術(shù)特性、抗輻射性能及適用性。通過(guò)分析其在單粒子效應(yīng)脈沖激光試驗(yàn)中的表現(xiàn),結(jié)
    的頭像 發(fā)表于 07-23 17:52 ?687次閱讀

    MAX3485在MCU芯片AS32S601-485通信外設(shè)中的應(yīng)用

    通信外設(shè)時(shí)具有重要價(jià)值。本文將詳細(xì)介紹 MAX3485 芯片的核心特性、硬件設(shè)計(jì)要點(diǎn)、軟件功能實(shí)現(xiàn)以及在MCU芯片AS32S601-485通信外設(shè)中應(yīng)用注意事項(xiàng),旨在為相關(guān)工程技術(shù)人
    的頭像 發(fā)表于 07-05 23:45 ?2559次閱讀
    MAX3485在<b class='flag-5'>MCU</b><b class='flag-5'>芯片</b>AS32<b class='flag-5'>S601</b>-485通信外設(shè)中的應(yīng)用

    AS32S601 芯片在衛(wèi)星互聯(lián)網(wǎng)推進(jìn)系統(tǒng)中的技術(shù)適配性研究

    AS32S601芯片在衛(wèi)星互聯(lián)網(wǎng)推進(jìn)系統(tǒng)中的技術(shù)適配性。通過(guò)對(duì)芯片抗單粒子效應(yīng)能力的分析、功能特性與系統(tǒng)需求的匹配研究,以及具體應(yīng)用場(chǎng)景的詳細(xì)探討,揭示了AS32S601
    的頭像 發(fā)表于 07-04 09:36 ?550次閱讀

    AS32X601驅(qū)動(dòng)系列教程 SMU_系統(tǒng)時(shí)鐘詳解

    時(shí)鐘和復(fù)位的管理。在默認(rèn)狀態(tài)下SMU工作在IDLE狀態(tài)。只有接收到PMU的使能信號(hào)后才開(kāi)始工作。SMU模塊會(huì)根據(jù)PMU的指令自動(dòng)配置COR、AXIBUS0/1/2等總線的時(shí)鐘和復(fù)位。
    的頭像 發(fā)表于 05-23 16:01 ?603次閱讀
    AS32X<b class='flag-5'>601</b>驅(qū)動(dòng)系列教程 SMU_系統(tǒng)時(shí)鐘<b class='flag-5'>詳解</b>

    皮秒脈沖激光技術(shù)在AS32S601單粒子效應(yīng)評(píng)估中的應(yīng)用

    可靠性的重要因素之一。為了評(píng)估芯片在輻射環(huán)境中的抗單粒子效應(yīng)能力,皮秒脈沖激光技術(shù)作為一種先進(jìn)的模擬手段被廣泛應(yīng)用。本文將以 AS32S601 MCU 的單粒子效應(yīng)評(píng)估為例,詳細(xì)介
    的頭像 發(fā)表于 04-03 17:05 ?1003次閱讀
    皮秒脈沖激光技術(shù)在<b class='flag-5'>AS32S601</b>單粒子效應(yīng)評(píng)估中的應(yīng)用

    AS32X601芯片技術(shù)剖析

    芯片簡(jiǎn)介 AS32X601系列MCU是國(guó)產(chǎn)高可靠嵌入式處理器的重要突破,其企業(yè)宇航級(jí)型號(hào)AS32S601針對(duì)空間輻射環(huán)境與極端溫度條件優(yōu)化,滿足衛(wèi)星載荷控制、航天器運(yùn)動(dòng)控制等場(chǎng)景需求。
    的頭像 發(fā)表于 03-14 16:17 ?881次閱讀

    商業(yè)航天級(jí)微控制器單元(MCU)技術(shù)特征分析

    (AS32S601)的工作頻率與抗輻射加固設(shè)計(jì),為航天器電源管理、工業(yè)機(jī)器人運(yùn)動(dòng)控制及車載電子控制單元等應(yīng)用場(chǎng)景提供了可靠的技術(shù)解決方案。 一、核心技術(shù)體系 1.1 自主RISC-V架構(gòu)技術(shù)體系 該系列
    的頭像 發(fā)表于 02-23 09:28 ?1078次閱讀

    PMU電源管理芯片CN8911B適用于超級(jí)電容備電的電源系統(tǒng)

    PMU電源管理芯片CN8911B適用于超級(jí)電容備電的電源系統(tǒng)
    的頭像 發(fā)表于 01-23 09:11 ?1234次閱讀
    <b class='flag-5'>PMU</b><b class='flag-5'>電源</b><b class='flag-5'>管理</b><b class='flag-5'>芯片</b>CN8911B適用于超級(jí)電容備電的<b class='flag-5'>電源</b>系統(tǒng)