Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "definition.h"
- #include <io.h>
- #include <system.h>
- #include <stdint.h>
- #define HEX_NUM 6
- typedef enum STATES{
- ST0_RADIO,
- ST1_CASSETTE,
- ST2_GRAMOPHONE,
- ST3_PLATE,
- ST4_DVDFILM,
- ST5_AUX,
- ST6_VOLUMELEVEL,
- ST9_ERROR,
- ST01_AM,
- ST02_FM,
- ST31_CDAUDIO,
- ST32_CDMP3,
- ST33_DVDAUDIO,
- ST34_MP3
- }STATES;
- typedef struct IOreg{
- uint32_t sliders;
- uint32_t leds;
- uint32_t hex[HEX_NUM];
- }IOreg;
- void clear_hex(IOreg* regs)
- {
- for(int i=0; i<HEX_NUM; ++i)
- regs->hex[i] = 0x00000000;
- }
- void read_IO(IOreg* regs)
- {
- regs->sliders = IORD(SW_SLIDERS_BASE, 0);
- }
- STATES get_state(IOreg* regs)
- {
- STATES retVal;
- switch(regs->sliders){
- case SW0: retVal = ST0_RADIO; break;
- case SW0|SW7: retVal = ST01_AM; break;
- case SW0|SW8: retVal = ST02_FM; break;
- case SW1: retVal = ST1_CASSETTE; break;
- case SW2: retVal = ST2_GRAMOPHONE; break;
- case SW3: retVal = ST3_PLATE; break;
- //case : retVal = ST31_CDAUDIO; break;
- //case : retVal = ST32_CDMP3; break;
- //case : retVal = ST33_DVDAUDIO; break;
- //case : retVal = ST34_MP3; break;
- case SW4: retVal = ST4_DVDFILM; break;
- case SW5: retVal = ST5_AUX; break;
- case SW6: retVal = ST6_VOLUMELEVEL; break;
- default: retVal = ST9_ERROR; break;
- }
- return retVal;
- }
- void update(STATES state, IOreg* regs)
- {
- switch(state){
- case ST0_RADIO:
- regs->leds = LED0;
- regs->hex[0] = HEX_ZERO;
- break;
- case ST01_AM:
- regs->leds = LED0 | LED7;
- regs->hex[1] = HEX_A;
- regs->hex[0] = HEX_ZERO;
- break;
- case ST02_FM:
- regs->leds = LED0 | LED8;
- regs->hex[1] = HEX_F;
- regs->hex[0] = HEX_ZERO;
- break;
- case ST1_CASSETTE:
- regs->leds = LED1;
- regs->hex[0] = HEX_ONE;
- break;
- case ST2_GRAMOPHONE:
- regs->leds = LED2;
- regs->hex[0] = HEX_TWO;
- break;
- case ST3_PLATE:
- regs->leds = LED3;
- regs->hex[0] = HEX_THREE;
- break;
- //case ST31_CDAUDIO:
- // break;
- //case ST32_CDMP3:
- // break;
- //case ST33_DVDAUDIO:
- // break;
- //case ST34_MP3:
- // break;
- case ST4_DVDFILM:
- regs->leds = LED4;
- regs->hex[0] = HEX_FOUR;
- break;
- case ST5_AUX:
- regs->leds = LED5;
- regs->hex[0] = HEX_FIVE;
- break;
- case ST6_VOLUMELEVEL:
- regs->leds = LED6;
- regs->hex[0] = HEX_SIX;
- break;
- case ST9_ERROR:
- regs->leds = LED9;
- regs->hex[2] = HEX_E;
- regs->hex[1] = HEX_R;
- regs->hex[0] = HEX_R;
- break;
- default:
- break;
- }
- }
- void write_IO(IOreg* regs)
- {
- IOWR(LEDS_BASE, 0, regs->leds);
- for(int i=0; i<HEX_NUM; ++i)
- IOWR(HEX_BASE, i, regs->hex[i]);
- }
- int main(void)
- {
- IOreg regs = {0};
- clear_hex(®s);
- write_IO(®s);
- while(1)
- {
- read_IO(®s);
- clear_hex(®s);
- update(get_state(®s), ®s);
- write_IO(®s);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement