PIC32系列-输入捕捉ICAP

1、PIC32参考资源

2、输入捕捉简介

3、状态和寄存器

4、使用Harmony工具生成输入捕捉代码

5、实际代码分析

6、实验验证


1、PIC32参考资源

PIC32系列参考手册 中文版  链接地址:PIC32系列参考手册 第15章 输入捕获模块

2、输入捕捉简介

输入捕捉模块用于在输入引脚上发生事件时,捕捉来自两个可选时基之一的定时器值。输入捕捉功能在需要进行频率(时间周期)和脉冲测量的应用中很有用。

输入捕捉模块有多种工作模式,可通过 ICxCON 寄存器进行选择。

• 在 ICx 引脚输入信号的每个下降沿捕捉定时器值

• 在 ICx 引脚输入信号的每个上升沿捕捉定时器值

• 在 ICx 引脚输入信号的每 4 个上升沿捕捉一次定时器值

• 在 ICx 引脚输入信号的每 16 个上升沿捕捉一次定时器值

• 在 ICx 引脚输入信号的每个上升沿和下降沿捕捉定时器值

• 先在指定边沿,之后在每个边沿捕捉定时器值

输入捕捉模块都具有以下特殊功能寄存器

• ICxCON:输入捕捉控制寄存器

• ICxBUF:输入捕捉缓冲寄存器

还具有以下用于中断控制的相关位

• 中断允许控制位 (ICxIE)

• 中断标志状态位 (ICxIF)

• 中断优先级控制位 (ICxIP)

• 中断子优先级控制位 (ICxIS)

3、状态和寄存器

寄存器汇总

ICXCON:输入捕捉X控制寄存器

bit 15 ON:输入捕捉模块使能位

1 = 使能模块

0 = 禁止并复位模块、禁止时钟、禁止中断产生并允许进行 SFR 修改

bit 14 FRZ:调试模式冻结控制位

1 = 处于 Debug (调试)模式时模块停止工作

0 = 处于 Debug (调试)模式时模块不停止工作

注: FRZ 仅在调试异常模式下可写,在正常模式下强制为 0。

bit 13 SIDL:空闲模式停止控制位

1 = 在 CPU Idle (空闲)模式下暂停工作

0 = 在 CPU Idle (空闲)模式下继续工作

bit 12-10 未实现:读为 0

bit 9 ICFEDGE :先捕捉边沿选择位 (仅在模式 6 下,即 ICM<2:0>= 110 时使用)

1 = 先捕捉上升沿

0 = 先捕捉下降沿

bit 8 ICC32:32 位捕捉选择位

1 = 32 位定时器资源捕捉

0 = 16 位定时器资源捕捉

bit 7 ICTMR :定时器选择位 (当 ICxC32 (ICxCON<8>)为 1 时,不会影响定时器选择)

0 = Timer3 作为捕捉的计数器源

1 = Timer2 作为捕捉的计数器源

bit 6-5 ICI<1:0>: :中断控制位

11 = 每 4 个捕捉事件中断一次

10 = 每 3 个捕捉事件中断一次

01 = 每 2 个捕捉事件中断一次

00 = 每 1 个捕捉事件中断一次

bit 4 ICOV:输入捕捉溢出状态标志位 (只读)

1 = 发生了输入捕捉溢出

0 = 未发生输入捕捉溢出

bit 3 ICBNE: 输入捕捉缓冲区非空状态位 (只读)

1 = 输入捕捉缓冲区非空;至少可以再读一个捕捉值

0 = 输入捕捉缓冲区为空

bit 2-0 ICM<2:0>:输入捕捉模式选择位

111 = 仅中断模式 (仅在处于 Sleep (休眠)或 Idle (空闲)模式时支持)

110 = 简单捕捉事件模式——每个边沿,先捕捉指定边沿,之后捕捉每个边沿

101 = 预分频捕捉事件模式——每 16 个上升沿

100 = 预分频捕捉事件模式——每 4 个上升沿

011 = 简单捕捉事件模式——每个上升沿

010 = 简单捕捉事件模式——每个下降沿

001 = 边沿检测模式——每个边沿 (上升沿和下降沿)

000 = 捕捉禁止模式

ICXBUF:输入捕捉 X 缓冲寄存器

bit 31-0 ICxBUF<31:0>: 缓冲寄存器位

当前捕捉的输入定时器计数的值。

定时器选择

每个模块可以选择两个 16 位定时器中的一个或一个 32 位定时器作为时基, 32 位定时器是由两个 16 位定时器组合构成的。

16 位捕捉模式: ICTMR设置为 0 时选择 Timer3 进行捕捉, ICTMR设置为1时选择 Timer2 进行捕捉,

32 位捕捉模式: ICC32位1,Timer2 提供低 16 位, Timer3 提供高 16 位

输入捕捉使能

将 ON 位(ICxCON<15>)置 1 可以使能输入捕捉模块。当该位清零时,模块会复位。将模块复位具有以下影响:

• 清零溢出条件标志

• 将 FIFO 复位为空状态

• 复位事件计数 (用于中断产生)

• 复位预分频器计数

无论 ON 位 (ICxCON<15>)状态如何,都允许读写寄存器。

输入捕捉事件模式 ICM<2:0>

• 简单捕捉事件模式:

- 在 ICx 引脚输入信号的每个下降沿捕捉定时器值

- 在 ICx 引脚输入信号的每个上升沿捕捉定时器值

- 在 ICx 引脚输入信号的每个上升沿和下降沿捕捉定时器值,从指定边沿开始捕捉

• 预分频捕捉事件模式:

- 在 ICx 引脚输入信号的每 4 个上升沿捕捉一次定时器值

- 在 ICx 引脚输入信号的每 16 个上升沿捕捉一次定时器值

• 边沿检测模式

• 仅中断模式

节能模式下的操作

休眠模式下的输入捕捉操作

当器件进入 Sleep (休眠)模式时,外设时钟被禁止。在 Sleep (休眠)模式下,输入捕捉模块只能用作外部中断源。该模式可以通过设置 ICM<2:0> 控制位(ICxCON<2:0>)= 111 进行使能(对于仅中断模式)。在该模式下,捕捉引脚的上升沿将使器件从休眠状态唤醒。如果允许了相应的模块中断位,并且模块优先级达到要求,将产生中断。

如果输入捕捉模块被配置为除 ICM<2:0> = 111 以外的模式,并且器件进入 Sleep(休眠)模式,则外部引脚的任何上升沿或下降沿都不会产生从休眠模式唤醒条件。

空闲模式下的输入捕捉操作

当器件进入 Idle (空闲)模式时,外设时钟源保持工作,但 CPU 停止执行代码。空闲模式停止控制位 SIDL (ICxCON<13>)决定模块在 Idle (空闲)模式下是停止还是继续工作。

器件从休眠或空闲模式唤醒

在使用仅中断模式时,当器件处于 Sleep (休眠)或 Idle (空闲)模式时,输入捕捉事件可将器件唤醒或产生中断 (如果允许)。

4、使用Harmony工具生成输入捕捉代码

1、在Available Components中将ICAP1组件添加到右侧的Project Graph中;

2、ICAP1组件初始化配置如下

3、添加定时器模块

4、ICAP1模块配置

5、定时器模块配置

6、生成的代码与原始代码存在差异,需进行确认;

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

1、系统初始化完成后添加ICAP以及定时器启动函数;

2、添加应用层函数;

8、编译运行将代码烧录到开发板中;点击编译按钮,编译提示BUILD SUCCESSFUL,点击烧录,提示Programming/Verify complete,通过串口观察捕捉数据。

ICAP配置说明

Select Input Capture Mode:输入捕捉模式选择,可选为如下模式

Input Capture module is disabled 捕捉禁止模式

Edge Detect mode every edge(rising and falling)边沿检测模式,每个边沿

Simple Capture Event mode every falling edge简单捕捉模式,每个下降沿

Simple Capture Event mode every rising edge简单捕捉模式,每个上升沿

Prescaled Capture Event mode every fourth rising edge预分频捕捉事件模式,每4个上升沿;

Prescaled Capture Event mode every sixteenth rising edge预分频捕捉事件模式,每16个上升沿;

Simple Capture Event mode every edge, specified edge first and every edge thereafter简单捕捉事件模式,先捕捉指定边沿,之后捕捉每个边沿

Interrupt-Only mode(only supported while in Sleep mode or Idle mode)仅中断模式,仅在处于Sleep或Idle模式时支持

Select Timer Source:定时器选择,可选为TMR2或TMR3

Select Timer Width:定时器宽度选择,可选为16位或32位定时器

Stop in IDLE:为空闲状态停止

Enable Capture Interrupt:使能捕获中断

Enable Error Interrupt:使能错误中断

5、实际代码分析

plib_icap1.c

//输入捕捉初始化
void ICAP1_Initialize (void)
{/*Setup IC1CON *//*ICM = 1 */ //输入捕捉模式选择 001边沿检测模式,每个边沿/*ICI = 0 */ //中断控制位 00每个捕捉事件中断一次/*ICTMR = 1 */ //定时器选择 1定时器2/*C32 = 0 */ //32位捕捉选择位 0 16位定时器资源捕捉/*FEDGE = 0 */ //先捕捉边沿选择位(仅在模式6下)/*SIDL = false */ //空闲模式停止控制位 0不停止工作IC1CON = 0x81;
}//模块使能
void ICAP1_Enable (void)
{IC1CONSET = _IC1CON_ON_MASK; //输入捕捉模块使能
}//模块禁止
void ICAP1_Disable (void)
{IC1CONCLR = _IC1CON_ON_MASK; //禁止并复位模块
}//读取当前捕捉的输入定时器计数值
uint16_t ICAP1_CaptureBufferRead (void)
{return (uint16_t)IC1BUF; //输入捕捉缓冲寄存器
}//输入捕捉缓冲区非空状态位读取
bool ICAP1_CaptureStatusGet (void)
{bool status = false;status = ((IC1CON >> ICAP_STATUS_BUFNOTEMPTY) & 0x1); //输入捕捉缓冲区非空状态位return status;
}//读取错误状态
bool ICAP1_ErrorStatusGet (void)
{bool status = false;status = ((IC1CON >> ICAP_STATUS_OVERFLOW) & 0x1); //输入捕捉溢出状态标志位return status;
}

定时器代码参考前面章节,不赘述。

6、实验验证

编译运行将代码烧录到开发板中;点击编译按钮,编译提示BUILD SUCCESSFUL,点击烧录,提示Programming/Verify complete,通过串口观察发送输入捕捉数据。

时间:2021.08.20

15、PIC32系列-输入捕捉ICAP相关推荐

  1. 4、PIC32系列 GPIO介绍

    PIC32系列 GPIO介绍 1.PIC32参考资源 2.GPIO寄存器介绍 3.使用寄存器配置IO口输出LED闪烁 4.库函数封装定义 5.库函数 6.实验验证 1.PIC32参考资源 PIC32系 ...

  2. 传苹果开发ChatGPT类的AI产品;iPhone 15 Pro系列或将涨价;PyTorch 2.0 发布 |极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  3. 5、PIC32系列 定时器TMR-16位定时器使用

    PIC32系列 定时器TMR-16位定时器使用 1.PIC32参考资源 2.使用Harmony3配置定时器生成代码 3.工程代码分析 4.16 位同步计数器的初始化步骤 5.实验验证 1.PIC32参 ...

  4. 13、PIC32系列-ADC采样模块

    PIC32系列-ADC采样模块 1.PIC32参考资源 2.10位ADC转换器简介 3.控制寄存器 4.ADC工作原理及配置 5.使用Harmony工具生成ADC工程代码 6.实际代码分析 7.实验验 ...

  5. ChemDraw 15支持哪些输入格式

    当我们想让我们的化学图形应用在试卷编辑.论文撰写.刊物出版等各个方面,这个时候往往都得使用ChemDraw 15.它可以与很多第三方应用灵活.本ChemDraw教程介绍新版ChemDraw Profe ...

  6. Wayland入门15:键盘输入

    上一篇介绍了鼠标的相关操作,本文介绍键盘的相关操作. 使用的是标准的键盘库xkb,官网为:https://www.xkbcommon.org/. 先把上一篇的鼠标操作的部分复制过来. 注册并绑定键盘相 ...

  7. iPhone 15全系列即将登场:英国巴克莱银行预测PRO系列售价或涨100到200美元,换来的是游戏效能提升!

    每年九月,蘋果公司都会推出一年一度的全新iPhone系列,今年也不例外,将会推出iPhone 15全系列.除了新机功能备受关注外,售价也成为焦点之一.有不少消息指出,iPhone 15全系列都会涨价. ...

  8. 题7.15:要求输入一个职工号,用折半查找法查找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。按职工号由小到大顺序排序,姓名顺序也随之调整

    题目 本题是谭浩强<C程序设计课后习题>题7.15. 题目: 写几个函数: 1.输入10个职工的姓名和职工号. 2.按职工号由小到大顺序排序,姓名顺序也随之调整 3.要求输入一个职工号,用 ...

  9. plm软件试用测试报告,ANSYS 15.0系列测试报告——FLUENT Meshing 15.0

    1.仿真平台 HP Z820工作站,Intel Xeon E5-2690 * 2,内存64GB,2TB SATA硬盘.安装ANSYS 15.0 Preview3版本. 2.测试案例 使用FLUENT ...

最新文章

  1. C++ Primer 读书笔记 (1)
  2. linux 自动化交互套件 expect 介绍 shell非交互
  3. 前端工程化概述||模块化相关规范
  4. python爬火车票_python爬取12306火车余票程序(一)
  5. python办公自动化博客_自动化办公 Python 操控 Word
  6. 操作主机 RID matser
  7. safari 音频播放问题
  8. 【转】Unity3D 关于贝赛尔曲线,平滑曲线,平滑路径,动态曲线
  9. html 段落定位,使用HTML :: TreeBuilder在perl中使用段落定位div
  10. 人性化的Ruby计数取值
  11. word2vec的应用场景
  12. f3 fatfree小型php,F3-fatfree小型php框架教程(三)
  13. stata输出相关系数表到word
  14. 进行海外媒体发稿的稿件撰写技巧和方法
  15. synchronizedReentrantLock乐观锁悲观锁(Java线程安全实现)JVM9
  16. Spring/SpringBoot 过滤器修改、获取http 请求request中的参数 和 response返回值,比如修改请求体和响应体的字符编码
  17. CAS 单点登录使用详解
  18. 如何利用无线通讯技术构建数字化工厂
  19. Uncaught TypeError: XXX is not a function问题解决
  20. 如何提高你的沟通能力25个要点

热门文章

  1. CS231n 02 Loss Functions and Optimization
  2. C语言编程>第十三周 ⑧ 已知学生的记录由学号和学习成绩组成,M名学生的数据已存入stu结构体数组中。请编写函数fun,该函数的功能是:
  3. 如何解决Beyond Compare中文乱码问题
  4. 程序员求职面试三部曲之一:选择合适的工作单位(转)
  5. AUTOCAD安装未完成,某些产品无法安装
  6. 冬天来了,春天还远吗
  7. 中南大学自动化学院控制博士申请经验贴
  8. 武汉电博会看点 daydao电商云ERP亮相
  9. Dockers 安装
  10. dockers基础命令