Code: Select all
BCM2835 manual p. 34: I2C Clock Divider: SCL = core clock / CDIV Where core_clk is nominally 150 MHz.
Code: Select all
/* The Macro way*/
t = ptrtimer_init(0);
volatile unsigned *gpio = gpio1->gpio_map;
printf("Macro ");
for(j=0;j<10;j++)
{
ptrtimer_start(t);
for(i=0; i<1000000; i++)
{
GPIO_SET = 1<<4;
GPIO_CLR = 1<<4;
}
ptrtimer_stop(t);
}
printf("%.3fMHz ",10/t->timer);
ptrtimer_report(t);
ptrtimer_close(t);
/* The Macro + sleep (0) */
t = ptrtimer_init(0);
printf("Macro + sleep (0) ");
for(j=0;j<10;j++)
{
ptrtimer_start(t);
for(i=0; i<1000000; i++)
{
GPIO_SET = 1<<4;
sleep(0);
GPIO_CLR = 1<<4;
sleep(0);
}
ptrtimer_stop(t);
}
printf("%.3fMHz ",10/t->timer);
ptrtimer_report(t);
ptrtimer_close(t);
/* The Macro + 2*sleep (0) */
t = ptrtimer_init(0);
printf("Macro + 2*sleep(0) ");
for(j=0;j<10;j++)
{
ptrtimer_start(t);
for(i=0; i<1000000; i++)
{
GPIO_SET = 1<<4;
sleep(0);
sleep(0);
GPIO_CLR = 1<<4;
sleep(0);
sleep(0);
}
ptrtimer_stop(t);
}
printf("%.3fMHz ",10/t->timer);
ptrtimer_report(t);
ptrtimer_close(t);
Code: Select all
/* The Macro + nanosleep(0) */
t = ptrtimer_init(0);
printf("Macro + nanosleep(0) ");
struct timespec ns;
ns.tv_sec = 0;
ns.tv_nsec = 10L;
for(j=0;j<10;j++)
{
printf("%d \n",j);
ptrtimer_start(t);
for(i=0; i<1000000; i++)
{
GPIO_SET = 1<<4;
nanosleep(&ns,NULL);
GPIO_CLR = 1<<4;
nanosleep(&ns,NULL);
}
ptrtimer_stop(t);
}
printf("%.3fMHz ",10/t->timer);
ptrtimer_report(t);
ptrtimer_close(t);
Code: Select all
Code: Select all
Function ptrgpio 14.991MHz min:0.066564 max:0.066976 avg:0.066706 count: 10
Function ptrgpio + sleep(0) 4.728MHz min:0.211327 max:0.212040 avg:0.211521 count: 10
Macro 21.559MHz min:0.046291 max:0.046563 avg:0.046384 count: 10
Macro + sleep (0) 5.271MHz min:0.189596 max:0.189848 avg:0.189715 count: 10
Macro + 2*sleep(0) 3.002MHz min:0.332890 max:0.333396 avg:0.333139 count: 10
Macro + usleep(0) 6.332kHz min:0.156844 max:0.158509 avg:0.157918 count: 10
Macro + usleep(5000) 98.301Hz min:1.017122 max:1.017452 avg:1.017285 count: 10
Macro + nanosleep 0ns 6.356kHz min:0.155238 max:0.158968 avg:0.157323 count: 10
Macro + nanosleep 5000000ns 98.312Hz min:1.016978 max:1.017345 avg:1.017166 count: 10