网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: 61IC中国电子在线 >> DSP >> 代码示例 >> TI DSP代码示例 >> C2000 >> 文章正文
  TMS320F2812 MCBSP_FFDLB范例程序         ★★★ 【字体:
TMS320F2812 MCBSP_FFDLB范例程序
作者:61IC    文章来源:本站原创    点击数:    更新时间:2007-1-16    

//
//      TMDX ALPHA RELEASE
//      Intended for product evaluation purposes
//
//###########################################################################
//
// FILE: Example_28xMCBSP_FFDLB.c
//
// TITLE: DSP28 Device McBSP Digital Loop Back porgram.
//   All these tests will self validate the code and update the
//          Test status in Test_status array.
//   And PASS_Flag =0xDOBE for pass, 0xDEAD for fail
//  
// Test 1  DLB set, 8-bit word, enable R/Xcompanding u-law ,
//         14 bitdata, leading LSBs are 00
//         Internal clocks, Frame sync on  DXR-XSR write
//         CLKX = LSPCLK/16, CLKGDIV =15, CLKR internal tied to CLKR
//
// Test 2  DLB set, 16-bit word,Fwidth 8bits, (FSGM has to be 1)
//         Rjustifed, zero fill,NO R/Xcompanding,  
//         Internal clocks, Frame sync on  DXR-XSR write
//         CLKX = LSPCLK/4, CLKGDIV =3, CLKR internal tied to CLKR
//  
//  
//
//###########################################################################
//
//  Ver | dd mmm yyyy | Who  | Description of changes
// =====|=============|======|===============================================
//  0.58| 03 July2002 | S.S. | McBSP example
//###########################################################################

 

#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"

// Prototype statements for functions found within this file.
// interrupt void ISRTimer2(void);
void delay_loop(void);
void mcbsp_dlb8(void);
void mcbsp_dlb16(void);
void mcbsp_xmit(int a, int b);
void mcbsp_fifo_init(void); 
void error(int);
void program_stop();
unsigned int var1 = 0;
unsigned int var2 = 0;
unsigned int var3 = 0;
unsigned int var4 = 0;
unsigned int var5 = 0;
unsigned int test_count = 0;
unsigned int Test_flag1 = 0;
unsigned int Test_flag2 = 0;
unsigned int Test_flag3 = 0;
unsigned int Test_flag4 = 0;
unsigned int Test_var  = 0;
unsigned int Test_status[32];
unsigned int PASS_flag = 0;

void main(void)
{

// Step 1. Initialize System Control registers, PLL, WatchDog, Clocks to default state:
    // This function is found in the DSP28_SysCtrl.c file.
    InitSysCtrl();

 

// Step 2. Select GPIO for the device or for the specific application:
    // This function is found in the DSP28_Gpio.c file.
    // InitGpio(); skip this as this is example selects the I/O for McBSP in this file itself
   
    EALLOW;
    GpioMuxRegs.GPFMUX.all=0x7E00;    // Select GPIOs to be McBSP pins    
                                      // Port F MUX - x111 1110 0000 0000
    EDIS;

// Step 3. Initialize PIE vector table:
    // The PIE vector table is initialized with pointers to shell Interrupt
    // Service Routines (ISR).  The shell routines are found in DSP28_DefaultIsr.c.
    // Insert user specific ISR code in the appropriate shell ISR routine in
    // the DSP28_DefaultIsr.c file.

    // Disable and clear all CPU interrupts:
    DINT;
    IER = 0x0000;
    IFR = 0x0000;

    // Initialize Pie Control Registers To Default State:
        // This function is found in the DSP28_PieCtrl.c file.
    InitPieCtrl();

    // Initialize the PIE Vector Table To a Known State:
    // This function is found in DSP28_PieVect.c.
    // This function populates the PIE vector table with pointers
    // to the shell ISR functions found in DSP28_DefaultIsr.c.
    InitPieVectTable();   
   
// Step 4. Initialize all the Device Peripherals to a known state:
    // This function is found in DSP28_InitPeripherals.c
    // InitPeripherals(); skip this for GPIO tests
   
// Step 5. User specific functions, Reassign vectors (optional), Enable Interrupts:

   
    mcbsp_fifo_init();                                  // Initialize the Mcbsp FIFO
   
    mcbsp_dlb8();                                       // Digital loop back test
    mcbsp_dlb16();

// Update Test status   
    if(PASS_flag !=0)
       PASS_flag=0xDEAD;                                // Test code exit here..
    else
       PASS_flag=0xD0BE;                                // Test code exit he
   
// Step 6. IDLE loop. Just sit and loop forever:   
    asm("     ESTOP0");            // Break point
    for(;;);

}    


// Step 7. Insert all local Interrupt Service Routines (ISRs) and functions here:   
    // If local ISRs are used, reassign vector addresses in vector table as
    // shown in Step 5


// Some Useful local functions
void delay_loop()
{
    long      i;
    for (i = 0; i < 1000000; i++) {}
}


void error(int ErrorFlag)
{
    PASS_flag =0xDEAD;
    Test_status[ Test_var]= 0xDEAD;       
//    asm("     ESTOP0");                            // Test failed!! Stop!
//    for (;;);

}


// Test 1  DLB, 8-bit word, enable R/Xcompanding u-law ,
//         14 bitdata, leading LSBs are 00
//         Internal clocks, Frame sync on  DXR-XSR write
//         CLKX = LSPCLK/16, CLKGDIV =15, CLKR internal tied to CLKR

void mcbsp_dlb8()
    {   
   
    // McBSP register settings for Digital loop back
    McbspaRegs.SPCR2.all=0x0000;                       // XRST =0
    McbspaRegs.SPCR1.all=0x8000;                       // RRST =0, DLB enabled
    McbspaRegs.RCR2.all=0x0;
    McbspaRegs.RCR1.all=0x0;
    McbspaRegs.XCR2.all=0x0;
    McbspaRegs.XCR1.all=0x0;
    McbspaRegs.SRGR2.all=0x200f;                     
    McbspaRegs.SRGR1.all=0x0001;
    McbspaRegs.MCR2.all=0x0;
    McbspaRegs.MCR1.all=0x0;
    McbspaRegs.PCR1.all=0x00a00;
// Bit changes for the test 

    McbspaRegs.SPCR1.bit.RJUST =0;                     // word
    McbspaRegs.SRGR2.bit.FSGM=0;                       // FSGM =0 for FSX based on write to DXR -XSR
    McbspaRegs.SRGR1.bit.CLKGDV=15;                    // set CLKGDV = 15
    McbspaRegs.RCR2.bit.RCOMPAND =2;                   // R/XCOMPAND with ulaw
    McbspaRegs.XCR2.bit.XCOMPAND =2;                   // R/XCOMPAND with ulaw
 
   
//  McBSP Reset to enable
    McbspaRegs.SPCR2.bit.XRST =1;                      // enable XRST/RRST
    McbspaRegs.SPCR1.bit.RRST=1;
    delay_loop();  
    McbspaRegs.SPCR2.all |=0x00C0;                     // Only enable FRST,GRST used after
    var1 =0x034c;
    var2 =0x0;                                        // word to be xmitted
    mcbsp_xmit(var1,var2);
//  while(McbspaRegs.SPCR1.bit.RRDY==0) { }          // Check for receive
    while(McbspaRegs.MFFRX.bit.ST==0) { }               

    Test_flag4 = McbspaRegs.DRR1.all;                  // read DRR1
    if(Test_flag4 != 0x034c) error(1);
    else
    Test_status[ Test_var]= 0x5000;                   // update Test_status a test number
    Test_var++;    
    }

// Test 2, DLB, 16-bit word,Fwidth 8bits, (FSGM has to be 1)
// Rjustifed, zero fill,NO R/Xcompanding,  
// internal clocks, Frame sync on  DXR-XSR write
// CLKX = LSPCLK/4, CLKGDIV =3, CLKR internal tied to CLKR

void mcbsp_dlb16()
{
    McbspaRegs.SPCR2.all=0x0000;                        // XRST =0
    McbspaRegs.SPCR1.all=0x8000;                        // RRST =0, DLB enabled
    McbspaRegs.RCR2.all=0x0;
    McbspaRegs.RCR1.all=0x0;
    McbspaRegs.XCR2.all=0x0;
    McbspaRegs.XCR1.all=0x0;
    McbspaRegs.SRGR2.all=0x200f;                     
    McbspaRegs.SRGR1.all=0x0001;
    McbspaRegs.MCR2.all=0x0;
    McbspaRegs.MCR1.all=0x0;
    McbspaRegs.PCR1.all=0x00a00;
// Bit changes for the test 
 
    McbspaRegs.SPCR1.bit.RJUST =00;                     // word Rjustifed
    McbspaRegs.SRGR2.bit.FSGM=1;                        // FSGM =1 for FSX based on write to DXR -XSR
                                                       // has to be set FWID to work!
    McbspaRegs.SRGR2.bit.FPER=31;                       // set FPER = 31
    McbspaRegs.SRGR1.bit.CLKGDV =3;                     // set CLKGDV = 3
    McbspaRegs.SRGR1.bit.FWID =8;                       // set Fwidth =8     
    McbspaRegs.RCR2.bit.RCOMPAND =00;                   // No R/XCOMPAND
    McbspaRegs.XCR2.bit.XCOMPAND =00;                    
    McbspaRegs.RCR1.bit.RWDLEN1  =2;                    // 16-bit word
    McbspaRegs.XCR1.bit.XWDLEN1  =2;                    // 16-bit word
   
 //  McBSP Reset to enable
    McbspaRegs.SPCR2.bit.XRST =1;                       // enable XRST/RRST
    McbspaRegs.SPCR1.bit.RRST=1;
    delay_loop();  
    McbspaRegs.SPCR2.all |=0x00C0;                      // Only enable FRST,GRST used after

    var1 =0xb5b5;                                      // word to be xmitted
    var2 =0x0;
     mcbsp_xmit(var1,var2);
//    while(McbspaRegs.SPCR1.bit.RRDY==0) { }           // Check for receive
    while(McbspaRegs.MFFRX.bit.ST==0) { }               // Check for receive
    Test_flag4 = McbspaRegs.DRR1.all;                   // read DRR1
    if(Test_flag4 != 0xb5b5) error(1);
    else
    Test_status[ Test_var]= 0x5001;                    // update Test_status test number
    Test_var++;
}

 

void mcbsp_xmit(int a, int b)
{

    McbspaRegs.DXR2.all=b;
    McbspaRegs.DXR1.all=a;

   
}   

void mcbsp_fifo_init()                                       
{

    McbspaRegs.MFFTX.all=0x0000;
    McbspaRegs.MFFRX.all=0x001F;
    McbspaRegs.MFFCT.all=0x0;
    McbspaRegs.MFFINT.all=0x0;
    McbspaRegs.MFFST.all=0x0; 
// Bit changes as applicable  to each tests
    McbspaRegs.MFFTX.bit.MFFENA=1;                        // Enable FIFO
    McbspaRegs.MFFTX.bit.XRESET=1;                        // Enable Transmit channel
    McbspaRegs.MFFRX.bit.RRESET=1;                        // Enable Receive channel
     
   

 

//===========================================================================
// No more.
//===========================================================================

               欢迎点击进入:TI德州中文网   (国内唯一针对TI应用的中文技术网站)    文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    TMS320F2812的SPWM原程序
    基于LabVIEW和TMS320F2812的…
    TMS320F2812的CAN调试成功经…
    基于TMS320F2812和μC/OS II…
    TMS320F2812 全局汇编函数
    TMS320F2812 CMD 文件各段含…
    基于TMS320F2812集中供电系统…
    TMS320F2812的CMD文件配置详…
    基于TMS320F2812的多轴伺服控…
    利用TMS320F2812 DSP&DRV592…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:61IC 湘ICP备05002478号