#include "includes.h" /* Define items specific to the compiler */ #include "hardware.h" /* Contains interface to physical hardware */ #include "example1.h" /* Interface declarations for this file */ /* * ZDS-II Board comes up with Light Up The World attitude. 74HC273 should have * been used. Turn all of them off. */ void turn_off_digit_leds(void); void turn_off_digit_leds(void) { PEDD = 0x00; /* Data Direction, 0 = Output Direction */ PEAF = 0x00; /* Alternate Function, 0 = Normal/Follow DDx bit */ PEOC = 0x00; /* Output Control, 1 = Open Drain */ PEHDE = 0x00; /* High Drive Enable, 1 = High Current Drive */ PESMRE = 0x00; /* Stop Mode Recovery Enable, 1 = Stop Mode Recovery Source */ PEOUT = 0x1F; /* Output, 1 = Logical High Output */ PGDD = 0x00; /* Data Direction, 0 = Output Direction */ PGAF = 0x00; /* Alternate Function, 0 = Normal/Follow DDx bit */ PGOC = 0x00; /* Output Control, 1 = Open Drain */ PGHDE = 0x00; /* High Drive Enable, 1 = High Current Drive */ PGSMRE = 0x00; /* Stop Mode Recovery Enable, 1 = Stop Mode Recovery Source */ PGOUT = 0x00; /* Output, 1 = Logical High Output */ LED_D1_CLOCK(); LED_D2_CLOCK(); LED_D3_CLOCK(); LED_D4_CLOCK(); } int main() { DI(); /* Setup I/O ports: */ turn_off_digit_leds(); PFDD = (PF7|PF6); /* Data Direction, 0 = Output Direction, PF6&5 are inputs */ PFAF = 0x00; /* Alternate Function, 0 = Normal/Follow DDx bit */ PFOC = 0x00; /* Output Control, 1 = Open Drain */ PFHDE = 0xFF; /* High Drive Enable, 1 = High Current Drive */ PFSMRE = 0x00; /* Stop Mode Recovery Enable, 1 = Stop Mode Recovery Source */ PFOUT = 0x00; /* Output, 1 = Logical High Output, PF6&5 are inputs */ Example1_reset(); /* Reset the Esterel code */ /* * Programs often contain instantaneous initial statements, such * as signal emissions or variable initializations, to be performed * during the first reaction. To perform them, it is often useful * (but not mandatory) to generate a blank initial event by calling * the reaction function before calling any input C function. (This * boot transition is different from the automaton reset). */ Example1(); /* Iniz the Esterel code */ ENABLE_INTERRUPTS(); for(;;)/*ever*/ { if( TRUE == SW1_ASSERTED() ) Example1_I_SW1_ASSERTED(); /* Let the Esterel code know that SW1 has been asserted */ if( TRUE == SW2_ASSERTED() ) Example1_I_SW2_ASSERTED(); /* Let the Esterel code know that SW2 has been asserted */ Example1(); /* Call the Esterel Automation code. Light LED1 when SW1 is pressed followed by SW2 */ } /* While this code does function it has a potential critical flaw. The flaw is that all inputs * to the Esterel reaction function, Example1(), should be edge based. Only a edge transition one of the switches should cause * SWx_ASSERTED() to be called. You can see an example of the flaw if you remove the edge debouncing from * the reflex_game sample. */ }