DSP捕获输入简单笔记

之前使用stm32的大概原理是:

 输入引脚输入一个脉冲,捕获1开始极性捕获,捕获的是从启动捕获功能开始计数,捕获的是当前的计数值;

例如一个脉冲,捕获1捕获上升沿,捕获2捕获下降沿;而两个捕获计数值的差就是高电平的计数值;

计数值,又涉及到时钟,分频等;一个捕获时钟*计数值等于电平时间;

如下是预分频结构图/预定标

这个预定标是什么东西,2分频就是两个极性化成一个极性。第一个极性有效;4分频也是如此

捕获大概框图

GPIO复用,ECAP模块,PIE组中断

可以选择是捕获或者APWM模式

现在是CAP模式

详细的捕获框图

cap引脚进来后,是 分频/预定标,极性选择,捕获计数器和相位寄存器控制(而且有时钟同步),捕获单次/连续控制,PIE组中断;

连续/单次控制

捕获事件的时候,受到单次/连续事件 停止值控制;

这个中的计数器,是可以选择连续用捕获1到4的捕获,4次捕获。并且可以设置是否重置计数值;

中断

ECFLG 标记         (后面是这个图没有的) 和PIE中断标记 和   ECAp一个通用的中断INT 只要有事件这个中断标记必有,在寄存器说明有;

所以中断里面需要清除三个标志;

本次是使用单次模式下的 连续1234捕获。在第四次捕获完成之后,进入中断;

程序

/*
 * cap.c
 *
 *  Created on: 2023年12月16日
 *      Author: My PC
 */
#include"cap.h"

void cap_init()
{
	EALLOW;
	SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;//gpio时钟
	SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1;//cap5时钟
	EDIS;

	EALLOW;
	GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 1;//复用1
	GpioCtrlRegs.GPBDIR.bit.GPIO48 = 0;//输入
	GpioCtrlRegs.GPBPUD.bit.GPIO48 = 0;//下拉
	GpioCtrlRegs.GPBQSEL2.bit.GPIO48 = 0;//与系统时钟同步
	EDIS;

	EALLOW;
	ECap5Regs.ECEINT.all = 0;//禁止全部中断
	ECap5Regs.ECCLR.all = 0xffff;//清除所有中断标记

	ECap5Regs.ECCTL1.bit.CAPLDEN = 0;//禁止向cap捕获装载值
	ECap5Regs.ECCTL2.bit.TSCTRSTOP = 0;//禁止计数

	ECap5Regs.ECCTL1.bit.CAP1POL = 1;//下降沿触发
	ECap5Regs.ECCTL1.bit.CAP2POL = 0;//上升边沿触发
	ECap5Regs.ECCTL1.bit.CAP3POL = 1;
	ECap5Regs.ECCTL1.bit.CAP4POL = 0;

	ECap5Regs.ECCTL1.bit.CTRRST1 = 0;//捕获1后,计数值不复位,首次启动的时候,避免捕获1过大,选择此次复位,赋值为1合适点,反正第一次捕获值没什么意义;
	ECap5Regs.ECCTL1.bit.CTRRST2 = 0;
	ECap5Regs.ECCTL1.bit.CTRRST3 = 0;
	ECap5Regs.ECCTL1.bit.CTRRST4 = 1;//捕获4后,计数值复位

	ECap5Regs.ECCTL2.bit.CAP_APWM = 0;//运行再cap模式下
	ECap5Regs.ECCTL2.bit.CONT_ONESHT = 1;//捕获处于单次模式
	ECap5Regs.ECCTL2.bit.STOP_WRAP = 3;//单次模式下。捕获4完成之后停止 
	ECap5Regs.ECCTL2.bit.SYNCI_EN = 1;//使能内部同步 使得相位装载到计数器
	ECap5Regs.ECCTL2.bit.SYNCO_SEL = 0;// 选择内部同步信号为外部同步信号

	ECap5Regs.ECCTL2.bit.REARM = 1;//单次序列强制 mod计数器复位为0 计数器使能 使能捕获寄存器
	EDIS;

	EALLOW;
	ECap5Regs.ECCTL2.bit.TSCTRSTOP = 1;//计数
	ECap5Regs.ECCTL1.bit.CAPLDEN = 1;//使能向cap捕获装载值
	ECap5Regs.ECEINT.bit.CEVT4 = 1;//使能捕获4中断
	EDIS;
	EALLOW;
	PieCtrlRegs.PIEIER4.bit.INTx5 = 1;//PIE4的第5个中断使能;
	PieVectTable.ECAP5_INT = &ECAP5_INT_REQ;//中断的函数 存中断函数地址的地址
	EDIS;
	IER |= M_INT4;//CAP5中断在 PIE的第四组
	EINT;
	ERTM;
}

Uint32 CAP_num_1=0, CAP_num_2=0, CAP_num_3=0, CAP_num_4=0;

interrupt void ECAP5_INT_REQ()
{

	CAP_num_1 = ECap5Regs.CAP1;
	CAP_num_2 = ECap5Regs.CAP2;
	CAP_num_3 = ECap5Regs.CAP3;
	CAP_num_4 = ECap5Regs.CAP4;
	ECap5Regs.ECCLR.bit.CEVT4 = 1;
	ECap5Regs.ECCLR.bit.INT = 1;//因为每个中断,这个INT标记都会设置1.所以要同时清除
	ECap5Regs.ECCTL2.bit.REARM = 1;//下一次还是强制为单次序列
	PieCtrlRegs.PIEACK.bit.ACK4=1;//PIE组4 的应答清除
}

48脚接一个PWM,可以仿真看到4个捕获值

主程序

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
#include "led1.h"
#include "key.h"
#include "epwm.h"
#include "exti.h"
#include "time0.h"
#include "adc.h"
#include "cap.h"
int main()
{
    float temp = 0;
    Uint16 adc_num,i=0;
    InitSysCtrl();

    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();

    led_init();
    time0_init(2000);
    epwm_init(1000);
    EPWM6_set_compara(1000, 500);//150M,不分频的PWM
    cap_init();
    while (1)
    {

       DELAY_US(200000);
       EPWM6_set_compara(1000, i+=100);
       if(i>1000)
       {
           i=0;
       }


    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/253642.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FPGA引脚分配的问题

今天在做一个FPGA的实验时,在引脚分配时失败了,出现了如下报错: 我当时分配的引脚是PIN_AE19,然而奇怪的是我之前并未分配这个引脚,我使用的开发工具是Quartus II 9.1 Web Edition,算个老版本了。 有的网站…

从 0 开始实现一个 SpringBoot + Vue 项目

从 0 开始实现一个 SpringBoot Vue 项目 从 0 开始实现一个 SpringBoot Vue 项目软件和工具创建 SpringBoot 后端项目创建 MySQL 数据库配置文件实现增删改查接口Model 层mapper 层service 层controller 层测试 从 0 开始实现一个 SpringBoot Vue 项目 软件和工具 后端开发…

海思平台isp之raw图回灌调试

文章目录 一、搭建环境二、配置参数三、回灌raw图isp调试中,经常会遇到一些特定场景的效果需要优化,但由于某些原因和成本考虑,开发人员无法亲临现场,这个时候采集场景raw图回灌到板端调试,就显得尤为方便了。 一、搭建环境 (1)建立板端与PQTool连接 板端进入SS928V100…

✺ch3——数学基础

目录 3D坐标系和点矩阵单位矩阵转置矩阵逆矩阵逆转置矩阵矩阵的运算矩阵加法()矩阵乘法() 常用的变换矩阵平移矩阵缩放矩阵旋转矩阵透视矩阵正射投影矩阵LookAt矩阵 向量加法和减法点积叉积 局部空间和世界空间——模型矩阵M视觉空间和合成相机——模型-视图矩阵MV用GLSL函数构…

【JVM从入门到实战】(八)垃圾回收(1)

内存泄漏:指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出 什么是垃圾回收 Java中为了简化对象的释放,引入了自动的垃圾回收(Garbage Collection简称GC)机制。通过垃 圾回收器来对不再使用的…

6.鸿蒙app_hap_DevEco如何真机调试模式_app安装在手机中

真机调试 手机》设置》关于手机》HarmonyOS版本》软件版本,连续单击10次启动开发者模式 然后:设置》系统和更新》开发人员选项》打开USB调试功能。 电脑USB连接手机,手机USB连接类型,传文件(不要选择仅充电&#xf…

【CANN训练营】CANN算子开发进阶笔记

Ascend C Tilling计算 Tilling基本概念介绍 大多数情况下,Local Memory的存储,无法完全容纳算子的输入与输出的所有数据,需要每次搬运一部分输入数柜进行计算然后搬出,再敲运下一部分输入数据进行计算,直到得到完愁的…

阿里云对象存储OSS外网流出流量异常增多导致费用上升的解决方法

本文介绍在使用阿里云的对象存储 OSS服务过程中,外网流量消耗异常增多并导致异常的费用支出这一情况的问题发现、问题定位与几种不同的问题解决方法。 细细数来,写博客已经有近3的历史了,这成为了一项已经陪伴我大半人生的工作;也…

设计模式 五种不同的单例模式 懒汉式 饿汉式 枚举单例 容器化单例(Spring单例源码分析) 线程单例

单例模式 第一种 饿汉式 优点:执行效率高,性能高,没有任何的锁 缺点:某些情况下,可能会造成内存浪费 /*** author LionLi*/ public class HungrySingleton {private static final HungrySingleton hungrySingleton n…

05 动态渲染数据

概述 实际上动态渲染数据&#xff0c;在《使用CDN开发Vue3项目》中就已经学习过了&#xff0c;核心代码如下&#xff1a; <div id"vue-app">{{text}}</div> <script src"https://cdn.staticfile.org/vue/3.0.5/vue.global.js"></sc…

设计模式详解---单例模式

1. 设计模式详解 单例模式是一种创建对象的设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供全局访问点以获取该实例。 在单例模式中&#xff0c;类负责创建自己的唯一实例&#xff0c;并确保任何其他对象只能访问该实例。这对于需要共享状态或资源的情况非常有…

[楚慧杯 2023] web

文章目录 eaaevalupload_shell eaaeval 打开题目&#xff0c;源码给了用户密码 登陆后啥也没有&#xff0c;扫一下发现源码泄露www.zip <?php class Flag{public $a;public $b;public function __construct(){$this->a admin;$this->b admin;}public function _…

医疗智能化革命:AI技术引领医疗领域的创新进程

一、“AI”医疗的崛起 随着人工智能&#xff08;AI&#xff09;技术的崛起&#xff0c;"AI"医疗正在以惊人的速度改变着医疗行业的面貌。AI作为一种强大的工具&#xff0c;正在为医疗领域带来前所未有的创新和突破。它不仅在医学影像诊断、病理学分析和基因组学研究等…

京东体育用品销售数据分析与可视化系统

京东体育用品销售数据分析与可视化系统 前言数据爬取模块1. 数据爬取2. 数据处理3. 数据存储 数据可视化模块1. 数据查看2. 店铺商品数量排行3. 整体好评率4. 不同品牌市场占比5. 品牌差评率排名6. 品牌价格排名7. 品牌评论数量分布 创新点 前言 在体育用品行业&#xff0c;了…

ElasticSearch学习篇8_Lucene之数据存储(Stored Field、DocValue、BKD Tree)

前言 Lucene全文检索主要分为索引、搜索两个过程&#xff0c;对于索引过程就是将文档磁盘存储然后按照指定格式构建索引文件&#xff0c;其中涉及数据存储一些压缩、数据结构设计还是很巧妙的&#xff0c;下面主要记录学习过程中的StoredField、DocValue以及磁盘BKD Tree的一些…

实现el-table操作列点击弹出echarts

代码&#xff1a; <el-table-column :width"90"><template #default"scope"><el-popover placement"left-end" width"550" trigger"click"><div><div style"font-size: 18px; margin-left…

Harmony4.0鸿蒙应用开发初识+实践小案例

Harmony4.0鸿蒙应用开发初识实践小案例 一、华为的“18N”产品战略 在华为HarmonyOS及全场景新品发布会上&#xff0c;华为介绍了华为“18N”三圈层全场景智慧生态解决方案&#xff0c;从而打造面向未来的全新生态&#xff0c;其中&#xff0c;1指的是手机&#xff0c;8指的是…

Python Django 连接 PostgreSQL 操作实例

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python Django 连接 PostgreSQL 操作实例&#xff0c;全文3500字&#xff0c;阅读大约10分钟 在Web开发中&#xff0c;使用Django连接到PostgreSQL数据库是一种常见的选择。…

云计算:Vmware 安装 FreeNAS

目录 一、实验 1.Vmware 安装 FreeNAS 2.配置Web界面 二、问题 1.iSCSI如何限定名称 2.LUN和LVM的区别 一、实验 1.Vmware 安装 FreeNAS &#xff08;1&#xff09;环境准备 VMware Workstation 17 FreeNAS相关安装部署镜像: 官网地址&#xff1a; https://download…

磁力计LIS2MDL开发(3)----九轴姿态解算

磁力计LIS2MDL开发.3--九轴姿态解算 概述视频教学样品申请完整代码下载使用硬件欧拉角万向节死锁四元数法姿态解算双环PI控制器偏航角陀螺仪解析代码 概述 LIS2MDL 包含三轴磁力计。 lsm6ds3trc包含三轴陀螺仪与三轴加速度计。 姿态有多种数学表示方式&#xff0c;常见的是四元…
最新文章