📄 i2saudio.cpp
字号:
//**********************************************************************
//
// 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 + -