/* ----------------------------------------------------------- */ int main(void) { unsigned int sample; int i ,j; unsigned int buffer_AIN_0[100] ={0}; unsigned int buffer_AIN_1[100] ={0}; /* BBBIOlib init*/ iolib_init(); /*ADC work mode : Busy polling mode */ //BBBIO_ADCTSC_module_ctrl(BBBIO_ADC_WORK_MODE_BUSY_POLLING, 1); BBBIO_ADCTSC_module_ctrl(BBBIO_ADC_WORK_MODE_TIMER_INT, 1); /*ADC work mode : Timer interrupt mode * Note : This mode handle SIGALRM using signale() function in BBBIO_ADCTSC_work(); */ //BBBIO_ADCTSC_module_ctrl(BBBIO_ADCTSC_module_ctrl(BBBIO_ADC_WORK_MODE_BUSY_POLLING, 1); BBBIO_ADCTSC_channel_ctrl(BBBIO_ADC_AIN0, BBBIO_ADC_STEP_MODE_SW_CONTINUOUS, 0, 1, BBBIO_ADC_STEP_AVG_1, buffer_AIN_0, 100); BBBIO_ADCTSC_channel_enable(BBBIO_ADC_AIN0); BBBIO_ADCTSC_channel_ctrl(BBBIO_ADC_AIN1, BBBIO_ADC_STEP_MODE_SW_CONTINUOUS, 0, 1, BBBIO_ADC_STEP_AVG_1, buffer_AIN_1, 100); BBBIO_ADCTSC_channel_enable(BBBIO_ADC_AIN1); for(i = 0 ; i < 3 ; i++) { printf("Start sample , fetch 10 sample \n"); BBBIO_ADCTSC_work(10); printf("Channel 0 :\n"); for(j = 0 ; j < 10 ; j++) { sample = buffer_AIN_0[j]; printf("\t[sample : %d , %f v]\n", sample, ((float)sample / 4095.0f) * 1.8f); } printf("Channel 1 :\n"); for(j = 0 ; j < 10 ; j++) { sample = buffer_AIN_1[j]; printf("\t[sample : %d , %f v]\n", sample, ((float)sample / 4095.0f) * 1.8f); } printf("------------------------------\n"); sleep(1); } iolib_free(); return 0; }
/* sample_ADC(nvals,ADC_vals) - Take nvals samples and place into ADC_vals array at the predetermined rate */ void sample_ADC(int nvals, unsigned int * ADC_vals) { const int open_dly = 0; const int sample_dly = 1; BBBIO_ADCTSC_channel_ctrl(BBBIO_ADC_AIN0, BBBIO_ADC_STEP_MODE_SW_CONTINUOUS, open_dly, sample_dly, \ BBBIO_ADC_STEP_AVG_1, ADC_vals, nvals); BBBIO_ADCTSC_channel_enable(BBBIO_ADC_AIN0); BBBIO_ADCTSC_work(nvals); }
/* ----------------------------------------------------------- */ int main(void) { int i ,j; unsigned int *buf_ptr = &buffer[0]; /* BBBIOlib init*/ iolib_init(); /* using ADC_CALC toolkit to decide the ADC module argument . * * #./ADC_CALC -f 44100 -t 30 * * Suggest Solution : * Clock Divider : 34 , Open Dly : 1 , Sample Average : 1 , Sample Dly : 1 */ const int clk_div = 34 ; const int open_dly = 1; const int sample_dly = 1; BBBIO_ADCTSC_module_ctrl(clk_div); BBBIO_ADCTSC_channel_ctrl(BBBIO_ADC_AIN0, BBBIO_ADC_STEP_MODE_SW_CONTINUOUS, open_dly, sample_dly, BBBIO_ADC_STEP_AVG_1, buffer, AUDIO_BUFFER_SIZE); struct timeval t_start,t_end; float mTime =0; for(i = 0 ; i < 5 ; i++) { /* fetch data from ADC */ BBBIO_ADCTSC_channel_enable(BBBIO_ADC_AIN0); gettimeofday(&t_start, NULL); BBBIO_ADCTSC_work(AUDIO_BUFFER_SIZE); gettimeofday(&t_end, NULL); /* ********************************************************** * * Add your Socket transmit function in this block * ************************************************************* */ mTime = (t_end.tv_sec -t_start.tv_sec)*1000000.0 +(t_end.tv_usec -t_start.tv_usec); mTime /=1000000.0f; printf("Sampling finish , fetch [%d] samples in %lfs\n", AUDIO_BUFFER_SIZE, mTime); } BBBIO_ehrPWM_Disable(BBBIO_PWMSS0); iolib_free(); return 0; }
/* ----------------------------------------------------------- */ int main(void) { unsigned int sample; int i ,j; unsigned int buffer_AIN_0[BUFFER_SIZE] ={0}; unsigned int buffer_AIN_1[BUFFER_SIZE] ={0}; /* BBBIOlib init*/ iolib_init(); /* using ADC_CALC toolkit to decide the ADC module argument . Example Sample rate : 10000 sample/s * * #./ADC_CALC -f 10000 -t 5 * * Suggest Solution : * Clock Divider : 160 , Open Dly : 0 , Sample Average : 1 , Sample Dly : 1 * */ // const int clk_div = 34 ; const int clk_div = 160; const int open_dly = 0; const int sample_dly = 1; /*ADC work mode : Timer interrupt mode * Note : This mode handle SIGALRM using signale() function in BBBIO_ADCTSC_work(); */ BBBIO_ADCTSC_module_ctrl(BBBIO_ADC_WORK_MODE_TIMER_INT, clk_div); /*ADC work mode : Busy polling mode */ /* BBBIO_ADCTSC_module_ctrl(BBBIO_ADC_WORK_MODE_BUSY_POLLING, clk_div);*/ BBBIO_ADCTSC_channel_ctrl(BBBIO_ADC_AIN0, BBBIO_ADC_STEP_MODE_SW_CONTINUOUS, open_dly, sample_dly, \ BBBIO_ADC_STEP_AVG_1, buffer_AIN_0, BUFFER_SIZE); BBBIO_ADCTSC_channel_ctrl(BBBIO_ADC_AIN1, BBBIO_ADC_STEP_MODE_SW_CONTINUOUS, open_dly, sample_dly, \ BBBIO_ADC_STEP_AVG_1, buffer_AIN_1, BUFFER_SIZE); //BBBIO_ADCTSC_module_ctrl(BBBIO_ADCTSC_module_ctrl(BBBIO_ADC_WORK_MODE_BUSY_POLLING, 1); // BBBIO_ADCTSC_channel_ctrl(BBBIO_ADC_AIN1, BBBIO_ADC_STEP_MODE_SW_CONTINUOUS, 0, 1, BBBIO_ADC_STEP_AVG_1, buffer_AIN_1, 100); for(i = 0 ; i < 3 ; i++) { printf("Start sample , fetch %d sample \n", BUFFER_SIZE); BBBIO_ADCTSC_channel_enable(BBBIO_ADC_AIN0); BBBIO_ADCTSC_channel_enable(BBBIO_ADC_AIN1); BBBIO_ADCTSC_work(SAMPLE_SIZE); printf("AIN 0 :\n"); for(j = 0 ; j < SAMPLE_SIZE ; j++) { sample = buffer_AIN_0[j]; printf("\t[sample : %d , %f v]\n", sample, ((float)sample / 4095.0f) * 1.8f); } printf("AIN 1 :\n"); for(j = 0 ; j < SAMPLE_SIZE ; j++) { sample = buffer_AIN_1[j]; printf("\t[sample : %d , %f v]\n", sample, ((float)sample / 4095.0f) * 1.8f); } printf("------------------------------\n"); sleep(1); } iolib_free(); return 0; }
/* ----------------------------------------------------------- */ int main(void) { unsigned int sample; int i ,j; unsigned int buffer_AIN_2[BUFFER_SIZE] ={0}; time_t rawtime; char data_file_name[255]; FILE* data_file; /* BBBIOlib init*/ iolib_init(); /* using ADC_CALC toolkit to decide the ADC module argument . Example Sample rate : 10000 sample/s * * #./ADC_CALC -f 10000 -t 5 * * Suggest Solution : * Clock Divider : 160 , Open Dly : 0 , Sample Average : 1 , Sample Dly : 1 * */ // const int clk_div = 34 ; // ADC sampling settings const int clk_div = 25; const int open_dly = 5; const int sample_dly = 1; /*ADC work mode : Timer interrupt mode * Note : This mode handle SIGALRM using signale() function in BBBIO_ADCTSC_work(); */ BBBIO_ADCTSC_module_ctrl(BBBIO_ADC_WORK_MODE_TIMER_INT, clk_div); // use timer interrupts /*ADC work mode : Busy polling mode */ /* BBBIO_ADCTSC_module_ctrl(BBBIO_ADC_WORK_MODE_BUSY_POLLING, clk_div);*/ // microphone is connected to AIN2 BBBIO_ADCTSC_channel_ctrl(BBBIO_ADC_AIN2, BBBIO_ADC_STEP_MODE_SW_CONTINUOUS, open_dly, sample_dly, \ BBBIO_ADC_STEP_AVG_1, buffer_AIN_2, BUFFER_SIZE); //BBBIO_ADCTSC_module_ctrl(BBBIO_ADCTSC_module_ctrl(BBBIO_ADC_WORK_MODE_BUSY_POLLING, 1); // BBBIO_ADCTSC_channel_ctrl(BBBIO_ADC_AIN1, BBBIO_ADC_STEP_MODE_SW_CONTINUOUS, 0, 1, BBBIO_ADC_STEP_AVG_1, buffer_AIN_1, 100); printf("Starting capture...\n"); // get time time(&rawtime); // start capture BBBIO_ADCTSC_channel_enable(BBBIO_ADC_AIN2); BBBIO_ADCTSC_work(SAMPLE_SIZE); // format file name snprintf(data_file_name, sizeof(data_file_name), "%s", ctime(&rawtime)); //copy time to string data_file_name[strcspn(data_file_name,"\n")] = 0; //remove trailing newline // convert space to _ in filename char *p = data_file_name; for (i=0; i < strlen(data_file_name); i++){ if (data_file_name[i] == '\0') break; else if (data_file_name[i] == ' ') data_file_name[i] = '_'; } strcat(data_file_name,".dat" ); printf("saving sound data to: %s\n",data_file_name); data_file = fopen(data_file_name,"w"); // open file in write mode // add current time value to top of file fprintf(data_file, "%s", ctime(&rawtime)); // write buffer to file for(j = 0 ; j < SAMPLE_SIZE ; j++) fprintf( data_file, "%u\n", buffer_AIN_2[j] ); fclose( data_file ); iolib_free(); return 0; }
static void *Audio_Tx_loop() { int Tx_socket =-1; struct sockaddr_in dest; unsigned int Audio_buffer[AUDIO_SAMPLE_RATE]; unsigned char Audio_net_buffer[AUDIO_BUFFER_SIZE] ={0}; dest.sin_family = AF_INET; dest.sin_port = htons(AUDIO_NET_PORT); inet_aton(NET_HOST, &dest.sin_addr); Tx_socket = socket(AF_INET, SOCK_DGRAM, 0); if(Tx_socket < 0) { fprintf(stderr, "socket error\n"); return ; } const int clk_div = 34 ; const int open_dly = 1; const int sample_dly = 1; BBBIO_ADCTSC_module_ctrl(BBBIO_ADC_WORK_MODE_TIMER_INT ,clk_div); // BBBIO_ADCTSC_module_ctrl(BBBIO_ADC_WORK_MODE_BUSY_POLLING ,clk_div); BBBIO_ADCTSC_channel_ctrl(BBBIO_ADC_AIN0, BBBIO_ADC_STEP_MODE_SW_CONTINUOUS, open_dly, sample_dly, BBBIO_ADC_STEP_AVG_1, Audio_buffer, AUDIO_SAMPLE_RATE); /* Set scheduler */ int PID =getpid(); struct sched_param param; int maxpri = sched_get_priority_max(SCHED_FIFO); param.sched_priority=maxpri ; sched_setscheduler(PID , SCHED_FIFO ,¶m ); unsigned short play_Audio_buf[44100]; int i; /*----------------------------*/ printf("Audio Tx Looping\n"); struct timeval t_start,t_end; float mTime =0; while(sys_get_status() != SYS_STATUS_RELEASE) { /* start Tx Audeo */ while(sys_get_status() == SYS_STATUS_WORK) { /* fetch data from ADC */ BBBIO_ADCTSC_channel_enable(BBBIO_ADC_AIN0); gettimeofday(&t_start, NULL); BBBIO_ADCTSC_work(AUDIO_SAMPLE_RATE); gettimeofday(&t_end, NULL); /* Transmit Data */ for(i = 0 ; i < 44100 ; i++){ play_Audio_buf[i] = Audio_buffer[i]; } mTime = (t_end.tv_sec -t_start.tv_sec)*1000000.0 +(t_end.tv_usec -t_start.tv_usec); mTime /=1000000.0f; printf("Sampling finish , fetch [%d] samples in %lfs\n", AUDIO_SAMPLE_RATE, mTime); int buf_size = sizeof(short) * AUDIO_SAMPLE_RATE; unsigned char * buf_ptr = (unsigned char *)play_Audio_buf; int offset =1024 ; int ID =0; int frame_size = buf_size; while(frame_size >0) { memcpy(&Audio_net_buffer[0], &ID, sizeof(int)); memcpy(&Audio_net_buffer[4], buf_ptr + ID * 1024, sizeof(char) * offset); sendto(Tx_socket, &Audio_net_buffer[0], (4 + offset) , 0, (struct sockaddr *)&dest, sizeof(dest)); frame_size -= 1024 ; ID ++ ; if(frame_size <1024) offset = frame_size ; } } usleep(100000); } printf("Audio Tx finish\n"); pthread_exit(NULL); }