TMS320F28377D学习日志:day2点亮LED


一、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(1)
    {
        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
  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很遗憾,我不是一个代码生成器,但是我可以提供一些指导,帮助您了解如何在DSP28377D上进行SPI通讯配置。 下面是一份基本的SPI通讯配置程序: ``` #include <dsp28x_headers.h> void InitSpi(void) { EALLOW; /* 使能SPI的时钟 */ SysCtrlRegs.PCLKCR0.bit.SPI_A = 1; /* 配置SPI的工作模式 */ SpiRegs.SPICCR.bit.SPISWRESET = 0; SpiRegs.SPICCR.all = 0x0007; SpiRegs.SPICTL.all = 0x0006; SpiRegs.SPISTS.all = 0x0000; SpiRegs.SPIBRR = 0x007F; SpiRegs.SPICCR.bit.SPILBK = 0; SpiRegs.SPIFFTX.all = 0xC022; SpiRegs.SPIFFRX.all = 0x0022; SpiRegs.SPIFFCT.all = 0x00; SpiRegs.SPIPRI.all = 0x0010; EDIS; } ``` 以上是一份基本的SPI通讯配置程序的实例,您可以在其中添加更多的配置以满足您的需求。希望对您有所帮助! ### 回答2: DSP28377D是一款数字信号处理器,可以使用其进行SPI通讯配置。下面是一个简单的SPI通讯配置程序实例。 首先,需要引入相关的头文件: #include "DSP28377D_SysCtrl.h" #include "DSP28377D_SPI.h" 然后,在main函数中进行配置: int main(void) { // 系统初始化 InitSysCtrl(); // SPI模块初始化 InitSPI(); // 配置SPI通讯参数 SPICfg(); // 其他代码 while(1){} } 接着,需要在DSP28377D_SPI.c文件中实现SPI模块的初始化和配置函数。 void InitSPI(void) { // 使能SPI模块的时钟 EALLOW; SysCtrlRegs.PCLKCR1.bit.SPI_A = 1; EDIS; // 其他初始化操作 } void SPICfg(void) { // 配置SPI的模式、时钟频率、数据传输位数等参数 SpiaRegs.SPICCR.bit.SPISWRESET = 0; // 先关闭SPI模块的软复位功能 SpiaRegs.SPICCR.bit.SPICHAR = 7; // 设置每次数据传输的位数为8位 SpiaRegs.SPICTL.bit.CLK_PHASE = 1; // 设置时钟相位为增加到边沿 SpiaRegs.SPICTL.bit.CLKPOLARITY = 0; // 设置时钟极性为低有效 SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; // 设置为主设备模式 SpiaRegs.SPICTL.bit.TALK = 1; // 允许传输数据 SpiaRegs.SPICTL.bit.TURBO = 0; // 禁用Turbo模式 SpiaRegs.SPICTL.bit.SOFT = 0; // 硬件自动处理传输 SpiaRegs.SPIBRR = 255; // 设置SPI时钟分频系数为最大值,即SPI时钟频率最低 SpiaRegs.SPICCR.bit.SPISWRESET = 1; // 打开SPI模块的软复位功能 } 通过以上代码,就可以实现DSP28377D的SPI通讯配置。具体的数据传输和操作可以根据实际需求进行编写。 ### 回答3: 要进行DSP28377D的SPI通讯配置,可以参考以下步骤: 1. 首先,需要在程序中引入相关的头文件,如#include "F28x_Project.h"。 2. 接下来,需要初始化SPI控制器。可使用函数InitSpiaGpio()来配置SPI引脚,函数中使用GpioCtrlRegs.GPAMUX2.bit.GPIO17和 GpioCtrlRegs.GPAMUX2.bit.GPIO16来设置SPI的引脚功能为SPI模式。使用GpioCtrlRegs.GPADIR.bit.GPIO17和 GpioCtrlRegs.GPADIR.bit.GPIO16来设置SPI引脚的方向。 3. 然后,需要设置SPI控制器的工作模式。通过GPIO进行SPI通讯时,可以使用模拟接口方式还是仿真模式方式。使用此设置SPI控制寄存器 SPICTL的SPIMODE位。例如,使用SPI模拟接口,可以设置SPICTL的SPIMODE为0。SPI控制的传输速率可以在SPI控制寄存器SPIBRR中进行设置。 4. 接下来,可以配置SPI控制器的时钟分频率。可以使用函数SpiaRegs.SPICCR.bit.CLKPOL和SpiaRegs.SPICCR.bit.CLKPHASE进行设置。还可以用 SpiaRegs.SPICTL.bit.CLK_PHASE设置时钟相位。 5. 然后,需要配置SPI控制器的传输宽度。可以使用函数SpiaRegs.SPICCR.bit.SPICHAR进行设置。这个值决定了数据的位数。设置SPICHAR位7, 传输的数据位数为8位。 6. 最后,可以使用函数配置SPI控制器的其他参数,如SpiaRegs.SPIPRI.bit.FREE进行空闲时的SPI中断请求优先级的设置。 完成以上配置后,DSP28377D的SPI通讯模块已经配置好了,可以通过相应的寄存器控制SPI的通讯操作。 以上是一个关于DSP28377D进行SPI通讯配置程序实例的简要描述,具体的操作需要根据实际情况进行。祝您成功配置SPI通讯模块!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值