📄 song_task.lst
字号:
C51 COMPILER V7.02a SONG_TASK 09/13/2007 11:53:04 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE SONG_TASK
OBJECT MODULE PLACED IN 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(song_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
47 extern unsigned char xdata change_data;
48 void intr_data_task( );
49
50 extern unsigned char mp3;
51
52 /*_____ M A C R O S ________________________________________________________*/
53
54
C51 COMPILER V7.02a SONG_TASK 09/13/2007 11:53:04 PAGE 2
55 /*_____ D E F I N I T I O N ________________________________________________*/
56
57 extern bdata bit gl_key_press; /* TRUE when a key is decoded */
58 extern idata Byte gl_key; /* value of the key pressed */
59 extern bdata bit gl_mem_failure; /* memory hardware failure */
60
61 #ifndef REFD /* add compatibility with refd/demo */
#error
#define disp_end_of_play()
#endif
65
66 Byte song_state; /* task state */
67 static bit song_loop; /* auto replay */
68
69
70 /*_____ D E C L A R A T I O N ______________________________________________*/
71
72
73 /*F**************************************************************************
74 * NAME: song_task_init
75 *----------------------------------------------------------------------------
76 * PARAMS:
77 *
78 * return:
79 *----------------------------------------------------------------------------
80 * PURPOSE:
81 * Song playing task initialization
82 *----------------------------------------------------------------------------
83 * EXAMPLE:
84 *----------------------------------------------------------------------------
85 * NOTE:
86 *----------------------------------------------------------------------------
87 * REQUIREMENTS:
88 *****************************************************************************/
89 void song_task_init (void)
90 {
91 1 song_loop = PLAYER_PLAY_LOOP; /* default loop playing */
92 1 song_snd_init(); /* init sound control */
93 1 song_state = SONG_START;
94 1 }
95
96
97 /*F**************************************************************************
98 * NAME: song_task
99 *----------------------------------------------------------------------------
100 * PARAMS:
101 *
102 * return:
103 *----------------------------------------------------------------------------
104 * PURPOSE:
105 * Song playing task
106 *----------------------------------------------------------------------------
107 * EXAMPLE:
108 *----------------------------------------------------------------------------
109 * NOTE:
110 *----------------------------------------------------------------------------
111 * REQUIREMENTS:
112 *****************************************************************************/
113 void song_task (void)
114 {
115 1 Byte cpt_data;
116 1 bit loop;
C51 COMPILER V7.02a SONG_TASK 09/13/2007 11:53:04 PAGE 3
117 1
118 1 if (Mp3_frame_request())
119 1 {
120 2 cpt_data = 0;
121 2 do
122 2 {
123 3 Mp3_load(Fgetc()); /* send data while requested */
124 3 cpt_data++;
125 3 /* workaround for 320Kbs frame support */
126 3 if ((cpt_data & 0x40) == 0x40)
127 3 {
128 4 Mp3_set_full();
129 4 Mp3_reset_full(); /* ack 64 Bytes write */
130 4 break;
131 4 }
132 3 if (gl_mem_failure)
133 3 { /* hardware failure */
134 4 song_state = SONG_ERROR; /* in case of read error */
135 4 break;
136 4 }
137 3
138 3 }
139 2 while (Mp3_frame_request()); /* until frame request */
140 2
141 2 while (Mp3_frame_request()) /* frame request ? */
142 2 {
143 3
144 3 Mp3_load(Fgetc()); /* send data while requested */
145 3 if (gl_mem_failure)
146 3 { /* hardware failure */
147 4 song_state = SONG_ERROR; /* in case of read error */
148 4 break;
149 4 }
150 3 }
151 2 }
152 1
153 1
154 1 if(mp3==5)
155 1 {
156 2 mp3=0;
157 2 song_state= SONG_NEXT; ////////////////
-//////////////////////////
158 2 }
159 1
160 1
161 1 switch (song_state)
162 1 {
163 2 case SONG_START:
164 2 {
165 3 print_mode_song(); /* select song icon */
166 3 print_state_blank(); /* select blank icon */
167 3 print_screen(SONG_SCREEN); /* display song screen */
168 3 print_sound_level(); /* display volume level */
169 3 song_state = SONG_INSTALL;
170 3 break;
171 3 }
172 2
173 2
174 2 case SONG_INSTALL:
175 2 {
176 3 if (mem_status() != MEM_BUSY) /* wait end of memory install */
177 3 {
C51 COMPILER V7.02a SONG_TASK 09/13/2007 11:53:04 PAGE 4
178 4 if (mem_status() == MEM_READY)
179 4 { /* disk formated */
180 5 /* this may be changed to retrieve last saved position */
181 5 if (File_entry_root(FILE_MP3| FILE_DIR) == OK) /* goto root directory */
182 5 {
183 6 print_file_name(); /* display file name */
184 6 #if PLAYER_PLAY_START == START_STOP
185 6 song_state = SONG_IDLE;
186 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
}
else
{ /* file_type is MP3 */
song_state = SONG_INIT;
}
#endif
200 6 }
201 5 else
202 5 { /* root is empty of song & diretory */
203 6 song_state = SONG_NO_SONG;
204 6 }
205 5 }
206 4 else
207 4 { /* disk not formated */
208 5 print_state_error(); /* error icon when not formated */
209 5 if (gl_key_press) /* a key is pressed? */
210 5 {
211 6 switch (gl_key)
212 6 {
213 7 case KEY_MEM:
214 7 mem_select_next(); /* select next memory */
215 7 song_state = SONG_START;
216 7 break;
217 7
218 7 case KEY_MODE:
219 7 mode_set_init(); /* exit from song task */
220 7 song_state = SONG_START;
221 7 break;
222 7 }
223 6 gl_key_press = FALSE; /* ack key usage */
224 6 }
225 5 else
226 5 { /* check card presence */
227 6 if (mem_check_card() == KO)
228 6 {
229 7 mem_select_next();
230 7 song_state = SONG_START; /* card has been unplugged */
231 7 }
232 6 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -