Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <io.h>
- #include <system.h>
- #include "alt_types.h"
- #include "altera_avalon_pio_regs.h"
- #include "sys/alt_irq.h"
- #include "sys/alt_timestamp.h"
- #include <unistd.h>
- #include "definition.h"
- #define SW0 0x00000001
- #define SW1 0x00000002
- #define SW2 0x00000004
- #define SW3 0x00000008
- #define SW4 0x00000010
- #define SW5 0x00000020
- #define LEDG0 0x00000001
- #define LEDG1 0x00000002
- #define LEDG2 0x00000004
- #define LEDG3 0x00000008
- #define LEDG4 0x00000010
- #define LEDG5 0x00000020
- #define LEDR17 0x00020000
- #define SEGA 0b0000001
- #define SEGB 0b0000010
- #define SEGC 0b0000100
- #define SEGD 0b0001000
- #define SEGE 0b0010000
- #define SEGF 0b0100000
- #define SEGG 0b1000000
- int HEX0 = SEGA|SEGB|SEGC|SEGD|SEGE|SEGF;
- int HEX3 = SEGA|SEGB|SEGC|SEGD|SEGG;
- int HEX4 = SEGF|SEGG|SEGB|SEGC;
- int HEX5 = SEGA|SEGF|SEGG|SEGC|SEGD;
- int HEX6 = SEGA|SEGF|SEGG|SEGC|SEGD|SEGE;
- int HEX8 = SEGA|SEGB|SEGC|SEGD|SEGE|SEGF|SEGG;
- int HEX9 = SEGA|SEGB|SEGC|SEGD|SEGF|SEGG;
- int HEXE = SEGA|SEGF|SEGG|SEGE|SEGD;
- int HEXr = SEGE|SEGG;
- struct interrupt_data
- {
- int * ledsr_addr;
- int * ledsg_addr;
- int * sliders_addr;
- int * hex3_addr;
- };
- static void handle_sliders_interrupt(struct interrupt_data * data)
- {
- int switches = IORD(*data->sliders_addr,0);
- int state = switches & (SW0|SW1|SW2|SW3|SW4|SW5);
- IOWR(*data->ledsg_addr,0,0);
- IOWR(*data->ledsr_addr,0,0);
- IOWR(*data->hex3_addr,0,0);
- switch(state)
- {
- case 0:
- break;
- case 1:
- IOWR(*data->hex3_addr,0,((HEX3<<8)| HEX0));
- IOWR(*data->ledsg_addr,0,LEDG0);
- break;
- case 2:
- IOWR(*data->hex3_addr,0,((HEX3<<8)| HEX5));
- IOWR(*data->ledsg_addr,0,LEDG1);
- break;
- case 4:
- IOWR(*data->hex3_addr,0,((HEX4<<8)| HEX0));
- IOWR(*data->ledsg_addr,0,LEDG2);
- break;
- case 8:
- IOWR(*data->hex3_addr,0,((HEX6<<8)| HEX0));
- IOWR(*data->ledsg_addr,0,LEDG3);
- break;
- case 16:
- IOWR(*data->hex3_addr,0,((HEX8<<8)| HEX0));
- IOWR(*data->ledsg_addr,0,LEDG4);
- break;
- case 32:
- IOWR(*data->hex3_addr,0,((HEX9<<8)| HEX0));
- IOWR(*data->ledsg_addr,0,LEDG5);
- break;
- default:
- IOWR(*data->hex3_addr,0,((HEXE<<16) | (HEXr<<8) | HEXr));
- IOWR(*data->ledsg_addr,0,0);
- IOWR(*data->ledsr_addr,0,LEDR17);
- break;
- }
- }
- int main()
- {
- int *ledsr = (int*) & LEDS_RED_BASE;
- int *ledsg = (int*) & LEDS_GREEN_BASE;
- int *sliders = (int*) & SW_SLIDERS_BASE;
- int *hex3 = (int*) & HEX_3_BASE;
- struct interrupt_data data;
- data.ledsr_addr = ledsr;
- data.ledsg_addr = ledsg;
- data.sliders_addr = sliders;
- data.hex3_addr = hex3;
- IOWR_ALTERA_AVALON_PIO_IRQ_MASK(SW_SLIDERS_BASE,0xF);
- alt_ic_isr_register(SW_SLIDERS_IRQ_INTERRUPT_CONTROLLER_ID, SW_SLIDERS_IRQ, handle_sliders_interrupt, &data, 0x0);
- alt_ic_irq_enable(SW_SLIDERS_IRQ_INTERRUPT_CONTROLLER_ID, SW_SLIDERS_IRQ);
- printf("Hello from Nios II!\n");
- while(1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement