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

📄 i2saudio.cpp

📁 EP931X系列的WinCE声卡驱动源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//**********************************************************************
//                                                                      
// Filename: i2saudio.cpp
//                                                                      
// Description: Interface for the I2S codec interface class.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Use of this source code is subject to the terms of the Cirrus end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to 
// use this source code. For a copy of the EULA, please see the 
// EULA.RTF on your install media.
//
// Copyright(c) Cirrus Logic Corporation 2003, All Rights Reserved                       
//                                                                      
//**********************************************************************

#include "wavecommon.h"


//
// A good clock rate for EE is 10KHz.  That's a period of 10 uSec.
// So we have our EE_DELAY that times half a clock period set to 5 uSec.
// Note that for Kittyhawk 100Khz is to fast.
#define EE_DELAY_USEC       100

//
// The number of time we should read the two wire device before giving
// up.
//
#define EE_READ_TIMEOUT     100


struct DIV_TABLE
{
    ULONG   ulTotalDiv;
    ULONG   ulI2SDiv;
};

static const DIV_TABLE I2SDivTable[] =
{
    {   6, I2SDIV_PDIV_2  | (  2 & I2SDIV_MDIV_MASK) },  // Fake entry for lower limit.
    {   8, I2SDIV_PDIV_2  | (  2 & I2SDIV_MDIV_MASK) },
    {  10, I2SDIV_PDIV_25 | (  2 & I2SDIV_MDIV_MASK) },
    {  12, I2SDIV_PDIV_3  | (  2 & I2SDIV_MDIV_MASK) },
    {  15, I2SDIV_PDIV_25 | (  3 & I2SDIV_MDIV_MASK) },
    {  16, I2SDIV_PDIV_2  | (  4 & I2SDIV_MDIV_MASK) },
    {  18, I2SDIV_PDIV_3  | (  3 & I2SDIV_MDIV_MASK) },
    {  20, I2SDIV_PDIV_25 | (  4 & I2SDIV_MDIV_MASK) },
    {  24, I2SDIV_PDIV_3  | (  4 & I2SDIV_MDIV_MASK) },
    {  25, I2SDIV_PDIV_25 | (  5 & I2SDIV_MDIV_MASK) },
    {  28, I2SDIV_PDIV_2  | (  7 & I2SDIV_MDIV_MASK) },
    {  30, I2SDIV_PDIV_3  | (  5 & I2SDIV_MDIV_MASK) },
    {  32, I2SDIV_PDIV_2  | (  8 & I2SDIV_MDIV_MASK) },
    {  35, I2SDIV_PDIV_25 | (  7 & I2SDIV_MDIV_MASK) },
    {  36, I2SDIV_PDIV_3  | (  6 & I2SDIV_MDIV_MASK) },
    {  40, I2SDIV_PDIV_25 | (  8 & I2SDIV_MDIV_MASK) },
    {  42, I2SDIV_PDIV_3  | (  7 & I2SDIV_MDIV_MASK) },
    {  44, I2SDIV_PDIV_2  | ( 11 & I2SDIV_MDIV_MASK) },
    {  45, I2SDIV_PDIV_25 | (  9 & I2SDIV_MDIV_MASK) },
    {  48, I2SDIV_PDIV_3  | (  8 & I2SDIV_MDIV_MASK) },
    {  50, I2SDIV_PDIV_25 | ( 10 & I2SDIV_MDIV_MASK) },
    {  52, I2SDIV_PDIV_2  | ( 13 & I2SDIV_MDIV_MASK) },
    {  54, I2SDIV_PDIV_3  | (  9 & I2SDIV_MDIV_MASK) },
    {  55, I2SDIV_PDIV_25 | ( 11 & I2SDIV_MDIV_MASK) },
    {  56, I2SDIV_PDIV_2  | ( 14 & I2SDIV_MDIV_MASK) },
    {  60, I2SDIV_PDIV_3  | ( 10 & I2SDIV_MDIV_MASK) },
    {  64, I2SDIV_PDIV_2  | ( 16 & I2SDIV_MDIV_MASK) },
    {  65, I2SDIV_PDIV_25 | ( 13 & I2SDIV_MDIV_MASK) },
    {  66, I2SDIV_PDIV_3  | ( 11 & I2SDIV_MDIV_MASK) },
    {  68, I2SDIV_PDIV_2  | ( 17 & I2SDIV_MDIV_MASK) },
    {  70, I2SDIV_PDIV_25 | ( 14 & I2SDIV_MDIV_MASK) },
    {  72, I2SDIV_PDIV_3  | ( 12 & I2SDIV_MDIV_MASK) },
    {  75, I2SDIV_PDIV_25 | ( 15 & I2SDIV_MDIV_MASK) },
    {  76, I2SDIV_PDIV_2  | ( 19 & I2SDIV_MDIV_MASK) },
    {  78, I2SDIV_PDIV_3  | ( 13 & I2SDIV_MDIV_MASK) },
    {  80, I2SDIV_PDIV_25 | ( 16 & I2SDIV_MDIV_MASK) },
    {  84, I2SDIV_PDIV_3  | ( 14 & I2SDIV_MDIV_MASK) },
    {  85, I2SDIV_PDIV_25 | ( 17 & I2SDIV_MDIV_MASK) },
    {  88, I2SDIV_PDIV_2  | ( 22 & I2SDIV_MDIV_MASK) },
    {  90, I2SDIV_PDIV_3  | ( 15 & I2SDIV_MDIV_MASK) },
    {  92, I2SDIV_PDIV_2  | ( 23 & I2SDIV_MDIV_MASK) },
    {  95, I2SDIV_PDIV_25 | ( 19 & I2SDIV_MDIV_MASK) },
    {  96, I2SDIV_PDIV_3  | ( 16 & I2SDIV_MDIV_MASK) },
    { 100, I2SDIV_PDIV_25 | ( 20 & I2SDIV_MDIV_MASK) },
    { 102, I2SDIV_PDIV_3  | ( 17 & I2SDIV_MDIV_MASK) },
    { 104, I2SDIV_PDIV_2  | ( 26 & I2SDIV_MDIV_MASK) },
    { 105, I2SDIV_PDIV_25 | ( 21 & I2SDIV_MDIV_MASK) },
    { 108, I2SDIV_PDIV_3  | ( 18 & I2SDIV_MDIV_MASK) },
    { 110, I2SDIV_PDIV_25 | ( 22 & I2SDIV_MDIV_MASK) },
    { 112, I2SDIV_PDIV_2  | ( 28 & I2SDIV_MDIV_MASK) },
    { 114, I2SDIV_PDIV_3  | ( 19 & I2SDIV_MDIV_MASK) },
    { 115, I2SDIV_PDIV_25 | ( 23 & I2SDIV_MDIV_MASK) },
    { 116, I2SDIV_PDIV_2  | ( 29 & I2SDIV_MDIV_MASK) },
    { 120, I2SDIV_PDIV_3  | ( 20 & I2SDIV_MDIV_MASK) },
    { 124, I2SDIV_PDIV_2  | ( 31 & I2SDIV_MDIV_MASK) },
    { 125, I2SDIV_PDIV_25 | ( 25 & I2SDIV_MDIV_MASK) },
    { 126, I2SDIV_PDIV_3  | ( 21 & I2SDIV_MDIV_MASK) },
    { 128, I2SDIV_PDIV_2  | ( 32 & I2SDIV_MDIV_MASK) },
    { 130, I2SDIV_PDIV_25 | ( 26 & I2SDIV_MDIV_MASK) },
    { 132, I2SDIV_PDIV_3  | ( 22 & I2SDIV_MDIV_MASK) },
    { 135, I2SDIV_PDIV_25 | ( 27 & I2SDIV_MDIV_MASK) },
    { 136, I2SDIV_PDIV_2  | ( 34 & I2SDIV_MDIV_MASK) },
    { 138, I2SDIV_PDIV_3  | ( 23 & I2SDIV_MDIV_MASK) },
    { 140, I2SDIV_PDIV_25 | ( 28 & I2SDIV_MDIV_MASK) },
    { 144, I2SDIV_PDIV_3  | ( 24 & I2SDIV_MDIV_MASK) },
    { 145, I2SDIV_PDIV_25 | ( 29 & I2SDIV_MDIV_MASK) },
    { 148, I2SDIV_PDIV_2  | ( 37 & I2SDIV_MDIV_MASK) },
    { 150, I2SDIV_PDIV_3  | ( 25 & I2SDIV_MDIV_MASK) },
    { 152, I2SDIV_PDIV_2  | ( 38 & I2SDIV_MDIV_MASK) },
    { 155, I2SDIV_PDIV_25 | ( 31 & I2SDIV_MDIV_MASK) },
    { 156, I2SDIV_PDIV_3  | ( 26 & I2SDIV_MDIV_MASK) },
    { 160, I2SDIV_PDIV_25 | ( 32 & I2SDIV_MDIV_MASK) },
    { 162, I2SDIV_PDIV_3  | ( 27 & I2SDIV_MDIV_MASK) },
    { 164, I2SDIV_PDIV_2  | ( 41 & I2SDIV_MDIV_MASK) },
    { 165, I2SDIV_PDIV_25 | ( 33 & I2SDIV_MDIV_MASK) },
    { 168, I2SDIV_PDIV_3  | ( 28 & I2SDIV_MDIV_MASK) },
    { 170, I2SDIV_PDIV_25 | ( 34 & I2SDIV_MDIV_MASK) },
    { 172, I2SDIV_PDIV_2  | ( 43 & I2SDIV_MDIV_MASK) },
    { 174, I2SDIV_PDIV_3  | ( 29 & I2SDIV_MDIV_MASK) },
    { 175, I2SDIV_PDIV_25 | ( 35 & I2SDIV_MDIV_MASK) },
    { 176, I2SDIV_PDIV_2  | ( 44 & I2SDIV_MDIV_MASK) },
    { 180, I2SDIV_PDIV_3  | ( 30 & I2SDIV_MDIV_MASK) },
    { 184, I2SDIV_PDIV_2  | ( 46 & I2SDIV_MDIV_MASK) },
    { 185, I2SDIV_PDIV_25 | ( 37 & I2SDIV_MDIV_MASK) },
    { 186, I2SDIV_PDIV_3  | ( 31 & I2SDIV_MDIV_MASK) },
    { 188, I2SDIV_PDIV_2  | ( 47 & I2SDIV_MDIV_MASK) },
    { 190, I2SDIV_PDIV_25 | ( 38 & I2SDIV_MDIV_MASK) },
    { 192, I2SDIV_PDIV_3  | ( 32 & I2SDIV_MDIV_MASK) },
    { 195, I2SDIV_PDIV_25 | ( 39 & I2SDIV_MDIV_MASK) },
    { 196, I2SDIV_PDIV_2  | ( 49 & I2SDIV_MDIV_MASK) },
    { 198, I2SDIV_PDIV_3  | ( 33 & I2SDIV_MDIV_MASK) },
    { 200, I2SDIV_PDIV_25 | ( 40 & I2SDIV_MDIV_MASK) },
    { 204, I2SDIV_PDIV_3  | ( 34 & I2SDIV_MDIV_MASK) },
    { 205, I2SDIV_PDIV_25 | ( 41 & I2SDIV_MDIV_MASK) },
    { 208, I2SDIV_PDIV_2  | ( 52 & I2SDIV_MDIV_MASK) },
    { 210, I2SDIV_PDIV_3  | ( 35 & I2SDIV_MDIV_MASK) },
    { 212, I2SDIV_PDIV_2  | ( 53 & I2SDIV_MDIV_MASK) },
    { 215, I2SDIV_PDIV_25 | ( 43 & I2SDIV_MDIV_MASK) },
    { 216, I2SDIV_PDIV_3  | ( 36 & I2SDIV_MDIV_MASK) },
    { 220, I2SDIV_PDIV_25 | ( 44 & I2SDIV_MDIV_MASK) },
    { 222, I2SDIV_PDIV_3  | ( 37 & I2SDIV_MDIV_MASK) },
    { 224, I2SDIV_PDIV_2  | ( 56 & I2SDIV_MDIV_MASK) },
    { 225, I2SDIV_PDIV_25 | ( 45 & I2SDIV_MDIV_MASK) },
    { 228, I2SDIV_PDIV_3  | ( 38 & I2SDIV_MDIV_MASK) },
    { 230, I2SDIV_PDIV_25 | ( 46 & I2SDIV_MDIV_MASK) },
    { 232, I2SDIV_PDIV_2  | ( 58 & I2SDIV_MDIV_MASK) },
    { 234, I2SDIV_PDIV_3  | ( 39 & I2SDIV_MDIV_MASK) },
    { 235, I2SDIV_PDIV_25 | ( 47 & I2SDIV_MDIV_MASK) },
    { 236, I2SDIV_PDIV_2  | ( 59 & I2SDIV_MDIV_MASK) },
    { 240, I2SDIV_PDIV_3  | ( 40 & I2SDIV_MDIV_MASK) },
    { 244, I2SDIV_PDIV_2  | ( 61 & I2SDIV_MDIV_MASK) },
    { 245, I2SDIV_PDIV_25 | ( 49 & I2SDIV_MDIV_MASK) },
    { 246, I2SDIV_PDIV_3  | ( 41 & I2SDIV_MDIV_MASK) },
    { 248, I2SDIV_PDIV_2  | ( 62 & I2SDIV_MDIV_MASK) },
    { 250, I2SDIV_PDIV_25 | ( 50 & I2SDIV_MDIV_MASK) },
    { 252, I2SDIV_PDIV_3  | ( 42 & I2SDIV_MDIV_MASK) },
    { 255, I2SDIV_PDIV_25 | ( 51 & I2SDIV_MDIV_MASK) },
    { 256, I2SDIV_PDIV_2  | ( 64 & I2SDIV_MDIV_MASK) },
    { 258, I2SDIV_PDIV_3  | ( 43 & I2SDIV_MDIV_MASK) },
    { 260, I2SDIV_PDIV_25 | ( 52 & I2SDIV_MDIV_MASK) },
    { 264, I2SDIV_PDIV_3  | ( 44 & I2SDIV_MDIV_MASK) },
    { 265, I2SDIV_PDIV_25 | ( 53 & I2SDIV_MDIV_MASK) },
    { 268, I2SDIV_PDIV_2  | ( 67 & I2SDIV_MDIV_MASK) },
    { 270, I2SDIV_PDIV_3  | ( 45 & I2SDIV_MDIV_MASK) },
    { 272, I2SDIV_PDIV_2  | ( 68 & I2SDIV_MDIV_MASK) },
    { 275, I2SDIV_PDIV_25 | ( 55 & I2SDIV_MDIV_MASK) },
    { 276, I2SDIV_PDIV_3  | ( 46 & I2SDIV_MDIV_MASK) },
    { 280, I2SDIV_PDIV_25 | ( 56 & I2SDIV_MDIV_MASK) },
    { 282, I2SDIV_PDIV_3  | ( 47 & I2SDIV_MDIV_MASK) },
    { 284, I2SDIV_PDIV_2  | ( 71 & I2SDIV_MDIV_MASK) },
    { 285, I2SDIV_PDIV_25 | ( 57 & I2SDIV_MDIV_MASK) },
    { 288, I2SDIV_PDIV_3  | ( 48 & I2SDIV_MDIV_MASK) },
    { 290, I2SDIV_PDIV_25 | ( 58 & I2SDIV_MDIV_MASK) },
    { 292, I2SDIV_PDIV_2  | ( 73 & I2SDIV_MDIV_MASK) },
    { 294, I2SDIV_PDIV_3  | ( 49 & I2SDIV_MDIV_MASK) },
    { 295, I2SDIV_PDIV_25 | ( 59 & I2SDIV_MDIV_MASK) },
    { 296, I2SDIV_PDIV_2  | ( 74 & I2SDIV_MDIV_MASK) },
    { 300, I2SDIV_PDIV_3  | ( 50 & I2SDIV_MDIV_MASK) },
    { 304, I2SDIV_PDIV_2  | ( 76 & I2SDIV_MDIV_MASK) },
    { 305, I2SDIV_PDIV_25 | ( 61 & I2SDIV_MDIV_MASK) },
    { 306, I2SDIV_PDIV_3  | ( 51 & I2SDIV_MDIV_MASK) },
    { 308, I2SDIV_PDIV_2  | ( 77 & I2SDIV_MDIV_MASK) },
    { 310, I2SDIV_PDIV_25 | ( 62 & I2SDIV_MDIV_MASK) },
    { 312, I2SDIV_PDIV_3  | ( 52 & I2SDIV_MDIV_MASK) },
    { 315, I2SDIV_PDIV_25 | ( 63 & I2SDIV_MDIV_MASK) },
    { 316, I2SDIV_PDIV_2  | ( 79 & I2SDIV_MDIV_MASK) },
    { 318, I2SDIV_PDIV_3  | ( 53 & I2SDIV_MDIV_MASK) },
    { 320, I2SDIV_PDIV_25 | ( 64 & I2SDIV_MDIV_MASK) },
    { 324, I2SDIV_PDIV_3  | ( 54 & I2SDIV_MDIV_MASK) },
    { 325, I2SDIV_PDIV_25 | ( 65 & I2SDIV_MDIV_MASK) },
    { 328, I2SDIV_PDIV_2  | ( 82 & I2SDIV_MDIV_MASK) },
    { 330, I2SDIV_PDIV_3  | ( 55 & I2SDIV_MDIV_MASK) },
    { 332, I2SDIV_PDIV_2  | ( 83 & I2SDIV_MDIV_MASK) },
    { 335, I2SDIV_PDIV_25 | ( 67 & I2SDIV_MDIV_MASK) },
    { 336, I2SDIV_PDIV_3  | ( 56 & I2SDIV_MDIV_MASK) },
    { 340, I2SDIV_PDIV_25 | ( 68 & I2SDIV_MDIV_MASK) },
    { 342, I2SDIV_PDIV_3  | ( 57 & I2SDIV_MDIV_MASK) },
    { 344, I2SDIV_PDIV_2  | ( 86 & I2SDIV_MDIV_MASK) },
    { 345, I2SDIV_PDIV_25 | ( 69 & I2SDIV_MDIV_MASK) },
    { 348, I2SDIV_PDIV_3  | ( 58 & I2SDIV_MDIV_MASK) },
    { 350, I2SDIV_PDIV_25 | ( 70 & I2SDIV_MDIV_MASK) },
    { 352, I2SDIV_PDIV_2  | ( 88 & I2SDIV_MDIV_MASK) },
    { 354, I2SDIV_PDIV_3  | ( 59 & I2SDIV_MDIV_MASK) },
    { 355, I2SDIV_PDIV_25 | ( 71 & I2SDIV_MDIV_MASK) },
    { 356, I2SDIV_PDIV_2  | ( 89 & I2SDIV_MDIV_MASK) },
    { 360, I2SDIV_PDIV_3  | ( 60 & I2SDIV_MDIV_MASK) },
    { 364, I2SDIV_PDIV_2  | ( 91 & I2SDIV_MDIV_MASK) },
    { 365, I2SDIV_PDIV_25 | ( 73 & I2SDIV_MDIV_MASK) },
    { 366, I2SDIV_PDIV_3  | ( 61 & I2SDIV_MDIV_MASK) },
    { 368, I2SDIV_PDIV_2  | ( 92 & I2SDIV_MDIV_MASK) },
    { 370, I2SDIV_PDIV_25 | ( 74 & I2SDIV_MDIV_MASK) },
    { 372, I2SDIV_PDIV_3  | ( 62 & I2SDIV_MDIV_MASK) },
    { 375, I2SDIV_PDIV_25 | ( 75 & I2SDIV_MDIV_MASK) },
    { 376, I2SDIV_PDIV_2  | ( 94 & I2SDIV_MDIV_MASK) },
    { 378, I2SDIV_PDIV_3  | ( 63 & I2SDIV_MDIV_MASK) },
    { 380, I2SDIV_PDIV_25 | ( 76 & I2SDIV_MDIV_MASK) },
    { 384, I2SDIV_PDIV_3  | ( 64 & I2SDIV_MDIV_MASK) },
    { 385, I2SDIV_PDIV_25 | ( 77 & I2SDIV_MDIV_MASK) },
    { 388, I2SDIV_PDIV_2  | ( 97 & I2SDIV_MDIV_MASK) },
    { 390, I2SDIV_PDIV_3  | ( 65 & I2SDIV_MDIV_MASK) },
    { 392, I2SDIV_PDIV_2  | ( 98 & I2SDIV_MDIV_MASK) },
    { 395, I2SDIV_PDIV_25 | ( 79 & I2SDIV_MDIV_MASK) },
    { 396, I2SDIV_PDIV_3  | ( 66 & I2SDIV_MDIV_MASK) },
    { 400, I2SDIV_PDIV_25 | ( 80 & I2SDIV_MDIV_MASK) },
    { 402, I2SDIV_PDIV_3  | ( 67 & I2SDIV_MDIV_MASK) },
    { 404, I2SDIV_PDIV_2  | (101 & I2SDIV_MDIV_MASK) },
    { 405, I2SDIV_PDIV_25 | ( 81 & I2SDIV_MDIV_MASK) },
    { 408, I2SDIV_PDIV_3  | ( 68 & I2SDIV_MDIV_MASK) },
    { 410, I2SDIV_PDIV_25 | ( 82 & I2SDIV_MDIV_MASK) },
    { 412, I2SDIV_PDIV_2  | (103 & I2SDIV_MDIV_MASK) },
    { 414, I2SDIV_PDIV_3  | ( 69 & I2SDIV_MDIV_MASK) },
    { 415, I2SDIV_PDIV_25 | ( 83 & I2SDIV_MDIV_MASK) },
    { 416, I2SDIV_PDIV_2  | (104 & I2SDIV_MDIV_MASK) },
    { 420, I2SDIV_PDIV_3  | ( 70 & I2SDIV_MDIV_MASK) },
    { 424, I2SDIV_PDIV_2  | (106 & I2SDIV_MDIV_MASK) },
    { 425, I2SDIV_PDIV_25 | ( 85 & I2SDIV_MDIV_MASK) },
    { 426, I2SDIV_PDIV_3  | ( 71 & I2SDIV_MDIV_MASK) },
    { 428, I2SDIV_PDIV_2  | (107 & I2SDIV_MDIV_MASK) },
    { 430, I2SDIV_PDIV_25 | ( 86 & I2SDIV_MDIV_MASK) },
    { 432, I2SDIV_PDIV_3  | ( 72 & I2SDIV_MDIV_MASK) },
    { 435, I2SDIV_PDIV_25 | ( 87 & I2SDIV_MDIV_MASK) },
    { 436, I2SDIV_PDIV_2  | (109 & I2SDIV_MDIV_MASK) },
    { 438, I2SDIV_PDIV_3  | ( 73 & I2SDIV_MDIV_MASK) },
    { 440, I2SDIV_PDIV_25 | ( 88 & I2SDIV_MDIV_MASK) },
    { 444, I2SDIV_PDIV_3  | ( 74 & I2SDIV_MDIV_MASK) },
    { 445, I2SDIV_PDIV_25 | ( 89 & I2SDIV_MDIV_MASK) },
    { 448, I2SDIV_PDIV_2  | (112 & I2SDIV_MDIV_MASK) },
    { 450, I2SDIV_PDIV_3  | ( 75 & I2SDIV_MDIV_MASK) },
    { 452, I2SDIV_PDIV_2  | (113 & I2SDIV_MDIV_MASK) },
    { 455, I2SDIV_PDIV_25 | ( 91 & I2SDIV_MDIV_MASK) },
    { 456, I2SDIV_PDIV_3  | ( 76 & I2SDIV_MDIV_MASK) },
    { 460, I2SDIV_PDIV_25 | ( 92 & I2SDIV_MDIV_MASK) },
    { 462, I2SDIV_PDIV_3  | ( 77 & I2SDIV_MDIV_MASK) },
    { 464, I2SDIV_PDIV_2  | (116 & I2SDIV_MDIV_MASK) },
    { 465, I2SDIV_PDIV_25 | ( 93 & I2SDIV_MDIV_MASK) },
    { 468, I2SDIV_PDIV_3  | ( 78 & I2SDIV_MDIV_MASK) },
    { 470, I2SDIV_PDIV_25 | ( 94 & I2SDIV_MDIV_MASK) },
    { 472, I2SDIV_PDIV_2  | (118 & I2SDIV_MDIV_MASK) },
    { 474, I2SDIV_PDIV_3  | ( 79 & I2SDIV_MDIV_MASK) },
    { 475, I2SDIV_PDIV_25 | ( 95 & I2SDIV_MDIV_MASK) },
    { 476, I2SDIV_PDIV_2  | (119 & I2SDIV_MDIV_MASK) },
    { 480, I2SDIV_PDIV_3  | ( 80 & I2SDIV_MDIV_MASK) },
    { 484, I2SDIV_PDIV_2  | (121 & I2SDIV_MDIV_MASK) },
    { 485, I2SDIV_PDIV_25 | ( 97 & I2SDIV_MDIV_MASK) },
    { 486, I2SDIV_PDIV_3  | ( 81 & I2SDIV_MDIV_MASK) },
    { 488, I2SDIV_PDIV_2  | (122 & I2SDIV_MDIV_MASK) },
    { 490, I2SDIV_PDIV_25 | ( 98 & I2SDIV_MDIV_MASK) },
    { 492, I2SDIV_PDIV_3  | ( 82 & I2SDIV_MDIV_MASK) },
    { 495, I2SDIV_PDIV_25 | ( 99 & I2SDIV_MDIV_MASK) },
    { 496, I2SDIV_PDIV_2  | (124 & I2SDIV_MDIV_MASK) },
    { 498, I2SDIV_PDIV_3  | ( 83 & I2SDIV_MDIV_MASK) },
    { 500, I2SDIV_PDIV_25 | (100 & I2SDIV_MDIV_MASK) },
    { 504, I2SDIV_PDIV_3  | ( 84 & I2SDIV_MDIV_MASK) },
    { 505, I2SDIV_PDIV_25 | (101 & I2SDIV_MDIV_MASK) },
    { 508, I2SDIV_PDIV_2  | (127 & I2SDIV_MDIV_MASK) },
    { 510, I2SDIV_PDIV_3  | ( 85 & I2SDIV_MDIV_MASK) },
    { 515, I2SDIV_PDIV_25 | (103 & I2SDIV_MDIV_MASK) },
    { 516, I2SDIV_PDIV_3  | ( 86 & I2SDIV_MDIV_MASK) },
    { 520, I2SDIV_PDIV_25 | (104 & I2SDIV_MDIV_MASK) },
    { 522, I2SDIV_PDIV_3  | ( 87 & I2SDIV_MDIV_MASK) },
    { 525, I2SDIV_PDIV_25 | (105 & I2SDIV_MDIV_MASK) },
    { 528, I2SDIV_PDIV_3  | ( 88 & I2SDIV_MDIV_MASK) },
    { 530, I2SDIV_PDIV_25 | (106 & I2SDIV_MDIV_MASK) },
    { 534, I2SDIV_PDIV_3  | ( 89 & I2SDIV_MDIV_MASK) },
    { 535, I2SDIV_PDIV_25 | (107 & I2SDIV_MDIV_MASK) },
    { 540, I2SDIV_PDIV_3  | ( 90 & I2SDIV_MDIV_MASK) },
    { 545, I2SDIV_PDIV_25 | (109 & I2SDIV_MDIV_MASK) },
    { 546, I2SDIV_PDIV_3  | ( 91 & I2SDIV_MDIV_MASK) },
    { 550, I2SDIV_PDIV_25 | (110 & I2SDIV_MDIV_MASK) },
    { 552, I2SDIV_PDIV_3  | ( 92 & I2SDIV_MDIV_MASK) },
    { 555, I2SDIV_PDIV_25 | (111 & I2SDIV_MDIV_MASK) },
    { 558, I2SDIV_PDIV_3  | ( 93 & I2SDIV_MDIV_MASK) },
    { 560, I2SDIV_PDIV_25 | (112 & I2SDIV_MDIV_MASK) },
    { 564, I2SDIV_PDIV_3  | ( 94 & I2SDIV_MDIV_MASK) },
    { 565, I2SDIV_PDIV_25 | (113 & I2SDIV_MDIV_MASK) },
    { 570, I2SDIV_PDIV_3  | ( 95 & I2SDIV_MDIV_MASK) },
    { 575, I2SDIV_PDIV_25 | (115 & I2SDIV_MDIV_MASK) },
    { 576, I2SDIV_PDIV_3  | ( 96 & I2SDIV_MDIV_MASK) },
    { 580, I2SDIV_PDIV_25 | (116 & I2SDIV_MDIV_MASK) },
    { 582, I2SDIV_PDIV_3  | ( 97 & I2SDIV_MDIV_MASK) },
    { 585, I2SDIV_PDIV_25 | (117 & I2SDIV_MDIV_MASK) },
    { 588, I2SDIV_PDIV_3  | ( 98 & I2SDIV_MDIV_MASK) },
    { 590, I2SDIV_PDIV_25 | (118 & I2SDIV_MDIV_MASK) },
    { 594, I2SDIV_PDIV_3  | ( 99 & I2SDIV_MDIV_MASK) },
    { 595, I2SDIV_PDIV_25 | (119 & I2SDIV_MDIV_MASK) },
    { 600, I2SDIV_PDIV_3  | (100 & I2SDIV_MDIV_MASK) },
    { 605, I2SDIV_PDIV_25 | (121 & I2SDIV_MDIV_MASK) },
    { 606, I2SDIV_PDIV_3  | (101 & I2SDIV_MDIV_MASK) },
    { 610, I2SDIV_PDIV_25 | (122 & I2SDIV_MDIV_MASK) },
    { 612, I2SDIV_PDIV_3  | (102 & I2SDIV_MDIV_MASK) },
    { 615, I2SDIV_PDIV_25 | (123 & I2SDIV_MDIV_MASK) },
    { 618, I2SDIV_PDIV_3  | (103 & I2SDIV_MDIV_MASK) },
    { 620, I2SDIV_PDIV_25 | (124 & I2SDIV_MDIV_MASK) },
    { 624, I2SDIV_PDIV_3  | (104 & I2SDIV_MDIV_MASK) },
    { 625, I2SDIV_PDIV_25 | (125 & I2SDIV_MDIV_MASK) },
    { 630, I2SDIV_PDIV_3  | (105 & I2SDIV_MDIV_MASK) },
    { 635, I2SDIV_PDIV_25 | (127 & I2SDIV_MDIV_MASK) },
    { 636, I2SDIV_PDIV_3  | (106 & I2SDIV_MDIV_MASK) },
    { 642, I2SDIV_PDIV_3  | (107 & I2SDIV_MDIV_MASK) },
    { 648, I2SDIV_PDIV_3  | (108 & I2SDIV_MDIV_MASK) },
    { 654, I2SDIV_PDIV_3  | (109 & I2SDIV_MDIV_MASK) },
    { 660, I2SDIV_PDIV_3  | (110 & I2SDIV_MDIV_MASK) },
    { 666, I2SDIV_PDIV_3  | (111 & I2SDIV_MDIV_MASK) },
    { 672, I2SDIV_PDIV_3  | (112 & I2SDIV_MDIV_MASK) },
    { 678, I2SDIV_PDIV_3  | (113 & I2SDIV_MDIV_MASK) },
    { 684, I2SDIV_PDIV_3  | (114 & I2SDIV_MDIV_MASK) },
    { 690, I2SDIV_PDIV_3  | (115 & I2SDIV_MDIV_MASK) },
    { 696, I2SDIV_PDIV_3  | (116 & I2SDIV_MDIV_MASK) },
    { 702, I2SDIV_PDIV_3  | (117 & I2SDIV_MDIV_MASK) },
    { 708, I2SDIV_PDIV_3  | (118 & I2SDIV_MDIV_MASK) },
    { 714, I2SDIV_PDIV_3  | (119 & I2SDIV_MDIV_MASK) },
    { 720, I2SDIV_PDIV_3  | (120 & I2SDIV_MDIV_MASK) },
    { 726, I2SDIV_PDIV_3  | (121 & I2SDIV_MDIV_MASK) },
    { 732, I2SDIV_PDIV_3  | (122 & I2SDIV_MDIV_MASK) },
    { 738, I2SDIV_PDIV_3  | (123 & I2SDIV_MDIV_MASK) },
    { 744, I2SDIV_PDIV_3  | (124 & I2SDIV_MDIV_MASK) },
    { 750, I2SDIV_PDIV_3  | (125 & I2SDIV_MDIV_MASK) },
    { 756, I2SDIV_PDIV_3  | (126 & I2SDIV_MDIV_MASK) },
    { 762, I2SDIV_PDIV_3  | (127 & I2SDIV_MDIV_MASK) }
};


//
// Function Prototypes
//
static int CalculateClosestFreq
(
    ULONG   ulPLLFreq, 
    ULONG   ulRequestedMClkFreq,
    PULONG  pulActualMClkFreq,
    PULONG  pulI2SDiv
);
void DelayuS(ULONG ulMicroSec);
void SetSPIToI2S(void);
void SetSPIToPS2(void);


//****************************************************************************
// I2SCodec::I2SCodec
//****************************************************************************
// 
// 
//
I2SCodec::I2SCodec(void):CodecInterface(), m_bTwoWire(0)
{
    //
    // Initialize the Critical Section.
    //
    InitializeCriticalSection(&m_CriticalSection);

}


//****************************************************************************
// I2SCodec::~I2SCodec
//****************************************************************************
// Destructor
// 
//
I2SCodec::~I2SCodec(void)
{
    //
    // Disable all transmit audio channels.
    //
    *SAI_TX0_EN = *SAI_TX1_EN =*SAI_TX2_EN   = 0;

    //
    // Disable all recieve audio channels.
    //
    *SAI_RX0_EN = *SAI_RX1_EN =*SAI_RX2_EN   = 0;

    //
    // Delete the critical section.
    //
    DeleteCriticalSection( &m_CriticalSection);

}

//****************************************************************************
// I2SCodec::Initialize
//****************************************************************************
// 
// 
//

MMRESULT I2SCodec::Initialize(void)
{
    //UCHAR ucValue;
    BOOL    bRet;
    MMRESULT mmRet;
    ULONG   ulTemp;

    FUNC_I2S((L"+I2SCodec::Initialize\r\n"));
    m_ulM2SClock  = 4;
    m_ulS2LRClock = 64;

    //
    // Set the sample rate at 441Khz.  Need to set the sample rate in order to
    // talk to the CS4228.
    //
    mmRet = SetSampleRate(44100, 0);



    //
    // Set up the I2S audio to use the AC97 port EGPIO for secondary I2S 
    // channels.
    //
    HalWriteCommonReg
    (
        CSC_DEVCFG, 
        DEVCFG_I2SONSSP | DEVCFG_I2SONAC97 | DEVCFG_A1ONG | DEVCFG_A2ONG,
        DEVCFG_I2SONAC97 | DEVCFG_A1ONG | DEVCFG_A2ONG
    );

    //
    // Disable all transmit audio channels.
    // Disable all recieve audio channels.
    // Set the global configuration register to Disable PCLK to it.
    //
    *SAI_TX0_EN = *SAI_TX1_EN =* SAI_TX2_EN   = 0;
    *SAI_RX0_EN = *SAI_RX1_EN =* SAI_RX2_EN   = 0;
    *SAI_GCR                                  = 0;

    //
    // Initialize the SAI interface. 
    //
    *SAI_TX_CLKCFG  = CLKCFG_POLARITY | CLKCFG_MST;
    *SAI_RX_CLKCFG  = CLKCFG_POLARITY | CLKCFG_MST;

    //
    // Left justified, MSB first, Repeat zero if underflow.
    // Outputing zero's will cause the dac to mute.
    //
    *SAI_TX_LCR     = TX_LCR_UNDERFLOW_ZERO;

    //
    // Generate a Interrupt on Halfempty
    // (Don't think this makes a difference for DMA.)
    //
    *SAI_TX_CR     = TX_CR_TXHALFEMPTY;

    //
    // Transmit word length. I don't think this matters in Left Justified
    // mode.
    //
    *SAI_TX_WL      = WL_24BIT;

    //
    // Left justified, MSB first.
    //

⌨️ 快捷键说明

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