Advertisement
Sothian

sw3

Oct 21st, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.76 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <io.h>
  3. #include <system.h>
  4. #include <definitions.h>
  5. #include "altera_up_avalon_parallel_port.h"
  6. #include "sys/alt_irq.h"
  7.  
  8. //Struktura trzymajaca uchwyty
  9. struct alt_up_dev {
  10.     alt_up_parallel_port_dev * uchwytSW;
  11.     alt_up_parallel_port_dev * uchwytLEDR;
  12.     alt_up_parallel_port_dev * uchwytLEDG;
  13.     alt_up_parallel_port_dev * uchwytHEX3;
  14. };
  15.  
  16. //logika
  17. void interrupt_handler(struct alt_up_dev* up_dev, alt_u32 id) {
  18.     int state = 0;
  19.     //Odczyt switchy
  20.     int switches = alt_up_parallel_port_read_data(up_dev->uchwytSW);
  21.     //Sprawdzenie ktory slajder zostal wykorzystany
  22.     state = switches & (SW0 | SW1 | SW2 | SW3 | SW4 | SW5 | SW6);
  23.  
  24.     switch (state) {
  25.     case 0:
  26.         //Wygraszenie gdy zaden switch nie jest aktywny
  27.         alt_up_parallel_port_write_data(up_dev->uchwytLEDG, 0);
  28.         alt_up_parallel_port_write_data(up_dev->uchwytHEX3, 0);
  29.         alt_up_parallel_port_write_data(up_dev->uchwytLEDR, 0);
  30.         break;
  31.     case 1:
  32.         alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED0);
  33.         alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX1));
  34.         if ((switches & SW7) && (switches & SW8)) {
  35.             alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED17);
  36.             alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
  37.                     ((HEXE << 24) | (HEXr << 16) | (HEXr << 8)));
  38.         } else if (switches & SW7) {
  39.             alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED7);
  40.             alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEXA << 8));
  41.         } else if (switches & SW8) {
  42.             alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED8);
  43.             alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEXF << 8));
  44.         }
  45.         break;
  46.     case 2:
  47.         alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED1);
  48.         alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX2));
  49.         break;
  50.     case 4:
  51.         alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED2);
  52.         alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX3));
  53.         break;
  54.     case 8:
  55.         alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED3);
  56.         alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX4));
  57.  
  58.         if (((switches & SW9) && (switches & SW10))
  59.                 || ((switches & SW9) && (switches & SW11))
  60.                 || ((switches & SW9) && (switches & SW12))
  61.                 || ((switches & SW10) && (switches & SW11))
  62.                 || ((switches & SW10) && (switches & SW12))
  63.                 || ((switches & SW11) && (switches & SW12))) {
  64.             alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED17);
  65.             alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
  66.                     ((HEXE << 24) | (HEXr << 16) | (HEXr << 8)));
  67.         } else if (switches & SW9) {
  68.             alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED9);
  69.             alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
  70.                     ((HEXC << 16) | (HEX1 << 8)));
  71.         } else if (switches & SW10) {
  72.             alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED10);
  73.             alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
  74.                     ((HEXC << 16) | (HEX2 << 8)));
  75.         } else if (switches & SW11) {
  76.             alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED11);
  77.             alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
  78.                     ((HEXD << 16) | (HEX1 << 8)));
  79.         } else if (switches & SW12) {
  80.             alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED12);
  81.             alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
  82.                     ((HEXD << 16) | (HEX2 << 8)));
  83.         }
  84.         break;
  85.     case 16:
  86.         alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED4);
  87.         alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX5));
  88.         break;
  89.     case 32:
  90.         alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED5);
  91.         alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX6));
  92.         break;
  93.     case 64:
  94.         alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED6);
  95.         alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX7));
  96.         break;
  97.  
  98.     default:
  99.         alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
  100.                 (HEXE << 16) | (HEXr << 8) | HEXr);
  101.         alt_up_parallel_port_write_data(up_dev->uchwytLEDG, 0);
  102.         alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED17);
  103.         break;
  104.     }
  105.  
  106. }
  107.  
  108. int main() {
  109.     printf("Lab3");
  110.  
  111.     while (1) {
  112.  
  113.         struct alt_up_dev up_dev;
  114.         alt_up_parallel_port_dev *uchwytSW = alt_up_parallel_port_open_dev(
  115.                 "/dev/SW_SLIDERS");
  116.         alt_up_parallel_port_dev *uchwytLEDR = alt_up_parallel_port_open_dev(
  117.                 "/dev/LEDS_RED");
  118.         alt_up_parallel_port_dev *uchwytLEDG = alt_up_parallel_port_open_dev(
  119.                 "/dev/LEDS_GREEN");
  120.         alt_up_parallel_port_dev * uchwytHEX3 = alt_up_parallel_port_open_dev(
  121.                 "/dev/HEX_3");
  122.  
  123.         if (uchwytSW != NULL) {
  124.             up_dev.uchwytSW = uchwytSW;
  125.         }
  126.         if (uchwytLEDG != NULL) {
  127.             up_dev.uchwytLEDG = uchwytLEDG;
  128.         }
  129.         if (uchwytLEDR != NULL) {
  130.             up_dev.uchwytLEDR = uchwytLEDR;
  131.         }
  132.         if (uchwytHEX3 != NULL) {
  133.             up_dev.uchwytHEX3 = uchwytHEX3;
  134.         }
  135.         alt_irq_register(1, (void*) &up_dev, (void *) interrupt_handler);
  136.         alt_up_parallel_port_set_interrupt_mask(uchwytSW, 0xff);
  137.  
  138.     };
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement