📄 ex_adc.c
字号:
#include "DSP280x_Device.h" // DSP280x Headerfile Include File
#include "DSP280x_Examples.h" // DSP280x Examples Include File
#define SetLoad GpioDataRegs.GPADAT.bit.GPIO14 = 1
#define ClrLoad GpioDataRegs.GPADAT.bit.GPIO14 = 0
void DA_OUT(Uint16 CHANNEL,Uint16 RNG,Uint16 SPI_DATA);
// ADC start parameters
#define ADC_MODCLK 0x4 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*4) = 12,5MHz
#define ADC_CKPS 0x1 // ADC module clock = HSPCLK/2*ADC_CKPS = 12,5MHz/(1*2) = 6.25MHz
#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 offset
#define BUF_SIZE 2048 // Sample buffer size
// Global variable for this example
Uint16 SampleTable[BUF_SIZE];
void main()
{
Uint16 i;
InitSysCtrl();
InitGpio();
InitSpi();
SetCs(1);
SetCs(0);
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
if(Spib_TxReady() == 1)
{
SpibRegs.SPITXBUF = 0XFFFF;
ClrCs(0);
SetCs(0);
}
SetLoad;
DA_OUT(0,0,0X40);
DA_OUT(1,0,0X80);
DA_OUT(2,0,0XC0);
DA_OUT(3,0,0XFF);
InitAdc(); // For this example, init the ADC
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run
// Step 5. User specific code, enable interrupts:
// Clear SampleTable
for (i=0; i<BUF_SIZE; i++)
{
SampleTable[i] = 0;
}
// Start SEQ1
AdcRegs.ADCTRL2.all = 0x2000;
// Take ADC data and log the in SampleTable array
for(;;)
{
for (i=0; i<AVG; i++)
{
while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} // Wait for interrupt
// Software wait = (HISPCP*2) * (ADCCLKPS*2) * (CPS+1) cycles
// = (3*2) * (1*2) * (0+1) = 12 cycles
asm(" RPT #11 || NOP");
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
SampleTable[i] =((AdcRegs.ADCRESULT0>>4) );
}
}
}
void DA_OUT(Uint16 CHANNEL,Uint16 RNG,Uint16 SPI_DATA)
{
Uint16 Temp = 0;
Uint16 flag=0;
Temp = CHANNEL<<14;
Temp = Temp | (RNG<<13);
Temp = Temp | SPI_DATA<<5;
SpiaRegs.SPITXBUF= Temp;
while(1)
{
flag=SpiaRegs.SPISTS.all & 0x40;
if(flag==0x40) break;
}
SpiaRegs.SPIRXBUF=SpiaRegs.SPIRXBUF;
ClrLoad;
DELAY_US(3);
SetLoad;
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -