【DSP学习】DSP28335 点亮LED

1 参考资料

  1. 普中DSP28335开发攻略

2 硬件设计

开发板上有 7 个 LED 连接 TMS320F28335 芯片管脚

D1 发光二极管阴极是连接在F28335 的GPIO68 管脚上,

D2 指示灯阴极连接在 GPIO67 管脚上,

其他LED 管脚以此类推。

如果要使 D1 指示灯亮,只需要控制 GPIO68 管脚输出低电平,

如果要使 D1 指示灯灭,只需控制 GPIO68 输出高电平。

3 实验目标

本章所要实现的功能是:点亮 D1 发光二极管,即让 F28335 的GPIO68 管脚输出一个低电平。完成后再控制D1指示灯闪烁,即间隔一定时间点亮和熄灭D1 指示灯。

程序框架如下:

(1)初始化LED控制IO口(使能对应IO外设时钟、配置IO为普通IO功能和输出模式、上拉设置等)

(2)LED控制程序

4 DSP GPIO初始化 GPIO68引脚

c 复制代码
GpioCtrlRegs.GPCMUX1.bit.GPIO68 = 0;  // 设置为普通GPIO模式
GpioCtrlRegs.GPCDIR.bit.GPIO68 = 1;   // 设置为输出方向
GpioCtrlRegs.GPCPUD.bit.GPIO68 = 0;   // 使能内部上拉电阻

1️⃣ GPCMUX1 - 引脚功能选择(MUX = Multiplexer)

作用:决定引脚是作为普通GPIO还是特殊外设功能

功能 说明
0 GPIO模式 普通输入输出引脚
1 外设功能1 如EPWM、CAP、EQEP等
2 外设功能2 其他外设功能
3 外设功能3 特殊功能
c 复制代码
GpioCtrlRegs.GPCMUX1.bit.GPIO68 = 0;  // 作为普通GPIO,不是PWM/ADC等

2️⃣ GPCDIR - 方向控制(DIR = Direction)

作用:设置引脚是输入还是输出

方向 说明
0 输入 读取外部信号
1 输出 驱动外部电路
c 复制代码
GpioCtrlRegs.GPCDIR.bit.GPIO68 = 1;   // 输出模式 → 可以控制LED、继电器等

3️⃣ GPCPUD - 上拉电阻控制(PUD = Pull-Up Disable)

注意:这个寄存器命名容易混淆

实际效果 说明
0 使能上拉 引脚空闲时被拉高到3.3V
1 禁用上拉 引脚高阻状态
c 复制代码
GpioCtrlRegs.GPCPUD.bit.GPIO68 = 0;   // 使能内部上拉电阻

5 GPIO引脚读写操作

函数中还有一个GpioDataRegs结构体变量,其内定义了GPIO所有关于数据寄存器,要操作它只需按照结构体方式引用即可。要操作的GPIO0-31即为GPA组,GPIO32-63为GPB组,GPIO64-83为GPC组。

对GPIO引脚进行读写操作有如下4种方式:

①可以通过GPxDAT寄存器独立读写IO信号。

②利用GPxSET寄存器写1(写0无效)对IO口置位。

③利用GPxCLEAR寄存器写1(写0无效)对IO口清零。

④利用GPxTOOGLE寄存器置1后(写0无效)翻转IO输出电平,原来高电平变成低电平,原来低电平变成高电平。

上面的x即表示A、B、C3组GPIO端口。如果要对GPIO输出控制,推荐使用②或③方式来实现,比如让GPIO68输出一个高电平,如下:

GpioDataRegs.GPCSET.bit.GPIO68=1;

如果要让GPIO68输出一个低电平,如下:

GpioDataRegs.GPCCLEAR.bit.GPIO68=1;

在需要读取IO口数据时可使用①方式来实现。

6 main函数

要点亮LED指示灯,在main函数内需要先调用LED初始化函数,然后调用LED1_ON宏定义。如果要让LED闪烁,需要在LED1_ON和LED1_OFF语句或者直接使用LED1_TOGGLE宏加入一定的延时,这个时间只要保证肉眼能够观察到闪烁

效果即可。

main.c内程序如下:

c 复制代码
#include"DSP2833x_Device.h" //DSP2833xHeaderfileIncludeFile
#include"DSP2833x_Examples.h" //DSP2833xExamplesIncludeFile
#include"leds.h"
//延时函数
voiddelay(void)
{
Uint16 i;
Uint32 j;
for(i=0;i<32;i++)
for(j=0;j<100000;j++);
}
voidmain()
{
InitSysCtrl();
LED_Init();
while(1)
{
LED1_TOGGLE;
delay();
}
}

主函数非常简单,首先调用InitSysCtrl(),完成系统时钟配置和使能各外设时钟,包括GPIO时钟。然后调用LED初始化函数,将GPIO68引脚配置为普通GPIO、输出方向、使能上拉。最后进入while循环内调用LED1_TOGGLE宏,让GPIO68引脚输出状态间隔delay时间翻转一次,即高电平变低电平,低电平

变高电平,从而实现点亮LED并使其闪烁。

相关推荐
dear_bi_MyOnly2 小时前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
一只小菜鸡..3 小时前
南京大学 操作系统 (JYY) 学习笔记:从 UNIX 到 Linux 与庞大的应用生态
笔记·学习·unix
MartinYeung54 小时前
[论文学习]迈向自主医疗人工智能智能体:MIRA系统深度分析
人工智能·学习
熊猫钓鱼>_>6 小时前
ArkTS 装饰器总览:V1 / V2 / 通用装饰器完整学习笔记
笔记·学习·华为·交互·harmonyos·arkts·arkweb
KOAN凯擎小妹8 小时前
无源晶振为什么有串联谐振和并联谐振?MCU为什么使用并联晶体?
单片机·嵌入式硬件·晶振·元器件
茯苓gao9 小时前
嵌入式开发笔记:CAN与CAN FD完全指南——从帧格式差异到MCU选型实战
网络·笔记·stm32·嵌入式硬件·学习·汽车
木木_王9 小时前
嵌入式学习 | STM32 裸板驱动开发(Day06) | DHT11温湿度传感器超详解(单总线时序+全套驱动代码+智能温湿度报警项目)
驱动开发·stm32·学习
FellAveal10 小时前
【Go语言入门学习笔记】Part19.速率控制、原子计数器、互斥锁(Mutex)、状态协程
笔记·学习·golang
你怎么知道我是队长10 小时前
经典蓝牙(Bluetooth Classic / BR/EDR)学习计划
学习
论迹复利10 小时前
蓝牙 OTA 升级断连、升级失败底层链路问题定位
嵌入式硬件·安全·bt