static int dw_i2s_trigger(struct snd_pcm_substream *substream,
		int cmd, struct snd_soc_dai *dai)
{
	struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(dai);
	int ret = 0;

	switch (cmd) {
	case SNDRV_PCM_TRIGGER_START:
	case SNDRV_PCM_TRIGGER_RESUME:
	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
		dev->active++;
		i2s_start(dev, substream);
		break;

	case SNDRV_PCM_TRIGGER_STOP:
	case SNDRV_PCM_TRIGGER_SUSPEND:
	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
		dev->active--;
		i2s_stop(dev, substream);
		break;
	default:
		ret = -EINVAL;
		break;
	}
	return ret;
}
Exemple #2
0
 /******************************************************************************
  * FunctionName : gen_carrier_clk
  * Description  : gen 38khz carrier clk
  * Parameters   : NONE
  * Returns      :   NONE
 *******************************************************************************/
 void gen_carrier_clk()
 {
     
     #if (IR_NEC_TX_IO_MUX == PERIPHS_IO_MUX_U0RXD_U)
     //CONFIG I2S TX PIN FUNC
     PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0RXD_U, FUNC_I2SO_DATA);
     
     i2s_start();  //START
     #else
     os_printf("Please select right GPIO for IIS TX data\r\n");
     #endif
 }
int main(void)
{
	uint16_t i;
	char temp_char;
	uint8_t num_chars_ret;

	// For CS4272 (uC i2s interface in slave mode) not sure about
	// initialization sequence (i2s interface first, or setup cs4272 first)
	// For now, start with codec (get interface clocks started first)


	// Initialize USB
    usb_init();
	delay(100);

	// Initialize I2C subsystem
	i2c_init();
    delay(100);



	for(i = 0; i < 64; i++)
	{
		buffer[i] = 0;
	}
	
	// Wait to setup codec to make sure user has turned on audio board power
	while((buffer[0] != 'y') && (buffer[0] != 'Y'))
	{
		serial_write_string("Init codec? (y/n)\r\n>");
		
		// Wait for response
		num_chars_ret = serial_read_line(buffer,64);

		if(num_chars_ret < 1)
		{
			serial_write_string("Error reading line. Please try again.\r\n");
		}
	}

	for(i = 0; i < 64; i++)
	{
		buffer[i] = 0;
	}

	// Initialize CS4272
	codec_init();
	delay(100);



	// Initialize I2S subsystem 
	i2s_init();
	delay(10);

	serial_write_string("Codec Initialized\r\n");
	delay(10);


	// Test to see if i2c is working
	uint8_t reg_result;
	uint8_t ii;
	for(ii = 1; ii < 9; ii++)
	{
		itoa(ii,buffer,10);
		serial_write_string("Address ");
		serial_write_string(buffer);
		serial_write_string(": ");


		reg_result = codec_read(ii);
		itoa(reg_result,buffer,10);
		serial_write_string(buffer);
		serial_write_string("\r\n");
		delay(100);
	}

	for(i = 0; i < 64; i++)
	{
		buffer[i] = 0;
	}

	serial_write_string("Waiting 10 seconds for ADC high pass filter to stabilize\r\n");
	delay(10000);
	
	while(1)
	{
		
		// Initialize indices, etc
		tx_buf_idx = 0;
		rx_buf_idx = 0;
		curr_run = 0;

		for(i = 0; i < NUM_SAMP; i++)
		{
			//recv_data_real[i] = 0;
			//recv_data_imag[i] = 0;
			recv_data_right[i] = 0;
			//recv_data_left[i] = 0;
		}



		for(i = 0; i < 64; i++)
		{
			buffer[i] = 0;
		}


		while((buffer[0] != 'y') && (buffer[0] != 'Y'))
		{
			serial_write_string("Start test? (y/n)\r\n>");
			
			// Wait for response
			num_chars_ret = serial_read_line(buffer,64);

			if(num_chars_ret < 1)
			{
				serial_write_string("Error reading line. Please try again.\r\n");
			}
		}

		// Start test
		serial_write_string("Starting test.\r\n");
		//output_real_part = 1;
		test_running = 1;
		i2s_start();

		// Wait for real part to finish
		while(test_running)
		{
			//serial_write_string("Running real part.  Please wait .....\r\n");
			delay(1000);
		}

		// Test is now finished
//		serial_write_string("Real part is finished.  Starting imaginary part.\r\n");
//		
//		delay(1000);
//
//		// Start imaginary part
//		output_real_part = 0;
//		test_running = 1;
//		i2s_start();
//
//		// Wait for real part to finish
//		while(test_running)
//		{
//			//serial_write_string("Running imaginary part.  Please wait .....\r\n");
//			delay(1000);
//		}
//
//		// Test is now finished
//		serial_write_string("Imaginary part is finished.  Printing Data.\r\n");

		// Print data
		for(i = 0; i < NUM_SAMP; i++)
		{
			itoa(recv_data_right[i],buffer,10);
			serial_write_string(buffer);
			serial_write_string(",");
			itoa(recv_data_left[i],buffer,10);
			serial_write_string(buffer);
			serial_write_string("\r\n");
			delay(50);
		}

		serial_write_string("End of data.\r\n");
		
	}

	return 0;
}