《DSP_C.doc》由会员分享,可在线阅读,更多相关《DSP_C.doc(9页珍藏版)》请在金锄头文库上搜索。
1、#include DSP2833x_Device.h / DSP2833x Headerfile Include File#include DSP2833x_Examples.h / DSP2833x Examples Include File#if (CPU_FRQ_150MHZ) / Default - 150 MHz SYSCLKOUT #define ADC_MODCLK 0x3 / HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz#endif#if (CPU_FRQ_100MHZ) #define ADC_MODCLK 0
2、x2 / HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz#endif#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 AVG 1000 / Average sample limit#define ZOFFSET 0x00 / Average Zero off
3、set#define BUF_SIZE 160 / Sample buffer sizeUint16 j = 0,ADC_END = 0; / ADC finish flag#pragma DATA_SECTION(ADC_Result,DMARAML4);volatile float ADC_Result160;#pragma DATA_SECTION(DMABuf1,DMARAML4);volatile Uint16 DMABuf1160;volatile Uint16 *DMADest;volatile Uint16 *DMASource;interrupt void local_DIN
4、TCH1_ISR(void);void main(void) Uint16 i;/ Step 1. Initialize System Control:/ PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the DSP2833x_SysCtrl.c file. InitSysCtrl();/ Specific clock setting for this example: EALLOW; SysCtrlRegs.HISPCP.all = ADC_MODCLK;/ HSPCLK = SYSCLK
5、OUT/ADC_MODCLK EDIS;/ Step 2. Initialize GPIO:/ This example function is found in the DSP2833x_Gpio.c file and/ illustrates how to set the GPIO to its default state./ InitGpio(); / Skipped for this example/ Step 3. Clear all interrupts and initialize PIE vector table:/ Disable CPU interrupts DINT;/
6、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;/ Initia
7、lize 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
8、DSP2833x_PieVect.c. InitPieVectTable();/ Interrupts that are used in this example are re-mapped to/ ISR functions found within this file. EALLOW;/ Allow access to EALLOW protected registers PieVectTable.DINTCH1= &local_DINTCH1_ISR; EDIS; / Disable access to EALLOW protected registers IER = M_INT7 ;
9、/Enable INT7 (7.1 DMA Ch1) EnableInterrupts(); / Step 4. Initialize all the Device Peripherals:/ This function is found in DSP2833x_InitPeripherals.c/ InitPeripherals(); / Not required for this example InitAdc(); / For this example, init the ADC/ Specific ADC setup for this example: AdcRegs.ADCTRL1.
10、bit.ACQ_PS = ADC_SHCLK; AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; / 0 Non-Cascaded Mode; 1 Cascaded Mode AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1; AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1; AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; AdcRegs.
11、ADCCHSELSEQ1.bit.CONV02 = 0x2; AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3; AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x4; AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x5; AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x6; AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x7; AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x8; AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0
12、x9; AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0xA; AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0xB; AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0xC; AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0xD; AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0xE; AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0xF; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 15; / Set up ADC to perform
13、 4 conversions for every SOC /Step 5. User specific code, enable interrupts: / Initialize DMA DMAInitialize();/ Clear Table for (i=0; iBUF_SIZE; i+) DMABuf1i = 0xffff; / Configure DMA Channel DMADest = &DMABuf10; /Point DMA destination to the beginning of the arrayDMASource = &AdcMirror.ADCRESULT0;
14、/Point DMA source to ADC result register baseDMACH1AddrConfig(DMADest,DMASource);DMACH1BurstConfig(15,1,10);DMACH1TransferConfig(9,-15,(-150 + 1);DMACH1WrapConfig(100,100,100,100); /Dont use wrap functionDMACH1ModeConfig(DMA_SEQ1INT,PERINT_ENABLE,ONESHOT_DISABLE,CONT_DISABLE,SYNC_DISABLE,SYNC_SRC, OVRFLOW_DISABLE,SIXTEEN_BIT,CHINT_END,CHINT_ENABLE); StartDMACH1(); / Start SEQ1 AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1; for(i=0;i10;i+) for(j=0;j1000;j+) Ad