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注 入”理念实现的,它能够通过创建一个新进…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...