• dsPIC33EP 时钟初始化程序


    //文件名p33clk.h
    
    #ifndef _P33CLK_H_
    #define _P33CLK_H_
    //#include "p33clk.h"
    
    #define		WDT_ENB		_SWDTEN = 1 
    #define		WDT_DIS		_SWDTEN = 0 
    //时钟源选择
    #define		OSCLK0		0   //FRC
    #define		OSCLK1		1	//带PLL+N分频的FRC
    #define		OSCLK2		2	//HS MS LS 外部时钟
    #define		OSCLK3		3	//带PLL的HS MS LS 外部时钟
    #define		OSCLK4		4	//保留
    #define		OSCLK5		5	//LPRC
    #define		OSCLK6		6	//FRC/16
    #define		OSCLK7		7	//带N分频的FRC
    
    
    //处理器与CPU时钟分频比 
    #define		DOZEDIV1	(0<<12)
    #define		DOZEDIV2	(1<<12)
    #define		DOZEDIV4	(2<<12)
    #define		DOZEDIV8	(3<<12)
    #define		DOZEDIV16	(4<<12)
    #define		DOZEDIV32	(5<<12)
    #define		DOZEDIV64	(6<<12)
    #define		DOZEDIV128	(7<<12)
    
    //------------------------------
    //Fosc = (Fin/V_FRCDIV/N1/N2)*M
    
    #define		V_FRCDIV	V_FRCDIV1	//FRC振荡分频系数
    #define		V_N1		V_N1DIV(2)	//x = 2--33 N1 分频系数
    #define		V_N2		V_N2DIV2  //N2 分频系数
    #define		V_PLLFBD	PLLMF(50) //(x=2--513)PLL 倍频比
    
    //FRC 分频系数
    #define		V_FRCDIV1		0
    #define		V_FRCDIV2		1
    #define		V_FRCDIV4		2
    #define		V_FRCDIV8		3
    #define		V_FRCDIV16		4
    #define		V_FRCDIV32		5
    #define		V_FRCDIV64		6
    #define		V_FRCDIV256		7
    //N1
    #define		V_N1DIV(x)		 (x-2)
    
    //N2
    #define		V_N2DIV2		0
    #define		V_N2DIV4		1
    #define		V_N2DIV8		3
    
    //PLL 倍频数 M
    #define		PLLMF(x)	(x-2)
    
    
    
    
    
    //================================
    extern void Init_Clk(uint16 OsClk) ;
    
    
    #endif
    
    
    //文件名p33clk.c
    #include "global.h"
    #include "p33clk.h"
    
    //***************************************
    // 函数名称:InitClk
    // 函数功能:初始化时钟
    // 入口参数:时钟来源选择 FRC分频 pll倍频比
    // 出口参数:无
    // 返回值:无
    // Fosc = (Fin/V_FRCDIV/N1/N2)*M
    //***************************************
    void Init_Clk(uint16 OsClk)
    {
    	CLKDIV = 0X0000 ; //处理器与外设时钟比为1:1
    
    	_FRCDIV = V_FRCDIV ; //FRC分频系数
    	_PLLPOST = V_N2 ;//N2
    	_PLLPRE = V_N1 ;//N1
    	PLLFBD = V_PLLFBD ;// PLL倍频
    	
    	OSCTUN = 0X0000 ; //振荡器调节寄存器 默认7.37M
    	REFOCON = 0X0000  ; //参考时钟=系统时钟 
    
    	OSCCON = 0X0000 ; 
    
    	_OSWEN = 1 ; //请求切换由NOSC指定的时钟	
    	_NOSC = OsClk ; //切换 新的振荡器 	
    	while(_OSWEN) ;//等待时钟切换完成
    
    	if((_NOSC == OSCLK1) ||(_NOSC == OSCLK3))//带PLL
    	{
    		while(!_LOCK) ;//等待PLL锁定
    	}
    
    	REFOCON |= 0X8000 ; //参考时钟输出使能 
    }
    
    
    //应用实例 -- 时钟初始化
    
    	//FRC 系统时钟1分频到CPU PLL倍频50 
    	//Fin = 7.37M   Fcpu = Fosc/2 = 46.0625M  
    	Init_Clk(OSCLK1) ;
    
    


  • 相关阅读:
    升级automake和autoconf
    源码安装rsyslog
    rsyslog 基本组成
    Openstack Nova 源码分析 — RPC 远程调用过程
    Openstack Nova 源码分析 — RPC 远程调用过程
    Wide character in print at hcp.pl line 21.
    http 响应头之location
    概述
    VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机
    VMware 接入 Openstack — 使用 Openstack 创建 vCenter 虚拟机
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3398029.html
Copyright © 2020-2023  润新知