aic23.c
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:7k
源码类别:

DSP编程

开发平台:

C/C++

  1. /*
  2.  *  Copyright 2003 by Texas Instruments Incorporated.
  3.  *  All rights reserved. Property of Texas Instruments Incorporated.
  4.  *  Restricted rights to use, duplicate or disclose this code are
  5.  *  granted through contract.
  6.  *  
  7.  */
  8. /* "@(#) DDK 1.11.00.00 11-04-03 (ddk-b13)" */
  9. /*
  10.  *  ======== aic23.c ========
  11.  *
  12.  *  AIC23 codec driver implementation specific to the
  13.  *  Spectrum Digital DSK5510 board.
  14.  */
  15.  
  16. #include <aic23.h>
  17. #include <csl.h>
  18. #include <csl_mcbsp.h>
  19. static void aic23Rset(MCBSP_Handle hMcbsp, Uint16 regnum, Uint16 regval);
  20. /* CSL handle to the McBSP1. The McBSP is used as the control channel in SPI*/
  21. static MCBSP_Config mcbspCfg1 = {
  22.     MCBSP_SPCR1_RMK(
  23.         MCBSP_SPCR1_DLB_OFF,                   /* DLB      = 0 */
  24.         MCBSP_SPCR1_RJUST_RZF,                 /* RJUST    = 0 */
  25.         MCBSP_SPCR1_CLKSTP_NODELAY,            /* CLKSTP   = 1 */
  26.         MCBSP_SPCR1_DXENA_NA,                  /* DXENA    = 0 */
  27.         MCBSP_SPCR1_ABIS_DISABLE,              /* ABIS     = 0 */
  28.         MCBSP_SPCR1_RINTM_RRDY,                /* RINTM    = 0 */
  29.         0,                                     /* RSYNCER  = 0 */
  30.         0,                                     /* RFULL    = 0 */
  31.         0,                                     /* RRDY     = 0 */
  32.         MCBSP_SPCR1_RRST_DISABLE               /* RRST     = 0 */
  33.     ),
  34.     MCBSP_SPCR2_RMK(
  35.         MCBSP_SPCR2_FREE_NO,                   /* FREE     = 0 */
  36.         MCBSP_SPCR2_SOFT_YES,                  /* SOFT     = 1 */
  37.         MCBSP_SPCR2_FRST_RESET,                /* FRST     = 0 */
  38.         MCBSP_SPCR2_GRST_RESET,                /* GRST     = 0 */
  39.         MCBSP_SPCR2_XINTM_XRDY,                /* XINTM    = 0 */
  40.         0,                                     /* XSYNCER  = 0 */
  41.         0,                                     /* XEMPTY   = 0 */
  42.         0,                                     /* XRDY     = 0 */
  43.         MCBSP_SPCR2_XRST_DISABLE               /* XRST     = 0 */
  44.     ),
  45.     MCBSP_RCR1_RMK(
  46.         MCBSP_RCR1_RFRLEN1_OF(0),              /* RFRLEN1  = 0 */
  47.         MCBSP_RCR1_RWDLEN1_8BIT                /* RWDLEN1  = 0 */
  48.     ),
  49.     MCBSP_RCR2_RMK(
  50.         MCBSP_RCR2_RPHASE_SINGLE,              /* RPHASE   = 0 */
  51.         MCBSP_RCR2_RFRLEN2_OF(0),              /* RFRLEN2  = 0 */
  52.         MCBSP_RCR2_RWDLEN2_8BIT,               /* RWDLEN2  = 0 */
  53.         MCBSP_RCR2_RCOMPAND_MSB,               /* RCOMPAND = 0 */
  54.         MCBSP_RCR2_RFIG_YES,                   /* RFIG     = 0 */
  55.         MCBSP_RCR2_RDATDLY_0BIT                /* RDATDLY  = 0 */
  56.     ),
  57.     MCBSP_XCR1_RMK(
  58.         MCBSP_XCR1_XFRLEN1_OF(0),              /* XFRLEN1  = 1 */
  59.         MCBSP_XCR1_XWDLEN1_16BIT               /* XWDLEN1  = 2 */
  60.     ),
  61.     MCBSP_XCR2_RMK(
  62.         MCBSP_XCR2_XPHASE_SINGLE,              /* XPHASE   = 0 */
  63.         MCBSP_XCR2_XFRLEN2_OF(0),              /* XFRLEN2  = 0 */
  64.         MCBSP_XCR2_XWDLEN2_8BIT,               /* XWDLEN2  = 0 */
  65.         MCBSP_XCR2_XCOMPAND_MSB,               /* XCOMPAND = 0 */
  66.         MCBSP_XCR2_XFIG_YES,                   /* XFIG     = 0 */
  67.         MCBSP_XCR2_XDATDLY_0BIT                /* XDATDLY  = 0 */
  68.     ),
  69.     MCBSP_SRGR1_RMK(
  70.         MCBSP_SRGR1_FWID_OF(0),                /* FWID     = 0 */
  71.         MCBSP_SRGR1_CLKGDV_OF(63)              /* CLKGDV   = 63 */
  72.     ),
  73.     MCBSP_SRGR2_RMK(
  74.         MCBSP_SRGR2_GSYNC_FREE,                /* FREE     = 0 */
  75.         MCBSP_SRGR2_CLKSP_RISING,              /* CLKSP    = 0 */
  76.         MCBSP_SRGR2_CLKSM_INTERNAL,            /* CLKSM    = 1 */
  77.         MCBSP_SRGR2_FSGM_DXR2XSR,              /* FSGM     = 0 */
  78.         MCBSP_SRGR2_FPER_OF(13)                /* FPER     = 13 */
  79.     ),
  80.     MCBSP_MCR1_DEFAULT,
  81.     MCBSP_MCR2_DEFAULT,
  82.     MCBSP_PCR_RMK(
  83.         MCBSP_PCR_IDLEEN_RESET,                /* IDLEEN   = 0 */
  84.         MCBSP_PCR_XIOEN_SP,                    /* XIOEN    = 0 */
  85.         MCBSP_PCR_RIOEN_GPIO,                  /* RIOEN    = 1 */
  86.         MCBSP_PCR_FSXM_INTERNAL,               /* FSXM     = 1 */
  87.         MCBSP_PCR_FSRM_EXTERNAL,               /* FSRM     = 0 */
  88.         MCBSP_PCR_SCLKME_NO,                   /* SCLKME   = 0 */
  89.         0,                                     /* CLKSSTAT = 0 */
  90.         0,                                     /* DXSTAT   = 0 */
  91.         0,                                     /* DRSTAT   = 0 */
  92.         MCBSP_PCR_CLKXM_OUTPUT,                /* CLKXM    = 1 */
  93.         MCBSP_PCR_CLKRM_INPUT,                 /* CLKRM    = 0 */
  94.         MCBSP_PCR_FSXP_ACTIVELOW,              /* FSXP     = 1 */
  95.         MCBSP_PCR_FSRP_ACTIVEHIGH,             /* FSRP     = 0 */
  96.         MCBSP_PCR_CLKXP_FALLING,               /* CLKXP    = 1 */
  97.         MCBSP_PCR_CLKRP_FALLING                /* CLKRP    = 0 */
  98.     ),
  99.     MCBSP_RCERA_DEFAULT,
  100.     MCBSP_RCERB_DEFAULT,
  101.     MCBSP_RCERC_DEFAULT,
  102.     MCBSP_RCERD_DEFAULT,
  103.     MCBSP_RCERE_DEFAULT,
  104.     MCBSP_RCERF_DEFAULT,
  105.     MCBSP_RCERG_DEFAULT,
  106.     MCBSP_RCERH_DEFAULT,
  107.     MCBSP_XCERA_DEFAULT,
  108.     MCBSP_XCERB_DEFAULT,
  109.     MCBSP_XCERC_DEFAULT,
  110.     MCBSP_XCERD_DEFAULT,
  111.     MCBSP_XCERE_DEFAULT,
  112.     MCBSP_XCERF_DEFAULT,
  113.     MCBSP_XCERG_DEFAULT,
  114.     MCBSP_XCERH_DEFAULT
  115. };
  116. /*
  117.  *  ======== AIC23_setParams ========
  118.  *
  119.  *  This function takes a pointer to the object of type AIC23_Params,
  120.  *  and writes all 11 control words found in it to the codec. Prior
  121.  *  to that it initializes the codec if this is the first time the
  122.  *  function is ever called.
  123.  *  The 16-bit word is composed of register address in the upper 7 bits
  124.  *  and the 9-bit register value stored in the parameters structure.
  125.  */
  126. Int AIC23_setParams(AIC23_Params *params)
  127. {
  128.     Int i;
  129.     MCBSP_Handle hMcbsp;
  130.     /* open and configure McBSPs */
  131.     hMcbsp = MCBSP_open(MCBSP_PORT1, MCBSP_OPEN_RESET);
  132.     if (hMcbsp == INV) {
  133.         return FALSE;
  134.     }
  135.     
  136.     MCBSP_config(hMcbsp, &mcbspCfg1);
  137.     /*
  138.      *  Initialize the AIC23 codec
  139.      */
  140.     /* Start McBSP1 as the codec control channel */
  141.     MCBSP_start(hMcbsp, MCBSP_XMIT_START |
  142.         MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC, 100);
  143.     
  144.     /* Reset the AIC23 */
  145.     aic23Rset(hMcbsp, AIC23_RESET, 0);
  146.     
  147.     /* Assign each register */
  148.     for (i = 0; i < AIC23_NUMREGS; i++) {
  149.         aic23Rset(hMcbsp, i, params->regs[i]);
  150.     }
  151.     return TRUE;
  152. }
  153. /*
  154.  *  ======== aic23Rset ========
  155.  *  Set codec register regnum to value regval
  156.  */
  157. static Void aic23Rset(MCBSP_Handle hMcbsp, Uint16 regnum, Uint16 regval)
  158. {
  159.     /* Mask off lower 9 bits */
  160.     regval &= 0x1ff;
  161.     
  162.     /* Wait for XRDY signal before writing data to DXR */
  163.     while (!MCBSP_xrdy(hMcbsp));
  164.     
  165.     /* Write 16 bit data value to DXR */
  166.     MCBSP_write16(hMcbsp, (regnum << 9) | regval);
  167. }