summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/drivers/led.c61
-rw-r--r--firmware/drivers/led.h27
2 files changed, 16 insertions, 72 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
diff --git a/firmware/drivers/led.h b/firmware/drivers/led.h
index 955c59aa81..aeaa1cc476 100644
--- a/firmware/drivers/led.h
+++ b/firmware/drivers/led.h
@@ -20,31 +20,8 @@
20#ifndef __LED_H__ 20#ifndef __LED_H__
21#define __LED_H__ 21#define __LED_H__
22 22
23#include <sh7034.h> 23#include "types.h"
24#include <system.h>
25 24
26#define LEDB 6 /* PB6 : red LED */ 25extern void led( bool on );
27
28static inline void led_turn_off (void)
29{
30 clear_bit (LEDB,PBDR+1);
31 clear_bit (2,TSTR_ADDR);
32}
33
34static inline void led_turn_on (void)
35{
36 set_bit (LEDB,PBDR+1);
37 set_bit (2,TSTR_ADDR);
38}
39
40static inline void led_toggle (void)
41{
42 toggle_bit (LEDB,PBDR+1);
43}
44
45extern void led_set_volume (unsigned short volume);
46extern void led_setup (void);
47 26
48#endif 27#endif
49
50