示例#1
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);
}
示例#2
0
/* ----------------------------------------------------------- */
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;
}
示例#3
0
文件: ADC.c 项目: Datenheld/BBBIOlib
/* ----------------------------------------------------------- */
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;
}
示例#4
0
文件: ADC.c 项目: KingBing/BBBIOlib
/* ----------------------------------------------------------- */
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;
}
示例#5
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;
}
示例#6
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 ,&param );
	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); 	
}