?? adc_pwm_spi.c
字號(hào):
//OFDM解調(diào)和語(yǔ)音解碼
if(FrameSynFlag == 1 )
{
if(DemoduFlag == 1)
asm(" ESTOP0");
asm(" setc ovm,sxm");
asm(" spm 1");
FrameSyn = 264;//FindFrame(Voltage3) - 2;
/*if(FrameSyn > 264)
{
FrameSyn = 264;
}*/
asm(" setc ovm,sxm");
asm(" spm 1");
volt3flag = FrameSyn + 864;
pADCModuData = Voltage3 + FrameSyn;
FrameSynFlag = 0;
}
if(DemoduFlag == 1)
{
if(FrameSynFlag == 1)
asm(" ESTOP0");
asm(" setc ovm,sxm");
asm(" spm 1");
DecFlag = Receive(pADCModuData, DecoData);
asm(" setc ovm,sxm");
asm(" spm 1");
DemoduFlag = 0;
demodushift = 0;
if(AdcFrame == 1)
{
pADCModuData += 864;
}
else if(AdcFrame == 2)
{
pADCModuData += 720;
}
else if(AdcFrame == 3)
{
pADCModuData += 720;
}
}
while(DecFlag)
{
asm(" setc ovm,sxm");
asm(" spm 1");
Speech_Decode_Frame();
asm(" setc ovm,sxm");
asm(" spm 1");
for(i=0; i<160; i++,pwmtestCount++)
{
Voltage4[pwmtestCount] = ((synth[i]>>4) + 0x0800) & 0x0FFF;
if(pwmtestCount+1 == PwmCount)
asm(" ESTOP0");
}
DecFlag--;
demodushift += 103;
if(pwmtestCount == 1600)
pwmtestCount = 0;
}
}
}
interrupt void adc_isr(void)//adc中斷以16k速率進(jìn)入
{
//輸入語(yǔ)音采樣8k
if(ConversionCount)
{
Voltage1[ADCInputVoiceNum] = (((AdcRegs.ADCRESULT0>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT2>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT4>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT6>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT8>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT10>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT12>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT14>>4) & 0x0FFF))/8;
Voltage1[ADCInputVoiceNum] = (Voltage1[ADCInputVoiceNum]<<4) & 0xFFF0;
ADCInputVoiceNum++;
TestCnt++;
if(TestCnt == 740)
PWMOFDMStart = 1;
if(ADCInputVoiceNum == 160)
{
EncFlag = 1;
}
else if(ADCInputVoiceNum == 320)
{
EncFlag = 1;
}
else if(ADCInputVoiceNum == 480)
{
ADCInputVoiceNum = 0;
EncFlag = 1;
}
}
ConversionCount = !ConversionCount;
//調(diào)制數(shù)據(jù)輸入的采樣16k
if(OFDMSampleStart)
{
Volt3_Temp = (((AdcRegs.ADCRESULT1>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT3>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT5>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT7>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT9>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT11>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT13>>4) & 0x0FFF)\
+((AdcRegs.ADCRESULT15>>4) & 0x0FFF))/8;
Voltage3[ADCModuDataNum] = ((Volt3_Temp<<4) & 0xFFF0) - 0x82C0;
/* if(AdcFrame == 3 && ADCModuDataNum == volt3flag - 88 + j)
{
Voltage3[j] = Voltage3[ADCModuDataNum];
j++;
if(j == 88)
j=0;
} */
ADCModuDataNum++;
if (ADCModuDataNum == 1648)
PwmoutStart = 1;//start outputing voice
if(AdcFrame==4 && ADCModuDataNum == 480)
{
FrameSynFlag = 1;
AdcFrame = 0;
}
else if(AdcFrame==0 && ADCModuDataNum == volt3flag)
{
DemoduFlag = 1;
AdcFrame++; //AdcFrame = 1
volt3flag += 720;
}
else if(AdcFrame==1 && ADCModuDataNum == volt3flag)
{
DemoduFlag = 1;
AdcFrame++; //AdcFrame = 2
volt3flag += 720;
}
else if(AdcFrame==2 && ADCModuDataNum == volt3flag)
{
DemoduFlag = 1;
AdcFrame++; //AdcFrame = 3
volt3flag += 720;
}
else if(AdcFrame==3 && ADCModuDataNum == volt3flag)
{
DemoduFlag = 1;
AdcFrame++; //AdcFrame = 4
ADCModuDataNum = 88;
}
}
// Reinitialize for next ADC sequence
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
return;
}
interrupt void eva_cmp3_isr(void) //語(yǔ)音輸出
{
if(PwmoutStart)
{
if( Div2Flag)
{
EvaRegs.CMPR3 = Voltage4[PwmCount];
PwmCount++;
if(pwmtestCount == PwmCount)
asm(" ESTOP0");
if(PwmCount == 1600)
PwmCount = 0;
}
Div2Flag = !Div2Flag;
}
EvaRegs.EVAIMRA.all = 0x0008;
EvaRegs.EVAIFRA.all = 0x0008;
// Acknowledge interrupt to recieve more interrupts from PIE group 2
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;
return;
}
interrupt void EVB_T3PINT_ISR(void)
{
if(PWMOFDMStart)
{
//CS low
DAC_CS = 0;
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
SpiaRegs.SPIDAT = ((Voltage2[ModuDataOutNum] + 0x8000)>>1)&0x7FFF;
while(!SpiaRegs.SPISTS.bit.INT_FLAG); //wait until transmit finished
SpiRxTemp = SpiaRegs.SPIRXBUF;//clear INT_FLAG
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
//CS high
DAC_CS = 1;
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
//LD low
DAC_LD = 0;
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
asm(" nop");
//LD high
DAC_LD = 1;
ModuDataOutNum++;
SampleDelay++;
if(SampleDelay == 9604)
OFDMSampleStart = 1; //OFDM sample start
if( ModuDataOutNum == 3200 )
{
ModuDataOutNum = 0;
}
}
EvbRegs.EVBIMRA.all = 0x0080;
EvbRegs.EVBIFRA.all = 0x0080;
// Acknowledge interrupt to recieve more interrupts from PIE group 4
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
return;
}
/*
interrupt void evb_cmp4_isr(void) //OFDM調(diào)制波形輸出
{
if(PWMOFDMStart)
{
//EvbRegs.CMPR4 = ((Voltage2[ModuDataOutNum]>>3)+0x1000) & 0x1FFF;
EvbRegs.CMPR4 = ((Voltage2[ModuDataOutNum]>>2)+0x2000) & 0x3FFF;
ModuDataOutNum++;
SampleDelay++;
if(SampleDelay == 9600)
OFDMSampleStart = 1; //OFDM sample start
if( ModuDataOutNum == 3200 )
{
ModuDataOutNum = 0;
}
}
EvbRegs.EVBIMRA.all = 0x0002;
EvbRegs.EVBIFRA.all = 0x0002;
// Acknowledge interrupt to recieve more interrupts from PIE group 2
PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
return;
}
*/
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -