diff --git a/configs/z16f2800100zcog/include/board.h b/configs/z16f2800100zcog/include/board.h index c8d43eee3f..f5e562e310 100644 --- a/configs/z16f2800100zcog/include/board.h +++ b/configs/z16f2800100zcog/include/board.h @@ -60,9 +60,9 @@ #define LED_STACKCREATED 3 #define LED_IDLE 4 #define LED_INIRQ 5 -#define LED_ASSERTION 6 #define LED_SIGNAL 6 -#define LED_PANIC 7 +#define LED_ASSERTION 7 +#define LED_PANIC 8 /**************************************************************************** * Public Functions diff --git a/configs/z8encore000zco/src/z8_leds.c b/configs/z8encore000zco/src/z8_leds.c index ff0118184e..7eab7e66b8 100644 --- a/configs/z8encore000zco/src/z8_leds.c +++ b/configs/z8encore000zco/src/z8_leds.c @@ -54,14 +54,142 @@ * Definitions ****************************************************************************/ +/* Port G: Anode Bit Assignments (1 enables) */ + +#define Z8_PORTG_ANODE_MASK 0x7f +#define Z8_PORTG_ANODE_ROW0 0x01 +#define Z8_PORTG_ANODE_ROW1 0x02 +#define Z8_PORTG_ANODE_ROW2 0x04 +#define Z8_PORTG_ANODE_ROW3 0x08 +#define Z8_PORTG_ANODE_ROW4 0x10 +#define Z8_PORTG_ANODE_ROW5 0x20 +#define Z8_PORTG_ANODE_ROW6 0x40 + +/* Port E: Cathode Bit Assignements (0 enables) */ + +#define Z8_PORTE_CATHODE_MASK 0x1f +#define Z8_PORTE_CATHODE_COLUMN0 0x01 +#define Z8_PORTE_CATHODE_COLUMN1 0x02 +#define Z8_PORTE_CATHODE_COLUMN2 0x04 +#define Z8_PORTE_CATHODE_COLUMN3 0x08 +#define Z8_PORTE_CATHODE_COLUMN4 0x10 + +/* Port E: LED Addressing */ + +#define Z8_PORTE_LED_MASK 0xe0 +#define Z8_PORTE_LED_D3 0x20 +#define Z8_PORTE_LED_D4 0x40 +#define Z8_PORTE_LED_D1 0x80 + +/* Port G: LED Addressing */ + +#define Z8_PORTG_LED_MASK 0x80 +#define Z8_PORTG_LED_D2 0x80 + +/* Special values for display */ + +#define LED_ALLON { Z8_PORTG_ANODE_MASK, 0x00 } +#define LED_ALLOFF { 0x00, Z8_PORTE_CATHODE_MASK } +#define LED_LEVEL1 { 0x10, 0x00 } +#define LED_LEVEL2 { 0x08, 0x00 } +#define LED_LEVEL3 { 0x04, 0x00 } +#define LED_LEVEL4 { 0x02, 0x00 } +#define LED_LEVEL1I { 0x14, 0x00 } +#define LED_LEVEL2I { 0x0c, 0x00 } +#define LED_LEVEL3I { 0x04, 0x00 } +#define LED_LEVEL4I { 0x06, 0x00 } +#define LED_LEVEL1S { 0x11, 0x00 } +#define LED_LEVEL2S { 0x09, 0x00 } +#define LED_LEVEL3S { 0x05, 0x00 } +#define LED_LEVEL4S { 0x03, 0x00 } +#define LED_LEVEL1A { 0x10, 0x11 } +#define LED_LEVEL2A { 0x08, 0x11 } +#define LED_LEVEL3A { 0x04, 0x11 } +#define LED_LEVEL4A { 0x02, 0x11 } +#define LED_SNAKEEYES { 0x06, 0x11 } + +/**************************************************************************** + * Private Types + ****************************************************************************/ + +struct z8_ledbits_s +{ + ubyte anode; + ubyte cathode; +}; + /**************************************************************************** * Private Data ****************************************************************************/ +static const struct z8_ledbits_s g_ledarray[10][4] = +{ + { LED_ALLON, LED_ALLON, LED_ALLON, LED_ALLON }, + { LED_ALLOFF, LED_ALLOFF, LED_ALLOFF, LED_ALLOFF }, + { LED_LEVEL1, LED_ALLOFF, LED_ALLOFF, LED_ALLOFF }, + { LED_LEVEL1, LED_LEVEL2, LED_ALLOFF, LED_ALLOFF }, + { LED_LEVEL1, LED_LEVEL2, LED_LEVEL3, LED_ALLOFF }, + { LED_LEVEL1, LED_LEVEL2, LED_LEVEL3, LED_LEVEL4 }, + { LED_LEVEL1I, LED_LEVEL2I, LED_LEVEL3I, LED_LEVEL4I }, + { LED_LEVEL1S, LED_LEVEL2S, LED_LEVEL3S, LED_LEVEL4S }, + { LED_LEVEL1A, LED_LEVEL2A, LED_LEVEL3A, LED_LEVEL4A }, + { LED_SNAKEEYES, LED_SNAKEEYES, LED_SNAKEEYES, LED_SNAKEEYES } +}; + /**************************************************************************** * Private Functions ****************************************************************************/ +/**************************************************************************** + * Name: z8_putled134 + ****************************************************************************/ + +#ifdef CONFIG_ARCH_LEDS +static void z8_putled134(FAR const struct z8_ledbits_s *bits, ubyte addr) +{ + ubyte porte; + + porte = bits->cathode; + putreg8(porte, PEOD); /* Load porte data */ + putreg8(bits->anode, PGOD); /* Load portg data */ + + porte |= addr; + putreg8(porte, PEOD); /* Latch data */ +} +#endif + +/**************************************************************************** + * Name: z8_lputed2 + ****************************************************************************/ + +#ifdef CONFIG_ARCH_LEDS +static void z8_putled2(FAR const struct z8_ledbits_s *bits, ubyte addr) +{ + ubyte portg; + + putreg8(bits->cathode, PEOD); /* Load porte data */ + portg = bits->anode; + putreg8(porte, PGOD); /* Load portg data */ + + portg |= addr; + putreg8(portg, PGOD); /* Latch data */ +} +#endif + +/**************************************************************************** + * Name: z8_putarray + ****************************************************************************/ + +#ifdef CONFIG_ARCH_LEDS +static void z8_putarray(FAR const struct z8_ledarray_s *array) +{ + z8_putled134(&array->led[0], Z8_PORTE_LED_D1); + z8_putled2(&array->led[1], Z8_PORTG_LED_D2); + z8_putled134(&array->led[2], Z8_PORTE_LED_D3); + z8_putled134(&array->led[3], Z8_PORTE_LED_D4); +} +#endif + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -73,6 +201,20 @@ #ifdef CONFIG_ARCH_LEDS void up_ledinit(void) { + putreg8(0x00, PEAF); /* PE Alt func = Port */ + putreg8(0x00, PGAF); /* PG Alt func = Port */ + + putreg8(0x00, PEOC); /* PE Out Ctrl = push-pull */ + putreg8(0x00, PGOC); /* PG Out Ctrl = push-pull */ + +/*putreg8(0x00, PEDD); * PA Data Dir = output */ + putreg8(0x01, PEADDR); /* PA Data Dir = output */ + putreg8(0x00, PECTL); /* OUTPUT */ +/*putreg8(0x00, PGDD); * PA Data Dir = output */ + putreg8(0x01, PGADDR); /* PA Data Dir = output */ + putreg8(0x00, PGCTL); /* OUTPUT */ + + z8_putarray(&g_ledarray[0][0]); } /**************************************************************************** @@ -81,6 +223,10 @@ void up_ledinit(void) void up_ledon(int led) { + if ((unsigned)led <= 8) + { + z8_putarray(&g_ledarray[led+1][0]); + } } /**************************************************************************** @@ -89,5 +235,9 @@ void up_ledon(int led) void up_ledoff(int led) { + if (led >= 1) + { + up_ledon(led-1); + } } #endif /* CONFIG_ARCH_LEDS */