14、PIC32系列-内核定时器

PIC32系列-内核定时器

1、使用Harmony配置内核定时器

2、实际代码分析

3、实验验证


1、使用Harmony配置内核定时器

1、在Available Components组件中将CORE TIMER添加到Project Graph中;

2、组件添加后,组件初始内容如下;

其中Enable Interrupt Mode是使能中断模式,勾选后会自动生成中断相关代码;

Stop Timer in Debug mode是在空闲模式下的操作,勾选后在空闲模式下停止模块;

Compare period(milliseconds)是比较周期,系统时间频率是4MHz;

Enable Interrupt Mode显示如下

 3、点击Generate Code生成代码;

4、代码生成后需要的操作;

1、系统初始化完成后添加系统延时初始化函数;

2、添加应用层操作函数;

5、编译运行将代码烧录到开发板中;

2、实际代码分析

在plib_coretimer.c文件

static uint32_t compareValue = CORE_TIMER_COMPARE_VALUE;
//内核定时器初始化
void CORETIMER_Initialize()
{
    // Clear Core Timer
    _CP0_SET_COUNT(0);
    _CP0_SET_COMPARE(compareValue);

    // Enable Timer by clearing Disable Count (DC) bit
    _CP0_SET_CAUSE(_CP0_GET_CAUSE() & (~_CP0_CAUSE_DC_MASK));
}

//内核定时器启动
void CORETIMER_Start( void )
{
    // Disable Timer by setting Disable Count (DC) bit
    _CP0_SET_CAUSE(_CP0_GET_CAUSE() | _CP0_CAUSE_DC_MASK);

    // Clear Compare Timer Interrupt Flag
    IFS0CLR=0x1;

    // Clear Core Timer
    _CP0_SET_COUNT(0);

    _CP0_SET_COMPARE(compareValue);

    // Enable Timer by clearing Disable Count (DC) bit
    _CP0_SET_CAUSE(_CP0_GET_CAUSE() & (~_CP0_CAUSE_DC_MASK));

}

//内核定时器停止
void CORETIMER_Stop( void )
{
    // Disable Timer by setting Disable Count (DC) bit
    _CP0_SET_CAUSE(_CP0_GET_CAUSE() | _CP0_CAUSE_DC_MASK);
}

//获取内核定时器频率
uint32_t CORETIMER_FrequencyGet ( void )
{
    return (CORE_TIMER_FREQUENCY);
}

//设置内核定时器频率
void CORETIMER_CompareSet ( uint32_t compare )
{
    compareValue = compare;
    _CP0_SET_COMPARE(compareValue);
}

//获取内核定时器计数值
uint32_t CORETIMER_CounterGet ( void )
{
    uint32_t count;
    count = _CP0_GET_COUNT();
    return count;
}

//
bool CORETIMER_CompareHasExpired( void )
{
    if (IFS0bits.CTIF != 0)
    {
        // Clear Compare Timer Interrupt Flag
        IFS0CLR=0x1;

        return true;
    }

    return false;
}

//内核定时器毫秒延时
void CORETIMER_DelayMs ( uint32_t delay_ms)
{
    uint32_t startCount, endCount;
    /* Calculate the end count for the given delay */
    endCount=(CORE_TIMER_FREQUENCY/1000)*delay_ms;
    startCount=_CP0_GET_COUNT();
    while((_CP0_GET_COUNT()-startCount)<endCount);
}

//内核定时器微秒延时
void CORETIMER_DelayUs ( uint32_t delay_us)
{
    uint32_t startCount, endCount;
    /* Calculate the end count for the given delay */
    endCount=(CORE_TIMER_FREQUENCY/1000000)*delay_us;
    startCount=_CP0_GET_COUNT();
    while((_CP0_GET_COUNT()-startCount)<endCount);
}

需要注意的点:毫秒延时函数以及微秒延时函数采用当前值减去起始值,再与需要计数的值进行比较,数值类型均为32位,因此长时间计数可能存在溢出的情况,该点需要注意。

3、实验验证

1、使用内核定时器毫秒延时函数,LED灯延时500ms翻转,编译完成后烧录到开发版中,LED灯闪烁。

时间:2021.08.18

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
书名:PIC单片机实用教程.基础篇 出版社:北京航空航天大学出版社 作者:李学海 出版日期:2002-02-01 简介: 本书以介绍PIC16F877型号单片机为主,并适当兼顾PIC系列,共分10章,内容包括:基本概念;PIC16F87X硬件概况;指令系统;汇编程序设计;集成开发环境;在线调试工具;I/O端口;定时器;中断;安全措施和降耗设计。突出特点:通俗易懂、可读性强、系统全面、学练结合、学用并重、实例丰富、习题齐全。 本书作为Microchip公司“大学计划”选择用书,可广泛适用于初步具备电子技术基础和计算机知识基础的学生、教师单片机爱好者、电子制作爱好者、电器维修人员、电子产品开发设计者、工程技术人员阅读。 本教程全书共分2篇,即基础篇和提高篇,分2册出版,以适应不同课时和不同专业的需要,也为教师和读者增加了一种可选方案。 目录: 第1章 单片机的基本概念 1.1 学习单片机有什么必要性 1.2 单片机究竟是什么 1.3 单片机有哪些应用 1.4 单片机有哪些特点 1.5 单片机的发展状况 1.6 PIC系列单片机有哪些优越之处 1.7 可在线调试和在线编程的PIC16F87X 第2章 PIC16F87X硬件系统概况 2.1 PIC16F87X封装形式和引脚功能 2.2 PIC16F87X内部结构方框图简介 2.3 程序存储器和堆栈 2.4 RAM数据存储器(文件寄存器) 2.5 复位功能简介 2.6 系统时钟简介 第3章 指令系统 3.1 指令时序 3.2 指令系统概览 3.3 面向字节操作类指令 3.4 面向位操作类指令 3.5 面向常数操作和控制操作类指令 3.6 寻址方式 3.7 数据传递关系 3.8 “内核-寄存器-外围模块”相互关系 第4章 PIC汇编语言程序设计基础 4.1 MPASM汇编器简介 4.2 汇编语言的语句格式 4.3 常用伪指令 4.4 程序格式和程序流程图 4.5 RAM数据存储器的体选寻址问题 4.6 顺序程序结构 4.7 分支程序结构 4.8 循环程序结构 4.9 子程序结构 4.10 程序跨页跳转和跨页调用问题 4.11 延时程序设计 4.12 查表程序设计 第5章 MPLAB集成开发环境软件包 5.1 MPLAB的组成 5.2 MPLAB的安装 5.3 MPLAB的简单应用 第6章 MPLAB-ICD在线调试工具套件及其应用 6.1 概述 6.2 MPLAB- ICD工具套件的构成 6.3 MPLAB-ICD在线调试工具的安装 6.4 MPLAB-ICD在线调试工具的启用 6.5 用MPLAB-ICD统调用户程序和用户电路 第7章 输入/输出端口的基本功能 7.1 与输入/输出端口相关的寄存器 7.2 基本输入/输出端口的内部结构和工作原理 7.3 输入/输出瑞口基本功能的应用举例 第8章 定时器/计数器TMRO 8.1 定时器/计数器模块的基本用途 8.2 PIC系列单片机中定时器/计数器TMRO模块的特性 8.3 与定时器/计数器TMRO模块相关的寄存器 8.4 定时器/计数器TMRO模块的电路结构和工作原理 8.5 定时器/计数器TMRO模块的应用举例 第9章 中断系统 9.1 中断的基本概念 9.2 PIC16F87X的中断源 9.3 PIC16F87X的中断硬件逻辑 9.4 中断相关的寄存器 9.5 中断的处理 …… 第10章 安全生产、可靠运行措施和降耗设计
28/40/44 引脚低功耗高性能单片机 说明 PIC18F27/47Q10 单片机具有模拟外设、独立于内核的外设和通信外设,广泛适用于各种通用和低功耗应用。该系列 28/40/44 引脚器件配有带计算功能的 10 位 ADC(ADC2),可自动采用电容分压器(Capacitive Voltage Divider, CVD)技术实现高级触摸传感、平均值处理、滤波、过采样和自动阈值比较。此外,该系列器件还提供了一组独立于 内核的外设,例如互补波形发生器(Complementary Waveform Generator, CWG)、窗口看门狗定时器(Windowed Watchdog Timer, WWDT)、循环冗余校验(Cyclic Redundancy Check, CRC) /存储器扫描、过零检测(ZeroCross Detect, ZCD)、可配置逻辑单元(onfigurable Logic Cell, CLC)和外设引脚选择(Peripheral Pin Select, PPS),有助于提高设计灵活性和降低系统成本。 内核特性 • 优化的 C 编译器 RISC 架构 • 工作速度: – DC 至 64 MHz 时钟输入(整个 VDD 范围内) – 最小指令周期为 62.5 ns • 可编程 2 级中断优先级 • 31 级深硬件堆栈 • 3 个带有硬件限制定时器(Hardware Limit Timer, HLT)的 8 位定时器(TMR2/4/6) • 4 个 16 位定时器(TMR0/1/3/5) • 低电流上电复位(Power-on Reset, POR) • 上电延时定时器(Power-up Timer, PWRT) • 欠压复位(Brown-Out Reset, BOR) • 低功耗 BOR(Low-Power BOR, LPBOR)选项 • 窗口看门狗定时器(WWDT): – 在看门狗清零事件间隔时间过长或过短时发生看门狗复位 – 可变预分频比选择 – 可变窗口大小选择 – 可在硬件或软件中配置所有触发源

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huangtop

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值