⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 此例程是关于DSP虚拟仪器的程序
💻 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 + -