?? adc_pwm_spi.c
字號:
#include "DSP28_Device.h"
#include "RS.H"
#include "setting.h"
interrupt void eva_cmp3_isr(void);
//interrupt void evb_cmp4_isr(void);
interrupt void EVB_T3PINT_ISR(void);
interrupt void adc_isr(void);
extern void DSP28x_usDelay(unsigned long Count);
extern int16 buffer3[];
extern int16 buffer4[];
extern int16 synth[];
#define DAC_CLR GpioDataRegs.GPBDAT.bit.GPIOB8
#define DAC_LD GpioDataRegs.GPBDAT.bit.GPIOB9
#define DAC_CS GpioDataRegs.GPBDAT.bit.GPIOB10
WordType AdcFrame;
Uint16 i, j;
Uint16 ConversionCount;
Uint16 EncFlag;
Uint16 DecFlag;
Uint16 DemoduFlag;
Uint16 PWMOFDMStart;
Uint16 PwmoutStart;
Uint16 PwmCount; //音頻輸出計數
Uint16 pwmtestCount;
Uint16 EncNum;
Uint16 ModuDataOutNum; //調制數據輸出計數
Uint16 ADCInputVoiceNum; //音頻輸入采樣計數
Uint16 ADCModuDataNum; //調制數據采樣輸入計數
Uint16 Voltage1[480]; //音頻輸入采樣
extern int Voltage2[3200]; //調制后的數據發射
int Voltage3[3500]; //調制后的數據接收
int Voltage4[1600]; //音頻輸出
int *pModuData;
int *pADCModuData; //指示待調制數據
int ModuFrame;
extern int demodushift;
int16 OFDM_frame;
Uint16 FrameSynFlag; // OFDM demodulate frame synch starting flag
Uint16 FrameSyn;
Uint16 volt3flag;
int *DecoData;
Uint16 OFDMSampleStart;
Uint16 SampleDelay;
Uint16 TestCnt;
Uint16 Div2Flag;
Uint16 BitConv;
Uint16 SpiRxTemp;
Uint16 Volt3_Temp;
/*variables in TxRx.c*/
extern WordType TxSymbolMark;
extern WordType TxBitMark;
extern WordType RxPosMark;
extern WordType FrameTx;
extern WordType FrameRx;
extern unsigned long int Seed;
extern short OFDMFrameNum;
/*
Uint16 SynErrCntDown = 0;
Uint16 SynErrCntUp = 0;
Uint16 MaxFrameSyn = 0;
*/
extern Uint16 secureRamFuncs_loadstart;
extern Uint16 secureRamFuncs_loadend;
extern Uint16 secureRamFuncs_runstart;
void main(void)
{
DINT;
InitSysCtrl();
EALLOW;
GpioMuxRegs.GPAMUX.all = 0x00FF;
GpioMuxRegs.GPBMUX.all = 0x00FF;
GpioMuxRegs.GPBDIR.all = 0x0700;
GpioMuxRegs.GPFMUX.all = 0x0005;
GpioMuxRegs.GPEQUAL.all = 0x0032;
EDIS;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
/* */
// Section secureRamFuncs contains user defined code that runs from CSM secured RAM
memcpy( &secureRamFuncs_runstart,
&secureRamFuncs_loadstart,
&secureRamFuncs_loadend - &secureRamFuncs_loadstart);
/*** Initialize the FLASH ***/
InitFlash(); // Initialize the FLASH (FILE: SysCtrl.c)
InitAdc();
InitSpi();
AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x0003; //ADC clock =150/6=25M
AdcRegs.ADCTRL1.bit.CPS = 0x0000;
AdcRegs.ADCTRL1.bit.ACQ_PS = 0x0001; // SAM/HOLD = 400/10 = 40KHz
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0x0001; //single 16-state sequencer
EALLOW;
PieVectTable.ADCINT = &adc_isr;
PieVectTable.CMP3INT = &eva_cmp3_isr;
PieVectTable.T3PINT = &EVB_T3PINT_ISR;
// PieVectTable.CMP4INT = &evb_cmp4_isr;
EDIS;
// Configure ADC
AdcRegs.ADCMAXCONV.all = 0x000F; // Setup 16 conversion on SEQ
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0000; // Setup ADCINA0 as 1-8 SEQ conv.
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x0003;
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0000;
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x0003;
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0000;
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x0003;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0000;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x0003;
AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x0000; // Setup ADCINA3 as 9-16 SEQ conv.
AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x0003;
AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0x0000;
AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x0003;
AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0x0000;
AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0x0003;
AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0x0000;
AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0x0003;
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; // Enable EVASOC to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)
// Configure EVA
EvaRegs.EVAIMRA.all = 0x0008;
EvaRegs.EVAIFRA.all = 0x0008;
EvaRegs.ACTRA.all = 0x0800;
EvaRegs.DBTCONA.all = 0x0000; // Disable Dead Band Unit
EvaRegs.COMCONA.all = 0xA600;
// Configure EVB
EvbRegs.EVBIMRA.all = 0x0080;//0x0002;
EvbRegs.EVBIFRA.all = 0x0080;//0x0002;
EvbRegs.ACTRB.all = 0x0666;
EvbRegs.DBTCONB.all = 0x0000; // Disable Dead Band Unit
EvbRegs.COMCONB.all = 0x0000;//0xA600;
//ADC interrupt period configuration
EvaRegs.GPTCONA.bit.T2TOADC = 2; // Enable EVASOC in EVA
EvaRegs.T2CNT = 0x186A;
EvaRegs.T2PR =0x249F; // SOC 采樣頻率= HSPCLK/9375 = 16K
EvaRegs.T2CON.all = 0x1040; // Enable timer 2 compare (upcount mode)
//PWM6 interrupt period configuration
EvaRegs.T1PR = 0x249F; // PWM 輸出語音頻率= HSPCLK/9375=16KHz
EvaRegs.T1CNT = 0x0001;
EvaRegs.CMPR3 = 0x0000; // 調制后的數據發送
EvaRegs.T1CON.all = 0x1042; // Enable timer 1 compare (upcount mode)
//SPI transmit interrupt period configuration
EvbRegs.T3PR = 0x249F; // PWM 輸出OFDM信號頻率= HSPCLK/9375=16KHz
EvbRegs.T3CNT = 0x0C35;
EvbRegs.T3CON.all = 0x1040;
/*
//PWM7
EvbRegs.T3PR = 0x249F; // PWM 輸出OFDM信號頻率= HSPCLK/9375=16KHz
EvbRegs.T3CNT = 0x0000;
EvbRegs.CMPR4 = 0x0000;
EvbRegs.T3CON.all = 0x1042;
*/
//Enable XINT1 interrupt, on falling edge
XIntruptRegs.XINT1CR.all = 0x0001;
PieCtrlRegs.PIEIFR1.all = 0;
PieCtrlRegs.PIEIFR2.all = 0;
PieCtrlRegs.PIEIFR4.all = 0;
PieCtrlRegs.PIEIER1.bit.INTx4 = 1;//XINT1
// PieCtrlRegs.PIEIER1.bit.INTx6 = 1;//AD
// PieCtrlRegs.PIEIER4.bit.INTx4 = 1;//T3 period interrupt
// PieCtrlRegs.PIEIER2.bit.INTx3 = 1;//compare3 interrupt voice output
// PieCtrlRegs.PIEIER4.bit.INTx1 = 1;//compare4 interrupt OFDM signal output
IER = (M_INT1 | M_INT2 | M_INT4);
EINT;
ERTM;
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" setc ovm,sxm");
asm(" spm 1");
load();
initiate(); //編碼初始化
Speech_Decode_Frame_init();
Init_RS();
//初始化參數
/*the variable used
for judging first OFDM frame in Transmit.c */
OFDM_frame = 0;
demodushift = 0;
/*initialize variables used in TxRx.c*/
TxSymbolMark = 0;
TxBitMark = 0;
RxPosMark = 0;
FrameTx = TotalFrame;
FrameRx = TotalFrame;
Seed = 101;
OFDMFrameNum = 2;
/*initialize variables in main function*/
TestCnt = 0;
FrameSynFlag = 0;
for(i=0;i<88;i++)
Voltage3[i] = 0x2FFF;
AdcFrame = 4;
ConversionCount = 1;
EncFlag = 0;
DecFlag = 0;
DemoduFlag = 0;
PWMOFDMStart = 0;
PwmoutStart = 0;
PwmCount = 0;
pwmtestCount = 0;
EncNum = 0;
ModuDataOutNum = 0;
ADCInputVoiceNum = 0;
ADCModuDataNum = 88;
pModuData = Voltage2;
pADCModuData = Voltage3;
DecoData = buffer4;
ModuFrame = -1;
OFDMSampleStart = 0;
SampleDelay = 0;
TestCnt = 0;
Div2Flag = 1;
BitConv = 1;
while(1)
{
asm(" NOP");
}
while (1)
{
//語音編碼和調制
if(EncFlag == 1) //EncFlag為0表示接收數據不夠編碼,一直等待
{
EncFlag = 0;
for(i=0; i<160; i++)
{
buffer3[i] = Voltage1[160*EncNum + i] - 0x89E0;
}
if(++EncNum == 3) //30幀
EncNum = 0;
asm(" setc ovm,sxm");
asm(" spm 1");
codamr(); //語音編碼
asm(" setc ovm,sxm");
asm(" spm 1");
//跟蹤voltage2的OFDM數據塊存儲位置
ModuFrame = RS_OFDM_Mod();
asm(" setc ovm,sxm");
asm(" spm 1");
if(ModuFrame == 1)
pModuData = Voltage2 + 1040;
else if(ModuFrame == 2 || ModuFrame == 3)
pModuData += 720;
else if(ModuFrame == 4)
pModuData = Voltage2;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -