Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <io.h>
- #include <system.h>
- #include <definitions.h>
- #include "altera_up_avalon_parallel_port.h"
- #include "sys/alt_irq.h"
- //Struktura trzymajaca uchwyty
- struct alt_up_dev {
- alt_up_parallel_port_dev * uchwytSW;
- alt_up_parallel_port_dev * uchwytLEDR;
- alt_up_parallel_port_dev * uchwytLEDG;
- alt_up_parallel_port_dev * uchwytHEX3;
- };
- //logika
- void interrupt_handler(struct alt_up_dev* up_dev, alt_u32 id) {
- int state = 0;
- //Odczyt switchy
- int switches = alt_up_parallel_port_read_data(up_dev->uchwytSW);
- //Sprawdzenie ktory slajder zostal wykorzystany
- state = switches & (SW0 | SW1 | SW2 | SW3 | SW4 | SW5 | SW6);
- switch (state) {
- case 0:
- //Wygraszenie gdy zaden switch nie jest aktywny
- alt_up_parallel_port_write_data(up_dev->uchwytLEDG, 0);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3, 0);
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, 0);
- break;
- case 1:
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED0);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX1));
- if ((switches & SW7) && (switches & SW8)) {
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED17);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
- ((HEXE << 24) | (HEXr << 16) | (HEXr << 8)));
- } else if (switches & SW7) {
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED7);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEXA << 8));
- } else if (switches & SW8) {
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED8);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEXF << 8));
- }
- break;
- case 2:
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED1);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX2));
- break;
- case 4:
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED2);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX3));
- break;
- case 8:
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED3);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX4));
- if (((switches & SW9) && (switches & SW10))
- || ((switches & SW9) && (switches & SW11))
- || ((switches & SW9) && (switches & SW12))
- || ((switches & SW10) && (switches & SW11))
- || ((switches & SW10) && (switches & SW12))
- || ((switches & SW11) && (switches & SW12))) {
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED17);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
- ((HEXE << 24) | (HEXr << 16) | (HEXr << 8)));
- } else if (switches & SW9) {
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED9);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
- ((HEXC << 16) | (HEX1 << 8)));
- } else if (switches & SW10) {
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED10);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
- ((HEXC << 16) | (HEX2 << 8)));
- } else if (switches & SW11) {
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED11);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
- ((HEXD << 16) | (HEX1 << 8)));
- } else if (switches & SW12) {
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED12);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
- ((HEXD << 16) | (HEX2 << 8)));
- }
- break;
- case 16:
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED4);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX5));
- break;
- case 32:
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED5);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX6));
- break;
- case 64:
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED6);
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3, (HEX7));
- break;
- default:
- alt_up_parallel_port_write_data(up_dev->uchwytHEX3,
- (HEXE << 16) | (HEXr << 8) | HEXr);
- alt_up_parallel_port_write_data(up_dev->uchwytLEDG, 0);
- alt_up_parallel_port_write_data(up_dev->uchwytLEDR, LED17);
- break;
- }
- }
- int main() {
- printf("Lab3");
- while (1) {
- struct alt_up_dev up_dev;
- alt_up_parallel_port_dev *uchwytSW = alt_up_parallel_port_open_dev(
- "/dev/SW_SLIDERS");
- alt_up_parallel_port_dev *uchwytLEDR = alt_up_parallel_port_open_dev(
- "/dev/LEDS_RED");
- alt_up_parallel_port_dev *uchwytLEDG = alt_up_parallel_port_open_dev(
- "/dev/LEDS_GREEN");
- alt_up_parallel_port_dev * uchwytHEX3 = alt_up_parallel_port_open_dev(
- "/dev/HEX_3");
- if (uchwytSW != NULL) {
- up_dev.uchwytSW = uchwytSW;
- }
- if (uchwytLEDG != NULL) {
- up_dev.uchwytLEDG = uchwytLEDG;
- }
- if (uchwytLEDR != NULL) {
- up_dev.uchwytLEDR = uchwytLEDR;
- }
- if (uchwytHEX3 != NULL) {
- up_dev.uchwytHEX3 = uchwytHEX3;
- }
- alt_irq_register(1, (void*) &up_dev, (void *) interrupt_handler);
- alt_up_parallel_port_set_interrupt_mask(uchwytSW, 0xff);
- };
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement