⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmu.c

📁 USB 软件配置的具体工程
💻 C
字号:
#include "hardware.h"
#include "hardware_reg.h"
#include "HA_typedef.h"

#include "stdio.h"

extern void get_PDandPV(U32 *PD_r, U32 *PV_r, int num_m){//MHz
	int i;
	int tmp1;
	U32 PD;
	U32 PV;
	//U32 MPLLCON;
	
	for(i = 1; i <= 16; i++){
		tmp1 = 2 * i * num_m;
		if((tmp1>=120) && (tmp1<=280)){
			PD = i - 1;
			break;
			}
		}
	
	PV = num_m*2*(PD+1)/2*2.5; //2~5MHz,取4MHz。
	*PD_r=PD;
	*PV_r=PV;
}



extern void set_to_normal(int num_m){
int i;
U32 MPLLCON;
U32 PD_r, PV_r;
	PD_r = 0;
	PV_r = 0;
	get_PDandPV(&PD_r,  &PV_r,  num_m);
	MPLLCON = PV_r | 0x380 | (PD_r << 10);	 //make out config value
	*(RP)0x10001004 = (MPLLCON | 0x8000);
	i++;
	i--;
	i++;
	i--;
       // must finish config
	*(RP)0x10001004 = MPLLCON; 

	*(RP)PMU_PMDR = 0x01;   //set to normal
	for(i = 0; i < 100; i++);
}



extern void set_to_slow(){
int i;
*(RP)PMU_PMDR = 0x00;    
for(i = 0; i < 50; i++);
}



#if 0
extern void set_to_idle(){
int i;
U32 IMR_save;
//close cpu irqen
IMR_save = *(RP)INTC_IMR;
*(RP)INTC_IMR |= 0xffffffff;  
*(RP)PMU_PMDR = 0x3;     //set to idle
for(i = 0; i < 100; i++);
//open cpu irqen
*(RP)INTC_IMR = IMR_save; 
}


extern void set_to_sleep(){
int i,flag;
U32 IMR_save;
//检查LCDC/DMAC等外设是否已经关闭,否则直接返回
     flag = check_peri()
     if(flag == -1){
        return 0
     }
    //关闭所有中断
IMR_save = *(RP)INTC_IMR;
*(RP)INTC_IMR |= 0xffffffff;  //close cpu irqen
//配置PMC进入SLEEP模式
     *(RP)PMU_PMDR = 0x2;    //set to sleep
     //部分空操作
 for(i = 0; i < 100; i++);
 //开启中断
 *(RP)INTC_IMR = IMR_save;  //open cpu irqen
   }
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -