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; }
/****************************************************************************** * 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; }