Code:$regfile = "M128def.dat" 'IT'S POSSIBLE USE DIFFERENT AVR-CHIPS $crystal = 14318000 'BUT this NOT TESTED $baud = 115200 $hwstack = 128 $framesize = 128 $swstack = 128 '------------------------------------------------------------------------------- Config Timer2 = Pwm , Prescale = 1 , Compare Pwm = Clear Up Ocr2 = 128 'Config Clock = Soft 'Enable Interrupts 'Enable Timer1 'Enable Urxc 'abilita RS232 'On Timer1 Timer_1 'On Urxc Rs_232 'salto per RS232 'Config Date = Dmy , Separator = . '------------------------------------------------------------------------------- Avanti Alias Pina.0 Led Alias Portg.1 Vs_miso Alias Pinc.0 Vs_mosi Alias Portc.1 Vs_clock Alias Portc.2 Xcs Alias Portc.3 Xreset Alias Portc.4 Dreq Alias Pinc.5 Bsync Alias Portc.6 '------------------------------------------------------------------------------- Config Avanti = Input 'pulsante avanti Config Led = Output 'led Config Vs_miso = Input 'serial input vs-1001 Config Vs_mosi = Output 'serial out vs-1001 Config Vs_clock = Output 'serial clock vs-1001 Config Xcs = Output 'VS Chip Select Config Xreset = Output 'VS Reset Config Dreq = Input 'VS Data Request Config Bsync = Output 'VS Stream Request Config Portb.7 = Output Set Portb.7 '------------------------------------------------------------------------------- Declare Sub Vs_init() Declare Sub Soft_reset() Declare Sub Vs_write(byval Vs_address As Byte , Byval Data1 As Byte , Byval Data2 As Byte) Declare Function Vs_read(byval Vs_address As Byte) As Word Declare Sub Send_mp3(byval Filename As String) Declare Sub Vs_info() '------------------------------------------------------------------------------- Const Timervorgabe = 11965 Const Vs_rd = &B0000_0011 'Write command vs1001 Const Vs_wr = &B0000_0010 'Read command vs1001 Const Vs_mode = 0 Const Vs_status = 1 Const Vs_clockf = 3 Const Vs_decode_time = 4 Const Vs_audata = 5 Const Vs_volume = 11 '------------------------------------------------------------------------------- Dim B As Byte Dim I As Integer Dim J As Long Dim Curbyte As Long Dim S As String * 20 Dim Sample_rate As Word Dim Bit_rate As Word Dim Is_stereo As Word Dim Audata As Word Dim Filename As String * 11 Dim Mmc_data(512) As Byte '512 byte Dim Tempo_new As Word Dim Tempo_old As Word Dim Flag_read As Bit Dim Flag_play As Bit Dim Comando As String * 10 Dim Mode_low As Byte Dim Mode_hig As Byte Dim Volume As Word Dim Volume_low As Byte Dim Volume_hig As Byte Dim Tagpos As Long Dim Tagcheck As String * 3 Dim Tagstring As String * 30 '------------------------------------------------------------------------------- $include "Config_MMC.bas" 'include mmc If Gbdriveerror <> 0 Then End $include "Config_AVR-DOS.BAS" 'include avr-dos B = Initfilesystem(1) 'init file system If B <> 0 Then Print "Errore MMC" 'se errore '------------------------------------------------------------------------------- Bsync = 0 Xreset = 0 Xcs = 1 Portg.0 = 1 'res pull up Flag_play = 0 'sta suonando ? Flag_read = 1 'gia letto ? '------------------------------------------------------------------------------- '-------------------------- PROGRAM START ------------------------------------- '------------------------------------------------------------------------------- 'Print "Dir *.mp3" 'dir mp3 'Print '------------------------------------------------------------------------------- '---------------------- crea una lista dei brani mp3 presenti sulla MMC -------- '------------------------------------------------------------------------------- Open "Lista.txt" For Output As #9 'create file.list in MMC S = Dir( "*.mp3") While Len(s) > 0 'Print S ; " " ; Filedate() ; " " ; Filetime() ; " " ; Filelen() Print #9 , S 'memorizza la lista S = Dir() Wend Close #9 '------------------------------------------------------------------------------- 'Print "VS1001 Init" Vs_init 'reset hardware e inizializza '------------------------------------------------------------------------------- '--------------------------- MAIN PROGRAMM ------------------------------------- '------------------------------------------------------------------------------- Do Open "Lista.txt" For Input As #9 'OPEN LA LISTA While Eof(#9) = 0 Line Input #9 , S 'READ filename Mp3 Call Send_mp3(s) 'play mp3 Wend Close #9 Loop End '------------------------------------------------------------------------------- '---------------------------- VS_info ------------------------------------------ '------------------------------------------------------------------------------- Sub Vs_info() If Bsync = 0 And Flag_play = 1 And Flag_read = 1 Then 'per leggere inforamzioni Flag_read = 0 Audata = Vs_read(vs_audata) Sample_rate = Audata And &H1E00 Rotate Sample_rate , Right , 9 Bit_rate = Audata And &H1FF Is_stereo = Audata And &H8000 Rotate Is_stereo , Right , 15 Locate 3 , 1 Lcd Sample_rate ; "," ; Bit_rate ; " Kbs," ; Is_stereo 'print informations End If If Bsync = 0 And Flag_play = 1 And Flag_read = 0 Then Tempo_new = Vs_read(vs_decode_time) If Tempo_new <> Tempo_old Then Print Tempo_new ; " Sec" Tempo_old = Tempo_new End If End Sub '------------------------------------------------------------------------------- '---------------------- RS 232 ------------------------------------------------- '------------------------------------------------------------------------------- Rs_232: Comando = Inkey() If Comando = "1" Then Mode_low.7 = 1 Bsync = 0 Vs_write Vs_mode , &H0 , Mode_low 'no loudness End If If Comando = "2" Then Mode_low.7 = 0 Bsync = 0 Vs_write Vs_mode , &H0 , Mode_low 'loudness End If If Comando = "3" Then Mode_low.1 = 0 Bsync = 0 Vs_write Vs_mode , &H0 , Mode_low 'play normale End If If Comando = "4" Then Mode_low.1 = 1 Bsync = 0 Vs_write Vs_mode , &H0 , Mode_low 'play veloce End If If Comando = "5" And Volume_low < 250 Then Volume_hig = Volume_hig + 5 Volume_low = Volume_low + 5 Bsync = 0 Vs_write Vs_volume , Volume_hig , Volume_low 'volume down End If If Comando = "6" And Volume_low > 0 Then Volume_hig = Volume_hig - 5 Volume_low = Volume_low - 5 Bsync = 0 Vs_write Vs_volume , Volume_hig , Volume_low 'volume up End If Comando = "" Return '------------------------------------------------------------------------------- '------------------------------ MP3 SUBROUTINES -------------------------------- '------------------------------------------------------------------------------- Function Vs_read(byval Vs_address As Byte) As Word Xcs = 0 'Xcs low B = Vs_rd Shiftout Vs_mosi , Vs_clock , B , 1 Shiftout Vs_mosi , Vs_clock , Vs_address , 1 B = 0 Shiftin Vs_miso , Vs_clock , B , 1 Vs_read = B Shift Vs_read , Left , 8 B = 0 Shiftin Vs_miso , Vs_clock , B , 1 Vs_read = Vs_read + B Xcs = 1 'Xcs high End Function '------------------------------------------------------------------------------- '-------------------------------- WRITE ROUTINE -------------------------------- '------------------------------------------------------------------------------- Sub Vs_write(byval Vs_address As Byte , Byval Data1 As Byte , Byval Data2 As Byte) Xcs = 0 B = Vs_wr Shiftout Vs_mosi , Vs_clock , B , 1 Shiftout Vs_mosi , Vs_clock , Vs_address , 1 Shiftout Vs_mosi , Vs_clock , Data1 , 1 Shiftout Vs_mosi , Vs_clock , Data2 , 1 Xcs = 1 End Sub '------------------------------------------------------------------------------- '------------------------------- RESETTA E INIZILIZZA -------------------------- '------------------------------------------------------------------------------- Sub Vs_init() Cls Cursor Off Locate 1 , 1 Lcd "Init....." Wait 2 Xreset = 0 Waitms 5 Xreset = 1 Waitms 10 Do : Led = Dreq : Loop Until Dreq = 1 Vs_write Vs_mode , &H0 , &H4 'reset Do : Led = Dreq : Loop Until Dreq = 1 Mode_low.7 = 1 Vs_write Vs_mode , &H0 , Mode_low 'bass Do : Led = Dreq : Loop Until Dreq = 1 Vs_write Vs_clockf , &H98 , &H0 'clockf 24,xx MHz Do : Led = Dreq : Loop Until Dreq = 1 Vs_write Vs_volume , &H0 , &H0 'volume =0 massimo End Sub '------------------------------------------------------------------------------- '--------------------------- SOFT RESET VS1001 --------------------------------- '------------------------------------------------------------------------------- Sub Soft_reset Do : Led = Dreq : Loop Until Dreq = 1 'wait Dreq Vs_write Vs_mode , &H0 , &H4 'reset End Sub '------------------------------------------------------------------------------- '---------------------------- SEND FILE MP3 ------------------------------------ '------------------------------------------------------------------------------- Sub Send_mp3(byval Filename As String) Locate 1 , 1 Lcd "Play : " ; Filename Soft_reset 'resetta vs1001 Flag_read = 1 'per leggere una volta sample rate etc Flag_play = 0 Tagpos = Filelen(filename) - 127 'inizia a leggere dopo che c( stato letto il primo pacchetto Open Filename For Binary As #10 Get #10 , Tagcheck , Tagpos If Ucase(tagcheck) = "TAG" Then Get #10 , Tagstring Locate 2 , 1 Lcd "Title: " ; Left(tagstring , 13) Get #10 , Tagstring Locate 3 , 1 Lcd "Artst: " ; Left(tagstring , 13) Get #10 , Tagstring Locate 4 , 1 Lcd "Album: " ; Left(tagstring , 13) End If Close #10 Open Filename For Binary As #10 'apri il file mp3 e play song Do : Led = Dreq : Loop Until Dreq = 1 'wait Dreq While Eof(#10) = 0 Get #10 , Mmc_data(1) , , 512 'preleva 512 byte Do : Led = Dreq : Loop Until Dreq = 1 'wait Dreq For I = 1 To 16 For J = 1 To 32 Bsync = 1 Shiftout Vs_mosi , Vs_clock , Mmc_data(curbyte) , 1 Bsync = 0 Incr Curbyte Next J Do : Led = Dreq : Loop Until Dreq = 1 'wait Dreq Next I 'first 32 Curbyte = 1 'after 16 16x32=512 byte If Avanti = 0 Then Goto Esci 'pulsante up Flag_play = 1 'playing primo pacchetto Wend Esci: Flag_play = 0 'stop play Close #10 For I = 1 To 2048 'send 2048 zeros to clear buffer B = 0 Shiftout Vs_mosi , Vs_clock , B , 1 'send 2048 byte Next I Print "MP3 End" 'end song Waitms 100 'aspetta 100 End Sub
Lesezeichen