Advertisement
Guest User

Gertboard LEDs

a guest
Oct 17th, 2012
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.68 KB | None | 0 0
  1. //
  2. //
  3. // Gertboard Demo
  4. //
  5. // These routines walk the LEDs
  6. //
  7. //
  8. // This file is part of gertboard_demo.
  9. //
  10. //
  11. // Copyright (C) Gert Jan van Loo 2012
  12. // No rights reserved
  13. // You may treat this program as if it was in the public domain
  14. //
  15. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  16. // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  17. // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  18. // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
  19. // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  20. // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  21. // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  22. // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  23. // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  24. // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  25. // POSSIBILITY OF SUCH DAMAGE.
  26. //
  27. //
  28. //
  29.  
  30.  
  31. //
  32. //
  33. // Try to strike a balance between keep code simple for
  34. // novice programmers but still have reasonable quality code
  35. //
  36.  
  37. #include "gertboard_demo.h"
  38.  
  39. extern volatile unsigned *gpio;
  40.  
  41. // Use defines for the LEDS
  42. // So if you use a different GPIO or have to order wrong
  43. // all you have to do is change it here
  44. //
  45. // For novice users: don't worry about the complexity
  46. // The compiler will optimise out all constant expressions and you
  47. // will end up with a single constant value in your table.
  48. #define L0 (1<<17)
  49. #define L1 (1<<21)
  50. #define L2 (1<<22)
  51. #define L3 (1<<23)
  52. #define L4 (1<< 0)
  53. #define L5 (1<< 1)
  54. #define ALLEDS  (L0|L1|L2|L3|L4|L5)
  55.  
  56. //
  57. //  GPIO
  58. //
  59.  
  60. #define GPIO_SET0   *(gpio+7)  // Set GPIO high bits 0-31
  61. #define GPIO_SET1   *(gpio+8)  // Set GPIO high bits 32-53
  62.  
  63. #define GPIO_CLR0   *(gpio+10) // Set GPIO low bits 0-31
  64. #define GPIO_CLR1   *(gpio+11) // Set GPIO low bits 32-53
  65.  
  66.  
  67.  
  68. //
  69. //  SPI register you need
  70. //
  71. #define SPI0_CNTLSTAT *(spi0 + 0)
  72. #define SPI0_FIFO     *(spi0 + 1)
  73.  
  74. //
  75. // define the various patterns
  76. //
  77.  
  78. static int pattern0[] = {L0, L1, L2, L3, L4, L5, -1 };
  79. static int pattern1[] = {L0, L1, L2, L3, L4, L5, L4, L3, L2,
  80.                          L1, -1 };
  81. static int pattern2[] = {0x0,
  82.    L0,
  83.    L0|L1,
  84.    L0|L1|L2,
  85.    L0|L1|L2|L3,
  86.    L0|L1|L2|L3|L4,
  87.    L0|L1|L2|L3|L4|L5,
  88.    L1|L2|L3|L4|L5,
  89.    L2|L3|L4|L5,
  90.    L3|L4|L5,
  91.    L4|L5,
  92.    L5,  -1};
  93.  
  94.  
  95. void set_pattern(int value);
  96. void select_pattern(int p);
  97.  
  98.  
  99. // Local variables
  100. static int *pattern = pattern0;  // current pattern
  101. static int step = 0;  // where we are now
  102.  
  103. //
  104. // Start new with one of the available patterns
  105. //
  106. void select_pattern(int p)
  107. {
  108.    switch (p)
  109.    {
  110.    case 0 : pattern = pattern0; break;
  111.    case 1 : pattern = pattern1; break;
  112.    case 2 : pattern = pattern2; break;
  113.    default: return;
  114.    }
  115.    step = 0;
  116.    set_pattern(pattern[step]);
  117.  
  118. } // select_pattern
  119.  
  120. void set_pattern(int value)
  121. {
  122.    GPIO_CLR0 = ALLEDS;
  123.    GPIO_SET0 = value;
  124. } // set_pattern
  125.  
  126. //
  127. // Do single pattern step
  128. // return 1 on last pattern
  129. // return 0 on all others
  130. //
  131. int led_step()
  132. {
  133.    step++;
  134.    if (pattern[step]==-1)
  135.       step=0;
  136.    set_pattern(pattern[step]);
  137.    return pattern[step+1]== -1 ? 1 : 0;
  138. } // led_step
  139.  
  140. void leds_off()
  141. {
  142.    GPIO_CLR0 = ALLEDS;
  143. }
  144.  
  145. //
  146. // Quick play all patterns
  147. //
  148. void quick_led_demo()
  149. { int p,r,last;
  150.   for (p=0; p<3; p++)
  151.   {
  152.     // run pattern several times
  153.     select_pattern(p);
  154.     for (r=0; r<5; r++)
  155.     { do {
  156.         last = led_step();
  157.         long_wait(3);
  158.       } while (!last);
  159.     } // repeat 10 times
  160.   } // for each pattern
  161. } // play_with_leds
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement