Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1.  
  2. #include "definition.h"
  3. #include <io.h>
  4. #include <system.h>
  5. #include <stdint.h>
  6.  
  7. #define HEX_NUM 6
  8.  
  9. typedef enum STATES{
  10. ST0_RADIO,
  11. ST1_CASSETTE,
  12. ST2_GRAMOPHONE,
  13. ST3_PLATE,
  14. ST4_DVDFILM,
  15. ST5_AUX,
  16. ST6_VOLUMELEVEL,
  17. ST9_ERROR,
  18. ST01_AM,
  19. ST02_FM,
  20. ST31_CDAUDIO,
  21. ST32_CDMP3,
  22. ST33_DVDAUDIO,
  23. ST34_MP3
  24. }STATES;
  25.  
  26. typedef struct IOreg{
  27. uint32_t sliders;
  28. uint32_t leds;
  29. uint32_t hex[HEX_NUM];
  30. }IOreg;
  31.  
  32. void clear_hex(IOreg* regs)
  33. {
  34. for(int i=0; i<HEX_NUM; ++i)
  35. regs->hex[i] = 0x00000000;
  36. }
  37.  
  38. void read_IO(IOreg* regs)
  39. {
  40. regs->sliders = IORD(SW_SLIDERS_BASE, 0);
  41. }
  42.  
  43. STATES get_state(IOreg* regs)
  44. {
  45. STATES retVal;
  46. switch(regs->sliders){
  47. case SW0: retVal = ST0_RADIO; break;
  48. case SW0|SW7: retVal = ST01_AM; break;
  49. case SW0|SW8: retVal = ST02_FM; break;
  50. case SW1: retVal = ST1_CASSETTE; break;
  51. case SW2: retVal = ST2_GRAMOPHONE; break;
  52. case SW3: retVal = ST3_PLATE; break;
  53. //case : retVal = ST31_CDAUDIO; break;
  54. //case : retVal = ST32_CDMP3; break;
  55. //case : retVal = ST33_DVDAUDIO; break;
  56. //case : retVal = ST34_MP3; break;
  57. case SW4: retVal = ST4_DVDFILM; break;
  58. case SW5: retVal = ST5_AUX; break;
  59. case SW6: retVal = ST6_VOLUMELEVEL; break;
  60. default: retVal = ST9_ERROR; break;
  61. }
  62. return retVal;
  63. }
  64.  
  65. void update(STATES state, IOreg* regs)
  66. {
  67. switch(state){
  68. case ST0_RADIO:
  69. regs->leds = LED0;
  70. regs->hex[0] = HEX_ZERO;
  71. break;
  72. case ST01_AM:
  73. regs->leds = LED0 | LED7;
  74. regs->hex[1] = HEX_A;
  75. regs->hex[0] = HEX_ZERO;
  76. break;
  77. case ST02_FM:
  78. regs->leds = LED0 | LED8;
  79. regs->hex[1] = HEX_F;
  80. regs->hex[0] = HEX_ZERO;
  81. break;
  82. case ST1_CASSETTE:
  83. regs->leds = LED1;
  84. regs->hex[0] = HEX_ONE;
  85. break;
  86. case ST2_GRAMOPHONE:
  87. regs->leds = LED2;
  88. regs->hex[0] = HEX_TWO;
  89. break;
  90. case ST3_PLATE:
  91. regs->leds = LED3;
  92. regs->hex[0] = HEX_THREE;
  93. break;
  94. //case ST31_CDAUDIO:
  95. // break;
  96. //case ST32_CDMP3:
  97. // break;
  98. //case ST33_DVDAUDIO:
  99. // break;
  100. //case ST34_MP3:
  101. // break;
  102. case ST4_DVDFILM:
  103. regs->leds = LED4;
  104. regs->hex[0] = HEX_FOUR;
  105. break;
  106. case ST5_AUX:
  107. regs->leds = LED5;
  108. regs->hex[0] = HEX_FIVE;
  109. break;
  110. case ST6_VOLUMELEVEL:
  111. regs->leds = LED6;
  112. regs->hex[0] = HEX_SIX;
  113. break;
  114. case ST9_ERROR:
  115. regs->leds = LED9;
  116. regs->hex[2] = HEX_E;
  117. regs->hex[1] = HEX_R;
  118. regs->hex[0] = HEX_R;
  119. break;
  120. default:
  121. break;
  122. }
  123. }
  124.  
  125. void write_IO(IOreg* regs)
  126. {
  127. IOWR(LEDS_BASE, 0, regs->leds);
  128. for(int i=0; i<HEX_NUM; ++i)
  129. IOWR(HEX_BASE, i, regs->hex[i]);
  130. }
  131.  
  132. int main(void)
  133. {
  134. IOreg regs = {0};
  135.  
  136. clear_hex(&regs);
  137. write_IO(&regs);
  138.  
  139. while(1)
  140. {
  141. read_IO(&regs);
  142. clear_hex(&regs);
  143. update(get_state(&regs), &regs);
  144. write_IO(&regs);
  145. }
  146. return 0;
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement