// us_sensor_test.c
// 2016/12/19 by marsee
//
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "xultrasonic_sensor_inf.h"
void main(){
int fd16;
volatile unsigned int *ultrasonic_sensor_inf_0;
int ret_val;
float measure;
// ultrasonic_sensor_inf_0 (UIO 16)
fd16 = open("/dev/uio16", O_RDWR); // ultrasonic_sensor_inf_0 interface AXI4 Lite Slave
if (fd16 < 1){
fprintf(stderr, "/dev/uio16 (ultrasonic_sensor_inf_0) open error\n");
exit(-1);
}
ultrasonic_sensor_inf_0 = (volatile unsigned *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd16, 0);
if (!ultrasonic_sensor_inf_0){
fprintf(stderr, "ultrasonic_sensor_inf_0 mmap error\n");
exit(-1);
}
while(1){
usleep(200000); // 200 ms
ultrasonic_sensor_inf_0[0] = 0x1; // ap_start = 1
while((ultrasonic_sensor_inf_0[0] & 0x2) == 0) // wait ap_done
usleep(500); // 5 us
if(ret_val = (int)ultrasonic_sensor_inf_0[4]) // 0x10 : Data signal of ap_return
printf("Error: %d\n", ret_val);
measure = (float)ultrasonic_sensor_inf_0[6] * 0.000342 / 2.0; // 0x18 : Data signal of count_val
printf("Distance is %.2f cm\n", measure);
}
munmap((void *)ultrasonic_sensor_inf_0, 0x10000);
close(fd16);
}
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | - | 1 | 2 |
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | - | - | - | - | - | - |