Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/src/led.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations) (download) (as text)
Fri Jun 8 06:26:43 2012 UTC (11 years, 11 months ago) by tekken_boss
File MIME type: text/x-csrc
File size: 2753 byte(s)
Import
1
2 /* --------------------------------------------- */
3 /* H8-3069F LED function */
4 /* */
5 /* CPU : Renesus H8/3069F 25MHz */
6 /* Memory : ROM 512KB, RAM 16KB E-RAM 2MB */
7 /* (c) KAZ.Imamura */
8 /* --------------------------------------------- */
9
10
11 #include "led.h"
12
13 #define LED_NUM 2
14
15 static unsigned char led_mode[LED_NUM];
16 unsigned int led_timer1;
17 unsigned int led_timer2;
18 unsigned char led_timing_bit; // bit7:1000ms , bit6:300ms
19
20 void led_initialize( void );
21 void led_20ms_handler( void );
22 void led_process( void );
23
24 void led_mode_set( unsigned char ch, unsigned char mode );
25
26 // -------------------------------------------
27 // LED initialize
28 // -------------------------------------------
29 void led_initialize( void ) {
30 unsigned char i;
31
32 led_timer1 = 0;
33 led_timer2 = 0;
34 led_timing_bit = 0;
35 for(i=0; i<LED_NUM; i++) led_mode[i] = LED_MODE_OFF;
36 }
37
38
39 // -------------------------------------------
40 // LED mode set service function
41 // -------------------------------------------
42 void led_mode_set( unsigned char ch, unsigned char mode ) {
43 if( ch >= LED_NUM ) return;
44 led_mode[ch] = mode;
45 }
46
47 // -------------------------------------------
48 // LED Process
49 // -------------------------------------------
50 void led_process( void ) {
51 unsigned char i;
52
53 for(i=0;i<LED_NUM; i++) {
54 switch( led_mode[i] ) {
55 case LED_MODE_OFF:
56 P4DR.BYTE |= 0x80 >> i;
57 break;
58 case LED_MODE_ON:
59 P4DR.BYTE &= ~(0x80 >> i);
60 break;
61
62 case LED_MODE_BLINK_300MS:
63 if(led_timing_bit & 0x80 ) P4DR.BYTE &= ~(0x80 >> i);
64 else P4DR.BYTE |= (0x80 >> i);
65 break;
66
67 case LED_MODE_BLINK_1000MS:
68 if(led_timing_bit & 0x40 ) P4DR.BYTE &= ~(0x80 >> i);
69 else P4DR.BYTE |= (0x80 >> i);
70 break;
71
72 case LED_MODE_BLINK_R300MS:
73 if(led_timing_bit & 0x80 ) P4DR.BYTE |= (0x80 >> i);
74 else P4DR.BYTE &= ~(0x80 >> i);
75 break;
76
77 case LED_MODE_BLINK_R1000MS:
78 if(led_timing_bit & 0x40 ) P4DR.BYTE |= (0x80 >> i);
79 else P4DR.BYTE &= ~(0x80 >> i);
80 break;
81 default:
82 break;
83 }
84 }
85 }
86
87
88 // -------------------------------------------
89 // LED 1ms interrupt handler
90 // -------------------------------------------
91 void led_20ms_handler(void) {
92 unsigned char i;
93
94 i = led_timing_bit;
95 if( ++led_timer1 >= 15 ) { // 300ms
96 led_timing_bit &= 0x7F; // clear
97 led_timing_bit |= (~i)&0x80; // set
98 led_timer1 = 0;
99 }
100
101 if( ++led_timer2 >= 50 ) { // 1000ms
102 led_timing_bit &= 0xBF; // clear
103 led_timing_bit |= (~i)&0x40; // set
104 led_timer2 = 0;
105 }
106 }
107
108

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26