예제 #1
0
파일: timer.c 프로젝트: kraziant/tutorials
int main(void)
{
  uint32_t ticks = 0;
  uint32_t timerstate;
  or1k_timer_init(100);

  gpio_init();

  or1k_timer_enable();
  while (1) {
    while (ticks == or1k_timer_get_ticks()) { }
    ticks++;
    timerstate = or1k_timer_disable();
    // do something atomar
    or1k_timer_restore(timerstate);
    if (ticks == 100) {
      printf("A second elapsed\n");
      // Increment the GPIO counter
      gpio_increment();
      or1k_timer_reset_ticks();
      ticks = 0;
    }
  }
  
  return 0;
}
예제 #2
0
int main(void)
{

  printf("\r\n");
  printf("Timer + UART demo\r\n");
  printf("Press any key to increment the LED counter, except backspace which will\r\n");
  printf("cause it to decrement\r\n");

  /* Set the GPIO to all out */
  char dir = 0xff;
  *(gpio_base+1) = dir;
  /* Initialise with the first data value */
  *(gpio_base+0) = dat;

  /* Initialise the counter at 1Hz, it won't start yet */
  or1k_timer_init(1);

  /* Install a custom timer handler */
  or1k_exception_handler_add(0x5,or1k_timer_interrupt_handler_new);
  
  /* OK, start the timer now */
  or1k_timer_enable();

  /* Now loop and check for UART input */
  while (1)
    {
      char c = __uart_getc();

      /* If it was backspace, decrement the LEDs */
      if (c==0x7f)
	dat-=2;

      /* Update the GPIO LED output on any keypress, just like the timer had
	 gone off */
      or1k_timer_user_handler();
      
    }

  return 0;
}
예제 #3
0
int main(int argc, char *argv[]) {
    clock_t start, stop;
    double ct, cmin = DBL_MAX, cmax = 0;
    int i, cminix, cmaxix;
    long j, n, seed;
    int iterations;
    unsigned int ticks;
    static int (* CDECL pBitCntFunc[FUNCS])(long) = {
        bit_count,
        bitcount,
        ntbl_bitcnt,
        ntbl_bitcount,
        /*            btbl_bitcnt, DOESNT WORK*/
        BW_btbl_bitcount,
        AR_btbl_bitcount,
        bit_shifter
    };
    static char *text[FUNCS] = {
        "Optimized 1 bit/loop counter",
        "Ratko's mystery algorithm",
        "Recursive bit count by nybbles",
        "Non-recursive bit count by nybbles",
        /*            "Recursive bit count by bytes",*/
        "Non-recursive bit count by bytes (BW)",
        "Non-recursive bit count by bytes (AR)",
        "Shift and count bits"
    };
    if (argc<2) {
        printf("Defaulting to %d iterations\n", ITERATIONS);
        iterations = ITERATIONS;
    } else {
        iterations=atoi(argv[1]);
    }

    puts("Bit counter algorithm benchmark\n");

    or1k_timer_init(TIMER_HZ);
    or1k_timer_enable();

    for (i = 0; i < FUNCS; i++) {
        start = clock();

        for (j = n = 0, seed = rand(); j < iterations; j++, seed += 13)
            n += pBitCntFunc[i](seed);

        stop = clock();
        ct = (stop - start) / (double)CLOCKS_PER_SEC;
        if (ct < cmin) {
            cmin = ct;
            cminix = i;
        }
        if (ct > cmax) {
            cmax = ct;
            cmaxix = i;
        }

        printf("%-38s> Time: %7.3f sec.; Bits: %ld\n", text[i], ct, n);
    }
    printf("\nBest  > %s\n", text[cminix]);
    printf("Worst > %s\n", text[cmaxix]);

    ticks = or1k_timer_get_ticks();
    printf("Elapsed: %d ticks at %d Hz\n", ticks, TIMER_HZ);

    return 0;
}
int main(void) {
    double  a1 = 1.0, b1 = -10.5, c1 = 32.0, d1 = -30.0;
    double  x[3];
    double X;
    int     solutions;
    int i;
    unsigned long l = 0x3fed0169L;
    struct int_sqrt q;
    long n = 0;
    unsigned int ticks;

    or1k_timer_init(TIMER_HZ);
    or1k_timer_enable();

#if 1
    /* solve soem cubic functions */
    printf("********* CUBIC FUNCTIONS ***********\n");
    /* should get 3 solutions: 2, 6 & 2.5   */
    SolveCubic(a1, b1, c1, d1, &solutions, x);
    printf("Solutions:");
    for(i=0; i<solutions; i++)
        printf(" %f",x[i]);
    printf("\n");

    a1 = 1.0;
    b1 = -4.5;
    c1 = 17.0;
    d1 = -30.0;
    /* should get 1 solution: 2.5           */
    SolveCubic(a1, b1, c1, d1, &solutions, x);
    printf("Solutions:");
    for(i=0; i<solutions; i++)
        printf(" %f",x[i]);
    printf("\n");

    a1 = 1.0;
    b1 = -3.5;
    c1 = 22.0;
    d1 = -31.0;
    SolveCubic(a1, b1, c1, d1, &solutions, x);
    printf("Solutions:");
    for(i=0; i<solutions; i++)
        printf(" %f",x[i]);
    printf("\n");

    a1 = 1.0;
    b1 = -13.7;
    c1 = 1.0;
    d1 = -35.0;
    SolveCubic(a1, b1, c1, d1, &solutions, x);
    printf("Solutions:");
    for(i=0; i<solutions; i++)
        printf(" %f",x[i]);
    printf("\n");

    a1 = 3.0;
    b1 = 12.34;
    c1 = 5.0;
    d1 = 12.0;
    SolveCubic(a1, b1, c1, d1, &solutions, x);
    printf("Solutions:");
    for(i=0; i<solutions; i++)
        printf(" %f",x[i]);
    printf("\n");

    a1 = -8.0;
    b1 = -67.89;
    c1 = 6.0;
    d1 = -23.6;
    SolveCubic(a1, b1, c1, d1, &solutions, x);
    printf("Solutions:");
    for(i=0; i<solutions; i++)
        printf(" %f",x[i]);
    printf("\n");

    a1 = 45.0;
    b1 = 8.67;
    c1 = 7.5;
    d1 = 34.0;
    SolveCubic(a1, b1, c1, d1, &solutions, x);
    printf("Solutions:");
    for(i=0; i<solutions; i++)
        printf(" %f",x[i]);
    printf("\n");

    a1 = -12.0;
    b1 = -1.7;
    c1 = 5.3;
    d1 = 16.0;
    SolveCubic(a1, b1, c1, d1, &solutions, x);
    printf("Solutions:");
    for(i=0; i<solutions; i++)
        printf(" %f",x[i]);
    printf("\n");

    /* Now solve some random equations */
    for(a1=1; a1<10; a1+=1) {
        for(b1=10; b1>0; b1-=.25) {
            for(c1=5; c1<15; c1+=0.61) {
                for(d1=-1; d1>-5; d1-=.451) {
                    SolveCubic(a1, b1, c1, d1, &solutions, x);
                    printf("Solutions:");
                    for(i=0; i<solutions; i++)
                        printf(" %f",x[i]);
                    printf("\n");
                }
            }
        }
    }
#endif

#if 1
    printf("********* INTEGER SQR ROOTS ***********\n");
    /* perform some integer square roots */
    for (i = 0; i < 100000; i+=2) {
        usqrt(i, &q);
        // remainder differs on some machines
        // printf("sqrt(%3d) = %2d, remainder = %2d\n",
        printf("sqrt(%3d) = %2d\n",
               i, q.sqrt);
    }
    printf("\n");
    for (l = 0x3fed0169L; l < 0x3fed4169L; l++) {
        usqrt(l, &q);
        //printf("\nsqrt(%lX) = %X, remainder = %X\n", l, q.sqrt, q.frac);
        printf("sqrt(%lX) = %X\n", l, q.sqrt);
    }
#endif

#if 1
    printf("********* ANGLE CONVERSION ***********\n");
    /* convert some rads to degrees */
    /* for (X = 0.0; X <= 360.0; X += 1.0) */
    for (X = 0.0; X <= 360.0; X += .001)
        printf("%3.0f degrees = %.12f radians\n", X, deg2rad(X));
    puts("");
    /* for (X = 0.0; X <= (2 * PI + 1e-6); X += (PI / 180)) */
    for (X = 0.0; X <= (2 * PI + 1e-6); X += (PI / 5760))
        printf("%.12f radians = %3.0f degrees\n", X, rad2deg(X));

    ticks = or1k_timer_get_ticks();
    printf("********* ANGLE CONVERSION ***********\n");
#endif
    printf("Elapsed: %d ticks at %d Hz\n", ticks, TIMER_HZ);

    return 0;
}