DSP篇_28335中断的设置及进入(以AD为例)
28335中断的设置步骤及进入
- 1.问题背景
- 2.配置中断的步骤
- 3.最后
1.问题背景
dsp断断续续用了也快一年了,以前就用用CAN,最近初次尝试用ad模块,想用来采采信号。但是无奈手生,以及ADC配置过程中出现了一些问题,中断服务程序进不去,后来看了TI官方的例程,终于又想明白,这次一定得记下来,搞工科做实验的,哪有什么都记得住,尤其是不常用的。
2.配置中断的步骤
严格按照TI或者成熟的例程来就不会错,其实这些例程人家模板都给做好了,按照段落填写就是。
下面贴上TI的"Example_2833xAdcSoc"例程。
// Included Files
//
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File//
// Function Prototypes
//
__interrupt void adc_isr(void);
//**中断函数声明,如果不想用库里自带的函数名字,那就在这里声明一个,这样就可以根据自己需要设置中断函数的名字**//
// Globals
//
Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 Voltage1[10];
Uint16 Voltage2[10];//
// Main
//
void main(void)
{//// Step 1. Initialize System Control:// PLL, WatchDog, enable Peripheral Clocks// This example function is found in the DSP2833x_SysCtrl.c file.//InitSysCtrl();EALLOW;#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT//// HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz//#define ADC_MODCLK 0x3#endif#if (CPU_FRQ_100MHZ)//// HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz//#define ADC_MODCLK 0x2#endifEDIS;//// Define ADCCLK clock frequency ( less than or equal to 25 MHz )// Assuming InitSysCtrl() has set SYSCLKOUT to 150 MHz//EALLOW;SysCtrlRegs.HISPCP.all = ADC_MODCLK;//由于是ADC,所以需要设置时钟分频EDIS;//// Step 2. Initialize GPIO:// This example function is found in the DSP2833x_Gpio.c file and// illustrates how to set the GPIO to it's default state.//// InitGpio(); // Skipped for this example//// Step 3. Clear all interrupts and initialize PIE vector table:// Disable CPU interrupts//DINT;//// Initialize the PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags// are cleared.// This function is found in the DSP2833x_PieCtrl.c file.//InitPieCtrl();//// Disable CPU interrupts and clear all CPU interrupt flags://IER = 0x0000;IFR = 0x0000;//// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).// This will populate the entire table, even if the interrupt// is not used in this example. This is useful for debug purposes.// The shell ISR routines are found in DSP2833x_DefaultIsr.c.// This function is found in DSP2833x_PieVect.c.//InitPieVectTable();//// Interrupts that are used in this example are re-mapped to// ISR functions found within this file.//EALLOW; // This is needed to write to EALLOW protected registerPieVectTable.ADCINT = &adc_isr;//将中断服务程序的函数名放在这,作为中断的入口EDIS; // This is needed to disable write to EALLOW protected registers//// Step 4. Initialize all the Device Peripherals:// This function is found in DSP2833x_InitPeripherals.c//// InitPeripherals(); // Not required for this exampleInitAdc(); // For this example, init the ADC//// Step 5. User specific code, enable interrupts:////// Enable ADCINT in PIE//PieCtrlRegs.PIEIER1.bit.INTx6 = 1;//PIE级:还要设置开启相应PIE向量对应组,对应位的中断使能,AD中断是第1组第6个IER |= M_INT1; // Enable CPU Interrupt 1 CPU级: CPU级也要开启相应中断线的使能位EINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGMLoopCount = 0;ConversionCount = 0;//// Configure ADC//AdcRegs.ADCMAXCONV.all = 0x0001; // Setup 2 conv's on SEQ1AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // Setup ADCINA3 as 1st SEQ1 conv.AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2; // Setup ADCINA2 as 2nd SEQ1 conv.//// Enable SOCA from ePWM to start SEQ1//AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)//// Assumes ePWM1 clock is already enabled in InitSysCtrl();////// Wait for ADC interrupt//for(;;){AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;LoopCount++;}
}//
// adc_isr -
//
__interrupt void
adc_isr(void)
{Voltage1[ConversionCount] = AdcRegs.ADCRESULT0 >>4;Voltage2[ConversionCount] = AdcRegs.ADCRESULT1 >>4;//// If 40 conversions have been logged, start over//if(ConversionCount == 9){ConversionCount = 0;}else{ConversionCount++;}//// Reinitialize for next ADC sequence//AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bitPieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIEreturn;
}//
// End of File
//
结论:静下心来,按照步骤走,总不会错的
3.最后
看起来TI的例程很简单、简洁,但是当加入很多模块,逻辑复杂后,这么简单的程序还是会出错。
一生二,二生三,三生万物。
DSP篇_28335中断的设置及进入(以AD为例)相关推荐
- 三大电机控制方案之DSP篇(1):TMS320F28335
三大电机控制方案之DSP篇(1):TMS320F28335 简介: TMS320F28335数字信号处理器是属于C2000系列的一款浮点DSP控制器.与以往的定点DSP相比,该器件的精度高,成本低, ...
- DSP入门:中断PIE
DSP入门:中断PIE 1.DSP中断管理分为3个层次:外设级,PIE级,CPU级. 其中,外设级中断管理负责具体外设中断源的允许与禁止,PIE级中断管理负责对外设级中断分组并按照优先级管理,CPU ...
- 《STM32从零开始学习历程》——USART串口通讯实验篇1——中断接收与发送
<STM32从零开始学习历程>@EnzoReventon USART串口通讯实验篇1--中断接收与发送 最近开始接触了STM32F4xx系列单片机,对于我这个从零开始学习的小白来说,可谓困 ...
- DSP篇--C6678功能调试系列之EMIF、GPIO调试
目录 1.EMIF调试 2.GPIO调试 前言不用多说,详见DSP篇--C6678功能调试系列之DDR3调试_nanke_yh的博客-CSDN博客 1.EMIF调试 EMIF主要是提供挂载的NOR F ...
- ASP.NET Google Maps Javascript API V3 实战基础篇一获取和设置事件处理程序中的属性...
ASP.NET Google Maps Javascript API V3 实战基础篇一获取和设置事件处理程序中的属性 <%@ Page Language="C#" Auto ...
- DSP篇--C6701功能调试系列之 FLASH测试
目录 1. FLASH介绍 2. FLASH功能测试 调试的前期准备可以参考前面的博文:DSP篇--C6701功能调试系列之前期准备_nanke_yh的博客-CSDN博客 1. FLASH介绍 FL ...
- 帆软FineReport学习篇(四)——父子格设置
帆软FineReport学习篇(四)--父子格设置 1.概念 子单元格设置父单元格后,子单元格随父单元格进行扩展 简易的说,子单元格根据父单元格分组显示 2 对比示意图 2.1 左父格对比示意图 2. ...
- DSP篇--C6678 SPI BOOT详解及其优化实现
目录 0前话 一.SPI BOOT理解 1.配置Device configuration 2.boot table 格式 3.常规流程介绍 二.工具链介绍 三.多核启动过程 四.BOOT工具链软件的优 ...
- DSP篇--C6701 BOOT(头文件烧写法)
目录 1.简介 2.具体步骤 2.1编写应用程序工程 2.2生成头文件 2.2.1分析.dat和.h文件 2.2.2头文件生成器软件设计和开发 2.3加载flash烧写程序完成烧写过程 1.简介 这是 ...
最新文章
- thinkphp读写mysql的枷锁_thinkphp5 数据库配置读写分离
- Stanford UFLDL教程 池化Pooling
- boost::container实现从内存资源派生的测试程序
- Linux设备中的并发控制
- Grabcut(一)
- ODP.NET 之 ExecuteNoQuery 执行 Merge into 返回值
- 强大的发包工具fine packet builder
- 经纬度PLT文件格式说明
- 借助终端软件,有效统一移动互联网和物联网
- 2019QS世界大学学科排名重磅发布!
- modelsim error:iteration limit reached at time xxx ns.
- 微信账户如何解除对第三方应用的授权
- RecyclerView 瀑布流错乱
- 安装mathtype到word2013及错误问题汇总
- 抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。
- 华为刘艺红: 面向未来 通信将是云管端市场
- 渲染中的概念(unity、mitsuba)
- 链表相关OJ及方法总结
- 双散列哈希之murmur
- 幸福女人的投资理财书——会理财的女人最有安全感
热门文章
- springboot+thymeleaf实现发Html邮件自由
- 微信支付出现 openid is invalid
- 计算机原理课 如何在中小学课堂中变成有趣,计算机组成原理课程习题答案秦磊华...
- 基于VLC实现RTSP推流桌面(共享桌面)
- 关于电子标准机柜的“U”和“19英寸”
- Linux内核SCSI子系统(1)基本介绍
- delphi 调用dll不成功返回句柄为0的原因
- 2023年git客户端下载git-2.40
- matlab变步长的梯形公式,用变步长梯形法计算积分∫sinx/x*x的近似值(二分二次即可)...
- 前端市场饱和了?到底是空穴来风还是另有原因!真相即将揭晓