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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 异或和左移的优先级_异或链表

    异或和左移的优先级_异或链表给定一个非负整数序列 a,初始长度为 N。有 M 个操作,有以下两种操作类型:A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N 增大 1。Q l r x:询问操作,你需要找到一个位置 p,满足 l≤p≤r,使得:a[p] xor a[p+1] xor … xor a[N] xor x 最大,输出这个最大值。输入格式第一行包含两个整数 N,M,含义如问题描述所示。第二行包含 N 个非负整数,表示初始的序列 A。接下来 M 行,每行描述一个操作,格式如题面所述。输出格式每个询问操

    2022年8月10日
    5
  • use mysql命令_mysql命令-use

    use mysql命令_mysql命令-useuse命令可以让我们来使用数据库。use命令格式:use;例如,如果xhkdb数据库存在,尝试存取它:mysql>usexhkdb;屏幕提示:Databasechanged1)use语句可以通告MySQL把db_name数据库作为默认(当前)数据库使用,用于后续语句。该数据库保持为默认数据库,直到语段的结尾,或者直到出现下一个不同的use语句:mysql>USEdb1…

    2022年7月17日
    13
  • L3-001 凑零钱(回溯和0-1背包)[通俗易懂]

    L3-001 凑零钱(回溯和0-1背包)[通俗易懂]韩梅梅喜欢满宇宙到处逛街。现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债。韩梅梅手边有 10​4​​ 枚来自各个星球的硬币,需要请你帮她盘算一下,是否可能精确凑出要付的款额。输入格式:输入第一行给出两个正整数:N(≤10​4​​ )是硬币的总个数,M(≤10​2​​ )是韩梅梅要付的款额。第二行给出 N 枚硬币的正整数面值。数字间以空格分隔。输出格式:在一行中输出硬币的面值 V​1​​ ≤V​2​​ ≤⋯≤V​k

    2022年8月8日
    5
  • phpstudy php5.4以上版本伪静态设置 thinkphp

    phpstudy php5.4以上版本伪静态设置 thinkphp

    2021年10月15日
    61
  • ajax的几个面试题「建议收藏」

    ajax的几个面试题「建议收藏」一、什么是AJAX(请谈一下你对Ajax的认识)AJAX是“AsynchronousJavaScriptandXML”的缩写。他是指一种创建交互式网页应用的网页开发技术。Ajax包含下列技术:基于web标准(standards-basedpresentation)XHTML+CSS的表示;使用DOM(DocumentObjectModel)进行动态显示及交互;使用XML和XSLT…

    2022年8月27日
    8
  • MyEclipse10.0 配置 Tomcat1.7

    MyEclipse10.0 配置 Tomcat1.7

    2021年8月29日
    65

发表回复

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

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