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

📄 inita.c

📁 visual dsp++环境下
💻 C
字号:
//***********************************************************************
//      Init routine for the TigerSHARC EZ-Kit DSP A
//      Audio Pass Through example in C
//      Inita.c
//***********************************************************************
        
//************************* Includes ************************************
#include <sysreg.h>
#include <builtins.h>
#include <defTS201.h>
#include <signal.h>
#include "TSEZKitDef.h"
#include "PassThroughDef.h"

//************************* Externs *************************************
extern TCBChain XmitDMALSourceTCB, XmitDMALDestinTCB, XmitDMARSourceTCB, XmitDMARDestinTCB,
                RcveDMALSourceTCB, RcveDMALDestinTCB, RcveDMARSourceTCB, RcveDMARDestinTCB;


//********************* Function declares *******************************
void audio_int();
void SetTCB0(long DI_Source, long DX_Source, long DY_Source, long DP_Source,
             long DI_Destin, long DX_Destin, long DY_Destin, long DP_Destin);

//***********************************************************************
void inita( void )
{
    volatile int temp;

//------------------------- Init SYSCON and SDRCON ----------------------
                                     
    __builtin_sysreg_write(__SYSCON, SYSCON_MP_WID64 |       
                                     SYSCON_MEM_WID64 |
	                                 SYSCON_MSH_PIPE2 |
                                     SYSCON_MSH_WT0 |  
                                     SYSCON_MSH_IDLE | 
		                             SYSCON_MS1_PIPE1 | 
                                     SYSCON_MS1_WT0 |  
                                     SYSCON_MS1_IDLE | 
		                             SYSCON_MS0_SLOW  | 
                                     SYSCON_MS0_WT3 |
                                     SYSCON_MS0_IDLE); 

    __builtin_sysreg_write(__SDRCON, SDRCON_INIT | 
    								 SDRCON_RAS2PC5 | 
    								 SDRCON_PC2RAS2 |             
                                     SDRCON_REF3700 | 
                                     SDRCON_PG256 | 
                                     SDRCON_CLAT2 | 
                                     SDRCON_ENBL); 

//---------------------- Enable Interrupts ------------------------------

    temp = __builtin_sysreg_read(__IMASKL);
    temp = temp | INT_DMA0;
    __builtin_sysreg_write(__IMASKL, temp);
    temp = __builtin_sysreg_read(__SQCTL);
    temp = temp | SQCTL_GIE;
    __builtin_sysreg_write(__SQCTL, temp);

//----------------------- Enable FLAG3 Output ---------------------------

    temp = __builtin_sysreg_read(__FLAGREG);
    temp = temp | FLAGREG_FLAG3_EN;                         // Enable output...
    temp = temp & (~SER_ENBL);                              // ...but keep it low for now
    __builtin_sysreg_write(__FLAGREG, temp);

//------------------------ Setup Interrupt ISR --------------------------

    interruptf(SIGDMA0, audio_int);

//-------------------------- Setup DMA TCBs	-----------------------------
//  Setup chain, DMA request and interrupt as follows:
//
//           -> RxLeft -> XmitLeft -> RxRight -> XmitRight -
//          |      |          |                             |
//          |     DMAR       INT                            |
//          |                                               |
//          |_______________________________________________|
//
// change AND mask value to accomodate 19-bits in TS201 DP register, compare DP register for last two params listed below

    RcveDMALSourceTCB.DP = (((long)(&XmitDMALSourceTCB) >> 2) & 0x7FFFF) | TCB_EXTMEM | TCB_NORMAL | TCB_DMAR | TCB_CHAIN;
    RcveDMALDestinTCB.DP = (((long)(&XmitDMALDestinTCB) >> 2) & 0x7FFFF) | TCB_INTMEM | TCB_NORMAL | TCB_DMAR | TCB_CHAIN;
    XmitDMALSourceTCB.DP = (((long)(&RcveDMARSourceTCB) >> 2) & 0x7FFFF) | TCB_INTMEM | TCB_NORMAL | TCB_INT | TCB_CHAIN;
    XmitDMALDestinTCB.DP = (((long)(&RcveDMARDestinTCB) >> 2) & 0x7FFFF) | TCB_EXTMEM | TCB_NORMAL | TCB_INT | TCB_CHAIN;
    RcveDMARSourceTCB.DP = (((long)(&XmitDMARSourceTCB) >> 2) & 0x7FFFF) | TCB_EXTMEM | TCB_NORMAL | TCB_CHAIN;
    RcveDMARDestinTCB.DP = (((long)(&XmitDMARDestinTCB) >> 2) & 0x7FFFF) | TCB_INTMEM | TCB_NORMAL | TCB_CHAIN;
    XmitDMARSourceTCB.DP = (((long)(&RcveDMALSourceTCB) >> 2) & 0x7FFFF) | TCB_INTMEM | TCB_NORMAL | TCB_CHAIN;
    XmitDMARDestinTCB.DP = (((long)(&RcveDMALDestinTCB) >> 2) & 0x7FFFF) | TCB_EXTMEM | TCB_NORMAL | TCB_CHAIN;

//------------------------- Start the DMAs ------------------------------

    SetTCB0(RcveDMALSourceTCB.DI, RcveDMALSourceTCB.DX, RcveDMALSourceTCB.DY, RcveDMALSourceTCB.DP,
            RcveDMALDestinTCB.DI, RcveDMALDestinTCB.DX, RcveDMALDestinTCB.DY, RcveDMALDestinTCB.DP);

//-------------------------- Enable SPORT -------------------------------

    temp = __builtin_sysreg_read(__FLAGREG);
    temp = temp | SER_ENBL;                                 // set the FLAG high now
    __builtin_sysreg_write(__FLAGREG, temp);
}

//***********************************************************************
// Setup DMA TCB0 register (DI_Source, DX_Source, DY_Source, DP_Source
//                          DI_Destin, DX_Destin, DY_Destin, DP_Destin)
//***********************************************************************

void SetTCB0(long DI_Source, long DX_Source, long DY_Source, long DP_Source,
             long DI_Destin, long DX_Destin, long DY_Destin, long DP_Destin)
{
    volatile __builtin_quad TCB_Clear, TCB_Set;

    TCB_Clear = __builtin_compose_128((long long)TCB_DISABLE << 32, 0);
    __builtin_sysreg_write4(__DCS0, TCB_Clear); 
    __builtin_sysreg_write4(__DCD0, TCB_Clear); 
    TCB_Set = __builtin_compose_128(((long long)DX_Source << 32) | DI_Source, ((long long)DP_Source << 32) | DY_Source);
    __builtin_sysreg_write4(__DCS0, TCB_Set); 
    TCB_Set = __builtin_compose_128(((long long)DX_Destin << 32) | DI_Destin, ((long long)DP_Destin << 32) | DY_Destin );
    __builtin_sysreg_write4(__DCD0, TCB_Set); 
}

//***********************************************************************
void Init_ProcessData(void)
{
	Counter0=0;
	Sample=0;
	OutNum=0;
}
//**********************************************

⌨️ 快捷键说明

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