Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * "Hello World" example.
- *
- * This example prints 'Hello from Nios II' to the STDOUT stream. It runs on
- * the Nios II 'standard', 'full_featured', 'fast', and 'low_cost' example
- * designs. It runs with or without the MicroC/OS-II RTOS and requires a STDOUT
- * device in your system's hardware.
- * The memory footprint of this hosted application is ~69 kbytes by default
- * using the standard reference design.
- *
- * For a reduced footprint version of this template, and an explanation of how
- * to reduce the memory footprint for a given application, see the
- * "small_hello_world" template.
- *
- */
- #include <stdio.h>
- #include <io.h>
- #include <system.h>
- #include "alt_types.h"
- #include "sys/alt_irq.h"
- #include <unistd.h>
- #include "sys/alt_alarm.h"
- ;
- /* Przełączniki */
- #define SW0 0x00000001
- #define SW1 0x00000002
- #define SW2 0x00000004
- #define SW3 0x00000008
- #define SW4 0x00000010
- #define SW5 0x00000020
- #define SW6 0x00000040
- #define SW7 0x00000080
- #define SW8 0x00000100
- #define SW9 0x00000200
- #define SW10 0x00000400
- #define SW11 0x00000800
- #define SW12 0x00001000
- #define SW13 0x00002000
- #define SW14 0x00004000
- #define SW15 0x00008000
- #define SW16 0x00010000
- #define SW17 0x00020000
- /* PushButtony */
- #define KEY1 0x00000002
- #define KEY2 0x00000004
- #define KEY3 0x00000008
- /* Ledy */
- #define LED0 0x00000001
- #define LED1 0x00000002
- #define LED2 0x00000004
- #define LED3 0x00000008
- #define LED4 0x00000010
- #define LED5 0x00000020
- #define LED6 0x00000040
- #define LED7 0x00000080
- #define LED8 0x00000100
- #define LED9 0x00000200
- #define LED10 0x00000400
- #define LED11 0x00000800
- #define LED12 0x00001000
- #define LED13 0x00002000
- #define LED14 0x00004000
- #define LED15 0x00008000
- #define LED16 0x00010000
- #define LED17 0x00020000
- /* Segmenty HEX */
- #define SEGA 1
- #define SEGB 2
- #define SEGC 4
- #define SEGD 8
- #define SEGE 16
- #define SEGF 32
- #define SEGG 64
- /* Litery i cyfry z hex 7 segmentowych */
- #define HEX0 (SEGA|SEGB|SEGC|SEGD|SEGE|SEGF)
- #define HEX1 (SEGB|SEGC)
- #define HEX2 (SEGA|SEGB|SEGG|SEGE|SEGD)
- #define HEX3 (SEGA|SEGB|SEGC|SEGD|SEGG)
- #define HEX4 (SEGF|SEGG|SEGB|SEGC)
- #define HEX5 (SEGA|SEGF|SEGG|SEGC|SEGD)
- #define HEX6 (SEGA|SEGF|SEGG|SEGC|SEGD|SEGE)
- #define HEX7 (SEGA|SEGB|SEGC)
- #define HEX8 (SEGA|SEGB|SEGC|SEGD|SEGE|SEGF|SEGG)
- #define HEX9 (SEGA|SEGB|SEGC|SEGD|SEGF|SEGG)
- #define HEXE (SEGA|SEGF|SEGG|SEGE|SEGD)
- #define HEXr (SEGE|SEGG)
- #define HEXA (SEGA|SEGB|SEGC|SEGE|SEGF|SEGG)
- #define HEXF (SEGA|SEGE|SEGF|SEGG)
- #define HEXC (SEGA|SEGE|SEGF|SEGD)
- #define HEXD (SEGB|SEGC|SEGD|SEGE|SEGG)
- static alt_alarm alarmLED;
- static alt_alarm alarmHEX;
- static alt_alarm alarmERR;
- int error = 0;
- alt_u32 writeERR(void* context) {
- if (*(int*) context == 0) {
- IOWR(LEDS_RED_BASE, 0, LED17);
- *(int*) context = 1;
- } else if (*(int*) context == 1) {
- *(int*) context = 2;
- }
- if (!error) {
- alt_alarm_stop(&alarmERR);
- error = 1;
- }
- return alt_ticks_per_second(); //alt_alarm_stop (&alarmERR);
- }
- /*
- *
- * alt_u32 writeERR(void* context) {
- if (*(int*) context == 0) {
- IOWR(LEDS_RED_BASE, 0, LED17);
- *(int*) context = 1;
- }
- if (!error) {
- alt_alarm_stop(&alarmERR);
- error = 1;
- }
- return alt_ticks_per_second(); //alt_alarm_stop (&alarmERR);
- }
- alt_u32 writeERRHex(void* context) {
- if (*(int*) context == 0) {
- IOWR(HEX_3_BASE, 0, ((HEXE<<16) | (HEXr<<8) | HEXr));
- *(int*) context = 0;
- }
- if (!error) {
- alt_alarm_stop(&alarmERR);
- error = 1;
- }
- return alt_ticks_per_second(); //alt_alarm_stop (&alarmERR);
- }
- */
- alt_u32 writeLEDs(void* context) {
- int switches = IORD(SW_SLIDERS_BASE, 0);
- int state = switches & (SW0 | SW1 | SW2 | SW3 | SW4 | SW5 | SW6);
- switch (state) {
- case 0:
- IOWR(LEDS_RED_BASE, 0, 0);
- break;
- case 1:
- IOWR(LEDS_RED_BASE, 0, LED0);
- if ((switches & SW7) && (switches & SW8)) {
- IOWR(LEDS_RED_BASE, 0, LED17);
- } else if (switches & SW7) {
- IOWR(LEDS_RED_BASE, 0, LED7);
- } else if (switches & SW8) {
- IOWR(LEDS_RED_BASE, 0, LED8);
- }
- break;
- case 2:
- IOWR(LEDS_RED_BASE, 0, LED1);
- break;
- case 4:
- IOWR(LEDS_RED_BASE, 0, LED2);
- break;
- case 8:
- IOWR(LEDS_RED_BASE, 0, LED3);
- break;
- case 16:
- IOWR(LEDS_RED_BASE, 0, LED4);
- break;
- case 32:
- IOWR(LEDS_RED_BASE, 0, LED5);
- break;
- case 64:
- IOWR(LEDS_RED_BASE, 0, LED6);
- break;
- }
- alt_alarm_stop(&alarmLED);
- return 0;
- }
- alt_u32 writeHEXes(void* context) {
- int switches = IORD(SW_SLIDERS_BASE, 0);
- int state = switches & (SW0 | SW1 | SW2 | SW3 | SW4 | SW5 | SW6);
- switch (state) {
- case 0:
- IOWR(HEX_3_BASE, 0, 0);
- break;
- case 1:
- IOWR(HEX_3_BASE, 0, HEX1);
- if ((switches & SW7) && (switches & SW8)) {
- IOWR(HEX_3_BASE, 0, ((HEXE<<24) | (HEXr<<16) | (HEXr<<8)));
- } else if (switches & SW7) {
- IOWR(HEX_3_BASE, 0, (HEXA<<8));
- } else if (switches & SW8) {
- IOWR(HEX_3_BASE, 0, (HEXF<<8));
- }
- break;
- case 2:
- IOWR(HEX_3_BASE, 0, HEX2);
- break;
- case 4:
- IOWR(HEX_3_BASE, 0, HEX3);
- break;
- case 8:
- IOWR(HEX_3_BASE, 0, HEX4);
- break;
- case 16:
- IOWR(HEX_3_BASE, 0, HEX5);
- break;
- case 32:
- IOWR(HEX_3_BASE, 0, HEX6);
- break;
- case 64:
- IOWR(HEX_3_BASE, 0, HEX7);
- break;
- }
- alt_alarm_stop(&alarmHEX);
- return 0;
- }
- int main() {
- printf("Hello from Nios II!\n");
- int state = 0;
- int lastState = 0;
- int timeToEventLeds = 1;
- int timeToEventHex = 0;
- int which = 0;
- do {
- int switches = IORD(SW_SLIDERS_BASE, 0);
- state = switches & (SW0 | SW1 | SW2 | SW3 | SW4 | SW5);
- if (lastState != state) {
- switch (state) {
- case 0:
- if (error) {
- timeToEventLeds = 3;
- timeToEventHex = 0;
- } else {
- timeToEventLeds = 2;
- timeToEventHex = 0;
- }
- error = 0;
- break;
- case 1:
- if (error) {
- timeToEventLeds = 3;
- timeToEventHex = 0;
- } else {
- timeToEventLeds = 1;
- timeToEventHex = 0;
- }
- error = 0;
- break;
- case 2:
- if (error) {
- timeToEventLeds = 3;
- timeToEventHex = 0;
- } else {
- timeToEventLeds = 1;
- timeToEventHex = 0;
- }
- error = 0;
- break;
- case 4:
- if (error) {
- timeToEventLeds = 3;
- timeToEventHex = 0;
- } else {
- timeToEventLeds = 1;
- timeToEventHex = 0;
- }
- error = 0;
- break;
- case 8:
- if (error) {
- timeToEventLeds = 3;
- timeToEventHex = 0;
- } else {
- timeToEventLeds = 1;
- timeToEventHex = 0;
- }
- error = 0;
- break;
- case 16:
- if (error) {
- timeToEventLeds = 3;
- timeToEventHex = 0;
- } else {
- timeToEventLeds = 1;
- timeToEventHex = 0;
- }
- error = 0;
- break;
- case 32:
- if (error) {
- timeToEventLeds = 3;
- timeToEventHex = 0;
- } else {
- timeToEventLeds = 1;
- timeToEventHex = 0;
- }
- error = 0;
- break;
- case 64:
- if (error) {
- timeToEventLeds = 3;
- timeToEventHex = 0;
- } else {
- timeToEventLeds = 1;
- timeToEventHex = 0;
- }
- error = 0;
- break;
- default:
- timeToEventLeds = 1;
- timeToEventHex = 0;
- error = 1;
- break;
- }
- if (error == 1) {
- //alt_alarm_start(&alarmERR,timeToEventHex * alt_ticks_per_second(), writeERR, NULL);//(void*)&which) ;
- printf("Hello from Nios II!\n");
- IOWR(HEX_3_BASE, 0, ((HEXE<<16) | (HEXr<<8) | HEXr));
- alt_alarm_start(&alarmERR,
- timeToEventLeds * alt_ticks_per_second(), writeERR,
- &which);
- if (which == 2) {
- alt_alarm_stop(&alarmERR);
- which = 0;
- }
- //which = 1;
- //alt_alarm_start(&alarmERR,(timeToEventHex-timeToEventLeds) * alt_ticks_per_second(), writeERR, &which) ;
- } else {
- alt_alarm_start(&alarmLED,
- timeToEventLeds * alt_ticks_per_second(), writeLEDs,
- NULL);
- alt_alarm_start(&alarmHEX,
- timeToEventHex * alt_ticks_per_second(), writeHEXes,
- NULL);
- }
- }
- lastState = state;
- } while (1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement