【轮式平衡机器人】——TMS320F28069片内外设之GPIO

引入

接下来的几期博客会介绍轮式平衡机器人TMS320F28069片内外设,了解片内外设的基本原理,内容较为基础,都是些简单的simulink模型,旨在将复杂的原理过渡到simulink软件应用。足够了解的博友可跳过。

后续还将会结合MATLAB/Simulink实现TMS320F28069外设的模型搭建实验环境和自动代码生成

一、GPIO基本介绍

TMS320F28069有54个GPIO,对应芯片输出的54个引脚,分为A、B两组——A组包括GPIO0~GPIO31B组包括GPIO32~GPIO58(除了GPIO45~GPIO49),且每个引脚都有自己的复用功能。

4种基本配置:

  1. 通用I/O口用GPxDIR配置I/O口方向(1为输出,0为输入);
  2. 复用功能用GPxMUXn配置;
  3. GPxPUD用于配置I/O口上拉功能(0为使能上拉);
  4. 量化寄存器GPxQSEL可对输入信号进行量化限制,以消除数字量I/O引脚噪声干扰。

4种读写操作(写0时均无效):

  1. GPxDAT寄存器独立读/写I/O口信号;
  2. GPxSET寄存器写1对I/O口进行置位操作;
  3. GPxCLEAR寄存器写1对I/O进行清零操作;
  4. GPxTOOGLE寄存器写1对I/O口进行电平翻转操作;

二、GPIO实验(Simulink平台)

1、Simulink基本模型参数配置

首先对模型进行配置,选择模型适应参数后即可生成可读性较强的C语言代码。后续实验模型基本配置都可参考此处!

求解器类型必须选择固定步长(Fixed step),此模型提供多种算法且没有连续状态。固定步长(基础采样时间)根据实际情况而定,在简单的嵌入式代码生成时没有实际作用,可保持默认auto,单位为秒,也可设置为0.005s,相当于定时器0的中断时间间隔;但是若是针对目标芯片定制的代码生成过程中,会将该步长作为芯片外设或内核中定时器的中断周期。

解算器配置

②将“诊断”下的“数据有效性”中的“多任务数据存储”设置为“无”(none)。

③配置选择相关硬件,配置时钟。外部晶振默认为10MHz,这里将系统时钟配置为最高90MHz,低速时钟外设设置为SYSCLKOUT/4分频。其他外设模块按自己需要设置

硬件配置
时钟配置

④配置自动代码生成和报告相关的参数。模型Web视图使得生成的代码可以进行模型与代码之间相互的跟踪。

自动代码生成配置
代码生成报告配置

2、GPIO_OUTPUT控制LED灯

控制目标是当计数值大于或等于200时,即大概0.005x200=1s时,GPIO31置1,另外1s置0,实现一个一亮一灭的效果。

搜索counter limited模块,上限设置为400。

搜索compare to constant模块,设置>=200。

根据芯片系列搜索C2806x GPIO_OUTPUT模块,并配置端口为GPIO31,toogle表示电平翻转。

整体实验模型:

LED流水灯

点击HARDWARE下的编译,即可生成C代码和代码生成报告:

代码生成报告很全,也可在模型参数配置的代码生成中选择只生成代码!

主函数示例如下:

#include "robot.h"
#include "rtwtypes.h"
#include "MW_target_hardware_resources.h"volatile int IsrOverrun = 0;
static boolean_T OverrunFlag = 0;
void rt_OneStep(void)
{/* Check for overrun. Protect OverrunFlag against preemption */if (OverrunFlag++) {IsrOverrun = 1;OverrunFlag--;return;}enableTimer0Interrupt();robot_step();/* Get model outputs here */disableTimer0Interrupt();OverrunFlag--;
}volatile boolean_T stopRequested;
volatile boolean_T runModel;
int main(void)
{float modelBaseRate = 0.005;float systemClock = 90;/* Initialize variables */stopRequested = false;runModel = false;c2000_flash_init();init_board();#if defined(MW_EXEC_PROFILER_ON) || (defined(MW_EXTMODE_RUNNING) && !defined(XCP_TIMESTAMP_BASED_ON_SIMULATION_TIME))hardwareTimer1Init();#endif;bootloaderInit();rtmSetErrorStatus(robot_M, 0);robot_initialize();globalInterruptDisable();configureTimer0(modelBaseRate, systemClock);runModel = rtmGetErrorStatus(robot_M) == (NULL);enableTimer0Interrupt();globalInterruptEnable();while (runModel) {stopRequested = !(rtmGetErrorStatus(robot_M) == (NULL));}/* Terminate model */robot_terminate();globalInterruptDisable();return 0;
}/** File trailer for generated code.** [EOF]*/

3、GPIO_INPUT扫描_NORMAL模式

GPIO_INPUT扫描_NORMAL模式是一种常见的GPIO(General-Purpose Input/Output)配置模式,用于微控制器或其他嵌入式系统中的GPIO引脚。在这种模式下,GPIO引脚被配置为输入模式后,微控制器将不断地(周期)扫描这些引脚,检查是否有外部信号的输入。当检测到外部信号时,微控制器可以读取该引脚的电平状态(高电平或低电平),并根据需要进行处理。

这种模式通常用于读取传感器、开关或其他外部硬件设备的状态,以便在微控制器中进行进一步的处理或控制。例如,在智能家居系统中,GPIO_INPUT扫描_NORMAL模式可以用于读取门窗传感器、人体传感器等设备的状态,以实现自动化的家居控制功能。

这里简单举例:用扫描按键的方式控制LED灯。按键输入接口在GPIO42,LED灯接在GPIO25。

首先需要配置GPIO的PUD(上拉禁止寄存器)使能GPIO42电平上拉,这样没按下时该端口保持高电平1,LED灭;按键按下时检测到低电平0,LED灯亮。

4、GPIO_INPUT扫描_EXTERNAL模式

还是按键控制LED灯但这次用的INPUT模式不同!

使用External模式可极大方便对数据的观测!GPIO_INPUT扫描_NORMAL模式和GPIO_INPUT扫描_EXTERNAL模式在功能和使用场景上有所不同。GPIO_INPUT扫描_NORMAL模式主要用于周期性读取输入信号,而GPIO_INPUT扫描_EXTERNAL模式则专为实时检测外部事件设计。根据实际应用的需求选择合适的模式可以提高性能和效率。

Simulink的External模式默认使用的是SCIA,波特率为115200b/s,并且默认复用I/O口是GPIO28、GPIO29,对应开发板上的SCIA接口是RXA、TXA。

所以在进行External模式操作时,通过一根USB转TTL通信线将USB的RX、TX分别接在F28069主控板的TXA、RXA引脚。注意USB和F28069的控制板要共地,同时不能将线序接反,否则Simulink无法通过SCI转USB与DSP进行通信。

首先需要在模型配置时对外部模式进行设置,在“硬件实现”中往下翻找到“External mode”,将Communication interface设置为串口通信Serial。

然后在自己电脑的“设备管理器”中找到串行通信的COM口,输入到Seial port中,这里因为未使用硬件实际插入,显示“未检测到串口No serial port detected”(明白流程即可)。

模型还是一致,其他略。

5、GPIO_INPUT中断控制LED灯

上面都属于将GPIO配置为通用I/O数字量输出,也可以将其配置为外部中断实现控制目的。如将按键配置成外部中断,在中断中执行参数或模式的修改,比常用的按键扫描方式节省资源(“硬件外设资源”替代“软件资源”)。

在simulink中搭建模型,利用“system initiize”模块对中断进行GPIO初始化配置,配置GPIO42为外部中断触发源,并将中断配置为下降沿触发(对应外部中断3)

GPIO初始化配置

搜索“C28x Hardware Interrupt”模块进行硬件中断配置,中断号CPU12,PIE-1对应外部中断XINT3,任务优先级默认,Preemption输入1表示中断可以被抢占,0表示不可以

中断配置

利用“subsystem”模块建立Trigger子系统(LED灯控制模型)。在中断函数中分别进行对应的LED翻转,按键(GPIO42)对应LED1灯(GPIO31)、LED2灯(GPIO25)仿真步长0.05s

最后的模型如下,还是与之前一样点击“HARDWARE”下的“编译”生成代码后将代码拷进开发板,可以发现:按下一次按键,对应的LED灯电平便翻转一次。

往期精彩

STM32专栏(付费9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/E2F88

OpenCV-Python专栏(付费9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/zK1jV

AI底层逻辑专栏(付费9.9)icon-default.png?t=N7T8http://t.csdnimg.cn/zic0f

机器学习专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/FaXzAFreeRTOS专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/SjIqU电机控制专栏(免费)icon-default.png?t=N7T8http://t.csdnimg.cn/FNWM7

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现GRU-Attention-Adaboost基于门控循环单元融合注意力机制的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 …

JVM/GC复习1---更新中

JVM/GC JVMGC垃圾回收算法1.引用计数法2.标记清除发3.标记压缩算法4.复制算法5.分代算法 收集器1.串行垃圾收集器2.并行垃圾收集器2.CMS垃圾收集器 3.G1垃圾收集器(重点)jdk1.7开始1.9默认的回收器Young GC模式Mixed GC 可视化的GC日志分析工具 JVM 待更新中ing GC 垃圾回收:…

【并发编程】ReentrantLock

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳重求进,晒太阳 相对于synchronized 它具备如下特点: 可中断可以设置超时时间可以设置公平锁支持多个条件变量 与synchronized一样,都支…

unity学习笔记----游戏练习06

一、豌豆射手的子弹控制 创建脚本单独控制子弹的运动 用transform来控制移动 void Update() { transform.Translate(Vector3.right * speed * Time.deltaTime); } 创建一个控制子弹速度的方法,方便速度的控制 private void SetSpeed(float spee…

安全防御第二次作业

将内网中各个接口能够ping通自己的网关 1.划分vlan [sw6]vlan batch 2 3 [sw6]int g0/0/2 [sw6-GigabitEthernet0/0/2]port link-type access [sw6-GigabitEthernet0/0/2]port default vlan 2 [sw6-GigabitEthernet0/0/2]int g0/0/3 [sw6-GigabitEthernet0/0/3]port link-t…

系统登录的时候的密码如何做到以加密的形式进行登录【java.security包下的api】工具类。

/** description: 将普通的publicKey转化得到一个RSAPublicKey* author: zkw* date: 2024/1/24 16:17* param: publicKey 普通的publicKey* return: RSAPublicKey 得到一个新的RSAPublicKey**/public static RSAPublicKey getPublicKey(String publicKey) throws NoSuchAlgorit…

Pandas ------ 向 Excel 文件中写入含有合并表头的数据

Pandas ------ 向 Excel 文件中写入含有合并表头的数据 推荐阅读引言正文 推荐阅读 Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据 引言 这里给大家介绍一下如何向 Excel 中写入带有合并表头的数据。 正文 import pandas as pddf1 pd.D…

自定义注解与拦截器实现不规范sql拦截(拦截器实现篇)

最近考虑myBatis中sql语句使用规范的问题,如果漏下条件或者写一些不规范语句会对程序性能造成很大影响。最好的方法就是利用代码进行限制,通过拦截器进行sql格式的判断在自测环节就能找到问题。写了个简单情景下的demo,并通过idea插件来将myB…

leaflet学习笔记-带过滤的图例(九)

前言 图例不只能够帮助我们在查看地图的时候更加方便容易地分辨不同颜色代表的要素,本文要介绍的图例组件还可以按需求过滤掉不用显示的要素,使地图的更能清晰的显示我们需要显示的内容 技术核心 说到过滤要素,第一时间想到的就是滑块组件…

内网穿透、远程桌面、VPN的理解

最近在研究内网穿透的相关技术,然后回想起一些相关的技术,比如说要远程桌面公司的电脑,VPN连入内网等。然后想着在此处记录一下,各个的区别,这个纯粹是从技术层面的理解,此处不详细解释怎么去实现或者用什么…

【C++】stack、queue的使用及模拟实现

目录 一、stack1.1 stack的使用1.2 stack的模拟实现 二、queue2.1 queue的使用2.2 queue的模拟实现 一、stack 1.1 stack的使用 stack是一种容器适配器,它的特点是后进先出,只能在容器的一端进行插入和删除操作。 stack的使用很简单,主要有…

在IDEA中创建SpringBoot项目

概述 SpringBoot是由Pivotal团队提供的全新的框架,其设计的目的是用来简化Spring应用的初始搭建以及开发过程。 传统方式构建Spring应用程序 导入依赖繁琐 依赖冲突 项目配置繁琐 SpringBoot特性 1、起步依赖 本质上就行一个Maven坐标,整合了完成一…

Java 集合List相关面试题

📕作者简介: 过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。 📗本文收录于java面试题系列,大家有兴趣的可以看一看 📘相关专栏Rust初阶教程、go语言基…

dataGrip连接数据库mysql和intersystems的iris

文章目录 前言创建新项目选择对应的数据库产品类型新建数据库资源连接sql命令窗体手动配置本地驱动 前言 intersystems公司的产品iris是cache的升级版本,目前绝大多数数据库工具都没法连接这个数据库 datagrip下载地址 https://download-cdn.jetbrains.com.cn/da…

eBay在人工智能道路上的成败得失:衡量标准是关键

我是2006年加入eBay的。2009年,这家公司的运营状况非常糟糕,其股价创历史新低(远低于近24美元的历史高位),还出现削减各项成本、负增长、市场占有率降低、技术团队缺乏创新能力等情况。 简而言之,eBay公司…

CentOS7自动备份数据库到git

虽然数据库没什么数据,但是有就是珍贵的啦,为了服务器什么的无了,所以还是要自动备份一下比较好。 Open备忘第一页 步骤 在Gitee(github)上创建一个私有仓库Gitee(github)配置好服务器的ssh在服…

Oracle BIEE 示例(一)数据透视表2

1 背景 版本:BIEE 12C 视图:数据透视表 实现内容(顺序与具体内容不一致): 2 空列显示(方法一) 2.1 问题 列为空时,标题栏不显示信息。 2.2 期望 即使数据为空,也要显示列名。 2.3 官方资料 2.3.1 操作步骤 2.3.1.1 要在分析级别关闭空值隐藏,请执行以下操作…

MySQL与PostgreSQL对比

对比 许可证 License MySQL 社区版采用 GPL 许可证。Postgres 发布在 PostgreSQL 许可下,是一种类似于 BSD 或 MIT 的自由开源许可。 即便 MySQL 采用了 GPL,仍有人担心 MySQL 归 Oracle 所有,这也是为什么 MariaDB 从 MySQL 分叉出来。 …

mac安装部署gitbook教程

mac安装部署gitbook教程 前言一、安装准备二、GitBook安装三、项目初始化 前言 一些自己实际操作的记录。 一、安装准备 Node.js gitbook基于Node.js,所以需要提前安装。 下载地址:https://nodejs.org/en/,可以下载比较新的版本。(但我的建议…

[已解决]504 Gateway Time-out 网关超时

文章目录 问题:504 Gateway Time-out 504 Gateway Time-out 网关超时思路解决 问题:504 Gateway Time-out 504 Gateway Time-out 网关超时 思路 网上的常规思路是修改nginx配置文件,增加请求执行时间,试过没有用 keepalive_timeout 600; fastcgi_con…