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为例)相关推荐

  1. 三大电机控制方案之DSP篇(1):TMS320F28335

    三大电机控制方案之DSP篇(1):TMS320F28335 简介: TMS320F28335数字信号处理器是属于C2000系列的一款浮点DSP控制器.与以往的定点DSP相比,该器件的精度高,成本低, ...

  2. DSP入门:中断PIE

    DSP入门:中断PIE 1.DSP中断管理分为3个层次:外设级,PIE级,CPU级.  其中,外设级中断管理负责具体外设中断源的允许与禁止,PIE级中断管理负责对外设级中断分组并按照优先级管理,CPU ...

  3. 《STM32从零开始学习历程》——USART串口通讯实验篇1——中断接收与发送

    <STM32从零开始学习历程>@EnzoReventon USART串口通讯实验篇1--中断接收与发送 最近开始接触了STM32F4xx系列单片机,对于我这个从零开始学习的小白来说,可谓困 ...

  4. DSP篇--C6678功能调试系列之EMIF、GPIO调试

    目录 1.EMIF调试 2.GPIO调试 前言不用多说,详见DSP篇--C6678功能调试系列之DDR3调试_nanke_yh的博客-CSDN博客 1.EMIF调试 EMIF主要是提供挂载的NOR F ...

  5. ASP.NET Google Maps Javascript API V3 实战基础篇一获取和设置事件处理程序中的属性...

    ASP.NET Google Maps Javascript API V3 实战基础篇一获取和设置事件处理程序中的属性 <%@ Page Language="C#" Auto ...

  6. DSP篇--C6701功能调试系列之 FLASH测试

    目录 1. FLASH介绍 2.  FLASH功能测试 调试的前期准备可以参考前面的博文:DSP篇--C6701功能调试系列之前期准备_nanke_yh的博客-CSDN博客 1. FLASH介绍 FL ...

  7. 帆软FineReport学习篇(四)——父子格设置

    帆软FineReport学习篇(四)--父子格设置 1.概念 子单元格设置父单元格后,子单元格随父单元格进行扩展 简易的说,子单元格根据父单元格分组显示 2 对比示意图 2.1 左父格对比示意图 2. ...

  8. DSP篇--C6678 SPI BOOT详解及其优化实现

    目录 0前话 一.SPI BOOT理解 1.配置Device configuration 2.boot table 格式 3.常规流程介绍 二.工具链介绍 三.多核启动过程 四.BOOT工具链软件的优 ...

  9. DSP篇--C6701 BOOT(头文件烧写法)

    目录 1.简介 2.具体步骤 2.1编写应用程序工程 2.2生成头文件 2.2.1分析.dat和.h文件 2.2.2头文件生成器软件设计和开发 2.3加载flash烧写程序完成烧写过程 1.简介 这是 ...

最新文章

  1. thinkphp读写mysql的枷锁_thinkphp5 数据库配置读写分离
  2. Stanford UFLDL教程 池化Pooling
  3. boost::container实现从内存资源派生的测试程序
  4. Linux设备中的并发控制
  5. Grabcut(一)
  6. ODP.NET 之 ExecuteNoQuery 执行 Merge into 返回值
  7. 强大的发包工具fine packet builder
  8. 经纬度PLT文件格式说明
  9. 借助终端软件,有效统一移动互联网和物联网
  10. 2019QS世界大学学科排名重磅发布!
  11. modelsim error:iteration limit reached at time xxx ns.
  12. 微信账户如何解除对第三方应用的授权
  13. RecyclerView 瀑布流错乱
  14. 安装mathtype到word2013及错误问题汇总
  15. 抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。
  16. 华为刘艺红: 面向未来 通信将是云管端市场
  17. 渲染中的概念(unity、mitsuba)
  18. 链表相关OJ及方法总结
  19. 双散列哈希之murmur
  20. 幸福女人的投资理财书——会理财的女人最有安全感

热门文章

  1. springboot+thymeleaf实现发Html邮件自由
  2. 微信支付出现 openid is invalid
  3. 计算机原理课 如何在中小学课堂中变成有趣,计算机组成原理课程习题答案秦磊华...
  4. 基于VLC实现RTSP推流桌面(共享桌面)
  5. 关于电子标准机柜的“U”和“19英寸”
  6. Linux内核SCSI子系统(1)基本介绍
  7. delphi 调用dll不成功返回句柄为0的原因
  8. 2023年git客户端下载git-2.40
  9. matlab变步长的梯形公式,用变步长梯形法计算积分∫sinx/x*x的近似值(二分二次即可)...
  10. 前端市场饱和了?到底是空穴来风还是另有原因!真相即将揭晓