精华内容
下载资源
问答
  • dsp2812 ADC程序

    2013-12-12 19:49:13
    基于dsp2812pwm驱动程序,可读性强。
  • adc805的dsp2812驱动程序

    2011-10-24 22:13:28
    使用adc805的dsp2812接口程序
  • * 例程功能:利用中断定时器每隔一秒钟,从DSP28335A0、A1口接收模拟信号,并转换为数字信号存放在SampleTable1,SampleTable2中。 * */ #include "DSP2833x_Device.h" // DSP2833x头文件 #include "DSP2833x_...
  •  (1)首先定义必要头文件及程序用到全局变量。  (2)对系统要用到各个I/O端口进行初始化。  (3)A/D模块初始化子程序,选择A/D转换通道,开A/D转换器并设定A/D转换时钟。  (4)软件延时自...
  • 程序用于进行A/D转换演示,A/D转换结果存于数足ADRESULT[16]中,寄存器cesi用于测试每个A/D转换结果
  • DSP2812的程序

    2012-12-11 15:36:55
    包含了大量TMS320F2812例程,如GPIO、CPU定时器、中断系统、EV、ADC、SCI、SPI、ECAN等。
  • DSP28335入门教程:ADC的使用

    千次阅读 2019-03-15 20:21:10
    老笨来讲讲dsp28335的ADC的最基本用法。 先来看看硬件电路连接图: 程序 #include "DSP28x_Project.h" #define ADC_CKPS 0x1 // ADC module clock = HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2) = 12.5...

    老笨来讲讲dsp28335的ADC的最基本用法。

    先来看看硬件电路连接图:

    程序

    #include "DSP28x_Project.h"
    
    #define ADC_CKPS   0x1   // ADC module clock = HSPCLK/2*ADC_CKPS   = 25.0MHz/(1*2) = 12.5MHz
    #define ADC_SHCLK  0xf   // S/H width in ADC module periods                        = 16 ADC clocks
    
    #define BUFF_SIZE   4
    Uint16 SampleTable[BUFF_SIZE];
    
    main()
    {
        Uint16 i;
    
        InitSysCtrl();
        EALLOW;                         //允许编辑受保护的寄存器
        SysCtrlRegs.HISPCP.all = 0x3;   //HSPCLK = SYSCLKOUT/6 = 25.0 MHz
        EDIS;                           //禁止编辑
        DINT;                           //关中断
        InitPieCtrl();                  //复位PIE控制寄存器为0
        IER = 0x0000;                   //清除所有CPU中断标识
        IFR = 0x0000;
        InitPieVectTable();             //初始化中断向量表
    
        InitAdc();                      //开启ADC时钟,校准,ADC电路上电
    
        AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
        AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
        AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        //1 级联模式
    
        AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 3;    //设置最大通道数为n + 1,从通道0开始,按照顺序算
        AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;   //通道(管脚)选择 ADCINA0
        AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1;   //ADCINA1
        AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x8;   //ADCINB0
        AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x9;   //ADCINB1
    
        AdcRegs.ADCTRL1.bit.CONT_RUN = 1;        //连续运行模式
    
        AdcRegs.ADCTRL2.all = 0x2000;            //1 << 13; Start SEQ1. 级联模式下不需要开启SEQ2
    
        for(i = 0; i < BUFF_SIZE; i++)
        {
            SampleTable[i] = 0;
        }
        for(;;)
        {
            while (AdcRegs.ADCST.bit.INT_SEQ1 == 0) {}  //等待转换完成,级联不需要等待INT_SEQ2
            AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;         //清除中断标识
            SampleTable[0] = AdcRegs.ADCRESULT0>>4;
            SampleTable[1] = AdcRegs.ADCRESULT1>>4;
            SampleTable[2] = AdcRegs.ADCRESULT2>>4;
            SampleTable[3] = AdcRegs.ADCRESULT3>>4;
        }
    }
    
    
    

     

    程序解析

    SysCtrlRegs.HISPCP.all = 0x3;

     

     

    这个时钟的设置请看下图

     再来看看是如何选择管脚的。dsp28335有1个12位adc共16个通道CONV00-CONV15,分为四个组,

    ADCCHSELSEQ1-4,对应的管脚为ADCINA0-ADCINA7,ADCINB0-ADCINB7,在级联模式下就直

    接设置对应的数值即可,现在仔细体会以下代码,应该不难理解:

        AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 3;    //设置最大通道数为n + 1,从通道0开始,按照顺序算
    
        AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;   //管脚为ADCINA0,转换结果在AdcRegs.ADCRESULT0
        AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1;   //ADCINA1,AdcRegs.ADCRESULT1
        AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x8;   //ADCINB0,AdcRegs.ADCRESULT2
        AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x9;   //ADCINB1,AdcRegs.ADCRESULT3
        
        AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0xa;   //ADCINB1,AdcRegs.ADCRESULT4
        AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x1;   //ADCINA1,AdcRegs.ADCRESULT5
        AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0xe;   //ADCINB6,AdcRegs.ADCRESULT8
        AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0xf;   //ADCINB7,AdcRegs.ADCRESULT12

    注意一下MAX_CONV1 = 3,最大通道数为3 + 1 = 4通道,也就是只转换CONV00,CONV01,CONV02,CONV03,结果存在ADCRESULT0-3中,ADCRESULT4及往后读出来为零。以此类推,MAX_CONV1 = 6,则只转换CONV00-CONV06。

     

    观察结果

    打开Expression窗口,添加SampleTable变量观察。用一字螺丝刀调节变阻器,可以看到数值相应变化。

     

    好,老笨就说到这了。

     

     

     

     

     

     

     

     

    展开全文
  • DSPF28027驱动12864的程序,采用串行方式,此外工程中含有单相逆变SPWM程序ADC采样程序
  • 包含经典教程 11 个 非常适合初学者学习的DSP 简单程序 对于理解DSP 工作方式 寄存器设置 CCS应用 CMD 使用都是非常有帮助··!!!
  • 利用Embedded Targetfor T1 C2000 DSP工具包,设计DSP的ADC转换程序;利用Simulink的数字信号处理工具包,设计FIR滤波嚣进行滤波处理;给出在修改生成的C语言程序时如何使DSP能正确运行。设计的程序在TM$320LF2407A...
  • 主要是三步: 1、ADC原理+DSP的ADC原理 2、配置说明 3、具体程序

    前言

    DSP28335的ADC模块使用介绍:

    • 12位ADC
    • 2个采样保持器
    • 同步采样或顺序采样,使用顺序采样
    • 输入范围0-3V
    • 时钟配置为最高25MHz
    • 级联模式或双排序模式,采用级联模式,8状态排序器SEQ1和SEQ2构成16状态的SEQ
    • 选择EPWMxSOCA作为触发源启动ADC转换,采样频率为10K

    主要内容:
    1、ADC原理+DSP的ADC原理
    2、具体程序

    ADC转换原理

    ADC就是模数转换器,将模拟量转换为数字量,通常就是对电流、电压等进行采样,然后进行转换,得到数字量,再在软件中进行编程换算得到实际的值。
    A/D转换一般要经过取样、保持、量化及编码4个过程。28335的ADC模块如Figure1-1所示。采样数据通过通过传输至Analog MUX,然后送到EPWM SOCA处理,然后送至12位ADC转换器模组进行转换,输出到结果寄存器。
    转换公式如下:
    RealValue= SampleValue * 3.0f / 4096.0f

    触发方式

    三种触发方式可以开始ADC转换,具体如下:

    1. S/W软件立即启动
    2. EPWM SOCA、SOCB转换启动
    3. XINT2 ADC转换开始

    采用EPWM SOCA启动方式

    在这里插入图片描述

    如何触发ADC?

    1、使用EPWM的SOCA触发;

    AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1 
    AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;  // Enable SEQ1 interrupt (every EOS)
    

    2、使能EPWMxSOCA信号的产生,以何种方式何时产生;

    EPwm1Regs.ETSEL.bit.SOCAEN = 1;        // Enable SOC on A group
    EPwm1Regs.ETSEL.bit.SOCASEL = 4;       // Select SOC from from CPMA on upcount CTR = CMPA且为向上计数是产生触发事件
    EPwm1Regs.ETPS.bit.SOCAPRD = 1;        // Generate pulse on 1st event  在第一个事件时产生SOCA信号
    EPwm1Regs.CMPA.half.CMPA = 0x0080;	  // Set compare A value
    

    3、EPWM为up-down模式,触发频率为10K,时钟为150MHz;

    EPwm1Regs.TBPRD = 0x1D4C;              // Set period for ePWM1  7500  10K
    EPwm1Regs.TBCTR = 0x0000U;			  // 
    EPwm1Regs.TBCTL.bit.CTRMODE = 2;		  // up-down模式
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x00;  // 	使用系统时钟
    EPwm1Regs.TBCTL.bit.CLKDIV = 0x00;
    

    ADC初始化配置程序如下:

    #include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
    #include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
    #include "DSP2833x_Adc.h"
    
    #define ADC_usDELAY 5000L
    
    Uint16 Sample_I = 0U;
    float Real_I = 0.0f;
    float Base_Current = 3.0f / 4096.0f;
    
    void init_28335ADC_CLK(void)
    {
    	EALLOW;
    	#define ADC_MODCLK 0x03
    	SysCtrlRegs.HISPCP.all = ADC_MODCLK;
    	EDIS;
    }
    // ADC初始化
    void init_adc_config(void)
    {
    	extern void DSP28x_usDelay(Uint32 Count);
    
    	EALLOW;
    	SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
    	ADC_cal();
    	EDIS;
    	AdcRegs.ADCTRL3.all = 0x00E0;  // Power up bandgap/reference/ADC circuits
    	DELAY_US(ADC_usDELAY);         // Delay before converting ADC channels
    
    	// Configure ADC
       AdcRegs.ADCMAXCONV.all = 0x000F;       // Setup 1 conv's on SEQ1  16个通道
       AdcRegs.ADCTRL1.bit.ACQ_PS = 0x1;
    
       AdcRegs.ADCTRL3.bit.SMODE_SEL = 0;	// 顺序采样
       AdcRegs.ADCTRL1.bit.CPS = 0;			// 对外设时钟HSPCLK不分频
       AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x0;	// ADC内核时钟不分频 ADCCLK = HSPCLK / (CPS + 1) = 25MHz
       AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;	// 级联排序模式
       AdcRegs.ADCTRL1.bit.CONT_RUN = 1;	// 连续模式
       AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1;	// 排序覆盖
    
    	// 转换顺序
       AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x00U; // Setup ADCINA0 as 1st SEQ1 conv.
       AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x01U;
       AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x02U;
       AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x03U;
    
       AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x04U;
       AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x05U;
       AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x06U;
       AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x07U;
    
       AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x08U;
       AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x09U;
       AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0x0AU;
       AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x0BU;
    
       AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0x0CU;
       AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0x0DU;
       AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0x0EU;
       AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0x0FU;
    
       AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// 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();
       EPwm1Regs.ETSEL.bit.SOCAEN = 1;        // Enable SOC on A group
       EPwm1Regs.ETSEL.bit.SOCASEL = 4;       // Select SOC from from CPMA on upcount CTR = CMPA且为向上计数是产生触发事件
       EPwm1Regs.ETPS.bit.SOCAPRD = 1;        // Generate pulse on 1st event  在第一个事件时产生SOCA信号
       EPwm1Regs.CMPA.half.CMPA = 0x0080;	  // Set compare A value
    
       // 设置EPWM触发源
       EPwm1Regs.TBPRD = 0x1D4C;              // Set period for ePWM1  7500  10K
       EPwm1Regs.TBCTR = 0x0000U;			  // 
       EPwm1Regs.TBCTL.bit.CTRMODE = 2;		  // up-down模式
       EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x00;  // 	使用系统时钟
       EPwm1Regs.TBCTL.bit.CLKDIV = 0x00;
    }
    // 转换计算
    interrupt void adc_isr(void)
    {
    	Sample_I = AdcRegs.ADCRESULT0 >>4;		// 采样数据
    	Real_I = (float)Sample_I * Base_Current;// 实际电流
    }
    

    注意

    1、ADC通道、结果寄存器对应关系:

    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x02U; // Setup ADCINA0 as 1st SEQ1 conv.
    AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x03U;
    AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x00U;
    AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x01U;
    
    ADCINA2 -> AdcRegs.ADCRESULT0;
    ADCINA3 -> AdcRegs.ADCRESULT1;
    ADCINA0 -> AdcRegs.ADCRESULT2;
    ADCINA1 -> AdcRegs.ADCRESULT3;
    

    由上面的代码可知,你的通道对应哪个CONVxx,则结果就存在哪个结果寄存器AdcRegs.ADCRESULTxx:
    CONV00------------------AdcRegs.ADCRESULT0
    CONV01------------------AdcRegs.ADCRESULT1

    CONV15------------------AdcRegs.ADCRESULT15
    这个对应关系是固定不变的,而A/D输入通道,可以根据自己选择排序控制寄存器的哪四位即CONVxx输入,然后进行转换。

    2、为什么结果寄存器的值由进行右移4位

    结果寄存器是16位的,而28335的ADC模块是12位的,一般使用的是映射在外设帧2,左对齐方式,,故前4位是保留的,所以需要右移4位才能得到实际值。
    在这里插入图片描述
    ADC结果寄存器是双映射。外设帧2(0x7108-0x7117)中的位置为2等待状态,且为左对齐。外设帧0空间(0x0B00-0x0B0F)的位置对CPU访问是1等待状态和对于DMA访问是0等待状态,右对齐。在ADC的高速/连续转换使用期间,使用0等待状态位置进行ADC结果到用户内存的快速转换。

    DSP2833x_Headers_nonBIOS.cmd中
    ADC_MIRROR : origin = 0x000B00, length = 0x000010 /* ADC Results register mirror /
    ADC : origin = 0x007100, length = 0x000020 /
    ADC registers */

    如何选择使用外设帧0?

    展开全文
  • PIC16F877单片机的ADC内部结构如图1所示。40引脚封装芯片与28引脚封装芯片的区别主要在于模拟口的数量不同,28引脚封装芯片没有AN5~AN7模拟量输入通道,其他各部分的功能和组成关系相同。PIC16F877单片机的ADC内部...
  • ADC实现数字量向模拟量的转换,DSP28335中的ADC模块有16个输入通道,可以配置为两个独立的8通道模块,同时两个独立的8通道模块可以级联成为一个16通道的模块
  • 1. 定位到main.c文件中如下语句 2.注意这一段位置,必须初始化在所有外设前面(放在TIMER后面),不然 InitADC() 会报错,因为ADC的初始化函数调用了相关函数 ...

    1. 定位到main.c文件中的如下语句

     

     

    2.注意这一段的位置,必须初始化在所有外设的前面(放在TIMER后面),不然 InitADC() 会报错,因为ADC的初始化函数调用了相关函数

    展开全文
  • 我们都知道,DSP在进行程序调试时有两种运行模式,一种是程序在RAM中运行调试...ControlSUITE是个TI的官方数据库软件,它提供了很多关于DSP的官方例程,这些例程均可使实现两种下载方式的切换。 下图是F2837xD的adc_so

    我们都知道,DSP在进行程序调试时有两种运行模式,一种是程序在RAM中运行调试,另一种是在Flash中运行调试,在RAM中的Debug时间特别短,板子一旦掉电程序将不复存在;在Flash中下载程序特别慢,但是板子掉电后程序不会丢失。可以说他们各有有缺点,也有他们的应用场景。

    如何在一个程序中轻松进行这两种模式的切换呢?本文给出了作者探索的答案。

    ControlSUITE是个TI的官方数据库软件,它提供了很多关于DSP的官方例程,这些例程均可使实现两种下载方式的切换。

    下图是F2837xD的adc_soc_epwm_cpu01的例程,可以看到他有两种下载模式

    只要在,Manage Configuration中选中你要的下载方式并Set Active该方式就可以实现切换。


    如何使我们的程序实现这两种方式的切换呢?步骤如下。

    首选新建一个任意下载方式的CCS程序,上篇文章中我们建立一个Flash下载的程序,该程序编译后没有问题,并且可以下载到DSP的Flash当中。

    从上图可以看到在Configuration中只有Debug这一种,Debug由于我们之前的设置,他为Flash下载模型。接再来我们添加RAM模式。

    1.点击New...

    2.命名新的Configuration,名字尽可能通俗易懂,

    3.配置相应的linker command file,最后一定要点Apply and Close,否则白配置了!

    配置完编译后你会发现新的文件夹出现。


    一般这个配置要在程序编写前开始!

    展开全文
  • 片上有丰富片内外设,根据型号不同,包括ADC、DAC、UART、捕捉/比较模块可编程计数器/定时器阵列、SPI、SMBus等。  C8051Fxxx单片机有大容量Flash存储器,用于程序代码和非易失性数据存储,可在系统编程。...
  • 作为凌阳SPMC65系列8位工业级单片机中新成员,该芯片具有定时/计数器、外部中断源以及ADC、PWM、标准通讯接口等功能,适用于通用工控、计算机外围控制和家电等应用。  SPMC65P2102A采用SPMC65 CPU内核,系统...
  • 关于dsp28335移相全桥易于理解的程序

    千次阅读 2018-12-09 22:01:39
    程序ADC.h函数中 在interrupt void adc_isr(void) 函数中做数据处理: /* * ADC.c * * Created on: 2017年8月5日 * Author: chris */ #include "DSP2833x_Device.h" // DSP2833x Headerfile...
  • MAX121 是一款具有DSP接口14位串行ADC,最大采样速率308KBPS,驱动程序如下: #include &lt;csl.h&gt; #include &lt;csl_mcbsp.h&gt; MCBSP_Handle hADC; /* */ MCBSP_Config ADC_Mcbsp0 = {...
  • dsp汇编程序 LED

    2009-07-20 23:13:35
    PORTW *(10h),ADC_DAT ;初始化AD1571 PORTW *(11h),ADC_DAT ;初始化AD1571 LOOP: NOP B LOOP Eint1_ISR: PSHM AR0 ;保护AR0 PORTR ADC_DAT,*(10h) ;读取AD采样数据 PORTW *(10h),...
  • 利用DSP TMS320F28027自带温度传感器来检测主芯片温度,ADC的触发源选为TIMER0,每一秒检测一次,再把结果转成摄氏度和K氏温度。 仅供DSP学习所用,软件用是CCS4.1,编译如果不能通过,就把工程存放目录名...
  • Matlab生成dsp程序——官方例程学习

    千次阅读 2020-07-03 20:28:17
    Matlab生成dsp程序——官方例程学习写在下面ADC-PWM例子学习一、基本功能二、生成代码分析三、总结 写在下面话    还是很建议大家多去学习官方例程,真能够收获到很多很多东西!例程和ccs程序我也会...
  • 作为凌阳SPMC65系列8位工业级单片机中新成员,该芯片具有定时/计数器、外部中断源以及ADC、PWM、标准通讯接口等功能,适用于通用工控、计算机外围控制和家电等应用。  SPMC65P2102A采用SPMC65 CPU内核,系统...
  • 文中给出了具体硬件实现框图以及用来产生波形的DSP汇编源程序。    关键词:DSP;AD7846;波形发生器   引言   随着电子技术发展,波形发生器已经广泛应用在通信,控制,测量等各个领域。在很多地方...
  • 摘 要: 提出了一种使用视频A/D芯片TLC5510与低档DSP芯片TMS320F206实现图像采集接口设计方案,同时给出了接口程序,为低档DSP芯片提供了一条新应用途径。关键词: ADC DSP接口设计视频   数字信号处理器...
  • DSP

    2010-11-03 19:00:00
    DSP28_ADC.C 外设AD初始化函数,与外设AD相关DSP28_CpuTimers.C CPU定时器初始化和配置函数,与CPU定时器相关DSP28_DefaultIsr.C 这个文件很重要,包含了2812所有中断函数,写中断时,只要将程序写在对应...
  • 摘要:提出了一种使用视频A/D芯片TLC5510与低档DSP芯片TMS320F206实现图像采集接口设计方案,同时给出了接口程序,为低档DSP芯片提供了一条新应用途径。  关键词:ADC DSP 接口设计 视频  数字信号处理器...
  • dsp2407CAN通信测试

    2012-02-17 21:41:03
    dsp2407片内10位ADC采集系统,通过片内CAN外设发送到CAN总线,测试程序经过10万帧严格测试,非常好用
  • #include "DSP28x_Project.h" // Device Headerfile and Examples Include File #include"SPI_com2.h" interrupt void adc_isr(void); // Global variables used in this example: Uint16 LoopCount; Uint16 ...
  • 摘 要: 本文主要讨论了一种快速多通道12位ADC MAX115在磁悬浮轴承控制系统中应用,详细介绍了MAX115功能特点和工作过程,同时给出了MAX115与DSP(TMS320F240)之间硬件接口电路和数据采集程序。 引言 在五...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 145
精华内容 58
关键字:

dsp的adc程序