Advertisement
majczel23000

[SW] LAB5 5.0

Nov 5th, 2018
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <io.h>
  3. #include <system.h>
  4. #include "sys/alt_timestamp.h"
  5. #include "alt_types.h"
  6. #include <sys/alt_alarm.h>
  7. #include <stddef.h>
  8.  
  9.  
  10. #define  LED17 0x00020000
  11. #define  SW0 0x00000001
  12. #define  SW1 0x00000002
  13. #define  SW2 0x00000004
  14. #define  SW3 0x00000008
  15. #define  SW4 0x00000010
  16. #define  SW5 0x00000020
  17. #define  SW6 0x00000040
  18. #define  SW7 0x00000080
  19. #define  SW8 0x00000100
  20. #define  SW9 0x00000200
  21. #define  SW10 0x00000400
  22. #define  SW11 0x00000800
  23. #define  SW12 0x00001000
  24. #define  SW13 0x00002000
  25. #define  SW14 0x00004000
  26. #define  SW15 0x00008000
  27. #define  SW16 0x00010000
  28. #define  SW17 0x00020000
  29. #define  SEGA 0x01
  30. #define  SEGB 0x02
  31. #define  SEGC 0x04
  32. #define  SEGD 0x08
  33. #define  SEGE 0x10
  34. #define  SEGF 0x20
  35. #define  SEGG 0x40
  36.  
  37.  
  38. int HEXP = SEGA | SEGB |SEGE | SEGF | SEGG;
  39. int HEX1 = SEGB | SEGC;
  40. int HEX2 = SEGA | SEGB |SEGD | SEGE | SEGG;
  41. int HEX3 = SEGA | SEGB |SEGC | SEGD | SEGG;
  42. int HEX4 = SEGB |SEGC | SEGF | SEGG;
  43. int HEX5 = SEGA | SEGC |SEGD | SEGF | SEGG;
  44. int HEX6 = SEGA | SEGC |SEGD | SEGE | SEGF | SEGG;
  45. int HEXE = SEGA |SEGD | SEGE | SEGF | SEGG;
  46. int HEXr = SEGE | SEGG;
  47.  
  48. int state=0;
  49. static alt_alarm alarmHEX;
  50. static alt_alarm alarmLEDS;
  51. static alt_alarm alarmERROR;
  52. int flaga=1;
  53. int error=1;
  54. int wasError=0;
  55.  
  56.  
  57.  
  58. alt_u32 defaultAlarm (void* context)
  59. {
  60.   return alt_ticks_per_second();
  61. }
  62.  
  63. alt_u32 writeHEX(void* context)
  64. {
  65.     printf("OK_HEX\n");
  66.     state=IORD(SW_SLIDERS_BASE,0);
  67.     state=state&(32|16|8|4|2|1);
  68.     IOWR(HEX_3_BASE,0,0);
  69.     IOWR(HEX_7_BASE,0,0);
  70.     switch(state){
  71.         case 0:
  72.             IOWR(HEX_3_BASE,0,0);
  73.             IOWR(HEX_7_BASE,0,0);
  74.             break;
  75.         case 1:
  76.             IOWR(HEX_3_BASE,0,HEX1);
  77.             IOWR(HEX_7_BASE,0,HEXP<<24);
  78.             break;
  79.         case 2:
  80.             IOWR(HEX_3_BASE,0,HEX2<<8);
  81.             IOWR(HEX_7_BASE,0,HEXP<<24);
  82.             break;
  83.         case 4:
  84.             IOWR(HEX_3_BASE,0,HEX3<<16);
  85.             IOWR(HEX_7_BASE,0,HEXP<<24);
  86.             break;
  87.         case 8:
  88.             IOWR(HEX_3_BASE,0,HEX4<<24);
  89.             IOWR(HEX_7_BASE,0,HEXP<<24);
  90.             break;
  91.         case 16:
  92.             IOWR(HEX_7_BASE,0,(HEXP<<24) | HEX5);
  93.             break;
  94.         case 32:
  95.             IOWR(HEX_7_BASE,0,(HEXP<<24) | (HEX6<<8));
  96.             break;
  97.         default:
  98.             IOWR(HEX_7_BASE,0,0);
  99.             IOWR(HEX_3_BASE,0, (HEXE << 16) | (HEXr <<8) | HEXr);
  100.             break;
  101.         }
  102.     if (!flaga){
  103.         alt_alarm_stop (&alarmHEX);
  104.         flaga=1;
  105.     }
  106.     return 0;
  107. }
  108.  
  109. alt_u32 writeLEDS(void* context)
  110. {
  111.     printf("OK_LEDS\n");
  112.     state=IORD(SW_SLIDERS_BASE,0);
  113.     state=state&(32|16|8|4|2|1);
  114.     switch(state){
  115.         case 0:
  116.         case 1:
  117.         case 2:
  118.         case 4:
  119.         case 8:
  120.         case 16:
  121.         case 32:
  122.             IOWR(LEDS_GREEN_BASE,0,state);
  123.             IOWR(LEDS_RED_BASE,0,0);
  124.             break;
  125.         default:
  126.             IOWR(LEDS_GREEN_BASE,0,0);
  127.             IOWR(LEDS_RED_BASE,0,LED17);
  128.             break;
  129.         }
  130.     if (!flaga){
  131.         alt_alarm_stop (&alarmLEDS);
  132.         flaga=1;
  133.     }
  134.     return 0;
  135. }
  136.  
  137. alt_u32 writeERROR(void* context)
  138. {
  139.     printf("OK_ERR\n");
  140.     state=IORD(SW_SLIDERS_BASE,0);
  141.     state=state&(32|16|8|4|2|1);
  142.     if(flaga){
  143.         alt_alarm_start (&alarmHEX, alt_ticks_per_second()*2, writeHEX, NULL);
  144.         alt_alarm_start (&alarmLEDS, alt_ticks_per_second()*1, writeLEDS, NULL);
  145.         flaga=0;
  146.     }
  147.     if (!error){
  148.         alt_alarm_stop (&alarmERROR);
  149.         error=1;
  150.     }
  151.     wasError=1;
  152.     return 0;
  153. }
  154.  
  155.  
  156.  
  157. int main()
  158. {
  159.     int lastState=0;
  160.     while(1){
  161.         state=IORD(SW_SLIDERS_BASE,0);
  162.         state=state&(32|16|8|4|2|1);
  163.         if(lastState!=state){
  164.             switch(state){
  165.                 case 0:
  166.                 case 1:
  167.                 case 2:
  168.                 case 4:
  169.                 case 8:
  170.                 case 16:
  171.                 case 32:
  172.                     if(wasError && flaga){
  173.                         alt_alarm_start (&alarmHEX, alt_ticks_per_second(), writeHEX, NULL);
  174.                         alt_alarm_start (&alarmLEDS, alt_ticks_per_second()*3, writeLEDS, NULL);
  175.                         flaga=0;
  176.                         wasError=0;
  177.                     }
  178.                     else if(flaga){
  179.                         alt_alarm_start (&alarmHEX, alt_ticks_per_second()*2, writeHEX, NULL);
  180.                         alt_alarm_start (&alarmLEDS, alt_ticks_per_second(), writeLEDS, NULL);
  181.                         flaga=0;
  182.                     }
  183.                     break;
  184.                 default:
  185.                     if(error){
  186.                         alt_alarm_start (&alarmERROR, alt_ticks_per_second(), writeERROR, NULL);
  187.                         error=0;
  188.                     }
  189.                     break;
  190.             }
  191.         }
  192.         lastState=state;
  193.     }
  194.   return 0;
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement