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) ;
dsPIC33EP 时钟初始化程序的更多相关文章
- Linux0.11内核剖析--初始化程序(init)
1.概述 在内核源代码的 init/目录中只有一个 main.c 文件. 系统在执行完 boot/目录中的 head.s 程序后就会将执行权交给 main.c.该程序虽然不长,但却包括了内核初始化的所 ...
- s3c6410_时钟初始化
参考: 1)<USER'S MANUAL-S3C6410X>第三章 SYSTEM CONTROLLER 2)u-boot/board/samsumg/smdk6410/lowlevel_i ...
- s3c6410时钟初始化
今天自己写bootloader做时钟初始化时遇到的问题,特记录下来.为了方便理解,我大部分都有截图, 在此我先说明下,图均来自数据手冊.也希望看了本篇文章的同志多多參看数据手冊才干理解的更加透 ...
- 松瀚SN8P2501 定时器初始化程序--汇编源码
/* 松瀚 SN8P2501B 定时器初始化程序 */ INI_IRQ: ;定时器T0初始化 MOV A, #01100000b ;定时器模式Fcpu/4 16M/4/4=1M 1U计一次 B0MOV ...
- 松瀚SN8P2711 2722 ADC初始化程序及应用--汇编源码
/* 松瀚 SN8P2711 2722 ADC初始化程序 及应用实例 */ INIT_ADC: MOV A, #0XB2 // 启动ADC电路 使能AIN通道 B0MOV ADM, A MOV A,# ...
- LPC1788系统时钟初始化
#ifndef __SYS_H_ #define __SYS_H_ #include "common.h" #define SystemCoreClock 120000000 ...
- ARM裸板开发:04_MMU 链接地址与运行地址不一致时,(SDRAM)初始化程序地址无关码问题的分析
ARM裸板开发过程,程序的链接地址设置为为0x30000000,而前期的启动代码以及相关硬件的初始化代码需要在内部iRAM(steppingstone,起始地址0x0)的4K中运行.链接地址与运行地址 ...
- STM32_3 时钟初始化分析
在startup文件中,调用了2个函数,一个是System_Init, 另一个是main. System_Init()在system_stm32f10x.c 这个文件中,先看一下时钟树,再分析一下这个 ...
- 浏览器默认标签样式总结及css初始化程序(转)
浏览器默认标签样式总结及css初始化程序 html中的大部分的标签都有一些糟糕的样式,有的是标签天然自带的,有的是浏览器默认设置的,我们在写网页时,这些默认的样式就会时不时的跳出来捣一下乱,搞得我 ...
随机推荐
- Elasticsearch 删除索引下的所有数据
下面是head中操作的截图 #清空索引 POST quality_control/my_type/_delete_by_query?refresh&slices=5&pretty { ...
- 批量 添加 安卓构建 版本 eclipse
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha
- SpringBoot 解决时区问题
SpringBoot 解决时区问题 1.在启动类加上 @PostConstruct void setDefaultTimezone() { TimeZone.setDefault(TimeZone.g ...
- hihocoder155周 任务分配
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定 N 项任务的起至时间( S1, E1 ), ( S2, E2 ), ..., ( SN, EN ), 计算最少需要多 ...
- JS之RegExp对象(一)
JavaScript提供了一个RegExp对象来完毕有关正則表達式的操作和功能,每一条正則表達式模式相应一个RegExp实例.有两种方式能够创建RegExp对象的实例. 使用RegExp的显 ...
- iOS-- UIimageView详解
原文地址: http://blog.csdn.net/djxiaoyu_haha/article/details/40348377 // (1)创建 UIImageView *imageView = ...
- MySQL create table as与create table like对比
a.create table like方式会完整地克隆表结构,但不会插入数据,需要单独使用insert into或load data方式加载数据b.create table as 方式会部分克隆表结 ...
- SpEL笔记
SpEL使用示例 <bean id="chineseA" class="com.xxx.bean.Chinese" scope="prototy ...
- OpenMP 中的线程任务调度
OpenMP中任务调度主要针对并行的for循环,当循环中每次迭代的计算量不相等时,如果简单地给各个线程分配相同次数的迭代,则可能会造成各个线程计算负载的不平衡,影响程序的整体性能. 如下面的代码中,如 ...
- go语言基础之defer和匿名函数结合使用
1.匿名函数结合使用 示例1: package main //必须 import "fmt" func main() { a := 10 b := 20 defer func() ...