dsPIC33EP 时钟初始化程序

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) ;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109983.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win8.1 android驱动安装失败,Win8.1版系统显卡驱动安装失败的解决方法[通俗易懂]

    win8.1 android驱动安装失败,Win8.1版系统显卡驱动安装失败的解决方法[通俗易懂]图形卡驱动程序是用于驱动图形卡的程序,它是与硬件相对应的软件。驱动程序是由硬件制造商根据操作系统编写的配置文件。可以说,没有驱动程序,计算机中的硬件将无法工作。不同的操作系统具有不同的硬件驱动程序。为了确保硬件的兼容性并增强硬件的功能,各种硬件制造商将不断升级驱动程序。以下是解决Win8.1显卡驱动程序安装对每个人都不好的方法的集合,希望对您有所帮助。解决Win8.1显卡驱动程序安装错误的…

    2022年6月10日
    40
  • Rancher首席架构师解读Fleet:它何以管理百万集群?

    Rancher首席架构师解读Fleet:它何以管理百万集群?作者简介DarrenShepherd,RancherLabs联合创始人及首席架构师。在加入Rancher之前,Darren是Citrix的高级首席工程师,他在那里从事CloudStack、OpenStack、Docker的工作,并构建下一代基础设施编排技术。在加入Citrix之前,Darren曾在GoDaddy工作,他设计并领导一个团队实施公有和私有IaaS云。本文转自RancherLabs2020年年初,Rancher开源了海量集群管理项目Fleet,为大量的Kubernetes集群提供集.

    2022年6月6日
    104
  • 反射

    反射

    2021年7月3日
    101
  • QT是什么?

    QT是什么?了解QT踏上开发这条路已经有好几年了,通过这些年的学习,自己也总结了一些基础的知识,在这里,跟大家分享下。QT是什么1.Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。2、Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(MetaObject

    2022年5月17日
    95
  • 15个你可能不知道的开源云平台

    15个你可能不知道的开源云平台1.1云服务环境Eucalyptus1.1.1介绍ElasticUtilityComputingArchitectureforLinkingYourProgramsToUsef

    2022年7月2日
    18
  • jvm的垃圾回收机制_垃圾回收厂

    jvm的垃圾回收机制_垃圾回收厂一、概述我们知道自动的垃圾回收机制是Java语言一个特点,它让我们在写程序的时候不再需要考虑内存管理问题。内存管理实际上就是分配内存和回收内存这两个问题,在上一篇文章我大概介绍了jvm是如何划分内存

    2022年8月16日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号