Gordons Projects

--> Projects Top-Level GIT

Slight change to the gpio program to fix SPI buffer size when loading
[wiringPi] / examples / gertboard.c
1 /*
2  * gertboard.c:
3  *      Simple test for the SPI bus on the Gertboard
4  *
5  *      Hardware setup:
6  *              D/A port 0 jumpered to A/D port 0.
7  *
8  *      We output a sine wave on D/A port 0 and sample A/D port 0. We then
9  *      copy this value to D/A port 1 and use a 'scope on both D/A ports
10  *      to check all's well.
11  *
12  * Copyright (c) 2012-2013 Gordon Henderson. <projects@drogon.net>
13  ***********************************************************************
14  * This file is part of wiringPi:
15  *      https://projects.drogon.net/raspberry-pi/wiringpi/
16  *
17  *    wiringPi is free software: you can redistribute it and/or modify
18  *    it under the terms of the GNU Lesser General Public License as published by
19  *    the Free Software Foundation, either version 3 of the License, or
20  *    (at your option) any later version.
21  *
22  *    wiringPi is distributed in the hope that it will be useful,
23  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
24  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25  *    GNU Lesser General Public License for more details.
26  *
27  *    You should have received a copy of the GNU Lesser General Public License
28  *    along with wiringPi.  If not, see <http://www.gnu.org/licenses/>.
29  ***********************************************************************
30  */
31
32 #include <stdio.h>
33 #include <stdint.h>
34 #include <math.h>
35
36 #define B_SIZE  200
37 #undef  DO_TIMING
38
39 #include <wiringPi.h>
40 #include <gertboard.h>
41
42 int main (void)
43 {
44   double angle ;
45   int i ;
46   uint32_t x1 ;
47   int  buffer [B_SIZE] ;
48
49 #ifdef  DO_TIMING
50   unsigned int now, then ;
51 #endif
52
53   printf ("Raspberry Pi Gertboard SPI test program\n") ;
54
55   if (wiringPiSetupSys () < 0)
56     return -1 ;
57
58   if (gertboardSPISetup () < 0)
59     return 1 ;
60
61 // Generate a Sine Wave
62
63   for (i = 0 ; i < B_SIZE ; ++i)
64   {
65     angle = ((double)i / (double)B_SIZE) * M_PI * 2.0 ;
66     buffer [i] = (int)rint ((sin (angle)) * 127.0 + 128.0) ;
67   }
68
69
70   for (;;)
71   {
72 #ifdef  DO_TIMING
73     then = millis () ;
74 #endif
75
76     for (i = 0 ; i < B_SIZE ; ++i)
77     {
78       gertboardAnalogWrite (0, buffer [i]) ;
79
80 #ifndef DO_TIMING
81       x1 = gertboardAnalogRead (0) ;
82       gertboardAnalogWrite (1, x1 >> 2) ;       // 10-bit A/D, 8-bit D/A
83 #endif
84     }
85
86 #ifdef  DO_TIMING
87     now = millis () ;
88     printf ("%4d mS, %9.7f S/sample", now - then, ((double)(now - then) / 1000.0) / (double)B_SIZE) ;
89     printf (" -> %9.4f samples/sec \n", 1 / (((double)(now - then) / 1000.0) / (double)B_SIZE)) ;
90 #endif
91   }
92
93   return 0 ;
94 }