前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dsPIC33EP 时钟初始化程序

dsPIC33EP 时钟初始化程序

作者头像
全栈程序员站长
发布2022-07-05 09:24:02
2630
发布2022-07-05 09:24:02
举报
文章被收录于专栏:全栈程序员必看
代码语言:javascript
复制
//文件名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.cn/109983.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年8月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档