DSP CCS12.00 芯片:TMS320F28335 外部中断 XINT1, 和映射区域的 k1 -- k4 按键的功能实现
1.首先关于 是关于 外部中断 XINT1 的知识 的学习
1. F28335共支持7个外部中断XINT1-XINT7
2. XINT1-XINT2只能对GPIOO-GPIO31配置
3. XINT3-XINT7只对GPIO32-GPIO63配置
4. XINT13还有一个不可屏蔽的外部中断XNMI共用中断源。每一个外部中断可以被选择为正边沿或负边沿触发,也可以被使能或者禁止(包括XNMI) 。
5.可屏蔽中断单元包括一个16位增计数器,该计数器在检测到有效中断边沿时复位为0,同时用来准确记录中断发生的时间。
2.F28335外设中断分组 与相关的寄存器
3.外部中断源选择寄存器
4. 外部中断配置步骤 (我的芯片的 对应的XINT1 的GPIO端口是 29)(注意)
(第二步 ,因为我的 k1 -- k4 是映射区域 所以不需要 配置GPIO 端口为 输入)
5.代码 :功能:口软件设计
1:实现按键基本功能,按下K1~K4分别控制不同的LED灯或蜂鸣器。
2:通过按键EXINT1输入实现外部中断1功能,控制流水灯。
#include "DSP2833x_Device.h" // Headerfile Include File
#include "DSP2833x_Examples.h" // Examples Include File// 中断服务子程序在主程序下面时,需要在主程序之前要先申明才能使用.
interrupt void xint1_isr(void);
void delay_loop(void);
void Gpio_select(void);
void delay_loop_1(void);//超短时间的延时// 本例中用到的全局变量;
volatile Uint32 Xint1Count; //发生外部中断1的次数;
#define LED *((Uint16 *)0x4600)
const Uint16 LedCode[9]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0XFF};
#define Key_Read *((Uint16 *)0x4700)
#define KeyValue ((Key_Read)&0x0f)#define keyon1 GpioDataRegs.GPADAT.bit.GPIO29
#define DELAY 35.700L
unsigned int decetion;//流水灯 闪烁的方向void main(void)
{/*
// 步骤 1. 初始化系统控制:
// 设置PLL, WatchDog, 使能外设时钟
// 下面这个函数可以从DSP280x_SysCtrl.c文件中找到.InitSysCtrl();// 步骤 2. 初始化通用输入输出多路复用器GPIO:
// 这个函数在DSP280x_Gpio.c源文件中被定义了
// 这个函数使GPIO控制类寄存器初始化到默认状态
// InitGpio(); // Skipped for this example// 步骤 3. 清除所有中断,初始化中断向量表:
// 禁止CPU全局中断DINT;// 初始化PIE控制寄存器到他们的默认状态.
// 这个默认状态就是禁止PIE中断及清除所有PIE中断标志
// 这个函数放在DSP280x_PieCtrl.c源文件里InitPieCtrl();// 禁止CPU中断和清除所有CPU中断标志IER = 0x0000;IFR = 0x0000;//初始化PIE中断向量表,并使其指向中断服务子程序(ISR)
// 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中
// 这个函数放在了DSP280x_PieVect.c源文件里面.InitPieVectTable();// 本例中用到的中断重新映射到本件的中断服务子程序;EALLOW; // 修改被保护的寄存器,修改前应添加EALLOW语句PieVectTable.XINT1 = &xint1_isr;EDIS; // EDIS的意思是不允许修改被保护的寄存器// 步骤 4. 初始化片内外设:
// 这个函数可以在DSP280x_CpuTimers.c源文件中找到
// InitPeripherals(); // 本例中不需要// 步骤 5. 用户特定的代码来允许需要的中断// 清除计数器Xint1Count = 0; // 计数外部中断1(XINT1)// 在外设中断扩展模块中断使能寄存器中允许XINT1和XINT2: (组1中断4 & 5)
// 使能CPU中断1(INT1):PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // 使能外设中断扩展PIE模块PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能PIE组1的INT4IER |= M_INT1; // 使能CPU中断1(INT1)EINT; // 开全局中断// GPIO29配置为输入引脚通用I/O口,接按键TZ1,TZ2EALLOW;GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 0; // 选择为通用I/O口GpioCtrlRegs.GPADIR.bit.GPIO29 = 0; // 方向定义为输入GpioCtrlRegs.GPAPUD.bit.GPIO29=0;GpioCtrlRegs.GPAQSEL2.bit.GPIO29 = 0; // 外部中断1(XINT1)与系统时钟SYSCLKOUT同步GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = 0x80; // 每个采样窗口的周期EDIS;// 通过GPIO外部中断选择寄存器,选择GPIO12为外部中断1,选择GPIO13为外部中断2EALLOW;GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0x1D; // XINT1是GPIO29EDIS;// 配置外部中断1和2的中断控制寄存器XIntruptRegs.XINT1CR.bit.POLARITY = 0; // 下降沿触发中断// 使能外部中断1和外部中断2XIntruptRegs.XINT1CR.bit.ENABLE = 1; // 使能XINT1// 步骤6. 无限循环:*/InitSysCtrl();DINT;InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();Gpio_select();//GPIO led 端口初始化InitXintf();EALLOW; // 修改被保护的寄存器,修改前应添加EALLOW语句PieVectTable.XINT1 = &xint1_isr;EDIS; // EDIS的意思是不允许修改被保护的寄存器// 在外设中断扩展模块中断使能寄存器中允许XINT1和XINT2: (组1中断4 & 5)// 使能CPU中断1(INT1):PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // 使能外设中断扩展PIE模块PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能PIE组1的INT4IER |= M_INT1; // 使能CPU中断1(INT1)EINT; // 开全局中断// GPIO29配置为输入引脚通用I/O口,接按键TZ1,TZ2EALLOW;GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 0; // 选择为通用I/O口GpioCtrlRegs.GPADIR.bit.GPIO29 = 0; // 方向定义为输入GpioCtrlRegs.GPAPUD.bit.GPIO29=0;GpioCtrlRegs.GPAQSEL2.bit.GPIO29 = 0; // 外部中断1(XINT1)与系统时钟SYSCLKOUT同步GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = 0x80; // 每个采样窗口的周期EDIS;// 通过GPIO外部中断选择寄存器,选择GPIO12为外部中断1,选择GPIO13为外部中断2EALLOW;GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0x1D; // XINT1是GPIO29EDIS;// 配置外部中断1和2的中断控制寄存器XIntruptRegs.XINT1CR.bit.POLARITY = 0; // 下降沿触发中断// 使能外部中断1和外部中断2XIntruptRegs.XINT1CR.bit.ENABLE = 1; // 使能XINT1decetion=1;LED=0x00;//全亮delay_loop();int num=0;//这里不能是无符号的整形 因为 num 可能等于 -1for(;;){//按键中断if(decetion%2==0){LED=LedCode[num];delay_loop();num++;if(num>7){num=0;}}if(decetion%2==1){LED=LedCode[num];delay_loop();num--;if(num<0){num=7;}}//按键k1---k4//按键 谁为 0 谁就启动了!delay_loop_1();//这里加一个延时是为了保证 key 按键按下去的时候能够识别的到if(KeyValue==0x0e)//1110 e{GpioDataRegs.GPASET.bit.GPIO6=1;//设置GPIO6输出高电平 //关闭LED灯GpioDataRegs.GPASET.bit.GPIO7=1;//设置GPIO7输出高电平}delay_loop_1();//这里加一个延时是为了保证 key 按键按下去的时候能够识别的到if(KeyValue==0x0d) //1101 13->d{GpioDataRegs.GPACLEAR.bit.GPIO6 = 1; //设置GPIO输出为低电平 //打开led 灯GpioDataRegs.GPACLEAR.bit.GPIO7 = 1; //设置GPIO输出为低电平}delay_loop_1();//这里加一个延时是为了保证 key 按键按下去的时候能够识别的到if(KeyValue==0x0b)//1011 11->b{GpioDataRegs.GPBSET.bit.GPIO60=1;//设置GPIO60输出高电平 高电平响}delay_loop_1();//这里加一个延时是为了保证 key 按键按下去的时候能够识别的到if(KeyValue==0x07)//0111 7{GpioDataRegs.GPBCLEAR.bit.GPIO60 = 1; //设置GPIO60输出为低电平 蜂鸣器不响}}}//步骤7.在这里插入中断服务子程序,如果需要使用中断服务子程序,必须在步骤5中重新定义中断
//向量表中对应地地址
interrupt void xint1_isr(void)
{Uint32 i;for(i=0;i<1000000;i++); //键盘消抖动while(keyon1==0);decetion++;// 应答寄存器的位1清0,以响应同组内其他中断;PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}void delay_loop()
{Uint32 i;Uint32 j;for(i=0;i<40;i++){for (j = 0; j < 100000; j++);}}void Gpio_select(void)
{EALLOW;GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 00; // GPIO6为GPIO功能GpioCtrlRegs.GPADIR.bit.GPIO6 = 1; // GPIO6为输出功能GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 00; // GPIO7为GPIO功能GpioCtrlRegs.GPADIR.bit.GPIO7 = 1; // GPIO7为输出功能GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 00; // GPIO60为GPIO功能 //BEEPGpioCtrlRegs.GPBDIR.bit.GPIO60 = 1; // GPIO60为输出功能EDIS;}void delay_loop_1()//超短时间的延时
{Uint32 i;Uint32 j;for(i=0;i<20;i++){for (j = 0; j < 10000; j++);}
}//===========================================================================
// No more.
//===========================================================================
6.添加的知识:
- 如上图所示,外设的中断请求发送给PIE模块单元,每个单元负责8个外设或是引脚的中断请求
- PIEIFR是中断标志寄存器,中断到来后相应位置1.
- PIEIER是中断使能寄存器,控制是否使能某个中断
- PIEACK是中断应答寄存器,可读可写,读到的不同的值代表不同的中断应答状态。
PIE系统的分级
- 外设级
片内外设的各个中断信号都具有自己的中断标志寄存器和中断使能寄存器 - PIE级
将96个中断分成12组,每组负责8个中断 - CPU级
PIE将中断请求发送到CPU后,CPU中断标志寄存器IFR中对应的INTx将被置位
题目:
DSP CCS12.00 芯片:TMS320F28335 外部中断 XINT1, 和映射区域的 k1 -- k4 按键的功能实现相关推荐
- DSP CCS12.00 芯片:TMS320F28335 结课设计 综合设计 TFTLCD + 按键 + 蜂鸣器 + 流水灯
(永辉电子DSP 板子) 代码功能 : 1.外部中断 控制 流水灯的方向 2. key 1 开启 蜂鸣器 3.key 2 关闭 蜂鸣器 4.key 3 开启 LED灯 (可能按键不对 但是就是这几 ...
- DSP CCS12.00 芯片:TMS320F28335 TFTLCD显示屏幕的应用
1.我用的那个DSP 工具箱 是 永辉电子公司, 2.知识点 (无) 别人写好的代码,直接用!!! 3.具体操作 1.首先建立工程: 2.这次代码主要,需要添加一个 cmd 文件 关于寄存器的cmd文 ...
- DSP CCS12.00 芯片:TMS320F28335 结课设计 : 电机模块 + 按键模块 + EQEP 模块 设计 + TFTLCD 的设计 第一次尝试
1.首先教你怎么做 首先查看 两个文件 DSP2833x_EQep.h 文件 DSP2833x_EQep.c 文件 2.代码: (没有想到吧 ! 没有注释 !! 因为我也不知道,咋做出来的!!, ...
- DSP CCS12.00 芯片:TMS320F28335 直流电机部分 + TFTLCD 显示部分 + 按键模块
1. 首先我的 PWM 模块直接连接 了 直流电机 所以 我的 直流电机 利用 PWM 模块控制 . 直流电机 转速=(电枢端电压-两个电刷上的电压降-电枢绕组电阻上的压降)/(电机常数乘以电 ...
- DSP CCS12.00 芯片:TMS320F28335 ADC 的运用
1.AD 转换的四个步骤 实现ad转换需要经过取样.保持.量化.编码四个步骤. 2.AD 的含义 AD 转换 就是把模拟信号转换成数字信号.主要包括积分型.逐次逼近型.并行比较型/串并行型.Σ-Δ调制 ...
- DSP CCS12.00 芯片:TMS320F28335 结课设计 数字电压表 TFTLCD 模块 + ADC 模块
(永辉电子DSP 的板子 ) 扭动滑动变阻器 改变电压 代码: #include "DSP2833x_Device.h" // DSP2833x Headerfile Inclu ...
- DSP CCS12.00 芯片:TMS320F28335 结课设计 频率测量系统设计
(这篇文章我不负责 !!! , 我没搞懂) 永辉电子 DSP 板子 1.功能: PWM3B PWM3A 输出 : ECAP 模块测量 : 线的连接 第一种方法 ECAP 1A 模块 J7 4 ...
- DSP CCS12.00 芯片:TMS320F28335 PWM 的设计
先学习怎么 发出 PWM 的波形 (知识点看后面) 1.PWM输出配置步骤 EPWM相关文件 在DSP2833x_EPwm.c和DSP2833x_EPwm.h文件中. EALLOW;SysCtr ...
- TMS320F28335外部中断总结
TMS320F28335外部中断总结 在这里我们要十分清楚DSP的中断系统.C28XX一共有16个中断源,其中有2个不可屏蔽的中断RESET和NMI.定时器1和定时器2分别使用中断13和14.这样还有 ...
- stm32外部中断问题(每次stm32进行系统复位按键控制NRST=0,程序立马进入中断服务函数)
rf射频数据收发芯片的一个数据接收指示引脚连接stm32的一个gpio口,设置为中断口.当rf接收到数据的时候,数据接收指示引脚由高电平变为低电平,所以中断配置里面配置的是IPU,下降沿触发.系统复位 ...
最新文章
- 后台服务项目的白盒测试之旅
- mysql 4.0 删除重复_mysql删除重复数据
- ASP.NET 例程完全代码版(5)——通过web.config配置数据库连接池
- .NET Core开发实战(第26课:工程结构概览:定义应用分层及依赖关系)--学习笔记...
- c语言遍历字节,C语言遍历结构体
- Benelux Algorithm Programming Contest Final-B解题报告
- 用Not Exists 代替Not In
- setNavigationBarTitle小程序基础性操作标题改变
- 向量函数具有固定模的充要条件
- 解决maven中ojdbc14:11.2.0.1.0错误
- switchhost使用记录
- 快速上手python websockets
- 牛顿迭代法实现开根号
- Alpha Test和Alpha Blend Shader两种处理透明的方法
- html视频怎么添加封面,快影视频封面怎么添加文字标题
- 一个方便的大文件分割web工具
- 如何将静图制作成动图?教你一招快速合成GIF动图的方法
- asp.net房屋出租销售网
- Edge 浏览器 URLSearchParams bug 修复
- 关于MYM码支付系统