pcm1723.h
上传用户:aoeyumen
上传日期:2007-01-06
资源大小:3329k
文件大小:7k
源码类别:

DVD

开发平台:

Unix_Linux

  1. /*
  2.   **********************************************************************
  3.   *
  4.   *     Copyright 1999, 2000 Creative Labs, Inc.
  5.   *
  6.   **********************************************************************
  7.   *
  8.   *     Date                 Author               Summary of changes
  9.   *     ----                 ------               ------------------
  10.   *     October 20, 1999     Andrew de Quincey    Rewrote and extended
  11.   *                          Lucien Murray-Pitts  original incomplete 
  12.   *                                               driver.
  13.   *
  14.   *     April 18, 1999       Andrew Veliath       Original Driver
  15.   *                                               implementation
  16.   *
  17.   **********************************************************************
  18.   *
  19.   *     This program is free software; you can redistribute it and/or
  20.   *     modify it under the terms of the GNU General Public License as
  21.   *     published by the Free Software Foundation; either version 2 of
  22.   *     the License, or (at your option) any later version.
  23.   *
  24.   *     This program is distributed in the hope that it will be useful,
  25.   *     but WITHOUT ANY WARRANTY; without even the implied warranty of
  26.   *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  27.   *     GNU General Public License for more details.
  28.   *
  29.   *     You should have received a copy of the GNU General Public
  30.   *     License along with this program; if not, write to the Free
  31.   *     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
  32.   *     USA.
  33.   *
  34.   **********************************************************************
  35.   */
  36. /**
  37.  *
  38.  * Driver for the Burr-Brown PCM1723 DAC
  39.  * Include file
  40.  *
  41.  */
  42. #ifndef __PCM1723_H__
  43. #define __PCM1723_H__
  44. // *******************************************************************
  45. // useful defines
  46. // Full name of the chip
  47. #define PCM1723_FULLNAME "Burr-Brown PCM1723"
  48. // Log name of the driver
  49. #define PCM1723_LOGNAME "PCM1723"
  50. // maximum register on chip
  51. #define PCM1723_REGISTERCOUNT 4
  52. // *******************************************************************
  53. // defines
  54. // registers on the pcm1723
  55. #define PCM1723_REG0       0
  56. #define PCM1723_REG1       1
  57. #define PCM1723_REG2       2
  58. #define PCM1723_REG3       3
  59. // possible frequency values
  60. #define PCM1723_FREQ441    0
  61. #define PCM1723_FREQ48     1
  62. #define PCM1723_FREQ96     2
  63. #define PCM1723_FREQ2205   3
  64. #define PCM1723_FREQ32     4
  65. // possible input data width values
  66. #define PCM1723_WIDTH16    0
  67. #define PCM1723_WIDTH20    1
  68. #define PCM1723_WIDTH24    2
  69. // muting flags
  70. #define PCM1723_MUTEON     0
  71. #define PCM1723_MUTEOFF    1
  72. // clock frequency
  73. #define PCM1723_CLKFREQ384 0
  74. #define PCM1723_CLKFREQ256 1
  75. // stereo mode
  76. #define PCM1723_STEREONORMAL  0
  77. #define PCM1723_STEREOMONOL   1
  78. #define PCM1723_STEREOMONOR   2
  79. #define PCM1723_STEREOREVERSE 3
  80. // *******************************************************************
  81. // Structures
  82. typedef struct _pcm1723_ops_t pcm1723_ops_t;
  83. typedef struct _pcm1723_t pcm1723_t;
  84. // generic driver structure
  85. struct _pcm1723_t {
  86.   pcm1723_ops_t* ops;
  87.   int registerValues[PCM1723_REGISTERCOUNT];
  88.   void *data;
  89. };
  90. // lowlevel access operations
  91. struct _pcm1723_ops_t {
  92.   char name[32];
  93.   int (*set_reg) (pcm1723_t* instance, int val);
  94. };
  95. // *******************************************************************
  96. // function declarations
  97. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  98. // Driver maintenance functions
  99. /**
  100.  *
  101.  * Create new pcm1723 driver instance
  102.  *
  103.  * @param ops Lowlevel operations to talk to chip
  104.  * @param data Any extra data for the chip
  105.  *
  106.  * @return new instance (or NULL on error)
  107.  *
  108.  */
  109. extern pcm1723_t* pcm1723_new(pcm1723_ops_t* ops, void *data);
  110. /**
  111.  *
  112.  * Destroy a Pcm1723 driver instance
  113.  *
  114.  * @param instance The instance to destroy
  115.  *
  116.  */
  117. extern void pcm1723_free(pcm1723_t* instance);
  118. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  119. // High level convenience functions
  120. /**
  121.  *
  122.  * Initialises the DAC. 
  123.  *
  124.  * @param instance Instance of the PCM1723 to use
  125.  *
  126.  * @return nonzero on failure
  127.  *
  128.  */
  129. extern int pcm1723_init(pcm1723_t* instance);
  130. /**
  131.  *
  132.  * Sets the DAC Sample frequency.
  133.  *
  134.  * @param instance Instance of the PCM1723 to use
  135.  * @param freqMode. One of the PCM1723_FREQXX defines
  136.  *
  137.  * @return nonzero on failure
  138.  *
  139.  */
  140. extern int pcm1723_set_sample_frequency(pcm1723_t* instance, int freqMode);
  141. /**
  142.  *
  143.  * Sets the DAC input width
  144.  *
  145.  * @param instance Instance of the PCM1723 to use
  146.  * @param freqMode. One of the PCM1723_WIDTHXX defines
  147.  *
  148.  * @return nonzero on failure
  149.  *
  150.  */
  151. extern int pcm1723_set_input_width(pcm1723_t* instance, int width);
  152. /**
  153.  *
  154.  * Sets/unsets the mute on the DAC
  155.  *
  156.  * @param instance Instance of the PCM1723 to use
  157.  * @param muteMode. One of the PCM1723_MUTEON or PCM1723_MUTEOFF defines
  158.  *
  159.  * @return nonzero on failure
  160.  *
  161.  */
  162. extern int pcm1723_set_mute_mode(pcm1723_t* instance, int muteMode);
  163. /**
  164.  *
  165.  * Sets stereo mode
  166.  *
  167.  * @param instance Instance of the PCM1723 to use
  168.  * @param muteMode. One of the PCM1723_STEREOXX defines
  169.  *
  170.  * @return nonzero on failure
  171.  *
  172.  */
  173. extern int pcm1723_set_stereo_mode(pcm1723_t* instance, int stereoMode);
  174. /**
  175.  *
  176.  * Sets clock frequency
  177.  *
  178.  * @param instance Instance of the PCM1723 to use
  179.  * @param clockFrequency. One of the PCM1723_CLKFREQXX defines
  180.  *
  181.  * @return nonzero on failure
  182.  *
  183.  */
  184. extern int pcm1723_set_clock_frequency(pcm1723_t* instance, int clockFrequency);
  185. // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  186. // Register get/set functions
  187. /**
  188.  *
  189.  * Get register from the PCM1723
  190.  *
  191.  * @param instance Instance of the PCM1723 to use
  192.  * @param reg Register to retrieve
  193.  *
  194.  * @return the value, or <0 on error
  195.  *
  196.  */
  197. extern int pcm1723_get_reg(pcm1723_t* instance, int reg);
  198. /**
  199.  *
  200.  * Set register on the PCM1723
  201.  *
  202.  * @param instance Instance of the PCM1723 to use
  203.  * @param reg Register to retrieve
  204.  *
  205.  * @return 0 on success, or <0 on error
  206.  *
  207.  */
  208. extern int pcm1723_set_reg(pcm1723_t* instance, int reg, int val);
  209. /**
  210.  *
  211.  * Get specified bitmask of a register from PCM1723
  212.  *
  213.  * @param instance Instance of the PCM1723 to use
  214.  * @param reg Register to retrieve
  215.  * @param bitmask Bitmask of bits to retrive from that register
  216.  *
  217.  * @return The register bitvalues, or <0 on error
  218.  *
  219.  */
  220. extern int pcm1723_get_bits(pcm1723_t* instance, int reg, int bitmask);
  221. /**
  222.  *
  223.  * Set specified bits of a register on PCM1723
  224.  *
  225.  * @param instance Instance of the PCM1723 to use
  226.  * @param reg Register to retrieve
  227.  * @param bitmask Bitmask of bits to set from that register
  228.  *
  229.  * @return 0 on success, or <0 on error
  230.  *
  231.  */
  232. extern int pcm1723_set_bits(pcm1723_t* instance, int reg, int bitmask, int valuemask);
  233. #endif