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

📄 dspboard.c

📁 使用5509A的usb的程序代码
💻 C
📖 第 1 页 / 共 2 页
字号:
                         // 44000(小点) for Cs16x-060801.data
                         
    
    while(1)
    {     
//        dataIO();               
        switch ( iBufferReady & BUFFER_IS_READY )    // ???是否逻辑与
        {             
            case 1:
                if ( !bDMA0On )
                    Buffer0Processing();
                break;
            case 2:
                if ( !bDMA1On )
                    Buffer1Processing();
                break ;
                
            case 3:
                if ( !bDMA0On )
                    Buffer0Processing();
                if ( !bDMA1On )
                    Buffer1Processing();
                break ;
                
            default :
                // no data
                TSK_sleep(2);
                break ;
        }        
    }
}


Void readyReadFIFO()
{   
    // DMA 是否可用若不可用,跳向后面  ?????
    // Buffer 是否可以用,若不可用,跳向后面
    // 向 Buffer,构建DMA通道  ????
    switch ( iBufferReady & BUFFER_IS_READY )    // ???是否逻辑与
    {
        case 0:
        case 2:
            if ( !bDMA0On )
            {
            // 现在的逻辑基本上只用DMA0了,加上DMA int后
                iBufferReady = iBufferReady | BUFFER_0_WRITTEN ;
                bDMA0On = TRUE ;
                DMA_start( hDma0 ) ;    
                nRecordDMA0Miss ++ ;                
             }            
            else
            {
                nRecordDMA0Miss ++ ;                
            }            
            break ;
        case 1:
            if ( !bDMA1On )
            {
                iBufferReady = iBufferReady | BUFFER_1_WRITTEN ;
                bDMA1On = TRUE ;
                DMA_start( hDma1 ) ;
                nRecordDMA1Miss ++ ;                
            }            
            else
            {
                nRecordDMA1Miss ++ ;                
            }            
            break ;            
        default:
            // bo buffer ready
            if ( !bDMA2On )
            {
                bDMA2On = TRUE ;
                DMA_start( hDma2 ) ;
                nRecordMissed = nRecordMissed + 1 ;                
            }
            else
            {
                nRecordMissed = nRecordMissed + 1 ;
                nRecordDMA2Miss = nRecordDMA2Miss + 1 ;
            }            
            break ;
    }    
        
//    SWI_post( &readFIFO_SWI ) ;		
}


Void TransferDMA0()
{
    bDMA0On = FALSE ;    
}

Void TransferDMA1()
{
    bDMA1On = FALSE ;    
}

Void TransferDMA2()
{
    bDMA2On = FALSE ;
}

Void readFIFO() 
{
    
}

Void usb_int() 
{
    USB_evDispatch() ;
}



Void USB_bulkInDatHandler(USB_EpHandle hEpIn, USB_EpHandle hEpOut)
{       
    //  nTranContent = // 1 for junk transfer, 2 for Data transfer, 3 for CRC transfer 
    //  junk transfer stage: transfer 64 byte data, which has no meaning
    //  data transfer stage: transfer real PHA data
    //  CRC transfer stage: transfer 64 byte CRC data
    if ( nTranContent == 1 )
    {
        if ( USB_isTransactionDone( hEpIn ) )
            USB_postTransaction(&usbEpObjIn2, 64 , Endpt2Buff,  USB_IOFLAG_NOSHORT ); // USB_IOFLAG_NONE);        
    }
    
    else if ( nTranContent == 2 )    
    {
        if ( mcaTranLength == 512 ) 
        {      
            // 有问题吗      
            memcpy ( Endpt2Buff + 1  , mcaData512 + indexUSB * Endpt2BuffLen / 4 , Endpt2BuffLen / 2 ) ;
            
            // 4 == ( 512 * 4 ) / ( 256 * 2 ) 
            indexUSB ++ ; 
            if ( indexUSB >= 4 )
            {
                indexUSB = 0;           
                nTranContent = 3 ;
            }                                   
        }
        
        else if ( mcaTranLength == 1024 )
        {        
            // 有问题吗      
            memcpy ( Endpt2Buff + 1  , mcaData1024 + indexUSB * Endpt2BuffLen / 4 , Endpt2BuffLen / 2 ) ;
                        
            // 8 == ( 1024 * 4 ) / ( 256 * 2 ) 
            indexUSB ++ ; 
            if ( indexUSB >= 8 )
            {
                indexUSB = 0;           
                nTranContent = 3 ;
            }                                   
        }
        
        else if ( mcaTranLength == 2048 )        
        {
            // 有问题吗      
            memcpy ( Endpt2Buff + 1  , mcaData2048 + indexUSB * Endpt2BuffLen / 4 , Endpt2BuffLen / 2 ) ;            
            
            // 16 == ( 2048 * 4 ) / ( 256 * 2 ) 
            indexUSB ++ ; 
            if ( indexUSB >= 16 )
            {
                indexUSB = 0;           
                nTranContent = 3 ;
            }                                   
        }
        
        else if ( mcaTranLength == 8192 )        
        {
            // 有问题吗      
            memcpy ( Endpt2Buff + 1  , mcaData + indexUSB * Endpt2BuffLen / 4 , Endpt2BuffLen / 2 ) ;            
            
            // 64 == ( 8192 * 4 ) / ( 256 * 2 ) 
            indexUSB ++ ; 
            if ( indexUSB >= 64 )
            {
                indexUSB = 0;           
                nTranContent = 3 ;
            }                                   
        }
        
        // CRC校验
        for ( j = 2 ; j <= Endpt2BuffLen / 2 ; j += 2 )
        {
            mcaDataCRC[ 15 ] += ( ( Endpt2Buff [ j ] ) % 2 ) ;
        }
        
        // USB传输
        if ( USB_isTransactionDone( hEpIn ) )
            USB_postTransaction(&usbEpObjIn2, Endpt2BuffLen , Endpt2Buff,  USB_IOFLAG_NOSHORT );         
    }
    
    else if ( nTranContent == 3 )
    {
        nTranContent = 1 ;
        memcpy ( Endpt2Buff + 1  , mcaDataCRC , 32 ) ;            
        // USB传输
        if ( USB_isTransactionDone( hEpIn ) )
            USB_postTransaction(&usbEpObjIn2, 64 , Endpt2Buff,  USB_IOFLAG_NOSHORT );                 
    }
}

/*
Void USB_bulkInDatHandler(USB_EpHandle hEpIn, USB_EpHandle hEpOut)
{
    // 128 == ( 16384 * 4 ) / ( 256 * 2 ) 
    //if ( indexUSB >= 128 )
    //{
      //  indexUSB = 0;           
      //  indexUSB = indexUSB ;     
    //}        
       // 有问题
    //memcpy ( Endpt2Buff + 1  , mcaData + indexUSB * Endpt2BuffLen / 4 , Endpt2BuffLen / 2 ) ;
    //indexUSB ++ ;    
        
       //长度  2048 * 1000 * 2 =  0x3e8000
    //if ( USB_isTransactionDone( hEpIn ) )
                   //          USB_postTransaction(&usbEpObjIn2, 256, Endpt2Buff, USB_IOFLAG_NOSHORT );
        //USB_postTransaction(&usbEpObjIn2, Endpt2BuffLen , Endpt2Buff,  USB_IOFLAG_NOSHORT ); // USB_IOFLAG_NONE);
}
*/



Void USB_bulkInEvHandler()
{
    // call the bulk in data handler routine.

    // if DSP/BIOS used, a SWI can be posted to service the endpoint events.
    // All USB event handler routines must be executed in the order the
    // actual events arrived - to achieve this, if SWI used, all the USB
    // event handler routines must be assigned the same priority level.

//    USB_bulkInDatHandler(&usbEpObjIn2, &usbEpObjOut2);
    SWI_post( &bulkIn_SWI );
}


Void USB_bulkOutDatHandler(USB_EpHandle hEpIn, USB_EpHandle hEpOut)
{
    LOG_printf(&trace,"SWI_OUT");     
    if ( USB_isTransactionDone( hEpOut ) )
        USB_postTransaction(hEpOut, Endpt2BuffLen, &Endpt2Buff, USB_IOFLAG_NONE );
}


Void USB_bulkOutEvHandler()
{
    // call the bulk out data handler routine.

    // if DSP/BIOS used, a SWI can be posted to service the endpoint events.
    // All USB event handler routines must be executed in the order the
    // actual events arrived - to achieve this, if SWI used, all the USB
    // event handler routines must be assigned the same priority level.

//    USB_bulkOutDatHandler(&usbEpObjIn2, &usbEpObjOut2);
    SWI_post( &bulkOut_SWI );
}



/* Timer1Func调用周期:144Mhz/(9+1)/(14399+1) -->1ms */
Void Timer1Func()
{
    if ( bCollectingIsOn )
    {
        nRecordTime = nRecordTime + 1 ;
    }
    
    uiSecond = uiSecond + 1;
    /* uiSecond每增长1000次,代表一秒钟 */
    if ( uiSecond > 1000 )
    {
//        mcaData512[256] ++;
//        mcaData1024[256] += 10 ;
//        mcaData2048[256] ++;
        uiSecond = 0 ;
        /* GPIO0: flash on/off every second */                
        //uiLed = GPIO_RGET( IODATA );        
        //uiLed = uiLed ^ 0x01 ;
        //GPIO_RSET( IODATA , uiLed );
        GPIO_RSET( IODATA , (  GPIO_RGET( IODATA ) ^ 0x01 ) );
    }    
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -