Advertisement
Guest User

Untitled

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