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时,确保仔细阅读相关文档,理解每个寄存器的作用和影响,以确保系统的稳定性和可靠性。
**配套工程代码例程**