/* * gertboard.c: * Simple test for the SPI bus on the Gertboard * * Hardware setup: * D/A port 0 jumpered to A/D port 0. * * We output a sine wave on D/A port 0 and sample A/D port 0. We then * copy this value to D/A port 1 and use a 'scope on both D/A ports * to check all's well. * */ #include #include #include #define B_SIZE 200 #undef DO_TIMING #include #include int main (void) { double angle ; int i ; uint32_t x1 ; int buffer [B_SIZE] ; #ifdef DO_TIMING unsigned int now, then ; #endif printf ("Raspberry Pi Gertboard SPI test program\n") ; if (wiringPiSetupSys () < 0) return -1 ; if (gertboardSPISetup () < 0) return 1 ; // Generate a Sine Wave for (i = 0 ; i < B_SIZE ; ++i) { angle = ((double)i / (double)B_SIZE) * M_PI * 2.0 ; buffer [i] = (int)rint ((sin (angle)) * 127.0 + 128.0) ; } for (;;) { #ifdef DO_TIMING then = millis () ; #endif for (i = 0 ; i < B_SIZE ; ++i) { gertboardAnalogWrite (0, buffer [i]) ; #ifndef DO_TIMING x1 = gertboardAnalogRead (0) ; gertboardAnalogWrite (1, x1 >> 2) ; // 10-bit A/D, 8-bit D/A #endif } #ifdef DO_TIMING now = millis () ; printf ("%4d mS, %9.7f S/sample", now - then, ((double)(now - then) / 1000.0) / (double)B_SIZE) ; printf (" -> %9.4f samples/sec \n", 1 / (((double)(now - then) / 1000.0) / (double)B_SIZE)) ; #endif } return 0 ; }