LLC数字控制TMS320F28034,2-根据原理图配置GPIO控制引脚

LLC数字控制TMS320F28034,2-根据原理图配置GPIO控制引脚

  • LLC数字控制TMS320F28034,2-根据原理图配置GPIO控制引脚
  • 1 TMS320F28034
    • 1.1 GPIO概述
    • 1.2 GPIO寄存器说明
    • 1.3 GPIO寄存器使用注意事项
  • 2 项目原理图介绍
    • 2.1 GPIO使用介绍
    • 2.2 功能引脚使用说明
  • 3 软件代码实现
    • 3.1 软件代码工程
    • 3.2 软件代码程序
  • 4 TMS320F28034操作GPIO总结

**配套工程代码例程**


LLC数字控制TMS320F28034,2-根据原理图配置GPIO控制引脚

**配套工程代码例程**

1 TMS320F28034

TMS320F28034是德州仪器(Texas Instruments)推出的一款数字信号控制器(Digital Signal Controller,DSC),主要用于实时控制和数字信号处理应用。下面是关于TMS320F28034的GPIO(General Purpose Input/Output,通用输入/输出)概述。

1.1 GPIO概述

(1)GPIO引脚数量:TMS320F28034具有一定数量的GPIO引脚,用于连接外部设备或与其他器件进行通信。
(2)功能:GPIO引脚可配置为输入或输出模式,以实现与外部设备的数据交换和控制。
(3)电压兼容性:通常,TMS320F28034的GPIO引脚支持特定的电压兼容级别,需要根据外部设备的工作电压来选择适当的引脚。
(4)配置:通过配置寄存器,可以设置GPIO引脚的输入/输出模式、上拉/下拉电阻状态、中断使能等。
(5)用途:
输入模式:用于读取外部传感器的数据或接收其他器件发送的信号。
输出模式:用于控制外部执行器,如LED、继电器等,或向其他器件发送信号。
(6)中断:GPIO引脚通常可以配置为产生中断,以便在引脚状态发生变化时通知处理器。
(7)电流能力:每个GPIO引脚通常具有特定的最大输出电流能力,需要注意不要超过规定值,以避免损坏设备。
(8)保护:一些GPIO引脚可能具有过流保护、过压保护等功能,以确保设备的安全运行。

1.2 GPIO寄存器说明

在TMS320F28034中,GPIO的配置和控制是通过一系列寄存器完成的。以下是一些常用的GPIO寄存器及其功能说明:
寄存器控制框图:

在这里插入图片描述

(1)GPIO控制寄存器(GPAxMUX):
这些寄存器用于配置GPIO引脚的功能。
通常通过设置特定位来选择引脚是作为GPIO还是其他功能的引脚。
(2)GPIO方向寄存器(GPADIR):
用于配置GPIO引脚是输入还是输出。
每位对应一个引脚,设置为1表示输出,设置为0表示输入。
(3)GPIO数据寄存器(GPAxDAT):
用于读取或写入GPIO引脚的状态。
读取时可以获取引脚的输入状态,写入时可以设置引脚的输出状态。
(4)GPIO上拉/下拉寄存器(GPAPUD):
用于启用或禁用GPIO引脚的上拉或下拉电阻。
配置上拉或下拉电阻可用于保持引脚在特定状态下。
(5)GPIO中断使能寄存器(GPIOxINTEN):
用于配置GPIO引脚的中断使能。
可以设置使能特定引脚的中断功能,以便在引脚状态变化时生成中断。
(6)GPIO中断标志寄存器(GPIOxINTFLG):
用于检查GPIO引脚的中断标志。
中断发生时,相应引脚的中断标志会被设置,处理完中断后需要清除该标志。
(7)GPIO中断优先级寄存器(GPIOxINTSEL):
用于配置GPIO引脚中断的优先级。
可以设置中断优先级,以确定中断的触发顺序。

这些寄存器提供了对TMS320F28034 GPIO引脚的配置和控制。在编程中,通过对这些寄存器的操作,可以实现对GPIO引脚的灵活控制,以满足特定应用的需求。

1.3 GPIO寄存器使用注意事项

在使用TMS320F28034的GPIO寄存器时,有一些重要的注意事项需要考虑,以确保正确配置和操作GPIO引脚。以下是一些关于TMS320F28034 GPIO寄存器的使用注意事项:
(1)正确的引脚功能配置:
在配置GPIO引脚之前,确保正确地将引脚配置为GPIO功能,而不是其他功能,例如模拟输入或其他专用功能。
(2)引脚电压兼容性:
确保GPIO引脚的电压兼容性符合外部设备或器件的工作电压要求,以避免损坏设备。
(3)引脚方向设置:
在使用GPIO引脚之前,确保正确设置引脚的方向(输入或输出),避免引脚功能错误导致的问题。
(4)中断处理:
在启用GPIO中断时,确保正确配置中断使能寄存器、中断标志寄存器和中断优先级寄存器,以确保中断的正确触发和处理。
(5)引脚状态读取与写入:
在读取或写入GPIO引脚的状态时,确保遵循正确的读取和写入顺序,以避免数据错误或干扰。
(6)电流限制:
注意每个GPIO引脚的最大输出电流能力,不要超过规定值,以免对设备造成损坏。
(7)上拉/下拉电阻:
在需要使用上拉或下拉电阻的情况下,正确配置GPIO引脚的上拉/下拉电阻状态,以确保引脚在特定状态下保持稳定。
(8)中断处理的及时性:
确保及时处理GPIO中断,避免中断积压或丢失,影响系统的实时性和稳定性。
(9)参考技术文档:
在使用GPIO寄存器时,始终参考TMS320F28034的技术文档和参考手册,以获取最新的寄存器说明和编程指导。

2 项目原理图介绍

TMS320F28034项目的电路芯片外围电路如下:

在这里插入图片描述

2.1 GPIO使用介绍

(1)供电,为满足芯片的正常工作,必须给与持续的正常供电,供电电压为3.3V,在整机的原理图中所示,硬件部分内容我们不过多的思考,知道其是供电即可。

在这里插入图片描述

(2)在此项目中PWM主要用于控制功率开关管子,实现电源变换输出。PWM控制引脚在图上位置如下:

在这里插入图片描述

(3)ADC采集及比较器输入引脚,获取产品实际工作时的输出电压电流等信息,用于状态控制和数字变换控制所依据的输入源。

在这里插入图片描述

(4)指示灯引脚,用于实现产品工作状态的声光电指示功能。

在这里插入图片描述

(5)TZ输入保护引脚,主要用于对PWM快速保护作用功能。

在这里插入图片描述

2.2 功能引脚使用说明

(1)PWM引脚,因对产品的开关控制有极高的要求,在常规设计时,初始上电使其引脚配置为:GPIO功能、输出模式,并配置为低电平。

   // GPIO0 <-> EPWM1A == 0:GPIO功能 1:PWM功能GpioCtrlRegs.GPAMUX1.bit.GPIO0=0;// GPIO1 <-> EPWM1B == 0:GPIO功能 1:PWM功能GpioCtrlRegs.GPAMUX1.bit.GPIO1=0;// GPIO0 <-> EPWM1A == 0:输出功能 1:输入功能GpioCtrlRegs.GPADIR.bit.GPIO0=1;// GPIO1 <-> EPWM1B == 0:输出功能 1:输入功能GpioCtrlRegs.GPADIR.bit.GPIO1=1;// GPIO0 <-> EPWM1A == 1:输出0GpioDataRegs.GPACLEAR.bit.GPIO0=1;// GPIO1 <-> EPWM1B == 1:输出0
GpioDataRegs.GPACLEAR.bit.GPIO1=1;

(2)ADC采集引脚功能比较专用,我们在ADC配置章节进行详细说明,这里不再过多阐述
(3)比较器引脚,比较器引脚放在了AIO2引脚上,其配置方法如下:

   // AI02<-> COPM1+ ==2:比较器功能GpioCtrlRegs.AIOMUX1.bit.AIO2 = 2;

(4)TZ保护引脚,接收保护信号,所以配置为输入模式

   // GPIO15 <-> TZ1GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 1;

(5)比较器输出引脚,配置为比较器输出功能。

   // COMP_OUT GPIO42 <-> OPP_COMP1_OUTGpioCtrlRegs.GPBMUX1.bit.GPIO42 = 3;

(6)LED指示功能,配置为输出功能,我们先配置为输出高电平,点亮三个LED。

//LED G
GpioCtrlRegs.GPAMUX2.bit.GPIO24=0;
GpioCtrlRegs.GPADIR.bit.GPIO24=1;
//LED Y
GpioCtrlRegs.GPAMUX2.bit.GPIO21=0;
GpioCtrlRegs.GPADIR.bit.GPIO21=1;
//LED R
GpioCtrlRegs.GPAMUX2.bit.GPIO20=0;
GpioCtrlRegs.GPADIR.bit.GPIO20=1;

注意:初始上电时,尽量将所有引脚的数据都清零:

// GPIOA DATA数据全清0
GpioDataRegs.GPADAT.all = 0ul;
// GPIOB DATA数据全清0
GpioDataRegs.GPBDAT.all = 0ul;

注意:配置寄存器时需要注意寄存器是否是被保护的:

    //开始寄存器配置前执行指令
EALLOW;  //寄存器配置结束后执行指令
EDIS;

3 软件代码实现

3.1 软件代码工程

(1)在APP问价夹下新建两个文件,分别是sys_gpio.c和sys_gpio.h,并在includes.h中引用sys_gpio.h文件,在sys_gpio.c中引用includes.h文件,形成工程框架,软件工程如下所示。

在这里插入图片描述

(2)在sys_gpio.c中定义初始化函数,并在sys_gpio.h中进行声明,即可实现全局的引用。

在这里插入图片描述

3.2 软件代码程序

整体代码如下,四个文件中:

//Main.c文件中

#include "includes.h"/********************************************************
* 函数名称:Init_system
* 功 能:   系统初始化
* 入口参数:
* 出口参数:
* 修 改:
********************************************************/
void Init_system(void)
{InitSysCtrl();DINT;InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();EALLOW;Flash_CPUScaleFactor = SCALE_FACTOR;Flash_CallbackPtr=NULL;EDIS;MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd, &RamfuncsRunStart);InitFlash();
}
/********************************************************
* 函数名称:void Init_system_end(void)
* 功 能:   系统初始化结束
* 入口参数:
* 出口参数:
* 修 改:
********************************************************/
void Init_system_end(void)
{EALLOW;  // This is needed to write to EALLOW protected registersPieCtrlRegs.PIECTRL.bit.ENPIE = 1;   // Enable the PIE blockEDIS;   // This is needed to disable write to EALLOW protected registers//================================================================================EINT;ERTM;}/********************************************************
函数名称:main
函数功能:主程序
入口参数:
出口参数:
修    改:
********************************************************/
void main(void)
{Init_system();GpioDataRegs.GPADAT.all = 0ul;//GPIO初始化FunGpioInit();Init_system_end();
//while(1){LEDRON();LEDYON();LEDGON();}
}

/*

  • includes.h
  • Created on: 2024年7月29日
  •  Author:
    

*/

#ifndef APP_INCLUDES_H_
#define APP_INCLUDES_H_#include "Flash2803x_API_Library.h"
#include "Flash2803x_API_Config.h"#include "DSP28x_Project.h"
#include "DSP2803x_DefaultISR.h"
#include "DSP2803x_Adc.h"#include "Flash2803x_API_Config.h"
#include "string.h"#include "sys_gpio.h"//------------------------------------------
void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr);//===========================================================================#define LEDRGPIO        GPIO20
#define LEDRMUX         GpioCtrlRegs.GPAMUX2.bit.LEDRGPIO
#define LEDRDIR         GpioCtrlRegs.GPADIR.bit.LEDRGPIO
#define LEDRTOGGLE()    GpioDataRegs.GPATOGGLE.bit.LEDRGPIO = 1
#define LEDRON()        GpioDataRegs.GPASET.bit.LEDRGPIO =1
#define LEDRLOW()       GpioDataRegs.GPACLEAR.bit.LEDRGPIO =1#define LEDYGPIO        GPIO21
#define LEDYMUX         GpioCtrlRegs.GPAMUX2.bit.LEDYGPIO
#define LEDYDIR         GpioCtrlRegs.GPADIR.bit.LEDYGPIO
#define LEDYTOGGLE()    GpioDataRegs.GPATOGGLE.bit.LEDYGPIO = 1
#define LEDYON()        GpioDataRegs.GPASET.bit.LEDYGPIO =1
#define LEDYLOW()       GpioDataRegs.GPACLEAR.bit.LEDYGPIO =1#define LEDGGPIO        GPIO24
#define LEDGMUX         GpioCtrlRegs.GPAMUX2.bit.LEDGGPIO
#define LEDGDIR         GpioCtrlRegs.GPADIR.bit.LEDGGPIO
#define LEDGTOGGLE()    GpioDataRegs.GPATOGGLE.bit.LEDGGPIO = 1
#define LEDGON()        GpioDataRegs.GPASET.bit.LEDGGPIO =1
#define LEDGLOW()       GpioDataRegs.GPACLEAR.bit.LEDGGPIO =1extern void Init_system(void);
extern void Init_system_end(void);#endif /* APP_INCLUDES_H_ */

/*

  • sys_gpio.c
  • Created on: 2024年7月30日
  •  Author:
    

*/

#include "includes.h"void FunGpioInit(void)
{//开始寄存器配置前执行指令EALLOW;// GPIOA DATA数据全清0GpioDataRegs.GPADAT.all = 0ul;// GPIOB DATA数据全清0GpioDataRegs.GPBDAT.all = 0ul;//LED GGpioCtrlRegs.GPAMUX2.bit.GPIO24=0;GpioCtrlRegs.GPADIR.bit.GPIO24=1;//LED YGpioCtrlRegs.GPAMUX2.bit.GPIO21=0;GpioCtrlRegs.GPADIR.bit.GPIO21=1;//LED RGpioCtrlRegs.GPAMUX2.bit.GPIO20=0;GpioCtrlRegs.GPADIR.bit.GPIO20=1;// GPIO0 <-> EPWM1A == 0:GPIO功能 1:PWM功能GpioCtrlRegs.GPAMUX1.bit.GPIO0=0;// GPIO1 <-> EPWM1B == 0:GPIO功能 1:PWM功能GpioCtrlRegs.GPAMUX1.bit.GPIO1=0;// GPIO0 <-> EPWM1A == 0:输出功能 1:输入功能GpioCtrlRegs.GPADIR.bit.GPIO0=1;// GPIO1 <-> EPWM1B == 0:输出功能 1:输入功能GpioCtrlRegs.GPADIR.bit.GPIO1=1;// GPIO0 <-> EPWM1A == 1:输出0GpioDataRegs.GPACLEAR.bit.GPIO0=1;// GPIO1 <-> EPWM1B == 1:输出0GpioDataRegs.GPACLEAR.bit.GPIO1=1;// COMP_OUT GPIO42 <-> OPP_COMP1_OUTGpioCtrlRegs.GPBMUX1.bit.GPIO42 = 3;// AI02<-> COPM1+ ==2:比较器功能GpioCtrlRegs.AIOMUX1.bit.AIO2 = 2;// GPIO15 <-> TZ1GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 1;//寄存器配置结束后执行指令EDIS;
}

/*

  • sys_gpio.h
  • Created on: 2024年7月30日
  •  Author:
    

*/

#ifndef APP_SYS_GPIO_H_
#define APP_SYS_GPIO_H_extern void FunGpioInit(void);#endif /* APP_SYS_GPIO_H_ */

**配套工程代码例程**

4 TMS320F28034操作GPIO总结

通过正确配置GPIO,可以实现对外部设备的控制和监视,为嵌入式系统提供灵活性和功能性。在配置GPIO时,确保仔细阅读相关文档,理解每个寄存器的作用和影响,以确保系统的稳定性和可靠性。

**配套工程代码例程**

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

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

相关文章

maven项目容器化运行之4-子模块利用Jenkins和maven使用docker插件调用远程docker构建服务

一.背景 之前期望把开发和部署分开&#xff0c;在上篇文章maven项目容器化运行之3-优雅的利用Jenkins和maven使用docker插件调用远程docker构建服务并在1Panel中运行-CSDN博客已经实现了。主要思路是开发配置了pom文件&#xff0c;但是不管docker镜像打包。提交代码库后&#x…

Kubernetes中间件监控指标解读

监控易是一款功能强大的IT监控软件&#xff0c;能够实时监控和分析各种IT资源和应用的状态&#xff0c;为企业提供全面而深入的监控服务。在Kubernetes中间件监控方面&#xff0c;监控易提供了详尽的监控指标&#xff0c;帮助用户全面了解Kubernetes集群的运行状态和性能表现。…

Nginx 反向代理https域名接口的注意事项

网络环境条件及实际调用需求如下图所示&#xff1a; 如图&#xff0c;要点如下&#xff1a; 应用实际请求的协议是 http&#xff0c;而通过 nginx 反向代理的最终接口是 https应用实际请求的域名是 mynginx.com&#xff0c;而通过 nginx 反向代理的最终接口域名是 api.weixin.…

[C++] vector对比list deque的引出

文章目录 list与vector的对比双端队列dequedeque的特性deque的底层实现原理内存结构块表&#xff08;Block Array&#xff09;块&#xff08;Block&#xff09; 插入与删除两端插入两端删除 随机访问如何计算位置 迭代器设计 总结 list与vector的对比 vector与list都是STL中非…

【python】PyQt5中QRadioButton的详细用法教程与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

[windows] 关于多线程中使用SendMessage

https://developer.aliyun.com/article/228325

@antv/x6 利用工具,在节点的左上角,或者节点的右上角,增加一个X的红色删除小按钮。

1、上个图&#xff1a; 官方地址&#xff1a;https://x6.antv.antgroup.com/tutorial/intermediate/tools 2、鼠标移上去&#xff0c;左上角会有一个删除小按钮&#xff0c;这个是x6自动的功能&#xff0c;只要稍微写二行代码就实现了&#xff1a; graph.on(node:mouseenter,…

leetcode 矩阵专题——java实现

73. 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 关键在于&#xff1a;一次扫描全表…

【云服务器】vscode + onethingAi + SSH远程连接

通过VS code远程连接服务器&#xff0c;并进行上传和下载文件操作_vs code 上传制定文件-CSDN博客 vscode远程连接服务器&#xff08;remote ssh&#xff09;上传本地文件到服务器(sftp)_vscode上传文件到服务器-CSDN博客 vscode连接远程服务器&#xff08;傻瓜式教学&#x…

苹果电脑怎么录制屏幕?3招教你轻松录制,高效实用

随着数字化时代的快速发展&#xff0c;屏幕录制已经成为我们日常工作和生活中不可或缺的一部分。它不仅是展示产品、教授知识、分享经验的重要工具&#xff0c;更是我们展现个性和创造力的新舞台。在苹果电脑上&#xff0c;屏幕录制功能的应用更是将这一体验推向了新的高度。 …

【屏驱MCU】RT-Thread 文件系统接口解析

本文主要介绍【屏驱MCU】基于RT-Thread 系统的文件系统原理介绍与代码接口梳理 目录 0. 个人简介 && 授权须知1. 文件系统架构1.1 虚拟文件系统目录架构 2. menuconfig 分析3. 代码接口分析3.1 DFS框架挂载目录3.2 【FAL抽象层】分区表和设备表3.3 如何将【文件路径】挂…

多任务协程处理的流程,看看是否和你想像的一样

import time import asyncioasync def func1():print("你好&#xff0c;我是第一个任务")await asyncio.sleep(3)print("你好&#xff0c;我是第二个任务")async def func2():print("你好&#xff0c;我是第3个任务")await asyncio.sleep(2)…

GNSS形变监测系统

TH-WY1 GNSS形变监测系统采用扼流圈设计有以下几个优势&#xff1a; 高精度测量&#xff1a;扼流圈是一种高精度的传感器&#xff0c;可以提供非常精确的测量结果。这使得GNSS形变监测系统能够准确地测量结构物的形变变化。 高稳定性&#xff1a;扼流圈设计使得传感器具有良好…

第33篇 计算数据中最长的连续1的个数<三>

Q&#xff1a;如何将计算出的结果&#xff08;最长的连续1的个数&#xff09;显示在DE2-115开发板的HEX上&#xff1f; A&#xff1a;基本原理&#xff1a;DE2-115_Computer_System中的HEX并行端口作为内存映射设备连接到DE2-115开发板的七段数码管&#xff0c;每个端口都对应…

大模型提示工程(Prompt),让LLM自己优化提示词

前言 随着大家对于prompt提问的研究以及对于高质量回答的追求&#xff0c;现在有一个比较热的词叫做prompt creator。 Prompt Creator 实际上是使得 ChatGPT 更好的引导你去完善自己的提问&#xff0c;同时也完善自己的回答&#xff0c;更好地指导自己回答出更加令使用者满意…

win10桌面任务栏美化(不用软件)(任务栏应用居中,透明任务栏)

透明任务栏 1、打开设置——个性化——颜色&#xff0c;打开透明效果&#xff1b; 2、在搜索框搜索注册表编辑器&#xff1b; 3、找如下路径&#xff1a;计算机\HKEY-CURRENT-USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced&#xff1b; 4、寻找文件&a…

【TS】TypeScript类型断言:掌握类型转换的艺术

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript类型断言&#xff1a;掌握类型转换的艺术1. 引言2. 什么是类型断言&a…

链表的实现(C++版)

对于链表的学习,之前在C语言部分的时候就已经有学习过,也学会了使用C语言来打造一个链表.如今学了C 则想通过C来打造一个链表,以达到锻炼自己的目的. 1.链表的初步实现 1.节点模板的设置 template <class T> struct ListNode{ListNode <T>* _next;ListNode <T…

k8s学习--使用kubepshere部署devops项目时遇到的报错(无法找到gitee仓库)

今天在kubesphere部署devops项目&#xff0c;编辑流水线的时候&#xff0c;发现怎么也访问不到gitee仓库 报错的流水线位置 报错日志 报错原因 变量问题 因为看见了csy/sangomall&#xff0c;所以理所当然的把路径变量GITEE_ACCOUNT写成了用户名 解决方法 结果发现仓库…