Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <io.h>
- #include <system.h>
- #include "sys/alt_timestamp.h"
- #include "alt_types.h"
- #include <sys/alt_alarm.h>
- #include <stddef.h>
- #define LED17 0x00020000
- #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
- #define SEGA 0x01
- #define SEGB 0x02
- #define SEGC 0x04
- #define SEGD 0x08
- #define SEGE 0x10
- #define SEGF 0x20
- #define SEGG 0x40
- int HEXP = SEGA | SEGB |SEGE | SEGF | SEGG;
- int HEX1 = SEGB | SEGC;
- int HEX2 = SEGA | SEGB |SEGD | SEGE | SEGG;
- int HEX3 = SEGA | SEGB |SEGC | SEGD | SEGG;
- int HEX4 = SEGB |SEGC | SEGF | SEGG;
- int HEX5 = SEGA | SEGC |SEGD | SEGF | SEGG;
- int HEX6 = SEGA | SEGC |SEGD | SEGE | SEGF | SEGG;
- int HEXE = SEGA |SEGD | SEGE | SEGF | SEGG;
- int HEXr = SEGE | SEGG;
- int state=0;
- static alt_alarm alarmHEX;
- static alt_alarm alarmLEDS;
- static alt_alarm alarmERROR;
- int flaga=1;
- int error=1;
- int wasError=0;
- alt_u32 defaultAlarm (void* context)
- {
- return alt_ticks_per_second();
- }
- alt_u32 writeHEX(void* context)
- {
- printf("OK_HEX\n");
- state=IORD(SW_SLIDERS_BASE,0);
- state=state&(32|16|8|4|2|1);
- IOWR(HEX_3_BASE,0,0);
- IOWR(HEX_7_BASE,0,0);
- switch(state){
- case 0:
- IOWR(HEX_3_BASE,0,0);
- IOWR(HEX_7_BASE,0,0);
- break;
- case 1:
- IOWR(HEX_3_BASE,0,HEX1);
- IOWR(HEX_7_BASE,0,HEXP<<24);
- break;
- case 2:
- IOWR(HEX_3_BASE,0,HEX2<<8);
- IOWR(HEX_7_BASE,0,HEXP<<24);
- break;
- case 4:
- IOWR(HEX_3_BASE,0,HEX3<<16);
- IOWR(HEX_7_BASE,0,HEXP<<24);
- break;
- case 8:
- IOWR(HEX_3_BASE,0,HEX4<<24);
- IOWR(HEX_7_BASE,0,HEXP<<24);
- break;
- case 16:
- IOWR(HEX_7_BASE,0,(HEXP<<24) | HEX5);
- break;
- case 32:
- IOWR(HEX_7_BASE,0,(HEXP<<24) | (HEX6<<8));
- break;
- default:
- IOWR(HEX_7_BASE,0,0);
- IOWR(HEX_3_BASE,0, (HEXE << 16) | (HEXr <<8) | HEXr);
- break;
- }
- if (!flaga){
- alt_alarm_stop (&alarmHEX);
- flaga=1;
- }
- return 0;
- }
- alt_u32 writeLEDS(void* context)
- {
- printf("OK_LEDS\n");
- state=IORD(SW_SLIDERS_BASE,0);
- state=state&(32|16|8|4|2|1);
- switch(state){
- case 0:
- case 1:
- case 2:
- case 4:
- case 8:
- case 16:
- case 32:
- IOWR(LEDS_GREEN_BASE,0,state);
- IOWR(LEDS_RED_BASE,0,0);
- break;
- default:
- IOWR(LEDS_GREEN_BASE,0,0);
- IOWR(LEDS_RED_BASE,0,LED17);
- break;
- }
- if (!flaga){
- alt_alarm_stop (&alarmLEDS);
- flaga=1;
- }
- return 0;
- }
- alt_u32 writeERROR(void* context)
- {
- printf("OK_ERR\n");
- state=IORD(SW_SLIDERS_BASE,0);
- state=state&(32|16|8|4|2|1);
- if(flaga){
- alt_alarm_start (&alarmHEX, alt_ticks_per_second()*2, writeHEX, NULL);
- alt_alarm_start (&alarmLEDS, alt_ticks_per_second()*1, writeLEDS, NULL);
- flaga=0;
- }
- if (!error){
- alt_alarm_stop (&alarmERROR);
- error=1;
- }
- wasError=1;
- return 0;
- }
- int main()
- {
- int lastState=0;
- while(1){
- state=IORD(SW_SLIDERS_BASE,0);
- state=state&(32|16|8|4|2|1);
- if(lastState!=state){
- switch(state){
- case 0:
- case 1:
- case 2:
- case 4:
- case 8:
- case 16:
- case 32:
- if(wasError && flaga){
- alt_alarm_start (&alarmHEX, alt_ticks_per_second(), writeHEX, NULL);
- alt_alarm_start (&alarmLEDS, alt_ticks_per_second()*3, writeLEDS, NULL);
- flaga=0;
- wasError=0;
- }
- else if(flaga){
- alt_alarm_start (&alarmHEX, alt_ticks_per_second()*2, writeHEX, NULL);
- alt_alarm_start (&alarmLEDS, alt_ticks_per_second(), writeLEDS, NULL);
- flaga=0;
- }
- break;
- default:
- if(error){
- alt_alarm_start (&alarmERROR, alt_ticks_per_second(), writeERROR, NULL);
- error=0;
- }
- break;
- }
- }
- lastState=state;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement