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

📄 c6711_mcbsp.c

📁 该代码实现了 两次下载法在dspC6713平台上 烧写flash的操作过程
💻 C
字号:
/*****************************************************************************
* File name :     C6711_McBSP.c
* Description:
******************************************************************************/
#ifndef MASTER_FILE
#define C6711_GLOBALS
#include "includes.h"
#endif

#include "McBSP.H"
 
/******************************************************************************
* function    : McBSP0_init()
* DESCRIPTION : Initializes multi-channel serial port 0 for 16 bits of data   
*               in per frame slave mode. 
*  Input      : None
*  Output     : None
******************************************************************************/
void mcbsp0_init(void)
{
 /* Setup McBSP0 */
  volatile unsigned int temp =0;
  /* Reset serial port */
  *(unsigned volatile int *)McBSP0_SPCR = 0; 
  /* Set pin control reg */
  *(unsigned volatile int *)McBSP0_PCR = 0;
  /* Set rx control reg for one 16 bit data/frame */
  *(unsigned volatile int *)McBSP0_RCR = 0x10040;
  /* Set tx control reg for one 16 bit data/frame */
  *(unsigned volatile int *)McBSP0_XCR = 0x10040;
  *(unsigned volatile int *)McBSP0_DXR = 0;
  /* Setup SP control reg */
  *(unsigned volatile int *)McBSP0_SPCR = 0x12001;
}

/*******************************************************************************
* FUNCTION   :  mcbsp0_write
* ARGUMENTS  : INT out_data    <-- Value to write to McBSP0
* DESCRIPTION: Checks to see if output register is empty.  
*              If empty write new data to it 
* OUTPUTS    : VOID
*******************************************************************************/
void mcbsp0_write(int out_data)
{
  int output_reg;
  output_reg = *(unsigned volatile int *)McBSP0_SPCR & 0x20000;
  while ( output_reg == 0)
  {
    output_reg = *(unsigned volatile int *)McBSP0_SPCR & 0x20000;
  }
  *(unsigned volatile int *)McBSP0_DXR = out_data;
}

/*******************************************************************************
* FUNCTION    : mcbsp0_read
* ARGUMENTS   : VOID
* DESCRIPTION : Checks to see if input register is full. 
*               If full read data from it.
* OUTPUTS     : INT     <-- Data read from input register
*******************************************************************************/
int mcbsp0_read()
{
  int input_reg;
  input_reg = *(unsigned volatile int *)McBSP0_SPCR & 0x2;
  while ( input_reg == 0)
  {
    input_reg = *(unsigned volatile int *)McBSP0_SPCR & 0x2;
  }
  input_reg = *(unsigned volatile int *)McBSP0_DRR;
  return input_reg;
}

/*******************************************************************************
* FUNCTION    : mcbsp0_test
* ARGUMENTS   : VOID
* DESCRIPTION :  Tests multi-channel serial port 0 in internal loopback 
*                mode after setting up its own clock.
* OUTPUTS     : INT 0                 <-- If successful
*******************************************************************************/
int mcbsp0_test()
{
  /* Setup McBSP0 */
  volatile unsigned int temp = 0, temp1;
  /* Reset serial port */
  *(unsigned volatile int *)McBSP0_SPCR = 0;
  /* Set baud rate to 1MHz */
  *(unsigned volatile int *)McBSP0_SRGR = 0x2014004A;
  /* Set pin control reg */
  *(unsigned volatile int *)McBSP0_PCR = 0xA00;
  /* Set rx control reg one 16 bit data/frame */
  *(unsigned volatile int *)McBSP0_RCR = 0x10040;
  /* Set tx control reg one 16 bit data/frame */
  *(unsigned volatile int *)McBSP0_XCR = 0x10040;
  /* Setup SP control reg */
  *(unsigned volatile int *)McBSP0_SPCR = 0xC1A001;

  *(unsigned volatile int *)McBSP0_DXR = 0xAAAA;

  temp1 = *(unsigned volatile int *)McBSP0_DRR;
  temp1 = mcbsp0_read(); 
  mcbsp0_write(0x5555);
  temp = mcbsp0_read();
  temp &= 0xffff;
  if (temp != 0x5555)
  {
    temp = 1;
    return temp;
  }

  mcbsp0_write(0xaaaa);
  temp = mcbsp0_read();
  temp &= 0xffff;
  if (temp != 0xaaaa)
  {
    temp = 1;
    return temp;
  }
  return 0;
}

/*******************************************************************************
* FUNCTION : play_codec
* ARGUMENTS :INT number         <-- Number of samples
*            INT tone_playbk    <-- Audio in playback if 0, Tone if 1
* DESCRIPTION :This function initializes the DSP's McBSP and the AIC's codec before
*              playing the codec input through its output or generating a tone.
*******************************************************************************/
short sin_table[] = {0, 23170>>2, 32767>>2, 23170>>2,0, -23170>>2, -32767>>2, -23170>>2};

void play_codec(int number, int tone_playbk)
{
  int i,j;
  int temp;

// set up control register 3 for S/W reset
  mcbsp0_read();        /* do a dummy read to synchronize read and write */
  mcbsp0_write(0);      /* write 0 to serial port as normal data  */
  mcbsp0_read();        /* do a read to keep write and read synchronized */
  mcbsp0_write(0);      /* write 0 to serial port as normal data  */
  mcbsp0_read();        /* do a read to keep write and read synchronized */
  mcbsp0_write(0);      /* write 0 to serial port as normal data  */
  mcbsp0_read();        /* do a read to keep write and read synchronized */
  mcbsp0_write(1);      /* write 1 to indicating next data is control  */
  mcbsp0_read();        /* do a read to keep write and read synchronized */
  mcbsp0_write(0x0386); /* do a s/w reset */
  mcbsp0_read();        /* do a read to keep write and read synchronized */
  mcbsp0_write(0);      /* write 0 to serial port as normal data  */
  mcbsp0_read();        /* do a read to keep write and read synchronized */
         
// set up control register 3 for mic input
  mcbsp0_write(0);     /* write 0 to serial port as normal data  */
  mcbsp0_read();       /* do a read to keep write and read synchronized */
  mcbsp0_write(0);     /* write 0 to serial port as normal data  */
  mcbsp0_read();       /* do a read to keep write and read synchronized */
  mcbsp0_write(1);     /* write 1 to indicating next data is control  */
  mcbsp0_read();       /* do a read to keep write and read synchronized */
  mcbsp0_write(0x0306); /* set up reg 3 */
  mcbsp0_read();       /* do a read to keep write and read synchronized */
  mcbsp0_write(0);     /* write 0 to serial port as normal data  */
  mcbsp0_read();       /* do a read to keep write and read synchronized */
         
  mcbsp0_write(0);     /* write 0 to serial port as normal data  */
  mcbsp0_read();       /* do a read to keep write and read synchronized */
  mcbsp0_write(1);     /* write 1 to indicating next data is control  */
  mcbsp0_read();       /* do a read to keep write and read synchronized */
  mcbsp0_write(0x2330); /* request reg 3 */
  temp = mcbsp0_read(); /* read reg 3    */
  mcbsp0_write(0x0);  /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(0x0);  /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */

//set up control register 4
  mcbsp0_write(0);    /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(0);    /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(1);    /* write 1 to indicating next data is control  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(0x0400);  /* set up reg 4 */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(0);    /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */

  mcbsp0_write(0);    /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(1);    /* write 1 to indicating next data is control  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(0x2430);  /* request reg 4 */
  temp = mcbsp0_read();  /* read reg 4    */
  mcbsp0_write(0x0);  /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(0x0);  /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */

// set up control register 5
  mcbsp0_write(0);    /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(0);    /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(1);    /* write 1 to indicating next data is control  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(0x0502); /* set up reg 5 */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(0);    /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */

  mcbsp0_write(0);    /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(1);    /* write 1 to indicating next data is control  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(0x2530);  /* request reg 5 */
  temp = mcbsp0_read();  /* read reg 5 */
  mcbsp0_write(0x0);  /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */
  mcbsp0_write(0x0);  /* write 0 to serial port as normal data  */
  mcbsp0_read();      /* do a read to keep write and read synchronized */

  if(tone_playbk)
  {
    for (i=0; i< 8; i++)
    {
      sin_table[i] = sin_table[i] & 0xfffe;
    }
 
    for (i=0;i<number;i++)
    {
      for (j=0;j<8;j++)
      {
        mcbsp0_write((int)sin_table[j]);
      }
    }
  }
  else
  {
    for (i=0;i<number;i++)
    {
      temp = mcbsp0_read();
      temp = temp & 0xfffe;
      mcbsp0_write(temp);
    }
  }
}


/* END OF FILE */

⌨️ 快捷键说明

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