📄 rint0.c
字号:
#include <math.h>
/*-------------------------------------*/
int ser0inrdcnt,ser0outwrcnt; /*Bsp0 Receive Buffer Read Pointer,Transmit Buffer Writer Pointer */
int ser0inwrcnt,ser0outrdcnt; /*Bsp0 Receive Buffer Writer Pointer,Transmit Buffer Read Pointer */
int ser0inbuf[40],ser0outbuf[40]; /*Bsp0 Receive Buffer And Transmit Buffer */
int ser0flag,int0flag,timeflag,hpirecflag; /*Define Some Global Variable */
extern int ad_samp_freq;
ioport unsigned port0400;
ioport unsigned port1400;
//ADPCM 编码用
typedef struct
{
int PrevValue; // 前一次转换时的数据
int PrevIndex; // 前一此转换时使用的索引
int Length; // 转换数据长度
int* pBufferIn; // 输入缓冲区地址
int* pBufferOut; // 输出缓冲区地址
}ADPCM_STRUCT;
ADPCM_STRUCT AdpcmStateEnc,AdpcmStateDec;
// 编码函数申明
extern void AdpcmEncoder(int* pBufferIn, int* pBufferOut,
int* pPrevValue, int* pPrevIndex, int Length);
// 解码函数申明
extern void AdpcmDecoder(int* pBufferIn, int* pBufferOut,
int* pPrevValue, int* pPrevIndex, int Length);
//
/*-------------------------------------*/
void main()
{
int i;
int EncBufferIn[4],EncBufferOut[1];
int DecBufferIn[1],DecBufferOut[4];
ad_samp_freq = 1026;
c54_init();
ser0inwrcnt = 1 ;
ser0outrdcnt = 5 ;
ser0inrdcnt = 5 ;
ser0outwrcnt = 1;
ser0flag = 0;
AdpcmStateEnc.PrevValue = 0;
AdpcmStateEnc.PrevIndex = 0;
AdpcmStateEnc.Length = 4;
AdpcmStateEnc.pBufferIn = EncBufferIn;
AdpcmStateEnc.pBufferOut = EncBufferOut;
AdpcmStateDec.PrevValue = 0;
AdpcmStateDec.PrevIndex = 0;
AdpcmStateDec.Length = 1;
AdpcmStateDec.pBufferIn = DecBufferIn;
AdpcmStateDec.pBufferOut = DecBufferOut;
for (;;){
if (ser0flag >= 4){
for (i=0;i<4;i++){
ser0inrdcnt = (ser0inrdcnt+1)%40;
EncBufferIn[i]= ser0inbuf[ser0inrdcnt] ;
}
AdpcmEncoder(AdpcmStateEnc.pBufferIn, AdpcmStateEnc.pBufferOut,
&AdpcmStateEnc.PrevValue, &AdpcmStateEnc.PrevIndex,
AdpcmStateEnc.Length);
//
for (i=0;i<1;i++){
DecBufferIn[i] = EncBufferOut[i];
}
//
AdpcmDecoder(AdpcmStateDec.pBufferIn, AdpcmStateDec.pBufferOut,
&AdpcmStateDec.PrevValue, &AdpcmStateDec.PrevIndex,
AdpcmStateDec.Length);
for (i=0;i<4;i++){
ser0outwrcnt = (ser0outwrcnt+1)%40;
ser0outbuf[ser0outwrcnt] = DecBufferOut[i];
}
ser0flag = ser0flag -4 ;
if (ser0flag>100)
ser0flag = 0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -