【dsPIC33】振荡器与定时器

前言

上节是做了dsPIC的准备工作,熟悉了开发环境与一些基本配置位的操作,项目种选用dsPIC芯片目的还是用来做电机控制的,对于电机控制来说,PWM,ADC,定时器是非常重要的功能,本节就开始介绍dsPIC的时钟配置,并使用定时器来验证。

首先,接入电路中的外部晶振是8M晶振,因此根据手册,可以选择主振荡器Posc:

根据上表,选择带PLL的主振荡器,由于使用的是XT晶振,因此使用XT模式,之后,修改配置位:

生成代码为:

// FOSC
#pragma config POSCMD = XT              // 主振荡器模式选择位(XT晶体振荡器模式)
#pragma config OSCIOFNC = OFF           // OSC2 Pin Function bit (OSC2 is clock output)
#pragma config IOL1WAY = ON             // Peripheral pin select configuration (Allow only one reconfiguration)
#pragma config FCKSM = CSDCMD           // Clock Switching Mode bits (Both Clock switching and Fail-safe Clock Monitor are disabled)
// FOSCSEL
#pragma config FNOSC = PRIPLL           // 振荡器源选择(带PLL<a class="decoration-color" href="https://buy.icxbk.com/index.php?ctl=Product&met=lists&category_id=1047" target="_blank">模块</a>的主振荡器(XT + PLL,HS + PLL,EC + PLL))
#pragma config PWMLOCK = ON            // PWM Lock Enable bit (Certain PWM registers may only be written after key sequence)
#pragma config IESO = ON                // Two-speed Oscillator Start-up Enable bit (Start up device with FRC, then switch to user-selected oscillator source)

之后要做的便是时钟计算,根据我们的配置来计算出我们现在的各个频率是多少。dsPIC33 PLL框图如下:

公式中:
N1对应 CLKDIV寄存器的PLLPRE位
N2对应 PLLFBD寄存器的PLLDIV位
M对应 CLKDIV的PLLPOST位

此时我们需要将Fosc锁定在120M,此时系统的工作频率即为60M,由于晶振使用的是8M晶振,因此,取N1 = 2,N2 = 2,M = 60

按照手册的说明:系统的工作频率为Fosc频率的一半。
代码如下:

//产生Fosc = 120MHz
CLKDIVbits.PLLPRE = 0;          //N1 = 2  
PLLFBDbits.PLLDIV = 58;         //M = 60  
CLKDIVbits.PLLPOST = 0;         //N2 = 2    8 * (60 / (2 + 2)) = 120M
while (OSCCONbits.COSC!= 0b011)
while (OSCCONbits.LOCK!= 1) {};//PLL 处于锁定状态

配置完成,那么接下来就是验证我们配置的60M频率对不对,就使用一个定时器来验证好了。

关于dsPIC33的定时器,是把他们分成了三类,ABC三类定时器,如果要使用32位定时器,可以使用B类与C类定时器组合构成23位定时器,此时B类定时器控制寄存器中的T32控制位(TxCON<3>)必须置1,对于32位的工作,C类定时器保存最高有效字(即高16位),而B类定时器保存最低有效字(即低16位)。具体的32位定时器的使用,手册中直接给出了例子,因此就不再赘述。现在使用一个普通定时器来验证时钟就好,我选用的是timer3,C类定时器。

现在使用timer3来构造一个4ms的定时器,然后在中断里翻转一个IO口的电平状态来验证。

定时时间为4ms,因此设置分频率为1:8
T3CONbits.TCKPS = 0x01;//输入时钟预分频比1:8

周期寄存器的值为30000,(主频为60M)
PR3 = 30000;

注意:timer3定时器的优先级寄存器为 IPC2 timer1的优先级寄存器为 IPC0

程序如下:

void Tim3_Init()
{
    T3CONbits.TON = 0;//禁止16位Timer3
    T3CONbits.TCS = 0;//内部时钟Fosc/2  60M
    T3CONbits.TGATE = 0;//门控时间累加位 禁止
    T3CONbits.TCKPS = 0x01;//输入时钟预分频比1:8
    TMR3 = 0; //初始值  相当于CNT
    PR3 = 30000;         //由于是8分频,也就是7.5M频率  因此取30000为定时4ms
    IPC2bits.T3IP = 0x03; // 优先级1  定时器3的中断优先级为 IPC2   定时器1为IPC0
    IFS0bits.T3IF = 0; // Timer3中断标志状态位 清零
    IEC0bits.T3IE = 1; // Timer3中断允许位 允许
    T3CONbits.TON = 1; //启动使能16位Timer3    
}
void __attribute__((__interrupt__, no_auto_psv)) _T3Interrupt(void)
{
    static uint8_t led_flag = 0;
    IFS0bits.T3IF = 0; //清楚中断标志
    led_flag = 1 - led_flag;
    if (led_flag == 0)
    {
        PORTAbits.RA4 = 0;
    }
    else
    {
        PORTAbits.RA4 = 1;
    }
}

实验结果:

时钟正确。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
dsPIC33CH512MP508系列 具有高分辨率PWM和CAN灵活数据速率(CAN FD)的 48/64/80引脚双核16位数字信号控制器 工作条件 • 3V至3.6V, -40°C至+125°C: - 主内核: 180 MHz时最高为90 MIPS - 从内核: 200 MHz时最高为100 MIPS 内核:双核16位dsPIC33CH CPU • 主/从内核工作 • 主内核与从内核的外设独立 • 主内核与从内核具有可配置的共用资源 • 主内核具有256-512 KB的程序闪存(支持ECC) 和32-48K的数据RAM(支持BIST) • 从内核具有72 KB的程序RAM(Program RAM, PRAM)(支持ECC)和16K数据RAM(支持 BIST) • 快速的6周期除法 • 在线更新 • 消息框和FIFO,用于在主内核与从内核之间进行通 信(MSI) • 高效代码型(C和汇编)架构 • 40位宽累加器 • 带双数据取操作的单周期(MAC/MPY) • 单周期混合符号乘法和硬件除法 • 32位乘法支持 • 每个内核具有五组中断现场选择寄存器,用于快速 中断响应 • 零开销循环 时钟管理 • 内部振荡器 • 可编程PLL和振荡器时钟源 • 主内核参考时钟输出 • 从内核参考时钟输出 • 故障保护时钟监视器(Fail-Safe Clock Monitor, FSCM) • 快速唤醒和启动 • 内部备用振荡器 • LPRC振荡器 功耗管理 • 低功耗管理模式(休眠、空闲和打盹) • 集成上电复位和欠压复位 支持精细边沿定位的高分辨率PWM • 最多12个PWM通道: - 主内核有四个通道 - 从内核有八个通道 • 250 ps PWM分辨率 • 应用包括: - 直流/直流转换器 - 交流/直流电源 - 不间断电源(Uninterruptable Power Supply, UPS) - 电机控制: BLDC、 PMSM、 SR和ACIM 定时器/输出比较/输入捕捉 • 两个通用16位定时器: - 主/从内核各一个 • 外设触发信号发生器(Peripheral Trigger Generator, PTG)模块: - 主内核有一个模块 - 从内核可被选择的PTG源中断 - 用于自动化复杂的序列 • 12个SCCP模块: - 主内核有八个模块 - 从内核有四个模块 - 定时器、捕捉/比较和PWM模式 - 16位或32位时基 - 16位或32位捕捉 - 4级深度捕捉缓冲区 - 全异步操作,可在休眠模式下工作
dspic33f系列数字信号控制器(Digital Signal Controller)是一种功能强大的微控制器,适用于数字信号处理和控制应用。dspic33f系列芯片具有高性能、低功耗和丰富的外设功能,可广泛应用于工业自动化、智能家居、医疗设备和汽车电子等领域。 dspic33f系列数字信号控制器的主要特点之一是其高性能处理能力。它采用16位精确计时的CPU,可以在高频率下执行复杂的算法和任务。此外,该系列芯片还配备了丰富的浮点运算单元和高速通信接口,可以满足实时信号处理和通信需求。 此外,dspic33f系列数字信号控制器还具有低功耗的特点。芯片内置了多种低功耗模式,可以有效地降低功耗,延长电池续航时间。这使它特别适用于那些对功耗要求严格的应用场景,如便携式设备和无线传感器网络。 在外设功能方面,dspic33f系列数字信号控制器提供了丰富的选项。它配备了多个模拟输入通道、PWM输出、CAN总线、UART、SPI和I2C等通信接口,以及多个定时器和辅助模块,可提供灵活的接口和功能扩展能力。 最后,dspic33f系列数字信号控制器的PDF手册为用户提供了详尽的技术资料,包括芯片的功能描述、引脚定义、电气特性、时钟配置、外设的详细说明和编程指南等。通过阅读PDF文档,用户可以更好地了解和使用dspic33f系列数字信号控制器,实现各种应用需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值