📄 main.c
字号:
/**********************************************/
/* Title: VDevice Source File */
/* Version: 1.0 */
/* Author: Zhanhua Zong */
/* Data: 06/05/2005 */
/**********************************************/
#include "VDevicecfg.h"
/***********************************************/
#define DATA_LEN1 400 //示波器模式数据长度
#define DATA_LEN2 1024 //频谱仪模式数据长度
#define TIMEOUT 96000 //2秒超时上限
#define PORT_CPLD port2000
/***********************************************/
void Delay(Int32 num1,Int32 num2);
void AIC23_Init(void);
/***********************************************/
ioport unsigned PORT_CPLD; // CPLD R/W port
/***********************************************/
Uint16 WaveBuff[DATA_LEN2]; //数据缓冲区:0x0100
Uint32 mDelay1=1,mDelay2=92; //采样速率:0x0500
Uint16 mMode = FALSE; //0:示波器 1:频谱仪:0x0504
Uint16 mVoltage=0x16; //控制放大倍数:0x0505
Uint16 mTrigerLevel=0x80; //控制触发电平:0x0506
Uint16 Save_Enable = FALSE; //允许存储数据,与PC握手信号:0x0507
Uint16 Channel_Sel = FALSE; //0:左声道数据 1:右声道数据:0x0508
Uint16 mDTemp1,mDTemp2,mDTemp3;//临时存储采样数据
Uint16 mPoint = 0; //数据存储指针
Uint32 TimeOut = 0;
/***********************************************/
void main()
{
HWI_disable();
AIC23_Init();
C54_enableIMR(0x0040);
HWI_enable();
while(1)
{
if(mMode) //频谱仪
{
if(Save_Enable)
WaveBuff[mPoint++] = mDTemp3;
if(mPoint >= DATA_LEN2)
{
Save_Enable = FALSE;
mPoint = 0;
}
}
else //示波器
{
if(Save_Enable)
{
WaveBuff[mPoint++] = mDTemp3;
if(mPoint >= DATA_LEN1)
{
Save_Enable = FALSE;
mPoint = 0;
}
}
if(mVoltage)
{
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x0100 | mVoltage); //Left line input channel volume control
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x0300 | mVoltage); //Right line input channel volume control
mVoltage = 0;
}
mDTemp1 = mDTemp2;
mDTemp2 = mDTemp3;
}
Delay(mDelay1,mDelay2);
}
}
/***********************************************/
void Delay(Int32 num1,Int32 num2)
{
Int32 i,j;
for(i=0; i<num1; i++)
for(j=0; j<num2; j++);
}
void AIC23_Init(void)
{
int i;
MCBSP_start(hMcbsp0, MCBSP_XMIT_START|
MCBSP_SRGR_START|
MCBSP_SRGR_FRAMESYNC,
0x200); //允许串口1发送数据
PORT_CPLD = 0x1; //切换字写到CPLD控制寄存器,转为控制字输出
asm(" nop ");
asm(" nop ");
asm(" nop ");
i = PORT_CPLD;
asm(" nop ");
asm(" nop ");
while((i&0x0001) == 0)
{
PORT_CPLD = 0x1; //切换字写到CPLD控制寄存器,转为控制字输出
asm(" nop ");
asm(" nop ");
i = PORT_CPLD;
asm(" nop ");
asm(" nop ");
}
i = i;
//初始化AIC23
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x1e00); //AIC23复位
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x0c02); //line in,POWER、CLOCK、OSC、OUT、DAC、ADC打开,MIC关闭
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x0116); //Left line input channel volume control
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x0316); //Right line input channel volume control
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x04f7); //Left Channel Headphone Volume Control
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x06f7); //Right Channel Headphone Volume Control
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x0812); //Analog Audio Path Control
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x0a00); //Digital Audio Path Control
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x0e43); //Digital Audio Interface Format
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x101d); //Sample Rate Control:USB Mode,96KSPS
while(!MCBSP_xrdy(hMcbsp0));
MCBSP_write16(hMcbsp0, 0x1201); //Digital Interface Activation
MCBSP_start(hMcbsp2, MCBSP_XMIT_START |
MCBSP_RCV_START |
MCBSP_SRGR_START |
MCBSP_SRGR_FRAMESYNC,
0x200); //允许串口1发送数据
}
void Mcbsp2_ISR(void)
{
Uint32 DTemp;
DTemp = MCBSP_read32(hMcbsp2); //Read ADC Data
MCBSP_write32(hMcbsp2, DTemp);//DTemp); //Write Data to DAC
mDTemp3 = Channel_Sel ? DTemp>>16:DTemp;
//将有符号数转换成无符号数
mDTemp3 = (mDTemp3 & 0x8000)?((mDTemp3 & 0x7fff) >> 8):
((mDTemp3 | 0x8000) >> 8);
if(!mMode) //示波器模式下启动同步触发
{
if(mDTemp1<mTrigerLevel && mDTemp3>mTrigerLevel)
{
Save_Enable = TRUE;
TimeOut = 0;
}
else if(TimeOut>TIMEOUT)
Save_Enable = TRUE;
if(!Save_Enable)
TimeOut++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -