Пример #1
0
// I2C configuration
static void codec_init()
{
  //uint32_t delaycount;
  uint8_t CodecCommandBuffer[5];

  uint8_t regValue = 0xFF;

  GPIO_SetBits(CODEC_RESET_PORT, CODEC_RESET_PIN);
  //delaycount = 10000000;
  //while (delaycount > 0)
  //{
  //	  delaycount--;
  //}
  PreenFM2_uDelay(100);

  //keep codec OFF
  CodecCommandBuffer[0] = CODEC_MAP_PLAYBACK_CTRL1;
  CodecCommandBuffer[1] = 0x01;
  send_codec_ctrl(CodecCommandBuffer, 2);

  //begin initialization sequence (p. 32)
  CodecCommandBuffer[0] = 0x00;
  CodecCommandBuffer[1] = 0x99;
  send_codec_ctrl(CodecCommandBuffer, 2);

  CodecCommandBuffer[0] = 0x47;
  CodecCommandBuffer[1] = 0x80;
  send_codec_ctrl(CodecCommandBuffer, 2);

  regValue = read_codec_register(0x32);

  CodecCommandBuffer[0] = 0x32;
  CodecCommandBuffer[1] = regValue | 0x80;
  send_codec_ctrl(CodecCommandBuffer, 2);

  regValue = read_codec_register(0x32);

  CodecCommandBuffer[0] = 0x32;
  CodecCommandBuffer[1] = regValue & (~0x80);
  send_codec_ctrl(CodecCommandBuffer, 2);

  CodecCommandBuffer[0] = 0x00;
  CodecCommandBuffer[1] = 0x00;
  send_codec_ctrl(CodecCommandBuffer, 2);
  //end of initialization sequence

  CodecCommandBuffer[0] = CODEC_MAP_PWR_CTRL2;
  CodecCommandBuffer[1] = 0xAF;
  send_codec_ctrl(CodecCommandBuffer, 2);

  CodecCommandBuffer[0] = CODEC_MAP_PLAYBACK_CTRL1;
  CodecCommandBuffer[1] = 0x70;
  send_codec_ctrl(CodecCommandBuffer, 2);

  CodecCommandBuffer[0] = CODEC_MAP_CLK_CTRL;
  CodecCommandBuffer[1] = 0x80; //0x81; //auto detect clock
  send_codec_ctrl(CodecCommandBuffer, 2);

  CodecCommandBuffer[0] = CODEC_MAP_IF_CTRL1;
  CodecCommandBuffer[1] = 0x05; //24bit
  send_codec_ctrl(CodecCommandBuffer, 2);

  CodecCommandBuffer[0] = 0x0A;
  CodecCommandBuffer[1] = 0x00;
  send_codec_ctrl(CodecCommandBuffer, 2);

  CodecCommandBuffer[0] = 0x27;
  CodecCommandBuffer[1] = 0x00;
  send_codec_ctrl(CodecCommandBuffer, 2);

  CodecCommandBuffer[0] = 0x1A | CODEC_MAPBYTE_INC;
  CodecCommandBuffer[1] = 0x0A;
  CodecCommandBuffer[2] = 0x0A;
  send_codec_ctrl(CodecCommandBuffer, 3);

  CodecCommandBuffer[0] = 0x1F;
  CodecCommandBuffer[1] = 0x0F;
  send_codec_ctrl(CodecCommandBuffer, 2);

  CodecCommandBuffer[0] = CODEC_MAP_PWR_CTRL1;
  CodecCommandBuffer[1] = 0x9E;
  send_codec_ctrl(CodecCommandBuffer, 2);
}
Пример #2
0
void codec_ctrl_init()
{
	uint32_t delaycount;
	uint8_t CodecCommandBuffer[5];

	uint8_t regValue = 0xFF;

	//GPIO_SetBits(GPIOD, CODEC_RESET_PIN);

	/* Turn on the audio driver */
	HAL_GPIO_WritePin(GPIOD, GPIO_PIN_4, GPIO_PIN_SET);

	/* STABILIZE */
	delaycount = 1000000;
	while (--delaycount > 0)

	//keep codec OFF
	CodecCommandBuffer[0] = CODEC_MAP_PWR_CTRL1;
	CodecCommandBuffer[1] = 0x01;
	send_codec_ctrl(CodecCommandBuffer, 2);

	//begin initialization sequence (p. 32)
	CodecCommandBuffer[0] = 0x00;				//
	CodecCommandBuffer[1] = 0x99;				//
	send_codec_ctrl(CodecCommandBuffer, 2);		// I
												// N
	CodecCommandBuffer[0] = 0x47;				// I
	CodecCommandBuffer[1] = 0x80;				// T
	send_codec_ctrl(CodecCommandBuffer, 2);		//
												// I
	regValue = read_codec_register(0x32);		// N
												// I
	CodecCommandBuffer[0] = 0x32;				// T
	CodecCommandBuffer[1] = regValue | 0x80;	//
	send_codec_ctrl(CodecCommandBuffer, 2);		// I
												// N
	regValue = read_codec_register(0x32);		// I
												// T
	CodecCommandBuffer[0] = 0x32;				//
	CodecCommandBuffer[1] = regValue & (~0x80);	// I
	send_codec_ctrl(CodecCommandBuffer, 2);		// N
												// I
	CodecCommandBuffer[0] = 0x00;				// T
	CodecCommandBuffer[1] = 0x00;				//
	send_codec_ctrl(CodecCommandBuffer, 2);		//
	//end of initialization sequence

	CodecCommandBuffer[0] = CODEC_MAP_PWR_CTRL2;
	CodecCommandBuffer[1] = 0xAF;
	send_codec_ctrl(CodecCommandBuffer, 2);

	/**
	 * ANLGSFTA
	 * ANLGGZCA
	 * PASSB=A
	 * PASSAMUTE
	 * PASSAVOL[7:0] (+12dB/-60dB .5dB steps)
	 */


	CodecCommandBuffer[0] = CODEC_MAP_PLAYBACK_CTRL1;
	CodecCommandBuffer[1] = 0x70;
	send_codec_ctrl(CodecCommandBuffer, 2);

	/* PASSB=A (p.42) */
	CodecCommandBuffer[0] = CODEC_MAP_PASSTHROUGH_GANG_CTRL;
	CodecCommandBuffer[1] = 0x80;
	send_codec_ctrl(CodecCommandBuffer, 2);

	/* ANLGSFTA + ANLGZCA (p. 42) */
	CodecCommandBuffer[0] = CODEC_MAP_ANALOG_SET;
	CodecCommandBuffer[1] = 0xF;
	send_codec_ctrl(CodecCommandBuffer, 2);

	/* PASSASEL1 (p.42) - DEFAULT */
	//CodecCommandBuffer[0] = CODEC_MAP_PASSTHROUGH_A_SELECT;
	//CodecCommandBuffer[1] = 0x1;
	//send_codec_ctrl(CodecCommandBuffer, 2);

	/* PASSAMUTE (p. 44) */
	//CodecCommandBuffer[0] = CODEC_MAP_MISC_CTRL;
	//CodecCommandBuffer[1] = ;
	//send_codec_ctrl(CodecCommandBuffer, 2);

	/* PASSAVOL[7:0] - initialize to half-vol (p. 46) */
	//CodecCommandBuffer[0] = CODEC_MAP_PASSTHROUGH_A_VOL;
	//CodecCommandBuffer[1] = 0x7F;
	//send_codec_ctrl(CodecCommandBuffer, 2);

	/* PASSAVOL[7:0] - initialize to half-vol (p. 46) */
	//CodecCommandBuffer[0] = CODEC_MAP_PASSTHROUGH_B_VOL;
	//CodecCommandBuffer[1] = 0x7F;
	//send_codec_ctrl(CodecCommandBuffer, 2);

	/* PASSTHRUA/B (p.44) */
	CodecCommandBuffer[0] = CODEC_MAP_MISC_CTRL;
	CodecCommandBuffer[1] = 0xC2;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = 0x1A | CODEC_MAPBYTE_INC;
	CodecCommandBuffer[1] = 0x0A;
	CodecCommandBuffer[2] = 0x0A;
	send_codec_ctrl(CodecCommandBuffer, 3);

	//CodecCommandBuffer[0] = CODEC_MAP_MASTER_A_VOL;
	//CodecCommandBuffer[1] = 0x7F;
	//send_codec_ctrl(CodecCommandBuffer, 2);

	//CodecCommandBuffer[0] = CODEC_MAP_MASTER_B_VOL;
	//CodecCommandBuffer[1] = 0x7F;
	//send_codec_ctrl(CodecCommandBuffer, 2);

	//CodecCommandBuffer[0] = CODEC_MAP_HP_A_VOL;
	//CodecCommandBuffer[1] = 0x7F;
	//send_codec_ctrl(CodecCommandBuffer, 2);

	//CodecCommandBuffer[0] = CODEC_MAP_HP_B_VOL;
	//CodecCommandBuffer[1] = 0x7F;
	//send_codec_ctrl(CodecCommandBuffer, 2);



	// CHECK 20/21,22/23,

	/*CodecCommandBuffer[0] = CODEC_MAP_CLK_CTRL;
	CodecCommandBuffer[1] = 0x81; //auto detect clock
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = CODEC_MAP_IF_CTRL1;
	CodecCommandBuffer[1] = 0x07;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = 0x0A;
	CodecCommandBuffer[1] = 0x00;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = 0x27;
	CodecCommandBuffer[1] = 0x00;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = 0x1A | CODEC_MAPBYTE_INC;
	CodecCommandBuffer[1] = 0x0A;
	CodecCommandBuffer[2] = 0x0A;
	send_codec_ctrl(CodecCommandBuffer, 3);

	CodecCommandBuffer[0] = 0x1F;
	CodecCommandBuffer[1] = 0x0F;
	send_codec_ctrl(CodecCommandBuffer, 2);*/

	// Turn the bad boy on...
	CodecCommandBuffer[0] = CODEC_MAP_PWR_CTRL1;
	CodecCommandBuffer[1] = 0x9E;
	send_codec_ctrl(CodecCommandBuffer, 2);

}
Пример #3
0
void codec_ctrl_init()
{
	uint32_t delaycount;
	uint8_t CodecCommandBuffer[5];

	uint8_t regValue = 0xFF;

	GPIO_SetBits(GPIOD, CODEC_RESET_PIN);
	delaycount = 1000000;
	while (delaycount > 0)
	{
		delaycount--;
	}
	//keep codec OFF
	CodecCommandBuffer[0] = CODEC_MAP_PLAYBACK_CTRL1;
	CodecCommandBuffer[1] = 0x01;
	send_codec_ctrl(CodecCommandBuffer, 2);

	//begin initialization sequence (p. 32)
	CodecCommandBuffer[0] = 0x00;
	CodecCommandBuffer[1] = 0x99;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = 0x47;
	CodecCommandBuffer[1] = 0x80;
	send_codec_ctrl(CodecCommandBuffer, 2);

	regValue = read_codec_register(0x32);

	CodecCommandBuffer[0] = 0x32;
	CodecCommandBuffer[1] = regValue | 0x80;
	send_codec_ctrl(CodecCommandBuffer, 2);

	regValue = read_codec_register(0x32);

	CodecCommandBuffer[0] = 0x32;
	CodecCommandBuffer[1] = regValue & (~0x80);
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = 0x00;
	CodecCommandBuffer[1] = 0x00;
	send_codec_ctrl(CodecCommandBuffer, 2);
	//end of initialization sequence

	CodecCommandBuffer[0] = CODEC_MAP_PWR_CTRL2;
	CodecCommandBuffer[1] = 0xAF;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = CODEC_MAP_PLAYBACK_CTRL1;
	CodecCommandBuffer[1] = 0x70;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = CODEC_MAP_MASTER_A_VOL;
	CodecCommandBuffer[1] = 0xF1;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = CODEC_MAP_MASTER_B_VOL;
	CodecCommandBuffer[1] = 0xF1;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = CODEC_MAP_CLK_CTRL;
	CodecCommandBuffer[1] = 0x81; //auto detect clock
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = CODEC_MAP_IF_CTRL1;
	CodecCommandBuffer[1] = 0x07;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = 0x0A;
	CodecCommandBuffer[1] = 0x00;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = 0x27;
	CodecCommandBuffer[1] = 0x00;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = 0x1A | CODEC_MAPBYTE_INC;
	CodecCommandBuffer[1] = 0x0A;
	CodecCommandBuffer[2] = 0x0A;
	send_codec_ctrl(CodecCommandBuffer, 3);

	CodecCommandBuffer[0] = 0x1F;
	CodecCommandBuffer[1] = 0x0F;
	send_codec_ctrl(CodecCommandBuffer, 2);

	CodecCommandBuffer[0] = CODEC_MAP_PWR_CTRL1;
	CodecCommandBuffer[1] = 0x9E;
	send_codec_ctrl(CodecCommandBuffer, 2);

}