首页 > 其他分享 >TMS320F28377D学习日志:day2点亮LED

TMS320F28377D学习日志:day2点亮LED

时间:2024-06-20 22:59:26浏览次数:30  
标签:LED 引脚 TMS320F28377D day2 GPCSET Uint16 GPIO bit GpioDataRegs

文章目录


一、28377开发板的led电路分析

led电路图:
LED电路LED串联1k欧限流电阻,正极接3.3V电源,负极接28377引脚。3个LED用共阳接法。当引脚P89输出低电平,LED1点亮;当引脚P89输出高电平,LED1熄灭。其他LED同样受P91、P93引脚控制亮灭。

二、28377的GPIO相关寄存器介绍

2.1 前言

28377引脚是多功能复用的,因此需要将P89、P91和P93设置为GPIO功能,并上拉输出。
在2837xD系列的DSP芯片中,有高达8组I/O端口,它们的关系为

PortGPIO
A0~31
B32~63
C64~95
D96~127
E128~159
F160~191
G192~223
H224~255

因此点亮LED所需的P89、P91和P93引脚属于PortC.
此外值得一提的是,在TI官方资料《TMS320F2837xD Dual-Core Microcontrollers Technical Reference Manual (Rev. K)》(可在TI官网下载)中可以看到2837xD系列的外设复用、CPU复用和引脚选项只能通过CPU1进行配置。
在这里插入图片描述
所以该工程只使用CPU1进行GPIO的配置与控制。

2.2 GPySET 寄存器介绍

该寄存器用于驱动引脚输出为高电平,且不影响其他的引脚。GPySET其中的y用于指代不同引脚的Port,例如P89就是GPCSET。因此设置P89为高电平,可以采用下列程序:

GpioDataRegs.GPCSET.bit.GPIO89 = 1;      //用于GPIO89置高

同时在程序中选中GPCSET按下F3可以看到GPCSETGPCSET_REG类型的数据,GPCSET_REG的定义如下:

union GPCSET_REG {
    Uint32  all;
    struct  GPCSET_BITS  bit;
};

其中GPCSET_BITS 为包含GPIO64~GPIO95的结构体。

struct GPCCLEAR_BITS {                  // bits description
    Uint16 GPIO64:1;                    // 0 Output Clear bit for this pin
    Uint16 GPIO65:1;                    // 1 Output Clear bit for this pin
    Uint16 GPIO66:1;                    // 2 Output Clear bit for this pin
    Uint16 GPIO67:1;                    // 3 Output Clear bit for this pin
    ...
    }

2.3 GPyCLEAR 寄存器介绍

与GPySET刚好相反,GPyCLEAR 用于驱动引脚输出为底电平。同样的,设置P89为低电平,可以采用下列程序:

GpioDataRegs.GPCCLEAR.bit.GPIO89 = 1    //用于GPI89置低

在这两段程序中都出现了GpioDataRegs,选中按下F3可以看到,它属于GpioDataRegs结构体类型,而它用于修改GPIO的GPyDAT、GPySET、GPyCLEAR、GPyTOGGLE四类寄存器。GPyDAT用于直接设置电平,GPyTOGGLE用于切换电平。

struct GPIO_DATA_REGS {
    union   GPADAT_REG                       GPADAT;                       // GPIO A Data Register (GPIO0 to 31)
    union   GPASET_REG                       GPASET;                       // GPIO A Data Set Register (GPIO0 to 31)
    union   GPACLEAR_REG                     GPACLEAR;                     // GPIO A Data Clear Register (GPIO0 to 31)
    union   GPATOGGLE_REG                    GPATOGGLE;                    // GPIO A Data Toggle Register (GPIO0 to 31) 
    ...
    };

三、程序介绍

3.1 引入库

处理器间通信Interprocessor Communication (IPC)

#include "F28x_Project.h"
#include "F2837xD_Ipc_drivers.h"

3.2 配置GPIO引脚功能

用于设置GPIO引脚为上拉输出

void GPIO_Setup() //配置GPIO的功能
{
    GPIO_SetupPinMux(89, GPIO_MUX_CPU1, 0);//对引脚89设置;选择CPU1为内核,选择外设功能0
    GPIO_SetupPinOptions(89, GPIO_OUTPUT, GPIO_PUSHPULL);//GPIO89,作为输出,上拉
    GPIO_SetupPinMux(91, GPIO_MUX_CPU1, 0);
    GPIO_SetupPinOptions(91, GPIO_OUTPUT, GPIO_PUSHPULL);
    GPIO_SetupPinMux(93, GPIO_MUX_CPU1, 0);
    GPIO_SetupPinOptions(93, GPIO_OUTPUT, GPIO_PUSHPULL);
}

3.2.1 GPIO_SetupPinMux函数

GPIO_SetupPinMux函数设置指定引脚的外设复用,

void GPIO_SetupPinMux(Uint16 pin, Uint16 cpu, Uint16 peripheral)

参数pin为设置的引脚。参数cpu为选择使用的cpu内核,GPIO的复用使用CPU1。参数peripheral的选择参看下图(源自参考文献1),外设功能选择0即可。
在这里插入图片描述

3.2.1 GPIO_SetupPinOptions函数

GPIO_SetupPinOptions函数用于设置指定引脚的GPIO输入/输出模式,

void GPIO_SetupPinOptions(Uint16 pin, Uint16 output, Uint16 flags)

参数output用于控制引脚输入输出,参数flags为设置GPIO输入/输出模式掩码,具体如下

//Flags for GPIO_SetupPinOptions(). The qualification flags (SYNC, QUAL3,
//QUAL6, and ASYNC) take up two bits and must be in the order specified.
#define GPIO_INPUT		0
#define GPIO_OUTPUT		1
#define GPIO_PUSHPULL   0
#define GPIO_PULLUP		(1 << 0)
#define GPIO_INVERT		(1 << 1)
#define GPIO_OPENDRAIN	(1 << 2)
#define GPIO_SYNC		(0x0 << 4)
#define GPIO_QUAL3		(0x1 << 4)
#define GPIO_QUAL6		(0x2 << 4)
#define GPIO_ASYNC		(0x3 << 4)

这里选择GPIO_OUTPUT和GPIO_PUSHPULL,输出模式和上拉模式(关于什么是上拉输出,可以阅读参考文献2

3.3 系统初始化

系统程序初始化代码如下图,对于系统初始化可以结合参考文献3的第6节视频系统初始化和*“C2000Ware”*中例程进行理解进行理解。

InitSysCtrl();
InitGpio();
GPIO_Setup();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EINT;  
ERTM; 

3.4 循环程序

1s为周期翻转引脚输出,实现led的循环亮灭。

while(0)
    {
        GpioDataRegs.GPCSET.bit.GPIO89 = 1;
    	GpioDataRegs.GPCSET.bit.GPIO91 = 1;
    	GpioDataRegs.GPCSET.bit.GPIO93 = 1;
        
    	DELAY_US(1000 * 500);
       
        GpioDataRegs.GPCCLEAR.bit.GPIO89 = 1;
        GpioDataRegs.GPCCLEAR.bit.GPIO91 = 1;
        GpioDataRegs.GPCCLEAR.bit.GPIO93 = 1;
        
    	DELAY_US(1000 * 500);
    }

28377板点亮led图
在这里插入图片描述

参考文献

  1. TMS320F2837xD Dual-Core Microcontrollers Technical Reference Manual (Rev. K)
  2. 深刻理解GPIO(上拉输入、下拉输入、模拟输入、浮空输入,开漏输出,推挽输出的区别,以STM32为例): link
  3. tms320f2837x入门指南 TI 官方: link

标签:LED,引脚,TMS320F28377D,day2,GPCSET,Uint16,GPIO,bit,GpioDataRegs
From: https://blog.csdn.net/qq_45897521/article/details/139839909

相关文章

  • 嵌入式Linux中platform平台设备模型的框架(实现LED驱动)
    在前面讨论的所有LED驱动程序中,把全部设备信息和驱动代码都写在了一个文件中,从本质上看,这种开发方式与单片机的开发并没有太大的区别,一旦硬件信息发生变化,就必须要修改驱动程序的源码。然而,Linux作为一个发展成熟、功能齐全、结构复杂的操作系统,它对于代码的可维护性、复用性非常......
  • svn cleanup 系统找不到指定路径_SVN:cleanup failed to process the following paths
    svn执行清理,提示“系统找不到指定的文件。”下面看一下如何解决这个问题吧:1.在sqlite官网(https://www.sqlite.org/download.html)下载sqlite-tools-win32-x86-3310100.zip(资源我会放在后面)下载下来打开如下图所示:2.将其中的sqlite3.exe文件复制到.svn目录下与wc.db同级......
  • Day28.property使用part1
    1.property使用part1 @property用法,代码如下:#装饰器是在不修改被装饰对象源代码以及调用方式的前提下为被装饰对象添加#新功能的可调用对象#property是一个装饰器,用来将绑定给对象的方法,伪装成一个数据属性(即不需要加`()`调用)'''成人的BMI数值:过轻:低于18.5......
  • 实验一百三十八:64位 WS2812B8*8 xRGB 5050 LED模块 ws2812s像素点阵屏
    另外:https://blog.csdn.net/asdhnkhn/article/details/133206543  【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)实验一百三十八:64位WS2812B8*8xRGB5050LED模块ws2812s像素点阵屏知识点:WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源......
  • 【一文开启StableDiffusion】最火AIGC绘画工具SD阿里云部署指南(含踩坑经验)
     Midjonery使用简单,效果出色,不过需要付费。本文将介绍完全开源的另一款产品StableDiffusion,它的社区目前非常活跃,各种插件和微调模型都非常多,而且它无需付费注册,没有速度、网络限制,非常推荐一试。目前主流AI绘画产品:产品优点缺点StableDiffusionStablityAI公司开源、免费,可......
  • [AAAI2024]Out-of-Distribution Detection in Long-Tailed Recognition with Calibrat
    这篇文章设置的问题是:考虑长尾分布的训练集下,对测试集上的OOD样本进行检测。作者在训练集中引入了openset样本学习异常表征,以OCL(OutlierClassLearn)为baseline,训练时引入prototype方法,推理时对logits进行调整校准。问题背景DNNs会把OOD(out-of-distribution)样本误分类为ID(in-di......
  • Error: Insufficient memory (Failed to allocate 16588800 bytes) in void* cv::OutO
    这个错误信息表明在运行OpenCV库时遇到了内存不足的问题。具体来说,OpenCV尝试分配大约16,588,800字节(16MB)的内存,但操作系统无法满足这个请求。这可能是由于以下原因:内存限制:你的设备或系统可能没有足够的内存来处理当前操作。这在资源有限的设备(如某些嵌入式系统或旧手机)上尤......
  • npm ERR! network request to https://registry.npmmirror.com/create-vite failed,
    npmERR!networkrequesttohttps://registry.npmmirror.com/create-vitefailed,  npmverbnpmv9.5.1npmERR!codeETIMEDOUTnpmERR!syscallconnectnpmERR!errnoETIMEDOUTnpmERR!networkrequesttohttps://registry.npmmirror.com/create-vitefailed,reas......
  • Day28.为何要隐藏属性
    1.为何要隐藏属性 为何要隐藏属性,代码:#2.为何要隐藏print('为何要隐藏'.center(50,'-'))#I、隐藏数据属性#将数据隐藏起来就限制了类外对数据的直接操作,然后类内应该提供相应的接口来允许类外部间接地操作数据,#接口之上可以附加额外的逻辑来对数据地操作进行严格......
  • Day28.如何隐藏属性
    1.如何隐藏属性_隐藏属性的使用方法2.如何隐藏属性_隐藏属性的需要注意的问题'''二:将封装的属性进行隐藏操作'''#1.如何隐藏:在属性名前加__前缀,就会实现对外隐藏属性效果#该隐藏需要注意的问题:#Ⅰ:在类外部无法直接访问双下滑线开头的属性,但知道了类名和属性名可以......