DSP28335模块配置模板系列——GPIO配置模板
在自己的电脑上构建出一套模块配置模板,可以大幅节省DSP程序开发时间,从而达到事半功倍的效果。对于初学者,掌握了模块配置,也就能实现大部分的单片机功能。
在DSP28335模块配置模板系列,不仅会给出GPIO、ADC、EQEP、EPWM、定时器、中断、DAC、SPI、SPC、I2C等模块的配置模板,同时也会深入底层原理,解释为何要这样配置。
后续还会给出DSP2837xd的模块配置模板系列。
在构建各模块配置的模板之前,先给出主函数的通用模板:
void main()
{InitSysCtrl(); InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();
}
其中InitSysCtrl()是TI官方提供的源文件DSP2833x_SysCtrl.c中定义的一个初始化系统控制寄存器的函数,主要功能有三个,分别是:
1.关闭看门狗
DisableDog();
看门狗(Watchdog Timer,WDT)是一种用于监控系统是否正常运行的硬件定时器,当系统出现异常情况(如死循环、挂起等)而无法在规定时间内复位看门狗定时器时,看门狗定时器会溢出,并自动复位系统,让系统恢复到正常运行状态。由于系统初始化的过程包括时钟配置、外设时钟初始化等多个步骤,这些步骤需要较长的时间才能完成,而看门狗定时器的溢出时间是固定的。如果初始化时间超过了看门狗定时器的溢出时间,看门狗会触发系统复位从而影响系统初始化的过程。因此,在系统初始化开始之前,需要关闭看门狗定时器。
2.初始化PLL寄存器
InitPll(DSP28_PLLCR,DSP28_DIVSEL);
PLL是DSP的相位锁定环,它能实现同步输出信号与输出信号的相位和频率的功能,DSP28335芯片使用外部30Mhz晶振,外部晶振信号通过芯片内部的振荡器(OSC)产生一个频率为30Mhz的基准时钟信号,该基准信号输入到PLL模块中,使得PLL输出的信号与基准信号在相位上保持锁定,再通过PLL模块的倍频操作,将基准时钟信号的频率提高到所需的工作频率,然后经过必要的分频,调整到合适的CPU工作时钟频率,最终将时钟信号送入CPU中使用。 InitPll函数的两个输入分别是倍频系数和分频系数,这里输入的是两个宏定义变量,倍频系数DSP28_PLLCR为10,分频系数DSP28_DIVSEL为2,所以CPU工作频率为30Mhz*10/2=150Mhz。
这里存在一个有趣的问题:可不可以将倍频系数设置为10,分频系数设置为1,这样CPU工作频率不就达到300Mhz了吗? 答案是,虽然PLL可以进行倍频操作,但芯片的最大工作频率是有限制的,DSP28335的最大工作频率通常为150Mhz,DSP2837xd的最大工作频率通常为200Mhz。
3.初始化外设时钟并对需要使用的外设时钟进行使能
InitPeripheralClocks();
不同的外设所需要的时钟频率是不一样的,通过这个函数,可以设置各种外设的时钟频率,以及使能相应的外设时钟,同时禁用不需要的外设时钟以减少能耗。
其中InitPieCtrl()是TI官方提供的源文件DSP2833x_PieCtrl.c中定义的一个初始化PIE控制寄存器的函数,主要功能有:禁用PIE模块;清除所有PIE中断使能寄存器(PIEIER);清除所有PIE中断标志寄存器(PIEIFR),目的是确保在后续的操作中,系统处于一个已知的、安全的中断状态。
IER寄存器用于控制哪些中断请求能够被CPU响应,将其设置为0表示禁用所有中断,使得CPU不会响应任何中断请求,确保在初始化过程中不会发生中断。
IFR寄存器用于标识哪些中断事件已经发生,将其设置为0表示清除所有中断标志,确保系统在初始化后没有残留的中断事件。
其中InitPieVectTable()是TI官方提供的源文件DSP2833x_PieVect.c中定义的一个初始化PIE向量表的函数,主要功能是将初始的PIE向量表内容复制到实际使用的PIE向量表中,并启用PIE向量表,以确保系统能够正确响应中断请求。
在主函数中初始化系统时钟、初始化外设时钟、初始化PIE使能和标志寄存器以及初始化PIE向量表后,接下来就可以开始进行GPIO模块的配置:
1.开启GPIO时钟
SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;
2.设置GPIO复用功能
GPIO管脚有多个功能,例如GPIO50有三个功能分别是:通用I/O、EQEP1A(I)、XD(29),如果需要将GPIO50管脚设置为通用I/O功能,则需要对相应的寄存器进行设置:
GpioCtrlRegs.GPCMUX1.bit.GPIO50=0;
3.设置GPIO方向(输入还是输出)
设置GPIO管脚为输出管脚
GpioCtrlRegs.GPCDIR.bit.GPIO50=1;//设置GPIO方向为输出
4.设置GPIO上拉电阻
当GPIO引脚配置为输入且未连接到明确的高或低电平信号时,该引脚会处于浮动状态,容易受到环境噪声影响,导致不稳定的信号,上拉电阻将引脚拉到高电平,防止其浮动,确保引脚处于稳定的已知状态
GpioCtrlRegs.GPCPUD.bit.GPIO50=0;//使能GPIO上拉电阻
完整的GPIO模块配置的函数为:
void GPIO_Init()
{EALLOW;SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;GpioCtrlRegs.GPCMUX1.bit.GPIO50=0;GpioCtrlRegs.GPCDIR.bit.GPIO50=1;GpioCtrlRegs.GPCPUD.bit.GPIO50=0;EDIS;
}
此外,可以通过对GPIO数据寄存器的有关位进行设置,分别让GPIO管脚实现高电平、低电平、翻转电平的输出:
GpioDataRegs.GPCSET.bit.GPIO50=1;
GpioDataRegs.GPCCLEAR.bit.GPIO50=1;
GpioDataRegs.GPCTOGGLE.bit.GPIO50=1;
相关文章:
DSP28335模块配置模板系列——GPIO配置模板
在自己的电脑上构建出一套模块配置模板,可以大幅节省DSP程序开发时间,从而达到事半功倍的效果。对于初学者,掌握了模块配置,也就能实现大部分的单片机功能。 在DSP28335模块配置模板系列,不仅会给出GPIO、ADC、EQEP、E…...
【SringBoot项目中MyBatis-Plus多数据源应用实践】
文章目录 前言 一、Mybatis-Plus是什么? 二、多数据源是什么? 三、使用步骤 1. 新建一个SpringBoot项目 2. 引入必要的MyBatis架包 3. 新建两个数据库及两张表 3.3.1 新建数据库:DB_A,并创建一张数据表alarm_kind,以及…...

Android 图表开发开源库 MPAndroidChart 使用总结
1. 引言 电视项目中需要一个折线图表示节电数据变化情况,类比 H5 来说,Android 中也应该有比较成熟的控件,经过调研后,发现 MPAndroidChart 功能比较强大,网上也有人说可能是目前 Android 开发最好用的一个三方库了&a…...
手机号脱敏
手机号脱敏 // 手机号脱敏subTelephone(telphone) {let result telphone.substr(0, 4) **** telphone.substr(8);return result;},...

java基础篇(1)
JDK是什么?有哪些内容组成?JDK是Java开发工具包 JVM虚拟机: Java程序运行的地方 核心类库: Java已经写好的东西,我们可以直接用开发工具: javac、java、jdb、jhat.. JRE是什么?有哪些内容组成? JRE是Java运行环境 JVM、核心类库、运行工具 JDK,JRE&…...

2022年全国职业院校技能大赛高职组“信息安全管理与评估”赛项第三阶段任务书
第三阶段竞赛项目试题 本文件为信息安全管理与评估项目竞赛-第三阶段试题。根据信息安全管理与评估项目技术文件要求,第三阶段为夺旗挑战CTF(网络安全渗透)。 本次比赛时间为180分钟。 介绍 夺旗挑战赛(CTF)的目标…...

微信小程序蓝牙连接部分Android14调用wx.setBLEMTU协商低功耗最大传输单元失败解决方案(部分安卓14设置超过23就会报错)
1.解决方案的核心内容:第一次设置失败不要管,在complate函数里面继续往下连接,然后设置一个定时器每1秒钟在重新设置一次,肯定会成功的!!!!!!!&am…...
PDF格式分析(八十二)——电影注释(movie)
电影注释(PDF1.2及其以上版本),该注释包含图像和声音,声音通过扬声器进行播放,图像则显示在计算机屏幕上,如同一个视频播放器一样。当该类型注释被激活时,视频将被播放。 下表将显示电影注释的字典条目: 条…...
Opentracing 代码Demo
背景 OpenTracing 是一个提供标准化分布式追踪功能的API和工具。它的主要作用包括: 跨系统边界追踪请求流程:OpenTracing 允许开发者跟踪一个请求从开始到结束在整个分布式系统中的所有经过的点(包括异构系统),帮助理解系统中的请求流程和服务间的相互依赖。 性能分析和瓶…...
笔记93:关于 C++ 中的 Eigen 库
注意1:Eigen 是一个基于 C 模板的线性代数库,以支持在 C 中进行矩阵运算; 注意2:要在 C 中使用 Eigen,需要在在程序开始前要包含所需头文件路径; #include <Eigen> a a 基础用法汇总 定义向量 E…...

【微服务】部署mysql集群,主从复制,读写分离
两台服务器做如下操作 1.安装mysqldocker pull mysql:5.72.启动以及数据挂载 mkdir /root/mysql/data /root/mysql/log /root/mysql/conf touch my.conf //mysql的配置文件docker run --name mysql \ -e MYSQL_ROOT_PASSWORD123456 \ -v /root/mysql/data:/var/lib/mysql \ -v…...

【Java】设计一个支持敏感数据存储和传输安全的加解密平台
一、问题解析 在一个应用系统运行过程中,需要记录、传输很多数据,这些数据有的是非常敏感的,比如用户姓名、手机号码、密码、甚至信用卡号等等。这些数据如果直接存储在数据库,记录在日志中,或者在公网上传输的话&…...
iOS AVFoundation 音视频源码分享
引言 在现代移动开发中,音视频处理是一个不可忽视的重要领域。iOS 提供了强大的 AVFoundation 框架,使开发者能够轻松实现音视频录制、播放、编辑等功能。无论是创建高效的视频播放器,还是实现复杂的音频处理,AVFoundation 都能提…...
Ubuntu开发入门之“制作Ubuntu rootfs根文件系统镜像“
Ubuntu开发入门之“制作Ubuntu rootfs根文件系统镜像” 问题描述解决方法1.首先从官网下载最基础的ubuntu base核心文件,ubuntu core.2.接下来就是制作一个基础功能的根文件系统3.修改可用源4.接下来就是挂载根文件系统,进行模拟安装应用5.根文件系统安装常用的工具和配置用户…...

基于FPGA的SystemVerilog练习
文章目录 一、认识SystemVerilogSystemVerilog的语言特性SystemVerilog的应用领域SystemVerilog的优势SystemVerilog的未来发展方向 二、流水灯代码流水灯部分testbench仿真文件 三、用systemVerilog实现超声波测距计时器测距部分led部分数码管部分采样部分顶层文件引脚绑定效果…...

【数据结构】详解堆的基本结构及其实现
文章目录 前言1.堆的相关概念1.1堆的概念1.2堆的分类1.2.1小根堆1.2.2大根堆 1.3堆的特点堆的实用场景 2.堆的实现2.1初始化2.2插入2.3堆的向上调整2.4删除2.5堆的向下调整2.6判空2.7获取堆顶元素2.8销毁 3.堆排序3.1实现3.2堆排序的时间复杂度问题 前言 在上一篇文章中&#…...

python无限弹窗的代码
一个简单的Python代码示例,用于在特定的时间间隔内显示一个简单的弹窗。这个代码使用了Python的tkinter库来创建一个简单的GUI窗口。 python import tkinter as tk import time def popup(): popup_window.deiconify() # 显示窗口 popup_window.wait_window() # 等…...

多线程新手村5--线程池
1.1 线程池是什么 线程诞生的意义是因为进程的创建/销毁开销太大,所以使用线程提高代码的执行效率;那如果想要进一步提升执行效率,该怎么办呢?有一个方法是使用线程池。 首先,什么是线程池:池就是池子&am…...

数据库 mysql 的彻底卸载
MySQL卸载步骤如下: (1)按 winr 快捷键,在弹出的窗口输入 services.msc,打开服务列表。 (2)在服务列表中, 找到 mysql 开头的所有服务, 右键停止,终止对应的…...

Meterpreter工具使用
Meterpreter属于stage payload,在Metasploit Framework中,Meterpreter是一种后渗透工具,它 属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型Payload。这种工具是基于“内存DLL注 入”理念实现的,它能够通过创建一个新进…...

STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...

如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
[特殊字符] 手撸 Redis 互斥锁那些坑
📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...
el-amap-bezier-curve运用及线弧度设置
文章目录 简介示例线弧度属性主要弧度相关属性其他相关样式属性完整示例链接简介 el-amap-bezier-curve 是 Vue-Amap 组件库中的一个组件,用于在 高德地图 上绘制贝塞尔曲线。 基本用法属性path定义曲线的路径,可以是多个弧线段的组合。stroke-weight线条的宽度。stroke…...

本地部署drawDB结合内网穿透技术实现数据库远程管控方案
文章目录 前言1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 前言 在数字化浪潮席卷全球的背景下,数据治理能力正日益成为构建现代企业核心竞争力的关键因素。无论是全球500强企业的数据中枢系统,还是初创…...

【JavaEE】万字详解HTTP协议
HTTP是什么?-----互联网的“快递小哥” 想象我们正在网上购物:打开淘宝APP,搜索“蓝牙耳机”,点击商品图片,然后下单付款。这一系列操作背后,其实有一个看不见的“快递小哥”在帮我们传递信息,…...
scan_mode设计原则
scan_mode设计原则 在进行mtp controller设计时,基本功能设计完成后,需要设计scan_mode设计。 1、在进行scan_mode设计时,需要保证mtp处于standby模式,不会有擦写、编程动作。 2、只需要固定mtp datasheet说明的接口即可…...