summaryrefslogtreecommitdiff
path: root/firmware/drivers/led.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/led.c')
-rw-r--r--firmware/drivers/led.c61
1 files changed, 14 insertions, 47 deletions
diff --git a/firmware/drivers/led.c b/firmware/drivers/led.c
index d01c9de612..efc7123ffd 100644
--- a/firmware/drivers/led.c
+++ b/firmware/drivers/led.c
@@ -17,54 +17,21 @@
17 * 17 *
18 ****************************************************************************/ 18 ****************************************************************************/
19 19
20#include "config.h" 20#include "types.h"
21#include "sh7034.h"
22#include "led.h"
21 23
22#include <led.h> 24void led(bool on)
23
24#define turn_on() \
25 set_bit (LEDB,PBDR_ADDR+1)
26
27#define turn_off() \
28 clear_bit (LEDB,PBDR_ADDR+1)
29
30#define start_timer() \
31 set_bit (2,TSTR_ADDR)
32
33#define stop_timer() \
34 clear_bit (2,TSTR_ADDR)
35
36#define eoi(subinterrupt) \
37 clear_bit (subinterrupt,TSR2_ADDR)
38
39#define set_volume(volume) \
40 GRA2 = volume & 0x7FFF
41
42
43void led_set_volume (unsigned short volume)
44{ 25{
45 volume <<= 10; 26#ifdef ASM_IMPLEMENTATION
46 if (volume == 0) 27 if ( on )
47 led_turn_off (); 28 asm("or.b %0, @(r0,gbr)" : : "I"(0x40), "z"(PBDR_ADDR+1));
48 else if (volume == 0x8000)
49 led_turn_on ();
50 else 29 else
51 { 30 asm("and.b %0, @(r0,gbr)" : : "I"(~0x40), "z"(PBDR_ADDR+1));
52 set_volume (volume); 31#else
53 start_timer (); 32 if ( on )
54 } 33 PBDR |= 0x40;
55} 34 else
56 35 PBDR &= ~0x40;
57#pragma interrupt 36#endif
58void IMIA2 (void)
59{
60 turn_off ();
61 eoi (0);
62}
63
64#pragma interrupt
65void OVI2 (void)
66{
67 turn_on ();
68 eoi (2);
69} 37}
70