?? song_task.lst
字號:
C51 COMPILER V7.00 SONG_TASK 04/28/2004 09:31:56 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE SONG_TASK
OBJECT MODULE PLACED IN C:\Documents and Settings\lvxc\桌面\AA\song_task.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE modules\song\song_task.c OPTIMIZE(7,SPEED) BROWSE INCDIR(.\modules\system;.
-\;.\;.\lib_refd) DEFINE(KEIL) DEBUG OBJECTEXTEND PRINT(.\song_task.lst) OBJECT(C:\Documents and Settings\lvxc\桌面\AA\so
-ng_task.obj)
stmt level source
1 /*C**************************************************************************
2 * NAME: song_task.c
3 *----------------------------------------------------------------------------
4 * Copyright (c) 2003 Atmel.
5 *----------------------------------------------------------------------------
6 * RELEASE: snd1c-refd-nf-4_0_3
7 * REVISION: 1.16
8 *----------------------------------------------------------------------------
9 * PURPOSE:
10 * This file contains the song task and attached routines
11 *
12 * CONFIGURATION
13 * Three #define must be set in config.h:
14 * - PLAYER_PLAY_MODE
15 * PLAY_DIR play selected dir
16 * PLAY_DISK play whole disk including sub-directory
17 * - PLAYER_PLAY_START
18 * START_PLAY start playing after power-up
19 * START_STOP do not play after power-up
20 * - PLAYER_PLAY_LOOP
21 * PLAY_LOOP loop after last file of dir or disk has been played
22 * PLAY_NO_LOOP no loop after last file of dir or disk has been played
23 * NOTES:
24 * Global Variables:
25 * - gl_key_press: bit in bdata space
26 * - gl_key: byte in idata space
27 * - gl_mem_failure: bit in bdata space
28 *****************************************************************************/
29
30 /*_____ I N C L U D E S ____________________________________________________*/
31
32 #include "config.h" /* system configuration */
33 #include "board.h" /* board definition */
34 #include "modules\display\disp.h" /* display definition */
35 #include "modules\file\file.h" /* file definition */
36 #include "modules\mode\mode_task.h" /* mode task definition */
37 #include "modules\display\disp_task.h" /* display definition */
38 #include "modules\mem\mem_task.h" /* memory task definition */
39 #include "lib_mcu\clock\clock.h" /* clock definition */
40 #include "lib_mcu\aud\aud_drv.h" /* audio driver definition */
41 #include "lib_mcu\mp3\mp3_drv.h" /* mp3 driver definition */
42 #include "song_drv.h" /* song driver definition */
43 #include "song_task.h" /* song task definition */
44
45
46 /*_____ M A C R O S ________________________________________________________*/
47
48
49 /*_____ D E F I N I T I O N ________________________________________________*/
50
51 extern bdata bit gl_key_press; /* TRUE when a key is decoded */
52 extern idata Byte gl_key; /* value of the key pressed */
53 extern bdata bit gl_mem_failure; /* memory hardware failure */
C51 COMPILER V7.00 SONG_TASK 04/28/2004 09:31:56 PAGE 2
54
55 #ifndef REFD /* add compatibility with refd/demo */
#error
#define disp_end_of_play()
#endif
59
60 Byte song_state; /* task state */
61 static bit song_loop; /* auto replay */
62
63
64 /*_____ D E C L A R A T I O N ______________________________________________*/
65
66
67 /*F**************************************************************************
68 * NAME: song_task_init
69 *----------------------------------------------------------------------------
70 * PARAMS:
71 *
72 * return:
73 *----------------------------------------------------------------------------
74 * PURPOSE:
75 * Song playing task initialization
76 *----------------------------------------------------------------------------
77 * EXAMPLE:
78 *----------------------------------------------------------------------------
79 * NOTE:
80 *----------------------------------------------------------------------------
81 * REQUIREMENTS:
82 *****************************************************************************/
83 void song_task_init (void)
84 {
85 1 song_loop = PLAYER_PLAY_LOOP; /* default loop playing */
86 1 song_snd_init(); /* init sound control */
87 1 song_state = SONG_START;
88 1 }
89
90
91 /*F**************************************************************************
92 * NAME: song_task
93 *----------------------------------------------------------------------------
94 * PARAMS:
95 *
96 * return:
97 *----------------------------------------------------------------------------
98 * PURPOSE:
99 * Song playing task
100 *----------------------------------------------------------------------------
101 * EXAMPLE:
102 *----------------------------------------------------------------------------
103 * NOTE:
104 *----------------------------------------------------------------------------
105 * REQUIREMENTS:
106 *****************************************************************************/
107 void song_task (void)
108 {
109 1 Byte cpt_data;
110 1 bit loop;
111 1
112 1 if (Mp3_frame_request())
113 1 {
114 2 cpt_data = 0;
115 2 do
C51 COMPILER V7.00 SONG_TASK 04/28/2004 09:31:56 PAGE 3
116 2 {
117 3 Mp3_load(Fgetc()); /* send data while requested */
118 3 cpt_data++;
119 3 /* workaround for 320Kbs frame support */
120 3 if ((cpt_data & 0x40) == 0x40)
121 3 {
122 4 Mp3_set_full();
123 4 Mp3_reset_full(); /* ack 64 Bytes write */
124 4 break;
125 4 }
126 3 if (gl_mem_failure)
127 3 { /* hardware failure */
128 4 song_state = SONG_ERROR; /* in case of read error */
129 4 break;
130 4 }
131 3 }
132 2 while (Mp3_frame_request()); /* until frame request */
133 2
134 2 while (Mp3_frame_request()) /* frame request ? */
135 2 {
136 3 Mp3_load(Fgetc()); /* send data while requested */
137 3 if (gl_mem_failure)
138 3 { /* hardware failure */
139 4 song_state = SONG_ERROR; /* in case of read error */
140 4 break;
141 4 }
142 3 }
143 2 }
144 1
145 1 switch (song_state)
146 1 {
147 2 case SONG_START:
148 2 {
149 3 print_mode_song(); /* select song icon */
150 3 print_state_blank(); /* select blank icon */
151 3 print_screen(SONG_SCREEN); /* display song screen */
152 3 print_sound_level(); /* display volume level */
153 3 song_state = SONG_INSTALL;
154 3 break;
155 3 }
156 2
157 2
158 2 case SONG_INSTALL:
159 2 {
160 3 if (mem_status() != MEM_BUSY) /* wait end of memory install */
161 3 {
162 4 if (mem_status() == MEM_READY)
163 4 { /* disk formated */
164 5 /* this may be changed to retrieve last saved position */
165 5 if (File_entry_root(FILE_MP3 | FILE_DIR) == OK) /* goto root directory */
166 5 {
167 6 print_file_name(); /* display file name */
168 6 #if PLAYER_PLAY_START == START_STOP
169 6 song_state = SONG_IDLE;
170 6 #else
if (File_type() == FILE_DIR)
{ /* file_type is dir */
#if PLAYER_PLAY_MODE == PLAY_DISK
song_state = SONG_NEW; /* enter dir and play */
#else
song_state = SONG_NEXT; /* stay in root dir */
#endif
C51 COMPILER V7.00 SONG_TASK 04/28/2004 09:31:56 PAGE 4
}
else
{ /* file_type is MP3 */
song_state = SONG_INIT;
}
#endif
184 6 }
185 5 else
186 5 { /* root is empty of song & diretory */
187 6 song_state = SONG_NO_SONG;
188 6 }
189 5 }
190 4 else
191 4 { /* disk not formated */
192 5 print_state_error(); /* error icon when not formated */
193 5 if (gl_key_press) /* a key is pressed? */
194 5 {
195 6 switch (gl_key)
196 6 {
197 7 case KEY_MEM:
198 7 mem_select_next(); /* select next memory */
199 7 song_state = SONG_START;
200 7 break;
201 7
202 7 case KEY_MODE:
203 7 mode_set_init(); /* exit from song task */
204 7 song_state = SONG_START;
205 7 break;
206 7 }
207 6 gl_key_press = FALSE; /* ack key usage */
208 6 }
209 5 else
210 5 { /* check card presence */
211 6 if (mem_check_card() == KO)
212 6 {
213 7 mem_select_next();
214 7 song_state = SONG_START; /* card has been unplugged */
215 7 }
216 6 }
217 5 }
218 4 }
219 3 else
220 3 {
221 4 if (gl_key_press) /* stop key is pressed? */
222 4 {
223 5 if (gl_key == KEY_MODE)
224 5 {
225 6 mode_set_init(); /* exit from song task */
226 6 song_state = SONG_START;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -