Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.23 KB | None | 0 0
  1.  
  2. #include <stdio.h>
  3. #include <io.h>
  4. #include <system.h>
  5. #include "alt_types.h"
  6. #include "altera_avalon_pio_regs.h"
  7. #include "sys/alt_irq.h"
  8. //#include "sys/alt_timestamp.h"
  9. #include <unistd.h>
  10. #include "definitions.h"
  11.  
  12. enum States
  13. {
  14.     state0,
  15.     state1,
  16.     state2,
  17.     state3,
  18.     state4,
  19.     state5,
  20.     state6,
  21.     errorState
  22. };
  23.  
  24. struct interrupt_data
  25. {
  26.     volatile int * leds_addr;
  27.     volatile int * sw_adrr;
  28.     int state;
  29. };
  30.  
  31. int moveToState(int swState)
  32.     {
  33.         if (howManLedsAreUp(swState) > 1)
  34.         {
  35.             return errorState;
  36.         }
  37.         if (swState & LED9)
  38.         {
  39.             return state1;
  40.         }
  41.         else if (swState & LED8)
  42.         {
  43.             return state2;
  44.         }
  45.         else if (swState & LED7)
  46.         {
  47.             return state3;
  48.         }
  49.         else if (swState & LED6)
  50.         {
  51.             return state4;
  52.         }
  53.         else if (swState & LED5)
  54.         {
  55.             return state5;
  56.         }
  57.         else if (swState & LED4)
  58.         {
  59.             return state6;
  60.         }
  61.         else
  62.         {
  63.             return state0;
  64.         }
  65.     }
  66.  
  67. int howManLedsAreUp(int swState)
  68.     {
  69.         int arr[6] = {LED9, LED8, LED7, LED6, LED5, LED4};
  70.         int counter = 0;
  71.         for (int i = 0; i < 6; ++i)
  72.         {
  73.             if (swState & arr[i])
  74.             {
  75.                 counter++;
  76.             }
  77.         }
  78.         return counter;
  79.     }
  80.  
  81. static void handle_sliders_interrupt(struct interrupt_data * data)
  82. {
  83.  
  84.     int swState = IORD(data->sw_adrr, 0);
  85.  
  86.     switch(data->state){
  87.     case state0:
  88.            
  89.                 data->state = moveToState(swState);
  90.                 break;
  91.             case state1:
  92.                 IOWR(data->leds_addr, 0, LED9);
  93.                 data->state = moveToState(swState);
  94.                 break;
  95.             case state2:
  96.                 IOWR(data->leds_addr, 0, LED8);
  97.  
  98.                 data->state = moveToState(swState);
  99.                 break;
  100.             case state3:
  101.                 IOWR(data->leds_addr, 0, LED7);
  102.  
  103.                 data->state = moveToState(swState);
  104.                 break;
  105.             case state4:
  106.                 IOWR(data->leds_addr, 0, LED6);
  107.  
  108.                 data->state = moveToState(swState);
  109.                 break;
  110.             case state5:
  111.                 IOWR(data->leds_addr, 0, LED5);
  112.                 data->state = moveToState(swState);
  113.                 break;
  114.             case state6:
  115.                 IOWR(data->leds_addr, 0, LED4);
  116.                 data->state = moveToState(swState);
  117.                 break;
  118.             case errorState:
  119.                 IOWR(data->leds_addr, 0, LED5);
  120.  
  121.                 data->state = moveToState(swState);
  122.                 break;
  123.             }
  124. }
  125.  
  126.  
  127. int main()
  128. {
  129.  
  130.     volatile int *leds = (int*) (LEDS_BASE);
  131.     volatile int *sliders = (int*) (SW_SLIDERS_BASE);
  132.  
  133.   struct interrupt_data data;
  134.  
  135.   data.leds_addr = leds;
  136.   data.sw_adrr = sliders;
  137.   data.state = 0;
  138.  
  139.   IOWR_ALTERA_AVALON_PIO_IRQ_MASK(data.sw_adrr, 0xf);
  140.  
  141.   alt_ic_isr_register(SW_SLIDERS_IRQ_INTERRUPT_CONTROLLER_ID,SW_SLIDERS_IRQ,handle_sliders_interrupt, &data, 0x0);
  142.   //alt_ic_isr_register(PUSHBUTTON_IRQ_INTERRUPT_CONTROLLER_ID, ..., handle_pushbuttons_interrupt, &data, 0x0);
  143.  
  144.   alt_ic_irq_enable(SW_SLIDERS_IRQ_INTERRUPT_CONTROLLER_ID, SW_SLIDERS_IRQ);
  145.  
  146.   printf("Hello from Nios II!\n");
  147.  
  148.   while(1);
  149.   return 0;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement