?? example_281x_ulawde.c
字號:
;* 文件名稱 : Example_DSP281x_ulaw.c
;* 適用平臺 : DSP E100 實驗箱;
;* CPU類型 : DSP TMS320F2812
;* 軟件環境 : CCS2.20 (2000系列)
;* 試驗接線 : 1、F2812CPU板的JUMP1的1和2腳短接,撥碼開關SW1的第二位置ON;
;* 2、底板的開關SW1的第1和第6位置ON,其余置OFF。
;* 3、用導線連接二號孔SIN到AIN0。
;* 試驗現象 : 設置好CCS的環境,打開本工程,編譯、下載、運行。
;* 利用變量觀察窗口觀察變換結果。
;* 地址譯碼說明:基地址:0x2000,當底板片選CS1為低時,分配有效。
*/
//------------------頭文件-------------------------------------//
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#include <math.h>
#define pi 3.1415927
#define Length 256
int px[256];
int py[256];
int Input[Length],Output[Length];
int Package[Length];
int in, pack, out;
int i = 0;
int j = 0;
int k = 0;
// Prototype statements for functions found within this file.
interrupt void adc_isr(void);
// Global variables used in this example:
Uint16 ConversionCount,LoopCount;
int mu_law_compress ( int in)
{
int vin0,vin1,vin2,vpack,n,m;
vin0 = in;
vin1 = vin0/4;
vin2 = abs(vin1);
m = 0x20;
vpack = 0;
for ( n=1; n<=8; n++)
{
if ((vin2 >= m) && (vin2 < 2*m))
{
vpack = ((vin2>>n) & (0x0f)) + (0x10*(n-1));
n=9;
}
else m = m*2;
}
if (vin0 < 0) vpack = vpack + 0x80;
else vpack = vpack;
return(vpack);
}
int mu_law_expand( int pack )
{
int vpack0,vpack1,vpack2,com1,com2,vout,n,m;
vpack0 = pack;
vpack1 = (abs(vpack0)) & 0x0f;
vpack2 = (abs(vpack0) & 0x70)>>4;
com1 = 0x3f;
com2 = 0x21;
m=1;
for ( n=1; n<=8; n++)
{
if (vpack2 == (0x00+(n-1)))
{
vout = ((vpack1<<n) & (com1*m)) + (com2*m);
n=9;
}
else m = m*2;
}
if (vpack0 <128) vout = vout;
else vout = -vout;
vout = vout*4;
return(vout);
}
interrupt void adc_isr(void)
{
px[ConversionCount] = AdcRegs.ADCRESULT0 >>4;
in = px[ConversionCount];
pack = mu_law_compress(in) ;
out = mu_law_expand(pack) ;
py[j] = out;
if (i<=Length-1)
{
Input[i] = in;
Package[i] = pack;
Output[i] = out;
}
i++;
i = i%Length;
if(ConversionCount == 256)
{
ConversionCount = 0;
}
else ConversionCount++;
// 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;
}
void main(void)
{
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP281x_SysCtrl.c file.
InitSysCtrl();
// For this example, set HSPCLK to SYSCLKOUT / 6 (25Mhz assuming 150Mhz SYSCLKOUT)
EALLOW;
SysCtrlRegs.HISPCP.all = 0x3; // HSPCLK = SYSCLKOUT/6
EDIS;
// Disable CPU interrupts
DINT;
// Initialize the PIE control registers to their default state.
InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
InitPieVectTable();
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
EALLOW; // This is needed to write to EALLOW protected register
PieVectTable.ADCINT = &adc_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
InitAdc(); // For this example, init the ADC
// Enable ADCINT in PIE
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
IER |= M_INT1; // Enable CPU Interrupt 1
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
ConversionCount = 0;
// Configure ADC
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;
AdcRegs.ADCMAXCONV.all = 0x0000; // Setup 2 conv's on SEQ1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // Setup ADCINA0 as 1st SEQ1 conv.
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
// Assumes EVA Clock is already enabled in InitSysCtrl();
EvaRegs.T1CMPR = 0x0380; // Setup T1 compare value
EvaRegs.T1PR = 0x0FFF; // Setup period register
EvaRegs.GPTCONA.bit.T1TOADC = 1; // Enable EVASOC in EVA
EvaRegs.T1CON.all = 0x1042; // Enable timer 1 compare (upcount mode)
while(1)
{
LoopCount++;
}
}
//***********結束*******************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -