⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f281xadc04b.c

📁 TI公司28系列DSP控制无刷直流电机
💻 C
字号:
/* ==================================================================================
File name:       F281XADC04B.C
                    
Originator:	Digital Control Systems Group
			Texas Instruments

Description: This file contains source for the F281X general purpose 
4 conversions ADC driver for bipolar signals

Target: TMS320F281x family

=====================================================================================
History:
-------------------------------------------------------------------------------------
 04-15-2005	Version 3.20: Using DSP281x v. 1.00 or higher 
----------------------------------------------------------------------------------*/

#include "DSP281x_Device.h"
#include "f281xadc04b.h"

#define CPU_CLOCK_SPEED      6.6667L   // for a 150MHz CPU clock speed
#define ADC_usDELAY 5000L
#define DELAY_US(A)  DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_CLOCK_SPEED) - 9.0L) / 5.0L)

extern void DSP28x_usDelay(unsigned long Count);

void F281X_adc04b_drv_init(ADCVALSB *p)
{
    DELAY_US(ADC_usDELAY); 
  
    AdcRegs.ADCTRL1.all = ADC_RESET_FLAG; 		// Reset the ADC Module 
	asm(" NOP ");
	asm(" NOP ");    

    AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;		// Power up bandgap/reference circuitry 
	DELAY_US(ADC_usDELAY);			    		// Delay before powering up rest of ADC 
    
    AdcRegs.ADCTRL3.bit.ADCPWDN = 1;	   		// Power up rest of ADC
    AdcRegs.ADCTRL3.bit.ADCCLKPS = 6;     		// Set up ADCTRL3 register 
	DELAY_US(ADC_usDELAY);	

    AdcRegs.ADCTRL1.all = ADCTRL1_INIT_STATE_BIPOLAR;	// Set up ADCTRL1 register 
    AdcRegs.ADCTRL2.all = ADCTRL2_INIT_STATE_BIPOLAR; 	// Set up ADCTRL2 register 
	AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 3;               // Specify four conversions  
    AdcRegs.ADCCHSELSEQ1.all = p->ChSelect;      	    // Configure channel selection 

	EvaRegs.GPTCONA.bit.T1TOADC = 1;      		        // Set up EV Trigger with Timer1 UF
}  

void F281X_adc04b_drv_read(ADCVALSB *p)
{
       int16 DatQ15;
       int32 Tmp;

        // Wait until ADC conversion is completed
        while (AdcRegs.ADCST.bit.SEQ1_BSY == 1)
        {};

        DatQ15 = AdcRegs.ADCRESULT0^0x8000;  	// Convert raw result to Q15 (bipolar signal)
        Tmp = (int32)p->Ch1Gain*(int32)DatQ15;  // Tmp = gain*dat => Q28 = Q13*Q15
        p->Ch1Out = (int16)(Tmp>>13);           // Convert Q28 to Q15
        p->Ch1Out += p->Ch1Offset;              // Add offset 

        DatQ15 = AdcRegs.ADCRESULT1^0x8000;  	// Convert raw result to Q15 (bipolar signal)
        Tmp = (int32)p->Ch2Gain*(int32)DatQ15;  // Tmp = gain*dat => Q28 = Q13*Q15
        p->Ch2Out = (int16)(Tmp>>13);           // Convert Q28 to Q15
        p->Ch2Out += p->Ch2Offset;              // Add offset 

        DatQ15 = AdcRegs.ADCRESULT2^0x8000;  	// Convert raw result to Q15 (bipolar signal)
        Tmp = (int32)p->Ch3Gain*(int32)DatQ15;  // Tmp = gain*dat => Q28 = Q13*Q15
        p->Ch3Out = (int16)(Tmp>>13);           // Convert Q28 to Q15
        p->Ch3Out += p->Ch3Offset;              // Add offset 

        DatQ15 = AdcRegs.ADCRESULT3^0x8000;  	// Convert raw result to Q15 (bipolar signal)
        Tmp = (int32)p->Ch4Gain*(int32)DatQ15;  // Tmp = gain*dat => Q28 = Q13*Q15
        p->Ch4Out = (int16)(Tmp>>13);           // Convert Q28 to Q15
        p->Ch4Out += p->Ch4Offset;              // Add offset 

        AdcRegs.ADCTRL2.all |= 0x4040;          // Reset the sequence

}            
          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -