首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >dsp28335复位电路_28335串口不能中断

dsp28335复位电路_28335串口不能中断

作者头像
全栈程序员站长
发布于 2022-10-04 07:38:25
发布于 2022-10-04 07:38:25
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

0 前言

本期实验目标:采用外部中断方式响应按键触发,实现LED电平反转。

外部中断是DSP十分常用的功能,通常用来响应一些控制操作,比如判断按键是否按下,传感器是否接收到信号等等。那么通过该例程,大家则可以快速学会使用外部中断的功能!本节仍然将分为硬件部分、软件部分和实验展示三个方面进行介绍。

1 硬件部分

DSP28335支持XINT1-XINT7和XNMI共8路外部中断源,其中中断源XINT1/2和XNMI可以设定为从GPIO端口A的任意一个管脚输入,即GPIO0-GPIO31。而XINT3/4/5/6/7可以设定为从GPIO端口B的任意一个管脚输入,即GPIO32-GPIO63,在这里我们设置设置GPIO13作为XINT1源的输入。每个中断源的触发方式都分别支持:上升沿触发,下降沿触发,上升沿和下降沿同时触发。在这里我们设置下降沿触发方式。

图1给出了硬件连接图,由于核心板的4个按键都没有连接在外部中断源上,因此我们可以用杜邦线将GPIO67和GPIO13连起来,这样在按下按键的时候,GPIO67接收到的低电平就可以传到GPIO13,从而触发中断。

图1 硬件连接图

2 软件部分

注意:查看代码时双击点进去看,否则会内容不全。 bsp_led.c(GPIO配置和中断配置)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** * ******************************************************************************************** * @file bsp.led.c * @file SK Electronics * @version V1.0 * @date 2020-xx-xx * @brief LED应用函数接口 * ******************************************************************************************* * @attention * 实验平台:SK-F28335Mini 核心板 * CSDN博客:https://blog.csdn.net/weixin_46556696 * 淘宝:https://shop409670932.taobao.com */
#include "bsp_led.h"
void LED_GPIO_Config(void)
{ 

EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0=0;//普通IO模式
GpioCtrlRegs.GPAPUD.bit.GPIO0=0;//使能内部上拉
GpioCtrlRegs.GPADIR.bit.GPIO0=1;//配置成输出
GpioCtrlRegs.GPAMUX1.bit.GPIO1=0;//普通IO模式
GpioCtrlRegs.GPAPUD.bit.GPIO1=0;//使能内部上拉
GpioCtrlRegs.GPADIR.bit.GPIO1=1;//配置成输出
GpioCtrlRegs.GPAMUX1.bit.GPIO2=0;//普通IO模式
GpioCtrlRegs.GPAPUD.bit.GPIO2=0;//使能内部上拉
GpioCtrlRegs.GPADIR.bit.GPIO2=1;//配置成输出
GpioCtrlRegs.GPAMUX1.bit.GPIO3=0;//普通IO模式
GpioCtrlRegs.GPAPUD.bit.GPIO3=0;//使能内部上拉
GpioCtrlRegs.GPADIR.bit.GPIO3=1;//配置成输出
GpioCtrlRegs.GPAMUX1.bit.GPIO4=0;//普通IO模式
GpioCtrlRegs.GPAPUD.bit.GPIO4=0;//使能内部上拉
GpioCtrlRegs.GPADIR.bit.GPIO4=1;//配置成输出
GpioCtrlRegs.GPCMUX1.bit.GPIO67=0;//普通IO模式
GpioCtrlRegs.GPCPUD.bit.GPIO67=0;//使能内部上拉
GpioCtrlRegs.GPCDIR.bit.GPIO67=1;//配置成输出
GpioDataRegs.GPCCLEAR.bit.GPIO67=1;//默认输出低电平
GpioDataRegs. GPASET.bit.GPIO0=1;
GpioDataRegs. GPASET.bit.GPIO1=1;
GpioDataRegs. GPASET.bit.GPIO2=1;
GpioDataRegs. GPASET.bit.GPIO3=1;
GpioDataRegs. GPASET.bit.GPIO4=1;
EDIS;
}
void InitExInt(void)  //外部中断的配置
{ 

EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;      //普通IO模式
GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;       //设置为输入
// GpioCtrlRegs.GPAQSEL1.bit.GPIO13= 2; //采用6次采样的采样窗
// GpioCtrlRegs.GPACTRL.bit.QUALPRD1=255; //采样周期=510*系统时钟周期 采样窗时间=采样周期*(6-1) 17us 为了消除输入引脚噪声所用
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 13;//选择GPIO13为外部输入XINT输入引脚
XIntruptRegs.XINT1CR.bit.POLARITY= 0;     //下降沿触发中断
XIntruptRegs.XINT1CR.bit.ENABLE = 1;      //使能XINT中断
EDIS;
}

bsp_led.h

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** * ******************************************************************************************** * @file main.c * @file SK Electronics * @version V1.0 * @date 2020-xx-xx * @brief LED应用函数接口头文件 * ******************************************************************************************* * @attention * 实验平台:SK-F28335Mini 核心板 * CSDN博客:https://blog.csdn.net/weixin_46556696 * 淘宝:https://shop409670932.taobao.com */
#ifndef _BSP_LED_H_
#define _BSP_LED_H_
#include "DSP28x_Project.h"
/* 宏带参,可以像内联函数一样使用,低电平亮灯*/
#define LED0(a) if (a) \ GpioDataRegs. GPACLEAR.bit.GPIO0=1;\ else \ GpioDataRegs. GPASET.bit.GPIO0=1
#define LED1(a) if (a) \ GpioDataRegs. GPACLEAR.bit.GPIO1=1;\ else \ GpioDataRegs. GPASET.bit.GPIO1=1
#define LED2(a) if (a) \ GpioDataRegs. GPACLEAR.bit.GPIO2=1;\ else \ GpioDataRegs. GPASET.bit.GPIO2=1
#define LED3(a) if (a) \ GpioDataRegs. GPACLEAR.bit.GPIO3=1;\ else \ GpioDataRegs. GPASET.bit.GPIO3=1
#define LED4(a) if (a) \ GpioDataRegs. GPACLEAR.bit.GPIO4=1;\ else \ GpioDataRegs. GPASET.bit.GPIO4=1
/*定义IO口的宏*/
#define LED0_TOGGLE GpioDataRegs. GPATOGGLE.bit.GPIO0=1
#define LED0_OFF GpioDataRegs. GPASET.bit.GPIO0=1
#define LED0_ON GpioDataRegs. GPACLEAR.bit.GPIO0=1
#define LED1_TOGGLE GpioDataRegs. GPATOGGLE.bit.GPIO1=1
#define LED1_OFF GpioDataRegs. GPASET.bit.GPIO1=1
#define LED1_ON GpioDataRegs. GPACLEAR.bit.GPIO1=1
#define LED2_TOGGLE GpioDataRegs. GPATOGGLE.bit.GPIO2=1
#define LED2_OFF GpioDataRegs. GPASET.bit.GPIO2=1
#define LED2_ON GpioDataRegs. GPACLEAR.bit.GPIO2=1
#define LED3_TOGGLE GpioDataRegs. GPATOGGLE.bit.GPIO3=1
#define LED3_OFF GpioDataRegs. GPASET.bit.GPIO3=1
#define LED3_ON GpioDataRegs. GPACLEAR.bit.GPIO3=1
#define LED4_TOGGLE GpioDataRegs. GPATOGGLE.bit.GPIO4=1
#define LED4_OFF GpioDataRegs. GPASET.bit.GPIO4=1
#define LED4_ON GpioDataRegs. GPACLEAR.bit.GPIO4=1
void LED_GPIO_Config(void);
void InitExInt(void);
#endif /*_BSP_LED_H_ */

main.c

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** * ******************************************************************************************** * @file main.c * @file SK Electronics * @version V1.0 * @date 2021-xx-xx * @brief 外部中断测试 * ******************************************************************************************* * @attention * 实验平台:SK-F28335Mini 核心板 * CSDN博客:https://blog.csdn.net/weixin_46556696 * 淘宝:https://shop409670932.taobao.com */
#include "DSP28x_Project.h"
#include "bsp_led.h"
#define FLASH_RUN 1
#define SRAM_RUN 2
#define RUN_TYPE FLASH_RUN
#if RUN_TYPE==FLASH_RUN
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;
#endif
interrupt void ISRExint1(void);  //声明外部中断1
/**********************************************************************************************/
void delay_1ms(Uint16 t);
/** * @brief 主函数 * @parameter 无 * @return_value 无 */
void main(void)
{ 

/*第一步:初始化系统控制:*/
InitSysCtrl();
/*第二步:初始化GPIO口*/
InitGpio();
/* 第三步:清除所有中断 和初始化 PIE 向量表:*/
DINT;// 关闭全局中断
InitPieCtrl();// 初始化 PIE 控制寄存器到默认状态,默认状态是全部 PIE 中断被禁用和标志位被清除
IER = 0x0000;// 禁用 CPU 中断和清除所有 CPU 中断标志位:
IFR = 0x0000;
InitPieVectTable();// 初始化 PIE 中断向量表
// 中断重映射,注册中断程序入口(用户按需求添加)
EALLOW;
PieVectTable.XINT1 = &ISRExint1;     // 将外部中断添加都中断向量表里
EDIS;
//
/*程序烧录入28335(可选的)*/
#if RUN_TYPE==FLASH_RUN
MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
InitFlash();
#endif
/* 第四步: 初始化片上外设*/
// InitPeripherals(); //初始化所有外设(本例程不需要)
IER |= M_INT1;                       //使能第1组中断
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;   //使能总中断
PieCtrlRegs.PIEIER1.bit.INTx4= 1;    //使能第1组中断里的第4个中断--外部中断1
/* 第五步:添加用户功能具体代码*/
EINT;
ERTM;
LED_GPIO_Config();
InitExInt();
LED0(1);
LED1(1);
LED2(1);
LED3(1);
LED4(1);
for(;;)
{ 

}
}
void delay_1ms(Uint16 t)
{ 

while(t--)
{ 

DELAY_US(1000);
}
}
/**********************************************************************************************/
interrupt void ISRExint1(void)
{ 

PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;//0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
DELAY_US(1000);  //延时
if(GpioDataRegs.GPADAT.bit.GPIO13 == 0)//检测到电平变化触发中断
{ 

LED0_TOGGLE;  //取反
LED1_TOGGLE;  //取反
LED2_TOGGLE;  //取反
LED3_TOGGLE;  //取反
LED4_TOGGLE;
DELAY_US(5000);//延时
}
}

3 实验展示

程序烧录进去后,通过按键对应的按键,可以观察到LED的电平状态反转。

大家可以参考代码尝试一下, 有疑问的欢迎留言!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/196474.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月6日 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
(十一)DSP28335基础教程——EQEP实验(直流电机转速检测)
这一节我们来学习DSP的EQEP模块的功能。实验目标:通过光电编码器,将采集直流减速电机的转速并显示在LCD1602上。
全栈程序员站长
2022/11/10
2.3K0
(十一)DSP28335基础教程——EQEP实验(直流电机转速检测)
DSP开发,使用CCS软件建立工程以及烧录
开发板: 普中DSP开发板 CCS版本:6.1.3 主控芯片型号:TMS320F28335
全栈程序员站长
2022/07/22
4.8K0
DSP开发,使用CCS软件建立工程以及烧录
F28069M_GPIO
F28069M_GPIO简单控制 首先 看一下我简陋的代码 #include "DSP28x_Project.h" void gpio_setup(void); void main() { InitSysCtrl(); DINT; IER=0x0000; IFR=0x0000; InitPieVectTable(); gpio_setup(); while(1) { if(GpioDataRegs.GPADAT.bit.GP
歪先生
2018/06/13
1.2K0
DSP28335学习记录(一)
时钟通道图,CPU最高支持150M,需要配置的地方:OSCOFF、PLLCR、DIVSEL。
全栈程序员站长
2022/11/03
2K0
一小时彻底掌握stm32中断。
在STM32中执行中断主要分三部分: ==1.配置NVIC_Config()函数 2.配置EXTI_Config()函数 3.编写中断服务函数== (注:本文章所用代码为中断按键代码,实现了按键进入中断从而控制LED亮灭)了解10904更多92304加
7537367
2020/07/31
2.2K0
嵌入式- 按键中断控制LED灯
1.为按键K2和K3设置不同的中断优先级,K3优先级高于K2,并且K3可以打断正在执行的K2中断程序。
会洗碗的CV工程师
2024/02/10
1K0
嵌入式- 按键中断控制LED灯
【STM32】EXTI---外部中断/事件控制器
开发板:stm32f407VET6 开发环境:keil5 MDK 一、EXTI 简介 外部中断/事件控制器(EXTI)管理了控制器的 23个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以
AXYZdong
2020/10/29
1.5K0
【STM32】EXTI---外部中断/事件控制器
STM32CubeMX实战教程(三)——外部中断(中断及HAL_Delay函数避坑)
学单片机的,相信对中断的概念都已经了如指掌了,中断具体是什么我在这里也就不再详细说明,不懂的上网找找也一大堆。那么在介绍实验之前我先跟大家简单讲讲STM32当中的NVIC(嵌套向量中断控制器)
全栈程序员站长
2022/09/05
7K2
STM32CubeMX实战教程(三)——外部中断(中断及HAL_Delay函数避坑)
GPIO—按键中断
前面“第10章 基础重点—中断系统”介绍了STM32的中断和中断优先级,知道了所有外设中断都由 NVIC管理,比如USART、ADC、I2C、SPI等。GPIO产生的中断也不例外,但在给NVIC管理之前,还有一个EXTI(External interrupt/event controller,外部中断/事件控制器)先处理一下,如图 13.1.1 所示
韦东山
2022/05/05
3.2K0
GPIO—按键中断
中断-NVIC与EXTI外设详解(超全面)
NVIC :嵌套向量中断控制器,属于内核外设,管理着包括内核和片上所有外设的中断相关的功能。
全栈程序员站长
2022/08/24
2.2K0
中断-NVIC与EXTI外设详解(超全面)
单片机中断—外部中断
51系列单片机的中断共有5个,其中外部中断共占两个。外部中断主要通过单片机的引脚P3.3、P3.4接收外部脉冲或高低电平触发CPU中断。与外部中断有关的多功能寄存器为IE、IP、TCON。
电子工程师成长日记
2022/07/21
3.2K0
单片机中断—外部中断
STM32中断看这一篇就够了
参考资料:《STM32F10X-中文参考手册》中断和事件章节 《野火STM32手册》
秋名山码神
2023/11/17
3.2K0
STM32中断看这一篇就够了
STM32的外部中断(以按键为例)
外部中断一般用于接收外部特殊电平,比如红外线解码、倒车雷达(超声波)等其他外部信号,STM32的每个GPIO口都支持中断功能,上本文基于按键讲述外部中断功能。
皓琦
2023/12/26
3.1K0
STM32F0单片机快速入门五 GPIO中断
我们从一个例程看一下,如何用一个GPIO引脚来触发中断,来控制另一个引脚的翻转去控制LED指示灯。
用户2366192
2021/05/31
1.1K0
STM32Cube-05 | 使用EXIT检测按键
因为没有设置硬件上拉,所以我们配置开启上拉电阻,并设置用户标签为KEY1和KEY2,接下来是最重要的一步:
Mculover666
2020/07/16
1K0
STM32Cube-05 | 使用EXIT检测按键
【STM32】GPIO口以及EXTI外部中断
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
s-little-monster
2024/08/09
6580
【STM32】GPIO口以及EXTI外部中断
【STM32H7教程】第93章 STM32H7的SPI总线应用之驱动ADS1256(8通道24bit ADC, 增益可编程)
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第93章 STM32H7的SPI总线应用之驱动ADS125
Simon223
2021/12/02
3.3K0
【STM32H7教程】第93章       STM32H7的SPI总线应用之驱动ADS1256(8通道24bit ADC, 增益可编程)
物联网-GPIO输入—按键检测
通过按键控制三个LED灯的关灭,按下按键k2,LED显示流水灯样式,按下按键k3,LED从新开始显示流水灯。
会洗碗的CV工程师
2024/02/07
5490
物联网-GPIO输入—按键检测
如何用单片机高效处理矩阵按键?
矩阵按键是一种常见的输入设备,广泛应用于嵌入式系统中,如工业控制、消费电子和智能家居等领域。
不脱发的程序猿
2025/03/17
2380
如何用单片机高效处理矩阵按键?
100-CH32V307(WCH单片机)学习开发-GPIO电平检测,引脚中断
四位的二进制数共有 2^4 = 16种, 也就是 0000 - 1111 , 就是有 0 - 15 等级
杨奉武
2022/05/11
1.1K0
100-CH32V307(WCH单片机)学习开发-GPIO电平检测,引脚中断
相关推荐
(十一)DSP28335基础教程——EQEP实验(直流电机转速检测)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档