DSP28335——中断学习笔记

时间:2024年3月29日09点50分
在学习DSP28335过程中,对于中断没有很好的理解,因此重新通过一天的时间学习了以下中断的内容。下面就就是学习过程中的思路。
我们以前也学过stm32的中断,与stm32的中断类似,28335的中断也是需要设相应的寄存器。以普中的教学视频为例,使用按键key1 kye4 触发中断。我们先看看按键对应的原理图。
在这里插入图片描述
在这里插入图片描述)
在这里插入图片描述

从上图可以看出,TZ1和TZ2分别对应GPIO12和GPIO13,ECAP5对应GPIO48。首先我们设置GPIO48为低电平,这样就相当于接地,由于矩阵按键设置了上拉电阻,因此在按键key1 key4未按下时,TZ1,TZ2对应高电平,只有当按键按下,TZ1,TZ2的输入为低电平,当按键再次松开时又被拉回高电平。关于上拉电阻的知识请看这篇文章。链接

根据上述对GPIO的分析我们先看看对应的GPIO端口如何配置:

void EXTI1_Init(void)
{
	EALLOW;//允许对寄存器写操作
	SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    // GPIO input clock
	EDIS;//不允许对寄存器写操作

	EALLOW;
	//KEY端口配置
	GpioCtrlRegs.GPAMUX1.bit.GPIO12=0;//将gpio12设置成通用输入输出功能
	GpioCtrlRegs.GPADIR.bit.GPIO12=0;//将gpio12设置成输入模式
	GpioCtrlRegs.GPAPUD.bit.GPIO12=0;//将gpio12设置成通用输入输出功能
	GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0;        // 设置gpio12的不采样
	
	GpioCtrlRegs.GPBMUX2.bit.GPIO48=0;//将gpio48设置成通用输入输出功能
	GpioCtrlRegs.GPBDIR.bit.GPIO48=1;//将gpio48设置成通用输出输出功能
	GpioCtrlRegs.GPBPUD.bit.GPIO48=0;//使能gpio48的上拉功能
	GpioDataRegs.GPBCLEAR.bit.GPIO48=1;//将gpio48设置成低电平
	EDIS;

	EALLOW;
	GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12;   // XINT1是GPIO12
	//选择GPIO的
	EDIS;

	EALLOW;	// 修改被保护的寄存器,修改前应添加EALLOW语句
	PieVectTable.XINT1 = &EXTI1_IRQn;//中断函数的名称EXTI1_IRQn
	EDIS;   // EDIS的意思是不允许修改被保护的寄存器

	PieCtrlRegs.PIEIER1.bit.INTx4 = 1;          // 使能PIE组1的INT4

	XIntruptRegs.XINT1CR.bit.POLARITY = 0;      // 下降沿触发中断
	XIntruptRegs.XINT1CR.bit.ENABLE= 1;        // 使能XINT1

	IER |= M_INT1;                              // 使能CPU中断1(INT1)
	EINT;                                       // 开全局中断
	ERTM;
}

由于是初次接触,我们一点一点的分析代码的含义:
SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock 开启GPIO时钟
为什么这段代码这样写,如此就能开启GPIO的时钟吗?答案是可以的,我们看一下说明:
在这里插入图片描述

在这里插入图片描述
通过SysCtrlRegs结构体,我们可以看出SysCtrlRegs包含PCLKCR3

在这里插入图片描述
PCLKCR3这个联合体前16位预留,PCLKCR3_BITS中的GPIOINENCLK可以使能GPIO的输入时钟。
因此就有了这行代码SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock 开启GPIO时钟

接着往下看这行代码:GpioCtrlRegs.GPAMUX1.bit.GPIO12=0;
一个GPIO引脚有多个功能我们以GPIO7为例(为什么以7为例呢,因为参考手册上就是以7为例,我为了方便也以7为例):从下面两个图中可以知道,GPIO7是14,15位,将此位设置成 00 则默认通用输入输出功能,将其设置成01则设置为EPWM功能,将其设置成MCLKRA功能(我也不知道这是啥功能,有啥用QAQ),将其设置成11则设置成ECAP功能
在这里插入图片描述

在这里插入图片描述

再看看GpioCtrlRegs(GPIO控制寄存器)
在这里插入图片描述

在这里插入图片描述
也就是说GpioCtrlRegs可以控制GPIOA B C三个端口,共96个引脚,这个96很熟悉啊,在后面中断的学习中会再次见到。

接下来我们先看GPIOA的这一部分的内容
在这里插入图片描述
GPACTRL 寄存器将为输入引脚指定采样周期,GPACTRL 为输入引脚 0-31 指定采样周期,GPACTRL 位功能描述如下:
在这里插入图片描述
英文原版:
在这里插入图片描述

GPAQSEL
GPAQSEL1 寄存器用来配置采样数,也可以认为是滤波数,当干扰信号持续采样周期小于该寄存器设置的采样周期数时,干扰信号被滤除,该寄存器各位功能如下:

在这里插入图片描述
英文原版:

在这里插入图片描述
说实话 看不太懂,虽然我看不懂,但有人懂GPIO寄存器详细描述
00:为同步时钟输入,不采样。(我理解的采样是把数据存储到GPIODATA寄存器,虽然此时GPIO12也是输入功能,但不采样)
01:3采样
10:6采样
11:设置模式为外设时提供异步时钟信号,如果是设置为普通IO口输入则和设置为00具有相同的效果

我理解的采样是把数据存储到GPIODATA寄存器,虽然此时GPIO12也是输入功能,但不采样。所以代码GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0; 就是再GPIO12为输入模式下,不采样。

GPADIR 寄存器

GPxDIR 寄存器用来配置 GPIO 的输入输出方向,GPADIR 寄存器各位功能描述如下所示:
在这里插入图片描述
这个就不多解释了,因此这行代码GpioCtrlRegs.GPADIR.bit.GPIO12=0;的功能就是设置GPIO12引脚为输入功能

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DSP28335是德州仪器(Texas Instruments)推出的一款高性能数字信号处理器,而485则指的是RS-485通信协议。在DSP28335中使用RS-485通信协议时,可以通过中断来实现数据的发送和接收。 首先,通过设置DSP28335的串行通信口为RS-485模式,并设置相应的波特率和数据格式,使其能够与其他RS-485设备通信。然后,在编写程序时,需要配置和处理485中断。 编写485中断处理程序的步骤如下: 1. 配置中断优先级和中断服务函数:可以使用DSP28335中断控制器来配置中断优先级,并编写中断服务函数来处理485中断。 2. 配置和初始化485通信模块:编写代码来配置和初始化RS-485通信模块,包括设置发送和接收数据缓冲区,设置通信模式等。 3. 发送数据:通过编写相关代码将要发送的数据写入发送缓冲区,并启动发送中断。当发送数据完成时,可以通过相应的中断标志位来进行判断。 4. 接收数据:编写代码来处理接收数据中断,当有数据到达时,将其读取到接收缓冲区,并进行相应的处理。 5. 错误处理:在中断服务函数中需要处理可能发生的错误,比如校验错误、溢出错误等。 总结来说,DSP28335通过485中断可以实现与其他RS-485设备之间的数据通信。通过配置中断,编写相应的中断服务函数和设置发送和接收缓冲区,可以实现数据的发送和接收,并进行错误处理。这样,我们可以利用中断来完成DSP28335与其他设备之间的高效数据通信。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值