From b5554f5f4d71153d988e6de36bc38f5ec148c6ac Mon Sep 17 00:00:00 2001 From: dinau Date: Sun, 5 Dec 2021 20:54:35 +0900 Subject: [PATCH] first upload. v9.1 --- .gitignore | 29 + LICENSE.txt | 25 + Makefile | 115 + README.md | 123 ++ README.txt | 54 + config_def.jal | 280 +++ debug/debug_info1.jal | 42 + debug/debug_info2.jal | 24 + debug/debug_tool.jal | 22 + debug/sdhc-card-info.txt | 12 + debug/sdhc-fat32-root-entry.txt | 73 + debug/sdsc-fat16-card-root-entry.txt | 71 + ...ic16f1827-wav-sd-player-schematic-2017.png | Bin 0 -> 18124 bytes ...18313-sd-wave-player_breadborad-2017-2.png | Bin 0 -> 210437 bytes ...16f18313-sd-wave-player_schematic-2017.png | Bin 0 -> 35340 bytes genhex.sh | 53 + lib/fat_lib.jal | 285 +++ lib/power_off_mode.jal | 40 + lib/pwm_lib.jal | 148 ++ lib/register_def.jal | 32 + lib/sd_card_local.jal | 1967 +++++++++++++++++ lib/timers.jal | 81 + m.bat | 19 + main.jal | 59 + pin_map.txt | 297 +++ port_def.jal | 1094 +++++++++ wave_player_main.jal | 257 +++ 27 files changed, 5202 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE.txt create mode 100644 Makefile create mode 100644 README.md create mode 100644 README.txt create mode 100644 config_def.jal create mode 100644 debug/debug_info1.jal create mode 100644 debug/debug_info2.jal create mode 100644 debug/debug_tool.jal create mode 100644 debug/sdhc-card-info.txt create mode 100644 debug/sdhc-fat32-root-entry.txt create mode 100644 debug/sdsc-fat16-card-root-entry.txt create mode 100644 doc/pic16f1827-wav-sd-player-schematic-2017.png create mode 100644 doc/pic16f18313-sd-wave-player_breadborad-2017-2.png create mode 100644 doc/pic16f18313-sd-wave-player_schematic-2017.png create mode 100644 genhex.sh create mode 100644 lib/fat_lib.jal create mode 100644 lib/power_off_mode.jal create mode 100644 lib/pwm_lib.jal create mode 100644 lib/register_def.jal create mode 100644 lib/sd_card_local.jal create mode 100644 lib/timers.jal create mode 100644 m.bat create mode 100644 main.jal create mode 100644 pin_map.txt create mode 100644 port_def.jal create mode 100644 wave_player_main.jal diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9ebc2c5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +*.asm +*.cod +*.bak +*.*~ +*.orig +*.sjis +*.led +tags +*.dat +log.* +*.xml +*.xml.* +*.lck +device_select.jal +*.out +*.db +*.log +*.eemap +*.pmp +*.tree +*.ods +movlp* +pwm-period* + +Backup/ +build/ +1.3/ +1.4/ +hex/ diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..f1cd00f --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,25 @@ + +Copyright (c) 2017, avrin (http://mpu.seesaa.net/article/445037481.html) +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..acff646 --- /dev/null +++ b/Makefile @@ -0,0 +1,115 @@ +# +# Makefile script +# For jalv2 Compiler +# avrin, Copyright (c) 2012, 2016, 2017, 2021 all rights reserved. +# 2016/12 Modified for SD card wav player +# 2012/01 Created by avrin. +# This program is released under the BSD license. +# + +#device = 12F1840 +#device = 16F1455 +#device = 16F1459 +#device = 16F1619 +#device = 16F1705 +#device = 16F1709 +#device = 16F1764 +#device = 16F18313 +#device = 16F18325 +#device = 16F1825 +device = 16F1827 +#device = 16F1829 +#device = 16F88 +#device = 16F1938 +#device = 18F13K50 +#device = 18F14K50 +#device = 18F26J50 + +rm = rm -fr +# for windows +#rm = del /s /q /f + + +main_name = main +main_file = $(main_name).jal +target = sd-wav-player-$(device) +jal_root = d:/0pic-data/jalv2-data + +jal_sys = $(jal_root)/jallib_full-1.6.0 + +jal_cc = $(jal_sys)/Compiler/jalv2.exe +jallib_dir = $(jal_sys)/lib + +#asm_list = -asm $(target).asm #-codfile $(target).cod +#noreuse = -no-variable-reuse +fastmath = -fastmath +jal_flags += $(incs) +jal_flags += -temp-reduce +jal_flags += $(noreuse) +jal_flags += $(asm_list) +jal_flags += $(fastmath) + +incs = -s $(jallib_dir) -s lib -s debug +depends = config_def.jal \ + port_def.jal \ + wave_player_main.jal \ + \ + lib/fat_lib.jal \ + lib/power_off_mode.jal \ + lib/pwm_lib.jal \ + lib/register_def.jal \ + lib/sd_card_local.jal \ + lib/timers.jal \ + \ + debug/debug_info1.jal \ + debug/debug_info2.jal \ + debug/debug_tool.jal \ + \ + Makefile + +all: device_sel $(target).hex + +device_sel: + @echo + echo "include $(device)" > device_select.jal + +$(target).hex: $(main_file) $(depends) + $(jal_cc) $(jal_flags) -hex $@ $(main_file) + +.PHONY: clean flash f flash2 f2 flash3 f3 + +# ------------ +# Flash writer setting +# ------------ +MPLABX_VER = 5.35 + +# for Pickit3 +flash_writer=C:\MPLABX\v$(MPLABX_VER)\mplab_platform\mplab_ipe\ipecmd.exe +# for Pickit3 alternative +flash_writer3=C:\MPLABX\v$(MPLABX_VER)\mplab_platform\mplab_ipe\pk3cmd.exe +# for Pickit2 +flash_writer2 = pk2cmd.exe + +f: flash +f2: flash2 +f3: flash3 + +# for pickit3 +flash: all + $(flash_writer) -TPPK3 -P$(device) -F$(target).hex -M -OL + +# for pickit3 alternative +flash3: all + $(flash_writer3) -P$(device) -F$(target).hex -M -L + +# for pickit2 +flash2: all + $(flash_writer2) -P -F$(target).hex -M -R -Y -J + +clean: + $(rm) $(target).hex $(main_name).asm $(main_name).cod \ + $(main_name).out $(main_name).hex \ + 00build.log \ + log.0 log.1 log.2 \ + MPLABXLog.* + diff --git a/README.md b/README.md new file mode 100644 index 0000000..f11ee6b --- /dev/null +++ b/README.md @@ -0,0 +1,123 @@ +## PWM Wave Player Super Lite for PIC16F1xxx with [Jalv2](http://www.justanotherlanguage.org/downloads) +I came across this page [WAVE PLAYER FOR PIC16F877A.!](https://libstock.mikroe.com/projects/view/120/wave-player-for-pic16f877a) and had a impression for very small code size about 1700 words. But I struggled with the program that aimed to old and paticular MMC FAT16 format in the now, so I rewrite it using Jalv2(Jal) language in order to work with SDSC/SDHC SD card (FAT16/FAT32)from 2GB to 32GB. + +### Specification: +1. Supported PICs are 8bit Enhanced Midrange PIC16F1xxx series and PIC18F26J50 etc, as follows: + - **Programmed by PicKit2/3:** + PIC12F1840 + PIC16F1455,PIC16F1459 + PIC16F1705,PIC16F1709 + PIC16F1825,PIC16F1827,PIC16F1829 + PIC16F1938 + PIC18F14K50 + PIC18F26J50 + - **Programmed by PicKit3 or later:** + PIC16F1619 + PIC16F1764 + PIC16F18313 + PIC16F18325 +1. PCM wave music file: Select 8bit stereo or mono. fs=44.1KHz fixed. +1. Auto play after power on. +1. One push switch controls **Play**,**Pause** and **Next song** oparation. +1. Code size is about 1700 words. + +### Youtube demo movie: +[![alt_image](https://img.youtube.com/vi/41IuUC8VG0o/0.jpg)](https://www.youtube.com/watch?v=41IuUC8VG0o) + +### Schematic: +* Refer to **pin_map.txt** in the archive file. +![img](http://mpu.up.seesaa.net/image/pic16f18313-sd-wave-player_breadborad-2017-2.png) +![img](http://mpu.up.seesaa.net/image/pic16f18313-sd-wave-player_schematic-2017.png) +![img](http://mpu.up.seesaa.net/image/pic16f1827-wav-sd-player-schematic-2017.png) + +### Output filter: +* Schematic +![img](http://mpu.up.seesaa.net/image/pwm-filter-output.png) + +### SD Card connection: +* Pin side + ``` + --------------\ + 9 = \ DAT2/NC + 1 ===| CS/DAT3 [CS] + 2 ===| CMD/DI [DI] + 3 ===| VSS1 + Bottom 4 ===| VDD + View 5 ===| CLK [CLK] + 6 ===| VSS2 + 7 ===| DO/DAT0 [DO] + 8 =| DAT1/IRQ + ----------------- + ``` + * Logo side + ``` + Arduino NUCLEO-F411 NUCLEO-F030R8 + ----------------- + 8 =| DAT1/IRQ + 7 ===| DO/DAT0 [DO] D12 D12/PA_6 D12/PA_6 + 6 ===| VSS2 + Top 5 ===| CLK [CLK] D13 D13/PA_5 D13/PA_5 + View 4 ===| VDD + 3 ===| VSS1 + 2 ===| CMD/DI [DI] D11 D11/PA_7 D11/PA_7 + 1 ===| CS/DAT3 [CS] D8 D10/PB_6 D10/PB_6 + 9 = / DAT2/NC + --------------/ + ``` + +### Pickit2/3 pin map +``` + ------------------ + Pickit2/3 pin map + ------------------ + ----------- + \ + \ + ==> |1 Vpp/MCLR + |2 VDD Target + |3 Vss ground + |4 ICSPDAT/PGD + |5 ICSPCLK/PGC + |6 Aux N.C. + / + / + ------------ +``` + +### Download: +* Latest version +[16f-pwm-wave-player_jalv2_v8.8-2019-02.zip](https://bitbucket.org/dinau/16f-pwm-wav-sd-card-player/downloads/16f-pwm-wave-player_jalv2_v8.8-2019-02.zip) +If you need to recompile the source code, use this Jalv2 version : [jallib_full-1.2.0.zip](http://www.justanotherlanguage.org:3389/sites/default/files/ftp_server/builds/old_releases/jallib_full-1.2.0.zip) + +* Old version +[16f-pwm-wave-player_v8.6-2017-02.zip](https://bitbucket.org/dinau/16f-pwm-wav-sd-card-player/downloads/16f-pwm-wave-player_v8.6-2017-02.zip) +If you need to recompile the source code, use this Jalv2 version : [jallib_full-1.2.0.zip](http://www.justanotherlanguage.org:3389/sites/default/files/ftp_server/builds/old_releases/jallib_full-1.2.0.zip) + +### Write hex file to flash: +You can find hex files in hex folder, +for instance, +sd-wav-player-**16F1705**-v8.8-2019-02.hex +You can write this file to flash using PicKit2/3 Programmer. + +### Converting to fs=44.1kHz,PCM 8bit stereo or mono data: +For **8pin** PICs: The .wav files must be converted to 'Mono' data. +For other PICs:The .waf files must be converted to 'Stereo' data. + +Use converter tools, example, +[foobar2000](https://www.foobar2000.org/) +[Audacity](https://www.audacityteam.org/) +[SoX](http://sox.sourceforge.net/) +etc. + +### Supported SD card: +SDSC/SDHC card, +FAT16 and FAT32. +1. At first, format SD card with [SD Card Formatter](https://www.sdcard.org/downloads/formatter_4/index.html) +1. Copy PCM wav files to the SD card in root directory. + +### References: +* Wave Player Super Lite family + * [Nim: AVR Arduino Uno/Nano version is here. ](https://github.com/dinau/arduino-wave-player-pwm-super-lite-nim) + * [Nim: ARM STM32 version is here. ](https://github.com/dinau/stm32-wave-player-pwm-super-lite-nim) + * [C/C++: mbed version is here.](https://os.mbed.com/users/mimi3/code/wave_player_super_lite/) + diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..1287b72 --- /dev/null +++ b/README.txt @@ -0,0 +1,54 @@ +---------------------------------------------------------------- +For PIC16F enhanced midrange, wave player using pwm with SD card. + PCM Stereo/Mono,44.1KHz,8bit, + FAT16/FAT32 support. + +This project is licensed under BSD license. +---------------------------------------------------------------- + +* You can write HEX file to PIC respectively where the files attached in 'hex' directory. + +* If you would like to have HEX files to compile from source file, + use this compiler and libraries. + jallib-full-1.6.0 + http://justanotherlanguage.org/sites/default/files/ftp_server/builds/release/jallib_full-1.6.0.zip + +* Compilation from source code. + (1) Edit m.bat : Windows batch file. + Specify properly 'device' and 'compiler_root' variables in the file, + and execute 'm.bat' on Windows command line console. + or + (2) Edit Makefile, + The variables below must be properly edited as match your environment, + for example, + jal_root = d:/0pic-data/jalv2-data + jal_sys = $(jal_root)/jallib_full-1.6.0 + Specify PIC MCU: Delete '#' from top of the line,for example + device=16F1827 + and issue the make command on msys2 console or on Windows command line console. + +* Schematics + Provided only two schematics, + (1) For PIC12F1840 / PIC16F18313 refer to + doc/pic16f18313-sd-wave-player_schematic-2017.png + doc/pic16f18313-sd-wave-player_breadborad-2017.png + (2) For PIC18F1827 refer to + doc/PIC16F1827-wav-sd-player-schematic-2017.png + Other schematics are abbreviated, but please refer to 'pin_map.txt' for other PICs. + You could wire other wave players by referencing the diagrams in 'pin_map.txt'. + +* Other information + Web page: Local language only at this moment. + http://mpu.seesaa.net/article/445037481.html + + +History +------- +v9.1: 2021/11 by avrin: Just maintenance release so far. +v9.0: 2019/11 by avrin: + * Fixed compilation error of pic16f1455 due to undefinition for 'pin_A1_direction'. + * fat_lib.jal: Changed some variable names and reduced some SRAMs. +v8.9: 2019/10 by avrin: Modified PPS setting with jallib_full-1.4.0 or jallib_full-1.3.0. +v8.8: 2019/02 by arvrn: Simplified source code. +v8.6: 2017/02 by avrin: First release. + diff --git a/config_def.jal b/config_def.jal new file mode 100644 index 0000000..aaa0ff7 --- /dev/null +++ b/config_def.jal @@ -0,0 +1,280 @@ +-- Copyright (C) 2017, avrin, http://mpu.seesaa.net +-- This program is licensed under BSD license. +-- Please refer to "LICENSE.txt". + +--- definitions + +----------------------------------------------------------- +; PIC16F18313 +if target_chip == PIC_16F18313 then + pragma target clock 33_000_000 -- oscillator frequency + pragma target OSC OFF + pragma target RSTOSC HFINT32 -- HFINTOSC with 2x PLL (32MHz) + pragma target MCLR INTERNAL -- external reset + pragma target CLKOUTEN DISABLED -- no clock output + pragma target CSWEN DISABLED + pragma target WDT CONTROL -- watchdog + pragma target DEBUG DISABLED -- no debugging + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target LVP DISABLED -- no low voltage programming + pragma target LPBOREN DISABLED -- Low-power BOR enable bit + pragma target PPS1WAY DISABLED + pragma target STVR DISABLED + pragma target WRT DISABLED + pragma target CP DISABLED + pragma target CPD DISABLED + + OSCTUNE_HFTUN = 0x1F ; 6bit: clock up FOSC to 33MHz + alias wdtPeriod is WDTPS_bit + wdtPeriod = 0b00000 ; 1msec period +end if +; PIC16F18325 +if target_chip == PIC_16F18325 then + pragma target clock 33_000_000 -- oscillator frequency + pragma target OSC OFF + pragma target RSTOSC HFINT32 -- HFINTOSC with 2x PLL (32MHz) + pragma target MCLR INTERNAL -- external reset + pragma target CLKOUTEN DISABLED -- no clock output + pragma target CSWEN DISABLED + pragma target WDT CONTROL -- watchdog + pragma target DEBUG DISABLED -- no debugging + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target LVP DISABLED -- no low voltage programming + pragma target LPBOREN DISABLED -- Low-power BOR enable bit + pragma target PPS1WAY DISABLED + pragma target STVR DISABLED + pragma target WRT DISABLED + pragma target CP DISABLED + pragma target CPD DISABLED + + OSCTUNE_HFTUN = 0x1F ; 6bit: clock up FOSC to 33MHz + alias wdtPeriod is WDTPS_bit + wdtPeriod = 0b00000 ; 1msec period +end if + +; PIC12F1840 +if target_chip == PIC_12F1840 then + pragma target clock 33_000_000 -- oscillator frequency + pragma target OSC INTOSC_NOCLKOUT -- internal oscillator + pragma target MCLR INTERNAL -- external reset + pragma target PLLEN ENABLED -- PLL off + pragma target CLKOUTEN DISABLED -- no clock output + pragma target WDT CONTROL -- watchdog + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target IESO DISABLED -- no int/ext osc switching + pragma target LVP DISABLED -- no low voltage programming + OSCCON_IRCF = 0b1110 -- 8 MHz + OSCTUNE_TUN = 0x1F ; 6bit: clock up FOSC to 33MHz + alias wdtPeriod is WDTPS_bit + wdtPeriod = 0b00000 ; 1msec period +end if + +; PIC16F1454, PIC16F1455, PIC16F1459 +if target_chip == PIC_16F1454 | target_chip == PIC_16F1455 | target_chip == PIC_16F1459 then + pragma target clock 48_000_000 -- oscillator frequency + pragma target OSC INTOSC_NOCLKOUT + pragma target MCLR INTERNAL -- MCLR/VPP pin function is digital input + pragma target CPUDIV P1 -- no divide + pragma target PLLEN DISABLED -- PLL software controlled + pragma target PLLMULT N3X -- 3 x PLL is software controlled + pragma target USBLSCLK F48MHZ -- 48MHz USB clock + pragma target WDT CONTROL -- WDT controlled by the SWDTEN bit in the WDTCON register + pragma target CLKOUTEN DISABLED -- no clock output + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target IESO DISABLED -- no int/ext osc switching + pragma target LVP DISABLED -- no low voltage programming + -- + OSCCON_SCS = 0b00 -- clock selected by fuse OSC + ;OSCCON_IRCF = 0b1110 -- select 8 MHz + OSCCON_IRCF = 0b1111 -- select 16 MHz + OSCCON_SPLLMULT = TRUE -- select 3 x PLL + OSCCON_SPLLEN = TRUE -- enable PLL + -- + ;ACTCON_ACTEN = TRUE -- active clock tuning + -- + ;OSCTUNE_TUN = 0x3F ; 7bit: clock up FOSC to + alias wdtPeriod is WDTPS_bit + wdtPeriod = 0b00000 ; 1msec period +end if + +; PIC16F1619 +if target_chip == PIC_16F1619 then + pragma target clock 33_000_000 -- oscillator frequency + pragma target OSC INTOSC_NOCLKOUT + pragma target MCLR INTERNAL -- MCLR/VPP pin function is digital input + pragma target WDT CONTROL -- WDT controlled by the SWDTEN bit in the WDTCON register + pragma target PLLEN ENABLED -- PLL on + pragma target PPS1WAY DISABLED + pragma target CLKOUTEN DISABLED -- no clock output + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target IESO DISABLED -- no int/ext osc switching + pragma target LVP DISABLED -- no low voltage programming + OSCCON_IRCF = 0b1110 + OSCTUNE_TUN = 0x1F ; 6bit: clock up FOSC to 33MHz + alias wdtPeriod is WDTPS_bit + wdtPeriod = 0b00000 ; 1msec period +end if + +; PIC16F1705 +if target_chip == PIC_16F1705 then + pragma target clock 33_000_000 -- oscillator frequency + pragma target OSC INTOSC_NOCLKOUT + pragma target MCLR INTERNAL -- MCLR/VPP pin function is digital input + pragma target WDT CONTROL -- WDT controlled by the SWDTEN bit in the WDTCON register + pragma target PLLEN ENABLED -- PLL on + pragma target CLKOUTEN DISABLED -- no clock output + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target IESO DISABLED -- no int/ext osc switching + pragma target LVP DISABLED -- no low voltage programming + OSCCON_IRCF = 0b1110 + OSCTUNE_TUN = 0x1F ; 6bit: clock up FOSC to 33MHz + alias wdtPeriod is WDTPS_bit + wdtPeriod = 0b00000 ; 1msec period +end if + +; PIC16F1709 +if target_chip == PIC_16F1709 then + pragma target clock 33_000_000 -- oscillator frequency + pragma target OSC INTOSC_NOCLKOUT + pragma target MCLR INTERNAL -- MCLR/VPP pin function is digital input + pragma target WDT CONTROL -- WDT controlled by the SWDTEN bit in the WDTCON register + pragma target PLLEN ENABLED -- PLL on + pragma target CLKOUTEN DISABLED -- no clock output + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target IESO DISABLED -- no int/ext osc switching + pragma target LVP DISABLED -- no low voltage programming + OSCCON_IRCF = 0b1110 + OSCTUNE_TUN = 0x1F ; 6bit: clock up FOSC to 33MHz + alias wdtPeriod is WDTPS_bit + wdtPeriod = 0b00000 ; 1msec period +end if + +; PIC16F1764 +if target_chip == PIC_16F1764 then + pragma target clock 33_000_000 -- oscillator frequency + pragma target OSC INTOSC_NOCLKOUT + pragma target MCLR INTERNAL -- MCLR/VPP pin function is digital input + pragma target WDT CONTROL -- WDT controlled by the SWDTEN bit in the WDTCON register + pragma target PLLEN ENABLED -- PLL on + pragma target CLKOUTEN DISABLED -- no clock output + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target IESO DISABLED -- no int/ext osc switching + pragma target LVP DISABLED -- no low voltage programming + OSCCON_IRCF = 0b1110 + OSCTUNE_TUN = 0x1F ; 6bit: clock up FOSC to 33MHz + alias wdtPeriod is WDTPS_bit + wdtPeriod = 0b00000 ; 1msec period +end if + +; PIC16F1825 / PIC16F1827 / PIC16F1829 +if target_chip == PIC_16F1825 | target_chip == PIC_16F1827 | target_chip == PIC_16F1829 then + pragma target clock 33_000_000 -- oscillator frequency + pragma target OSC INTOSC_NOCLKOUT + pragma target MCLR INTERNAL -- MCLR/VPP pin function is digital input + pragma target WDT CONTROL -- WDT controlled by the SWDTEN bit in the WDTCON register + pragma target PLLEN ENABLED -- PLL on + pragma target CLKOUTEN DISABLED -- no clock output + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target IESO DISABLED -- no int/ext osc switching + pragma target LVP DISABLED -- no low voltage programming + OSCCON_IRCF = 0b1110 + OSCTUNE_TUN = 0x1F ; 6bit: clock up FOSC to 33MHz + alias wdtPeriod is WDTPS_bit + wdtPeriod = 0b00000 ; 1msec period +end if + +; PIC16F88 +if target_chip == PIC_16F88 then + pragma target clock 19_660_800 -- oscillator frequency + ;pragma target clock 20_000_000 -- oscillator frequency + pragma target OSC HS + pragma target CCP1MUX pin_B3 -- ccp1 pin on B3 + pragma target MCLR INTERNAL + pragma target WDT DISABLED -- watchdog + pragma target DEBUG DISABLED -- no debugging + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target IESO DISABLED -- no int/ext osc switching + pragma target LVP DISABLED -- no low voltage programming + OSCTUNE_TUN = 0x0 ; 6bit: clock up FOSC to MHz + alias wdtPeriod is WDTPS_bit + wdtPeriod = 0b00000 ; 1msec period +end if + +; PIC16F1938 +if target_chip == PIC_16F1938 then + pragma target clock 33_000_000 -- oscillator frequency + pragma target OSC INTOSC_NOCLKOUT -- + pragma target MCLR INTERNAL -- PORT + pragma target WDT CONTROL -- watchdog + pragma target PLLEN ENABLED -- PLL on + pragma target CLKOUTEN DISABLED -- no clock output + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target IESO DISABLED -- no int/ext osc switching + pragma target LVP DISABLED -- no low voltage programming + OSCCON_IRCF = 0b1110 + OSCTUNE_TUN = 0x0F ; 5bit,clock up FOSC to 33MHz + alias wdtPeriod is WDTPS_bit + wdtPeriod = 0b00000 ; 1 msec period +end if + +; PIC18F14K50 +if target_chip == PIC_18F14K50 | target_chip == PIC_18F13K50 then + pragma target clock 33_000_000 -- oscillator frequency + pragma target CPUDIV P1 -- CLOCK_DIVIDE + pragma target USBDIV P1 -- USB_CLOCK_COMES_DIRECTLY_FROM_THE_OSC1_OSC2_OSCILLATOR_BLOCK_NO_DIVIDE + pragma target OSC INTOSC_CLKOUT + pragma target PLLEN enabled -- OSCILLATOR_MULTIPLIED_BY_4 + pragma target WDT CONTROL -- WDT controlled by the SWDTEN bit in the WDTCON register + pragma target MCLR INTERNAL -- external reset + pragma target WDTPS P16 -- 64msec watch dog saler setting + pragma target PCLKEN DISABLED + + pragma target FCMEN DISABLED + pragma target IESO DISABLED + pragma target PWRTE DISABLED -- power up timer + pragma target BROWNOUT DISABLED -- no brownout detection + pragma target VOLTAGE V30 -- brown out voltage + pragma target LVP DISABLED -- no low-voltage programming + pragma target XINST DISABLED -- extended instruction set + pragma target DEBUG DISABLED -- background debugging + pragma target CP0 DISABLED -- code block 0 not protected + pragma target CP1 DISABLED -- code block 1 not protected + pragma target CPB DISABLED -- bootblock code not write protected + pragma target WRT0 DISABLED -- table writeblock 0 not protected + pragma target WRT1 DISABLED -- table write block 1 not protected + pragma target WRTB DISABLED -- bootblock not write protected + pragma target WRTC DISABLED -- config not write protected + pragma target EBTR0 DISABLED -- table read block 0 not protected + pragma target EBTR1 DISABLED -- table read block 1 not protected + pragma target EBTRB DISABLED -- boot block not protected + pragma target HFOFST ENABLED -- THE_SYSTEM_CLOCK_IS_HELD_OFF_UNTIL_THE_HFINTOSC_IS_STABLE + OSCCON_SCS = 0b00 ; + OSCCON_IRCF = 0b110; + OSCTUNE_TUN = 0x1F ; 6bit: clock up FOSC to 33MHz +end if + +; PIC18F26J50 +if target_chip == PIC_18F26J50 then + pragma target clock 48_000_000 -- oscillator frequency + pragma target OSC INTOSC_NOCLKOUT_PLL -- INT osc + PLL + pragma target PLLDIV P2 -- 8 MHz -> 4 MHz + pragma target CPUDIV P1 -- Fosc divisor + pragma target WDT CONTROL -- watchdog + pragma target XINST DISABLED -- do not use extended instructionset + pragma target DEBUG DISABLED -- no debugging + pragma target BROWNOUT DISABLED -- no brownout reset + pragma target FCMEN DISABLED -- no clock monitoring + pragma target IESO DISABLED -- no int/ext osc switching + OSCTUNE_PLLEN = TRUE -- PLL +end if diff --git a/debug/debug_info1.jal b/debug/debug_info1.jal new file mode 100644 index 0000000..05a5dbb --- /dev/null +++ b/debug/debug_info1.jal @@ -0,0 +1,42 @@ + +---- for debug ------- +if UART_INFO then + if true then + print_string(serial_hw_data,"\n\n Byte/Sector: ") + format_word_dec(serial_hw_data,lgwBPB_BytesPerSec,6,0) + + print_string(serial_hw_data,"\n Sec/Cluster:") + format_byte_dec(serial_hw_data,lgbBPB_SecPerClus,4,0) + + print_string(serial_hw_data,"\n Reserved Sector count: ") + format_word_dec(serial_hw_data,wBPB_RsvdSecCnt,6,0) + + print_string(serial_hw_data,"\n Num of FAT: ") + format_byte_dec(serial_hw_data,bBPB_NumFATs,4,0) + + print_string(serial_hw_data,"\n Sectors of root entries: ") + format_word_dec(serial_hw_data,gwBPB_RootEntCnt,6,0) + + if lgfFat32 then + print_string(serial_hw_data,"\n Sector/FAT(32):") + else + print_string(serial_hw_data,"\n Sector/FAT(16):") + end if + format_dword_dec(serial_hw_data,dwBPB_SecPerFats32,6,0) + + print_string(serial_hw_data,"\n Hidden sector[HEX]:") + format_dword_hex(serial_hw_data,dwBPB_HiddSec) + + print_string(serial_hw_data,"\n Top of root dir [sector][HEX]:") + format_dword_hex(serial_hw_data,gdwRootdir_sector) + + ;print_string(serial_hw_data,"\n Cluster size [sector][HEX]:") + ;format_byte_hex(serial_hw_data,bClustrsize) + + print_string(serial_hw_data,"\n Size of root [bytes][HEX]:") + format_word_hex(serial_hw_data,lgwSize_of_root) + end if +else + _ERROR "UART_INFO bit in main.jal must be true." +end if + diff --git a/debug/debug_info2.jal b/debug/debug_info2.jal new file mode 100644 index 0000000..91b6e48 --- /dev/null +++ b/debug/debug_info2.jal @@ -0,0 +1,24 @@ + + ---- for debug ------- + if UART_INFO then + if true then + print_string(serial_hw_data,"\n root dir sector size: ") + print_dword_hex(serial_hw_data,ldwRootdir_sector_size) + if false then + var dword dwFatStartSec = wBPB_RsvdSecCnt + dwBPB_HiddSec + if lgfFat32 then + print_string(serial_hw_data,"\n File cluster no.[FAT32]: ") + else + print_string(serial_hw_data,"\n File cluster no.[FAT16]: ") + end if + print_dword_hex(serial_hw_data,dwTargetClusterNumber) + sd_print_sector_hex(serial_hw_data,32,dwFatStartSec+(dwTargetClusterNumber>>8)) + end if + + print_string(serial_hw_data,"\n Song file sector: ") + sd_print_sector_hex(serial_hw_data,16,gdwTargetFileSector) + end if + else + _ERROR "UART_INFO bit in main.jal must be true." + end if + ---------------------- diff --git a/debug/debug_tool.jal b/debug/debug_tool.jal new file mode 100644 index 0000000..9b0930e --- /dev/null +++ b/debug/debug_tool.jal @@ -0,0 +1,22 @@ +function toAscii( byte in dat) return byte is + pragma inline + if dat >= 10 then + return (dat-10) | 0x40 + else + return dat | 0x30 + end if +end function + +procedure hexout(byte in dat ) is + pragma inline + var byte tmp + while !TXSTA_TRMT loop end loop + TXREG = 0x20 + while !TXSTA_TRMT loop end loop + TXREG = toAscii( dat>>4) + while !TXSTA_TRMT loop end loop + TXREG = toAscii(dat & 0x0F) +end procedure + + + diff --git a/debug/sdhc-card-info.txt b/debug/sdhc-card-info.txt new file mode 100644 index 0000000..48785e2 --- /dev/null +++ b/debug/sdhc-card-info.txt @@ -0,0 +1,12 @@ +SD ini OK + + Byte/Sector: 512 + Sec/Cluster: 64 + Reserved Sector count: 602 + Num of FAT: 2 + Sectors of root entries: 0 + Sector/FAT: 0 + Hidden sector[HEX]:00002000 + Top of root dir [sector][HEX]:0000225A + Cluster size [sector][HEX]:40 + Size of root [bytes][HEX]:0000 diff --git a/debug/sdhc-fat32-root-entry.txt b/debug/sdhc-fat32-root-entry.txt new file mode 100644 index 0000000..1f5daf4 --- /dev/null +++ b/debug/sdhc-fat32-root-entry.txt @@ -0,0 +1,73 @@ +Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F +000400000 42 20 00 49 00 6E 00 66 00 6F 00 0F 00 72 72 00 B I n f o rr +000400010 6D 00 61 00 74 00 69 00 6F 00 00 00 6E 00 00 00 m a t i o n +000400020 01 53 00 79 00 73 00 74 00 65 00 0F 00 72 6D 00 S y s t e rm +000400030 20 00 56 00 6F 00 6C 00 75 00 00 00 6D 00 65 00 V o l u m e + +000400040 53 59 53 54 45 4D 7E 31 20 20 20 16 00 B4 BB B2 SYSTEM~1 “»² +000400050 6F 49 6F 49 00 00 BC B2 6F 49 03 00 00 00 00 00 oIoI ¼²oI +-- +000400060 E5 72 00 79 00 2E 00 7A 00 69 00 0F 00 8B 70 00 år y . z i ‹p +000400070 00 00 FF FF FF FF FF FF FF FF 00 00 FF FF FF FF ’’’’’’’’ ’’’’ + +000400080 E5 65 00 72 00 2D 00 30 00 2E 00 0F 00 8B 39 00 åe r - 0 . E +000400090 2E 00 35 00 2D 00 62 00 69 00 00 00 6E 00 61 00 . 5 - b i n a + +0004000A0 E5 57 00 69 00 6E 00 33 00 32 00 0F 00 8B 44 00 åW i n 3 2 ‹D +0004000B0 69 00 73 00 6B 00 49 00 6D 00 00 00 61 00 67 00 i s k I m a g + +0004000C0 E5 49 4E 33 32 44 7E 31 5A 49 50 20 00 0A D0 B2 åIN32D~1ZIP Š² +0004000D0 6F 49 84 49 00 00 62 AE 6F 49 05 00 E4 00 17 01 oI„I b®oI E + +0004000E0 E5 50 41 54 48 20 20 20 20 20 20 20 00 00 00 00 åPATH +0004000F0 21 EC 84 49 00 00 00 00 21 EC 35 02 00 00 10 00 !EI !E +-- +000400100 42 34 00 34 00 6B 00 2E 00 77 00 0F 00 67 61 00 B4 4 k . w ga +000400110 76 00 00 00 FF FF FF FF FF FF 00 00 FF FF FF FF v ’’’’’’ ’’’’ +000400120 01 53 00 63 00 65 00 6E 00 65 00 0F 00 67 36 00 S c e n e g6 +000400130 20 00 73 00 38 00 62 00 69 00 00 00 74 00 20 00 s 8 b i t + +000400140 53 43 45 4E 45 36 7E 31 57 41 56 20 00 71 90 B2 SCENE6~1WAV q ² +000400150 7D 49 7D 49 00 00 30 10 78 49 55 02 1C 60 28 00 }I}I 0 xIU `( + ----- ----- + 255h + +000400160 42 34 00 34 00 6B 00 2E 00 77 00 0F 00 57 61 00 B4 4 k . w Wa +000400170 76 00 00 00 FF FF FF FF FF FF 00 00 FF FF FF FF v ’’’’’’ ’’’’ +000400180 01 53 00 63 00 65 00 6E 00 65 00 0F 00 57 34 00 S c e n e W4 +000400190 20 00 73 00 38 00 62 00 69 00 00 00 74 00 20 00 s 8 b i t + +0004001A0 53 43 45 4E 45 34 7E 31 57 41 56 20 00 3F 94 B2 SCENE4~1WAV ?”² +0004001B0 7D 49 7D 49 00 00 43 10 78 49 A6 02 AC 3E 32 00 }I}I C xI¦ ¬>2 + ----- ----- + 2A6h + +0004001C0 42 69 00 74 00 2E 00 77 00 61 00 0F 00 36 76 00 Bi t . w a 6v +0004001D0 00 00 FF FF FF FF FF FF FF FF 00 00 FF FF FF FF ’’’’’’’’ ’’’’ +0004001E0 01 4F 00 75 00 72 00 20 00 50 00 0F 00 36 6C 00 O u r P 6l +0004001F0 61 00 63 00 65 00 20 00 73 00 00 00 38 00 62 00 a c e s 8 b + +000400200 4F 55 52 50 4C 41 7E 31 57 41 56 20 00 74 98 B2 OURPLA~1WAV t˜² +000400210 7D 49 7D 49 00 00 25 26 6F 49 0B 03 58 00 DE 00 }I}I %&oI X Ž + ----- ----- + 30Bh + +000400220 42 74 00 20 00 34 00 34 00 6B 00 0F 00 E4 68 00 Bt 4 4 k äh +000400230 7A 00 2E 00 77 00 61 00 76 00 00 00 00 00 FF FF z . w a v ’’ +000400240 01 52 00 61 00 69 00 6E 00 62 00 0F 00 E4 6F 00 R a i n b äo +000400250 77 00 73 00 20 00 73 00 38 00 00 00 62 00 69 00 w s s 8 b i + +000400260 52 41 49 4E 42 4F 7E 31 57 41 56 20 00 98 9B B2 RAINBO~1WAV E² +000400270 7D 49 7D 49 00 00 0F 26 6F 49 C8 04 5C 64 F0 00 }I}I &oIČ \dE + ----- ----- + 4C8h + +000400280 42 20 00 34 00 34 00 6B 00 68 00 0F 00 13 7A 00 B 4 4 k h z +000400290 2E 00 77 00 61 00 76 00 00 00 00 00 FF FF FF FF . w a v ’’’’ +0004002A0 01 41 00 20 00 57 00 68 00 69 00 0F 00 13 74 00 A W h i t +0004002B0 65 00 20 00 44 00 72 00 65 00 00 00 61 00 6D 00 e D r e a m + +0004002C0 41 57 48 49 54 45 7E 31 57 41 56 20 00 19 A1 B2 AWHITE~1WAV ”² +0004002D0 7D 49 7D 49 00 00 08 24 6F 49 A9 06 A6 4C 27 01 }I}I $oI© ¦L' + ----- ----- + 6A9h diff --git a/debug/sdsc-fat16-card-root-entry.txt b/debug/sdsc-fat16-card-root-entry.txt new file mode 100644 index 0000000..90e4529 --- /dev/null +++ b/debug/sdsc-fat16-card-root-entry.txt @@ -0,0 +1,71 @@ +Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + + 0 42 20 00 49 00 6E 00 66 00 6F 00 0F 00 72 72 00 B I n f o rr + 16 6D 00 61 00 74 00 69 00 6F 00 00 00 6E 00 00 00 m a t i o n + 32 01 53 00 79 00 73 00 74 00 65 00 0F 00 72 6D 00 S y s t e rm + 48 20 00 56 00 6F 00 6C 00 75 00 00 00 6D 00 65 00 V o l u m e + 64 53 59 53 54 45 4D 7E 31 20 20 20 16 00 2D 7B 04 SYSTEM~1 -{ + 80 6F 49 6F 49 00 00 7C 04 6F 49 02 00 00 00 00 00 oIoI | oI + 96 E5 2D 00 73 00 32 00 32 00 62 00 0F 00 4F 38 00 E s 2 2 b O8 + 112 2E 00 77 00 61 00 76 00 00 00 00 00 FF FF FF FF . w a v ’’’’ + 128 E5 41 00 2D 00 57 00 68 00 69 00 0F 00 4F 74 00 åA - W h i Ot + 144 65 00 2D 00 44 00 72 00 65 00 00 00 61 00 6D 00 e - D r e a m + 160 E5 2D 57 48 49 54 7E 31 57 41 56 20 00 34 8C 04 EWHIT~1WAV 4E + 176 6F 49 6F 49 00 00 89 03 6F 49 04 00 A0 A4 93 00 oIoI EoI  ¤E + 192 E5 61 00 76 00 65 00 6E 00 2E 00 0F 00 C5 77 00 åa v e n . Åw + 208 61 00 76 00 00 00 FF FF FF FF 00 00 FF FF FF FF a v ’’’’ ’’’’ + 224 E5 6F 00 6F 00 20 00 6D 00 75 00 0F 00 C5 63 00 åo o m u Åc + 240 68 00 20 00 6F 00 66 00 20 00 00 00 68 00 65 00 h o f h e + 256 E5 65 00 69 00 66 00 66 00 65 00 0F 00 C5 6C 00 åe i f f e Ål + 272 20 00 36 00 35 00 20 00 2D 00 00 00 20 00 74 00 6 5 - t + 288 E5 49 46 46 45 4C 7E 31 57 41 56 20 00 C0 91 04 åIFFEL~1WAV ĄE + 304 6F 49 6F 49 00 00 F1 0E 05 3F 2C 01 C2 BC D6 00 oIoI E ?, Ā¼Ö + 320 E5 20 00 34 00 34 00 6B 00 68 00 0F 00 13 7A 00 E 4 4 k h z + 336 2E 00 77 00 61 00 76 00 00 00 00 00 FF FF FF FF . w a v ’’’’ + 352 E5 41 00 20 00 57 00 68 00 69 00 0F 00 13 74 00 åA W h i t + 368 65 00 20 00 44 00 72 00 65 00 00 00 61 00 6D 00 e D r e a m + 384 E5 57 48 49 54 45 7E 31 57 41 56 20 00 45 1D 24 åWHITE~1WAV E $ + 400 6F 49 6F 49 00 00 08 24 6F 49 04 00 A6 4C 27 01 oIoI $oI ¦L' + 416 E5 52 00 61 00 69 00 6E 00 62 00 0F 00 F6 6F 00 åR a i n b öo + 432 77 00 73 00 2E 00 77 00 61 00 00 00 76 00 00 00 w s . w a v + 448 E5 41 49 4E 42 4F 57 53 57 41 56 20 00 73 45 24 åAINBOWSWAV sE$ + 464 6F 49 6F 49 00 00 92 5D CD 48 53 02 58 70 E0 01 oIoI ’]ĶHS XpE + 480 E5 4F 00 75 00 72 00 50 00 6C 00 0F 00 05 61 00 åO u r P l a + 496 63 00 65 00 2E 00 77 00 61 00 00 00 76 00 00 00 c e . w a v + +Offset 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + + 0 E5 55 52 50 4C 41 43 45 57 41 56 20 00 14 48 24 åURPLACEWAV H$ + 16 6F 49 6F 49 00 00 7C 9E 9A 48 14 06 7E B9 BB 01 oIoI |žšH ~¹» + 32 E5 74 00 20 00 34 00 34 00 6B 00 0F 00 E4 68 00 åt 4 4 k äh + 48 7A 00 2E 00 77 00 61 00 76 00 00 00 00 00 FF FF z . w a v ’’ + 64 E5 52 00 61 00 69 00 6E 00 62 00 0F 00 E4 6F 00 åR a i n b äo + 80 77 00 73 00 20 00 73 00 38 00 00 00 62 00 69 00 w s s 8 b i + 96 E5 41 49 4E 42 4F 7E 31 57 41 56 20 00 50 F7 24 åAINBO~1WAV PE + 112 6F 49 6F 49 00 00 EA 24 6F 49 53 02 5C 64 F0 00 oIoI EoIS \dE + 128 E5 69 00 74 00 2E 00 77 00 61 00 0F 00 36 76 00 åi t . w a 6v + 144 00 00 FF FF FF FF FF FF FF FF 00 00 FF FF FF FF ’’’’’’’’ ’’’’ + 160 E5 4F 00 75 00 72 00 20 00 50 00 0F 00 36 6C 00 åO u r P 6l + 176 61 00 63 00 65 00 20 00 73 00 00 00 38 00 62 00 a c e s 8 b + 192 E5 55 52 50 4C 41 7E 31 57 41 56 20 00 6B F8 24 åURPLA~1WAV kE + 208 6F 49 6F 49 00 00 B9 24 6F 49 34 04 58 00 DE 00 oIoI ¹$oI4 X Ž + + 224 42 74 00 20 00 34 00 34 00 6B 00 0F 00 E4 68 00 Bt 4 4 k äh + 240 7A 00 2E 00 77 00 61 00 76 00 00 00 00 00 FF FF z . w a v ’’ + 256 01 52 00 61 00 69 00 6E 00 62 00 0F 00 E4 6F 00 R a i n b äo + 272 77 00 73 00 20 00 73 00 38 00 00 00 62 00 69 00 w s s 8 b i + 288 52 41 49 4E 42 4F 7E 31 57 41 56 20 00 12 3A 26 RAINBO~1WAV :& + 304 6F 49 6F 49 00 00 0F 26 6F 49 04 00 5C 64 F0 00 oIoI &oI \dE + + 320 42 69 00 74 00 2E 00 77 00 61 00 0F 00 36 76 00 Bi t . w a 6v + 336 00 00 FF FF FF FF FF FF FF FF 00 00 FF FF FF FF ’’’’’’’’ ’’’’ + 352 01 4F 00 75 00 72 00 20 00 50 00 0F 00 36 6C 00 O u r P 6l + 368 61 00 63 00 65 00 20 00 73 00 00 00 38 00 62 00 a c e s 8 b + 384 4F 55 52 50 4C 41 7E 31 57 41 56 20 00 3E 3B 26 OURPLA~1WAV >;& + 400 6F 49 6F 49 00 00 25 26 6F 49 E5 01 58 00 DE 00 oIoI %&oIEX Ž + 416 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 432 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 448 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 464 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 480 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 + 496 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 diff --git a/doc/pic16f1827-wav-sd-player-schematic-2017.png b/doc/pic16f1827-wav-sd-player-schematic-2017.png new file mode 100644 index 0000000000000000000000000000000000000000..fc51675c0cbe35eb90932663575981af6ac28e30 GIT binary patch literal 18124 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ş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

@o5;*>OJ3ORc3cZgc-d8zr-6-Zb&m4>eqF<%^ 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 literal 0 HcmV?d00001 diff --git a/doc/pic16f18313-sd-wave-player_schematic-2017.png b/doc/pic16f18313-sd-wave-player_schematic-2017.png new file mode 100644 index 0000000000000000000000000000000000000000..ae727d4044b34d67d33ac15e6ced294034ef5bad GIT binary patch literal 35340 zcmbTd1yEc;^DnwU2o_vJ2(F6<3-0dA;!Z+vclQw7Avi3H>|(*)ArM>w1cDPZxGsLl z_tpR2s#o=Hy?V8^d+K!0{HD*$oS9#D&qise$zx-ZV*&sGY()hb5CDJz1^|%b(4PeW zWEGF;=gSK#NmWSzpe6z9-W>J$p8A6VNEHC^Wds0%!vTQXXHoDj0N}v|0PLFq0772@ z08;0iR!xy-1+s;*ybRzeGGVmq`3}QbLEjAkz#{zjMFM2ykUdugD9T8Jy%!I2QH_X3 zsJeC6-nZgwfQbeq298MD&JT99aNC6Qb0@kgf5k0VP8{hRkYLFoCB?U`27THb-hAJz zr?!1}^G&$z->1pc^OL7%Bro5a^nAw zP(>|qfAK8wB!h+~sgOo^!!hzesgt5s{mgU-e{U+0XZnFA1LPUG6utWTj7y0A&&_;d z;TAxjETM=J$uu) zI$zwmUx>m;H7>N6ZwnLMZ2Y9FAiG{chv+`Bkgi7xf-`*iAo5zem$K^Zl(kHUQbUq^ zKN1P;FYN3um{v6})M;q)SDqUU3Wcmj}~(_CA8-F0%lm{++l z_0qhsqw$*=kDy4-Ll=yKm`Y4lGabEZNq~sQNlb}<4)>Rv3KIDQVKTNXqQVtq5XEz) z@lYR%dqMQD6Q5|seA{sCZwku#fdTShXK8I!r}wSb{JFPGpqW9%BO^*67j>%;CexSl zNT3?G54>HC9EV)0%RrU|WFT6lvJg8zS;*iUncP)Q5|5}Hj{T(fAo`az)*mf!r!I!7 zAOq&PvTrD3Wc;dQWJ=YeWCX6h$f(c72t~3Jc*Nx}-m=<+Gb=30^8yPat-mL5Kp2jN zWBA1gqOObyqsDXaq8yJ%JbYVqe%@?8$ru-vKz93N1ByFji!?7XSKGd%cmAbcBmxo~ zcF__%L_$^1(+l~j z(6@F-|J=K=B?<^B`#Yfs$zze0d0^;}`LNj<^C{>rt-)h!iuDLe((W2V((aOG(yrQ< zvY8k&%^l8j*<}mH=ts5JY~)|(lzGJ(v#pQjIUs4ww~c8Db{z!NxMU+NxK{7NxLijnx(p|vc{d` z#2ztkIrr1}HF(Kn^T}pZd7qT6G*4pGAc?}XQ&Z=(Q^nG>Q(=`5wQAijt^V0``;-D| zKb7A}@X{BTT2D_nLQwOCV|2ui=@(rL>G!$gkCl~p1SR2$GYB;#$?8#B(CK)@h<|Bt zfo@garZDQiu^090@xny+-I~?v)GEl#p(g(E_+XxRK=p(Nd*u28zIVIhSY@H!O}i7g zQ49Ix8VdG0I?qK8HSzI|IVQ4ZWKxi=4GJQozZ(>nfs4PQC4LeK82=C8z=!_=&JM8t zx5eC@|F)QPuuApv$Kxq((mrmO!hra(_{l%O8$|qn0X^=C{?p=9{8=vY*q;|Lg{x!S zu#Zm&tKnCjS`w42Zj8?r{wZiX|6|I{Y21HnHtb0FDkp1Y*6`9iG!%(NMg~Ep$!Uw# zEnbk*EB>tF^r3o;ia)2hue*Aa3LixfP(Ct9oiamKOTPV1`1l=m+}F3)UFs|&(!rc% zEG&}KAw{JgZ)Fv52l>>rzA4T^FMR)j4X2o)P7yK0z>yw9NRl@shmEV==e9xE(jdOB zFpb{+XGGW6P{kq_~dDQE?&_3b1Gi9=b9BS=WOQ7OomWo-TM=Npov709Ppfo^W zl*B4!hNnxw(D=2fk4VvL5$V{_qD4BC;s}_q_mngzZy(buw7;59Q@`&t5+Nc-Wk)*X z3hbM`+9x`$4U(?&=im7&T;-X{2t7r6qw&lrHlEDl^J!JVG*a^ z1UxBgGSI}HN%s_jzfD6ncQ>wiOZ|~vq-F@pj!oN!&6oKO^Lz)zi#ZZ)VN6CW;-2(p zLD-n#EOkyF*+d}B$_YlP4MeS49AaW(4U+?6pCRLGgl4i^u2ND(Yox=UTeMo%uztT& zwQRCuskY`YNR{H!X|N`fX)J#e5t=IcNNfNRyg|KanI3JA%6y`URa8p^@^f@BsFsB} z-_o}ix6c^g2x`ByRHrDT)K3A(CKav1^Hn912!n=I$o&YYwT7-rnF znI?@1@7nIBlCvP~DY%}g?c{9?9^_{9=`WOt9n|;~QY)C<2v<@I$Y7vcn3M`*70@G} zQv9-z`BqIkbvPTDhdDaklgBdtD86Yju8O*C54s4xaSvjD?b7w`Nt!GrhkCZeVUImi zHBRM68mkS~EQV#af6k#&B=W0Ww3CWfwo*A|RME0evEbDQBNRdy8B)mspDxu(WsfnW!CBI+>9*AzN4+U0d{M0d1ADx-;y?hBx!h=K5YI zvAk3$e9b{xL;OPH3*^oB`BJrla^{0q@fMFzhPNL1_B+Nbb()&)U(#(kw6z+`1m1e^ z=M)XT1u#OA*80eO-!+|aPl9rbHA1kJ8}fiX<3aBc_Gm3&e3GBWse6CheOOzqt8qI_ zGSZc3q0Fhq?s5ahL8MhOpXhzeuOo z)4P|}EQ--8BkFRwO6&W?Ed2g!R_cLD$2LR+`r@Wzl)27Z4jztScNAB^CXpQJ>rH;c z2svBQH~;*HMNU6&8{U~nq&#kr5Y@!{6j2;14DM+XPqf&g(kW5;;Yqm@>_LH40Tyoe!C3I_)fbk}Oo4022nd?%AR%-AeAX4i7Da?EwTx24i`Mh_f zC1)K$fMCJsvr-BTN2vINn^V|da3LL-K|l8Qh3uLuCK)U+9qJ_9tirv`=`Q|8%BMg| z$m3PC7N$p-Us;I*bH*lOC9F6(1Jv9)-3PyTZ^iIcz6uF%Z+b(HTWkxZrC!;QMwYA z2?rf&vt?6T7;5TNfQ@1JOG^T&;)K>R$Jom~jG9jnMVjJ9h=sGvi`=+=P{g#h4_gj6 z$#P1vfLpf&Sq+})zQ7W^NIs_HoXvo?wx1f48re(PsBxr}FkuL4qwC$Xve1L?ML#h$ zAFL|zj;aTwroldfvsZ^HA%N9^y z^)1v(P>(#2lujEOoGd!+ub|Ik8T7`M&%gA{1+)c$%)lOsdO(Wo%tq0;#W4~UV9g4x zE@i&>&T5~caQ6I8&&scG&(|fI5dd2d?F~-ndyrq+l|ly0`WtwMr4Dx})6U&9I0?=H z43WxWxZL-GAv1$1mAHxsESxqKO>L2epuUe0Vl*VL9}A!=1L9aD#cj-?knh!{Wibdj z^Cs79rtv!wNZIWfnJcVBBfV)#TPtv$;`Zi`JLZ%4QLIijWwWX_oQ0^NC(l)7^9cMi zn6*o>p`qvG?a12`biWW1@5^W^Bg{!FwT@ZIaLB2D@*qHS9{UPi>E zqPMDCeucmVipo%G50wo!f*7Njl~Em2wV!HkVA>~plQf35tLx}Sr@x$}k%npY8E4z1 z(U|{A%R>s^q}lz+T1w@+fbJhHXyMKuh>O=Jor$=!amZ5V_@n3IrA3qRv1Rv7L_paE zC4s8HK!)O)?|II`SR^-*TT(1o*3&B1az4spXl>8bI7gunH%@jv9XHEFVBYLjIfKmW z23gMgN!(?PF!l)xAgHp-l#-PZD2Sl<%2d8uEt4HdD-F55^B7OXq?O$s6X>auIZEtO zbrUm{!e<+c@2&Kgwut82>xDhgi))cP#*shbrTk3Aw4XboSNSv&AW5Vfrx%IyjiF>2 z?8Muj&{Sr7Rv)fWg+IJgf$fowy;W?1lsAVksYBqz*SEeBZ!L2J3rWc$J zdEiROoFSm+SFtAgla`A|$i$>jysn0-#mXf8m-77u$2b36sb!ZVOPfq&r@(Uy;uMc^qcqx>$>=*JUS@6Ex7~j`sWNlZu35b(l5-~0 zMowEeuVIMnFpHC2YuRHC0l<;hp)W2K$=hKEJ3euflm z+48hs6IE2A!B@9t>-TnlSZ?-JNd1UfcvI~dnj<Dk$h%m{?y58n#wFwbbZljYVc z$^v!U6G+}tje!X&kABstM8xNg7Y_B^1Aq48Qg{;E{VYS^5PhAmDGHj6H+Gb^&$l=n z;a6;Oh@o&T-Jl9j#N~JV=nLp)V#H4>vq!lGp)iS+`zEU~YxGzf6-;+pc5%7y%KXqc%u7S5wP zr}rf;k?58E$?cya_Y33c%AQD#i<)pN1$v_r&DK_FB=8zhM*KA-m!_XsdTb6!!;w(T`uEC<9o$9eP=WZu$4r zgl=p8c=YT9R$_Es1$dkU5Ix+KudQ7(-_9HMln0qWi=0%1$=Z!u>AdqlYMq?YGv0a- zJ@m*k`s!IbpEPBwT=b_f-y#X!KJqf&-hAcj5ugnXqw+_0Op8!Qee;hz7h77KcJyr& zWc(fo=z0-zH+auVnIj@AVjyHBLg$j`tqB%CZN-(`FrMh&*lg{ z1wgzjK7REkiSE3R7e9ST6fi+pgP@NNycDlNtRuNhX0vZ}uIhY2>mMh^Rn4WQ%-~lM z5e^LYUbqh2P(2Ro_oIp#D6NVam{*G#D7+hxbP|ZUlVc;r{gO>bnZ<7+BIZ!$t+oU> zJ^K>4F?JlTznVV+#G5e1X(KM%yltG-{=pdCH4HS;L5Lh3vRViXp z9*Nyq+`Wwn$$vMJ$;)B=uJlJI9*p;F$l_0jpW#bJB%)<6uefruv0KN5ow=|?$yLoV z?*WuSS)Z0>7t|zCOUzt!Q9*3fMqUijsb7CFvcyx53M$c$#6H#bg}U`r4W?eZz+IV< zuhrZ}k*a$t4-3@wH~QRfL9Ar(6AWM|N(oph z_Up+`8Z))oA*4-{vmFt_zraOBuUo*FYm#5J!_QlkS^5f3822-0{ zPM)9Zy$IbOl=nK}O4vFp^F5(^l>5*^`?b7;P)|+OTrAN-X$82)g*XPSw%l`vf{L+7 zdqF+HCV)e`IyY!bHBheOfEeS%XvpJ1PMMe`Ry)LRDEGx;@ydmb$ z1_p943AoJ}l~pfqM<#+Qd30H+lYagPQe|U!qIF6WQ)+AdxnehT!i<WSHW&+AG7<=FZ3w0si4tp+DvaW_}yn2o3TQUY9dKQvusKG~o7%&s%@gg(w|ji91* z()$IO;-UCL^}A$-lrm89gA{anNHj+9ARr=r-$*Rjxkqn1wEei?Yf?0)KOiAG!+T6+ z1|)fU2?%?xjxYf&)0 z6Z5^Zj$TxXZNZ?SkaH8giPh-)`eWG`66|`vf_g0GPs`;olaMj$c};66`v+azzmLpo ze?-dSwn*>A3xiv?|sQWYskd=e$DPJ7t(U#I0-2Bea?>- z*+x7fr$`>3Sg^;WF+8t>sds~<)i4*_hE-TykivG-kdN0qbWk z6L2s^L}Sd`ZpS0yDo-dDaxp1CtV~oFBs&lP zjg;}A?D>ekx_h4=4Ys>K`8JL&qEi0-f_BLA3ADT_L6rNHqKpbE752WU+n}CR!Z3j6 zU%mA@(A7`euiZFVH}_CiE|k9Ri){M+Hl3K*5){GCF0Gr+oDKuQ$HAgG>1Y5Fnt-Ds zt&0`n2^VY><^U?oybPpQ-y_p-dpKgOdQJ261>rM1i$fqq0f zWvf|fK%}RXbY;GVw$?E>(Ac-r>+7b0ByFgW(skBy{`eC+yl2VsJ&eSlFzw)EUWyoM z0VfaAp+FeQQn3>+!8B(Z*~!IM#)2Io;?cZzb8OU3ZS?3Bs}=gvl6AjpJw93jZTyVx zVDz(zp9p4+nUyZNar07kij3eaS`sz3+Y{jmY1~o0xUpcCyrn^WdNt;Gtx6u8Y0{%z z&uCWn%04B&w_awP8T((CaUD@no0Thm|C*ef{PA}ET9|kR6HFQXvf9XmTlqcA7gw5f z%o;-pRQzjIR!#eMnMDWKPJ;zbH257K;^*2Jm6G@4v8Hnf8v2#CIoebb{uZ?;@OK0R z>{OWoNUm5NE+*iU)l7$)qTR?#JimAg4)_@PO6vz1Pn8JPff&fh#oX;lxD%hKhTz{U z=}52qK}11>fLopEwVIx@I89(CfS9_`O9B1ZDW)x3%Uexb^lANToh%MbP3YF0S#fWR zxY=1yEI2tloZpaeQajUZRqSjY-Dou9=UT<5|E*@&8Dt9A9pa2AiI~jI^sP;7%5GYon$nD%oHa# zJOQ`wVR=}ezQ1j_rCRMOH-Fv=|F}wH6&5(sWBQ<@RxP`fp5Xq*3@6cESuak=MrVI> zB=Zy#b8NQB6z5t`^v5Jh>WPOGbAPJgN8Mf{+NH}3?Vg#_IkG4{!YAFI%Byv{$Vzoj zGyATLOx~_hf|-{T-FWitmKqCIOeiAhblTR)@vqGr--|{u(S3K6HQ|SQ`ywcD6 z7;?TDcm<+*g#k?t)T;`UvcZ*gfR(k)8_mI92u^1Ir3}0{VC2c_9)$Uh3m%8!oJ`I4Ha9t*G#L&&O(K z`8lEKRR`Kk=(8Sn?6LY;r#)r26FYSM|3*IkKhTsP8t}h9c;jh%Cr{45Jl$y@MDq*$ z{7Z8shSEPWr~R23OfXy`3n35>ynjzmO|E2w@})6hUHI^YRHIB77^|r^B)e+g1>6q})yNV*f&W=rf^892$ zpF(EU5=qb>9H}y^>3DE^pE}+rA z7iEJ(@(I7xmyh8zrnHo}&Moe_53e1wB!)6Setqz3qsFH9C3-p6Ft_QRa@!42x@NIrh4SFN2d8}ow(0>uDIG? zY1O!4w07hiJnuJt01nVFv=QVn;SqTZB|t9;Ne78~ zT$IUl{!yT|4)X*l{*7bNw0XN~!+@uPdRne6I$!;@x5WkT6ZcR7KlfkJ6)RW%_qKC&$NdavhWF?dtX#T6E(cbSS zk^_1-hadkTKwqG8pn9BsrlsMr|L;>l&JGrRnhQeik(tzikBs}5rb=+(D_kY~KQi&} z*r;TzPheS<9~|xr`+0nB)Np&y@nEl%%fy4}y+-`zvqVu5+lkr77kIINq~UL7F#a~K z)~?&T)(v0o%p` zz6Pyr-Cl9O74?SY11MCQMEk z4@YDsNycE>cpM+)I+*rgR^#)upRWndvz`W6-%6vw9C!2^>sxO86u9LH`|R61u8k6q zbKQyy);+Ij>H>@>AA%xSTT!=q=GkTR-^xgz%Z{Y4v(~?TIA40_B=CC>8&xU*I_hp_ zEE&FG5}K7zzUfSCW=9%)>X9+VaR~K5j!ehFgwq{_NF90=hSaw>3;;$Hy?^+P5UZqq zpTiELgw&L|YG`N#-J7l@4M_Sbs{SsytXu>v$zz2+x>AJfHzOl1VVyRKnN3-YAPOi#@P=ItOs>5XbS04HCpujI9}^ zk{~ovH#Ti@a)pXX20h1D&LGLv&(>y1v0)gM#(Vjt`YiQXsI4MauL_I4Xr$T(u^d_6 zs{}U^lfg({$s0BV!W@uE%?LRRJ1mO#v#6F0P3+|g=S@(rXSk(|@_01m$3D#a?1I(^ zD5)ABUYvCAQ;PD`d{+=@wcWW&|9yo$|NHwRtQK{@IBP2Ub^f7mB{Sg$RH;s*t+#pn z>_isd)pKW@B&?_VTSFEr&L*_^snG ztqS>vy|fo!ek+7;n0y0Yi~Io<>#=M-nTX#<$wx(r=RM9jJaaFib5^B9-MaQPU^!uJJ(uS-6t>31KAXDj$DiS;t@l-9YI^L5is-BMg3tud z?2Bm-!vd8#v{fTI`{{z63nY3?W?cE5+Ma=F_CdW{AJ2$UP7I=O@wXTc>+~ z8XP=`d_Il1U+|Xh0H=L+rm=*9Km=~Z&@xyUCfP&;eE|Ha_X92Q7;$7{C5i^)mvnfm zJwI!jySIL-_6nFHQXkfR^|n=O*@sMxvot6V_2|d9!FME&4*pM_^QXKgqFBzY=-okt zHdS1pVvN8k5H|BtqvWO&rXu<<6_PM2bCAH~eb*}C`?kA>J0@jffE?VMkC=oT#Eyp; zHPjo$TK>G4YCUVqQuieZGjuffkga60CoBe~a%F}_4ftaTb~Nk#xP_4H0Am@t&@jOA z^s=(GwzqqAyDGWTMjl<%@L^=T2UJ|3+!Wm_E|6lRd8t_?Zr&QSHgLl7={-ztja+Z1 zX|hUVZ#tBKvv7kkm`{7s!BS`pTMqu)=g)#TgUB^R68plb_5%+e#=)UUYrU?Y(P2n2 zxq-1cKHaR!?-!~53HoKt^8rtf@}snJ@V}v=fEf0ciciZDzVsuHNd7gg)(5LV;Q|wQ z46?h0*anr!$iXW9I%)7XaEq1<@TDv)P!Cdmf%dSE#-8SGE!cW?D~lxZvG~@8PBRVe z{b@loc8p;_c zJq^n>G~sg=h0hWf!&{$}b!4Ps?$0wgO;bYOIhsyMWn_+I zI3fM|i}Re@Volc^(Ut4NIxnd+j^_H^qkG^cIeRvT5$%Uz%iRgp)e{2UthYs2XX${7 z4S?V`??9E+VUg@4@FZJLL!tJ#T*0O|wkQf&PO`rO!)nlZ$c9|pHYecd;#jNgiR+$A zol)CYb(T}xF3dF|B;fY?Se$@VJqparebD8?Vk~VEhU%q%*c{;7dBQ)^Pd{4tK8yBnZ9G?3 zYJ8WcHED3A>ZgMr%YP6xQbKm{hFAu!GMVSsM6caa0i^=%j6zL&1MhUkdU0#-R|2+= zt{sx4zv7Z^R~(BrjpU;~yaA^exxO%!^$qhLd>NB5ZWFiad zZp*bba*dU~kgx$J>r7FzHhpZ zv}!XEcn^Jfmiyvg@olVe7FQV?pu`x~cHuVomUsJ3!s8iS-L)2stV*R0FD-fafrG84 zN$F2j#(@XBP*h8g9yVkPU^5Ofr75f|mG>pWT>n3HWPf|9=AU)ks5Nu{NClhkY?;%h zkrNgB*4bK;t?o^UFU~z~S-+!8gMJjed6A@qjR_j#=G30H5M0HW7M20B4~2t&I8d|= zmwo};Y9tPSc-JkH!r@r{?9iZQCfddxM<1QB{6mBSe#Xv4nWclHXZo+_UQ6tou9fkjVB-?nmueF}=JOupmm-j$mnUwFuf zipwJZ5pN10c-z%)z-u7(ZP~EdX2nK3-}6G3U%Plw9y(1ui?4bba3iK+{M-%VrlSs* zv^m)uP$9iH59gk*B9F2Gzy{Q>q9jo|pucfh)VVrH2h}Je`X7XV{u*+UaK=1c&gS|* z!j-;E&b!SQ0mQh{u@?2C9)+i7on?c4tD^Ek021X10i_16uH8PNF)m_i0#L7ib6h00MQu=j4V^gU*5g*apPVH$_w_+x7K z+XYd~UBQV#edIPEZqB|@j(%balw9JPE@@H5Y(}xuyRLhD+!3ctiLZaL7E{-Tj$K^I z{D(z*?>nwqFvA{4l1>x<21kPwhqfN4NX}f*0OnHD?>U^ej1PZ=U0!}dJxY-Gg-D9y z3vK+I9eX104Q%B?Q}oc25a&e9@7-dIgw+m2z8UE6Ut?5M0!0|u`|S&*=8`#{SNB2= z9TtdVfoUiYzPdH`^Q(L|CD6|~bhC^jk_aByq&b;Hbr+I}j5I+jHI5s0T`JVT2*u18 zK!{UI%-*wET7&n5PA${_of{6mp(p}WwKNGl+xZ+f_=i!4YiI*IJCN-pda>JzT~&C$ z7Ls*+w9c`VS_~(BaUweu?$rMZQf%vkt|kEZHGQ%o+R7KLS$t;0gH>e# z*D7k*R{s=>Vsq|yF@92$Wljx(^+1c2%w2AJU;dPRKHx$IQ(ArbKGJ@_mbgj>N$&^` z&zWpOH+kO)Y#sePg~?zB6yaJS0G?cA7y*+(Ji z_<&@8pMkAPN^)*K*XL!0%MxZWHu{>`Ge_C@IZ_5{p^M=68-arIAId|_;Pj$37gU0$zk2*E921P$&|3fkaqLxp)DKXC0Vn!ITt{rIE*wHwqbPNs~ z2D^p~HhbO-PrwWe7H|7e-WRc%tzuH%u&SWwabA!hkPh~H<+vNc37u1*fLf)O3Jrd= z8E`cIAY&xD5;>gb<(iQrZ4~aFo2*Fea(?zBo6~uB6x&zs7fe1M3Dj9TqHO>+DrKcx zSw{2rJ0Fe6ZcabEgq5xX6!DE-(J4oCgA}o}zeH6gtJ7ux!6)K-d~GcM(~ZW!Irv5H zt#lTPHX<~V>9#=9o5Ah;EMKFbM=O}+ucn#tk&%uC9itr5zh^W7E&{RD9%w);NhP;) z*}U4lTA+VJ8vskxM&o;5+yKtVZHOIm8A>^(n|O%_`+0(MVxtGY%!TVQdihoQ zGwLD;X+W@b^+ZhGPP1FIPfxY@GC;n2e2`7Jf~CSU95u-0j~OP_Xy&Ee)FNzpHwfjgD@Dxkk z@Bq{oAt&QZ0MSM5*H@3%)-u4c`_cSrb7CY%t^3|a_o8?F)ks3~lzi|)h5&Pg5nB#h z0@%+2NuZ79yki(#xC5zd(N)6|X(sh|>-{7^c$;sp3a7n9q}cmZQ<@2oL%Jl9(Ze5% zS;VA$dV6Ll@|>H3Mi?j}9htuT(%4g36W@VKCP;-kt`{VI&5;zgAKBfPHCr~#os>-r zf=P1Bws|_>4bWM}=(G(K(L5qR*&TrS@TSS|v6sApq`G3tO!~yzd|RwbUrYG}Fm=+V zL9@ar(;Jdq13a>@tIDMcs_jqyL^w-WJSmo{t~Rjlzx@8ArXLO6(ujR^_3L_hg8$o& z_Wfgr-}U%uqL=4XA<1*PN^(L7&=hd;F_{aAV5H?~XV7l=?v?p>0pQDnb!h0;Wl)S& zC}^OK_ppRiDBG&Jdat8dW5mPgOZtBK2?qUgi1gTO#RYgM;vZS~@#vwAAn((+JL(WH zfKMU=Qh?Jl@m>9!@V83%=K%6e;3nC#kcSx{rL?Rz!l%r-r^Rh5JOvvmmeygkKPCuYjLZ|?5( zEZ*o3mE8_QwVM+B`H@IQWi_uMwOKrZ4x>xR zudw@*S59-G8zBLKN&!=@^6aUu_{$(ahFf$V;}r&fG1`b_2Lb{d!}j1w0*q?lrdT7r zBf{JmB-JB-KofA?jER=TL{A|ESb^@Eqqf(#3tD` zod~vGR9GoXz6)h(K6y@5Is8O>P)}Hi2<72KihaFw^(8A`QyBILxr6%VW-h-`fV+vQ zn14=!V<#6)fPPsr$Y!u7!|fm6ob=nq<9(Ik*}_2C z1cPplyPus7+SQE?oXj!_S8(3IdxZ89R0W8CyK}cdj%sk(JIj{aME>W`?pwCmrF)fT zOS(_(Z>WMN0?{w!tp?9{x>dz-Tf4Qsu>SQVf9VY9dS^nmoGp!f_yI|cRPF}7QU2Kz z&+}zuJvuH3=xHpDXkL(M0jhR5jIa4{8nqjEdlyicgEAVi4;LGkkrpT`p}xKD7wIt1 zozF>1AWu@lf?{9W0P=_9V?fGbzVdl{FNoa%TRO5yJ8?K~+>MRMQX6RGzA})C2OZot z?%Cw3D(deK@N48)tYb2waaAdO&0{sb)UOIu-aCW#F=hTDi z*q3Jht&rZ0#Yx}q*upjdGABe=e;CAu`UP)8h1T9oC|oLjdCY7wokzEsEJqRwN>}-f zA`9y*yO<(B?-GsK^AwkF46pcbu5B~oS=rkad@+<~e13Jn9il#I$1n?Qyz9r$EU1$d zqR-u*SaG<1FJP}X4kyO!xJuS>YDb7x6*X(|j~{-Xk(Y(#>=NjG)5`_Be99E0R;_HWEDOyKT(9jd*n2*LBec@xTXdqHewa_c|xM%+9L4@;ig;z z*eH*iL>AdQ&4>H#9Prqn%31dWUpB6=K%N8NxBOK`0fUfYTV50Xn{WP(EcTTy8$4NCBWo>`w!~q!`xA2)o&PMf zjF0$_iLzX3ms`j4TZwZ|D_gRH&sp*mHu*}!jqWz?wgjQi+?^!zr%!{Zw2)%Pf(^y1QZX{R2DsnvEFrcHQT-+Qw0|ffE4yKIJF-;C0I=8QU!Bde?L~ z{yN?%j#&$rrY1bRWCdW!0a!Xqs|Cq!3954rSi;Apsb{xPx*I>87=L50wDJ=p%b0P74i)BTXc~S>(!9=^j+t7#Xt{dX6L))rSmfCAJN==7^limuERo~%~XHy7wdf<^t$H%K}@^N^cTT|UtT-av3NoTL(E*0Bd%g^#ThKhh7sc=7X z$I&N>?ql|>JKdm9d-$nupVluo*fx8LtRjaDa?$6P zl1c!``*>#ASxQ1ThWJ4}U-MoMVz3^nYwg2I^yE^3r5g8Lv730X_q7RNaksyJr5Hea zxeDwX&yu5?lK|w8Y}M7JFU4elCePH*XhdxFyUHoEp*-i$VFZKh+h?*EqA-vYP#Xkj zO30nXed)xc1_hxcMbil@S_(arObO@)HOLb6nV|mHag_LvHcTOn_`hTl4_1r(OrmAr zU!`@e`FB2i*Ht?SpjE;6PX%Gr;&O}OU(-c!)Pox_{E~ms5gFjG?7Pn1pZ==}uPY@I zrT^h6EdV#b+t0pIhyrS~4u0u7jQ(6k08$j zd~wO6Gp!$c*%ffFjBK7Ro~nDhXYt_!UFvM&KMu@1>;6W$WR(-P<>onuMH6V7@>NFp zvd-4&o;Z?qrC9k5Ez7;w{c^US9*!I4;)oD+AE+ni^O>yZ%es*3bndQd?}bYaQu=3_ zD+#BHultn5yFi1 zU>i)U;YS|QXonB_6$7%xvqmpWc3QZehY1sO(~22^n(1$`a6dcR?vUc!j|}<8uF8~Zf{R8cYA(gUoK(+T{u4)o*0Nu2X|-S;g#VF3>k$k- zt7|FlgFgYsJusD_w{Bl*ItP>*-f4(6{U$0_h||8E!EjrXdIyVl_|=f}gQu!AQt@`* zVzwZBMG0qort!^ z%0h7^&o3>NgCjyhnu&0(VU~PN#BShfEnpvn73xE&|iMDEOR#JWIAVolnjmifZw#ioWLIvZ~F$#^!}H+YhQum zw|DAyBvl*;B0(PGRxi&#jc`eLW(3mFbiPrBQYP>+QA&J|At({dRKc|JE8w+R^a;B} z=QSW5cbxw$(YnQ9W_xZ?-Np3p+Hp1idpxfu|2&x+T9|26xn|p$NHFxK>B9$ItUsdQ z2ivDt(8~4}#o{V=wFO9bEP?y6&cpU;fcN6$?t6*LR*-^(ytzkQrtT4c_a9_{#p=hz zg5L<0k|*TsU!1ZnBYk?6KD;MH*yukRTLb=$1we3Gl?cL2NOONw5g+>{9$t*0y}ewb7I4S$ zLL4Ms4i-?)Vte@sbCx{1$7d9$p`=t&{2yP^!kK0?Sxe(XC;gyemxtgEC~BPzkSO45tqU^t;WS!I|iFcThWho zWV+1%smp{5u$5dA3m{C|FJ^y}UO~7(B(wE~lu00a(b}GJV$`bm-QPcBfw@=FXpe!n zQp)mfR^acqyE(36fC-({VWo!!*ILin*p*}Lb_L5P3Y>YqL6G9`!3LCkQqRfn=`&_c zN1ZgTXlDP7PdGt-mu#6OT;%S0{1Stlv|_cWMmRX5p^|+osZ5JJ7LW`a*e|tzS12LO zco)giAOHNfyMxKO3sLq$^dntL%O~ii%QE6bO0?B*vx=Cwc)$43KH!e1FcT-cUeSYb zO%{&n_BDa-N%(&;_0|DVKSBREAs`^4AT2H7(cRq*#{tsa-Q6W!9wnvRfp?@xx1@q} zw}41@m;B!Pd7kI@{SWr`y*oRzF+1~`*_XpaM>cTKgGAf@eRIYO(RR{boloLV@%PtW zXCfk4U|o6(brb?LEd-(WH&$8qE%%+)pcMC$?Pa20V5nLyA(dusb^OYjUZI)2;b_?%F0>m=kq{|l90A#lfIKYgbl{B=KHu0_OGzJL#hD$vi zk+hNn-4zDn9W2U`6Fwp#2E$G6Z6R`4VhKvp&i=3aolc7RA>e?e4P--}; z7lJQk)~&hU_jTFqbJAi8iK3_3BYqoU_^n_N=gY5-j`^wAV2l3A4=ZE5(D8C`$2YTG zwy136ccHoDICqfgCs%A9TV_zn6vc4XMyaoe>ah^Xf%}%CDF(I&B&O($3tww~w_s;r z;k;gY$wAbbmsF?`)SWUU14fSRm=s4#-6hJ)2TZ zpPovKv+1PMM~VhJvh%ctN6TWC3+0w ztj~AUEcjkpj2g8ZR+eF!WjFV6R=GWepXDXK-Q1@=)R#L^w=dPU3`*4NW`58?LFW|K zIy2|9-aRpJk5EtE+f~xU;Iw_^_+GIk$y~87dA<6s#GSqyp4Fb!~41^}J zR|2%+_UA!>2Q^-<=-NdIZ|IB!Rt+_=@62Nv5w!1 z4`VagyeT8BB}HdT=u6E7MBf8<%Pe~bpRuW0=mJXKkzYH$0InJ0RdOH-<_{dfkstBT zdPXfV5GFbxZM!JxaISONq4sdcV?1ZS%?^Xb(oHrghVsbZ+v&r3U%@nGLt?KAQL~?& z;R-y7e%^=2dl5_O8{2Aull{BhN;(~$E6eqto_RODcn81Lf64QsnW+tSs>$p3yPGNM}>}W4a;iQX>{5~t*d?f(tXT4G4(+jPCT4CAO z?^F6kEB$^#ginQkfc^2#YYo8ACT^mojxoxdCTK5eID0cF?Vc~Ie1dG+w6Ynjj1sLP8;fdhn{yhj=Fp59d`_qaQe*d-LW^Hctg6yRLksVpW3R-4FbpUQ{J0qg9!+ z)m%p^fl?5)v##V^$99rtUu9EHv|J?~%Ik{vo??bpS3CXvqT8&1>wc*2xT-GRb{_mS zxIx3MLlf-bu>nLNRm8Z9+l}TowWmU8zJjGzb-`EHl7MBr%zb{JB`_SO{Q3(OtbHaU zWAj2@oiF3wl?F^!@O;`orubuT*%SKQMhIsehALHbSHeSpqoKd5b^;VdA=qNO_YDZJ z9UboIEl@%0LA8`TfC;x|z& za;P)h9%EFsuiv_T=@baE>Mw48h-LDDpXYPg4(G`s&gkf%tKaW8{87W|jJXr-2Ed3? zSBZA~D16{7>Hm}1LyOj|JIJ|K$TT(g=6{N9KdA**bvk5T@+4kuDnWT@!DQi{UrIUh zZ+O@JfUOUmPKQ4N*exYt+@d74!5At3^EdrsFxJaIa5-5y1f6Yu+=K;@%zwwx^VG#c z!Woo(vR|Mh?x+m{yP-7 zK3Od6ejpx$zyg|@N>dE)(^_HK|IQ{$&Q`1NZEEi15;|zH+Bt)Szw+mL@KAB)>HUu0 zg(W@_?7I9p;;ifQd<4IPjl{x7K^>Rcap~>#=O;t9(-D1`i6-12f~`jqJhLGCg;FGs9It0c3tO%`3}&!;uBaRDY}S^Hr@-j`xHjC-s)q*15ugQou?4 zSTD~_p%XbLG2y5s^|$Jheqo0V^rPOpP0Ibm*i8lIVeNDz{=oJ9r@c8|@$MlC0E0>k zbo>Ld8iBhRfKyOPO<%IIHBrPm#fJ4-^6Q$TD4M?#Puf5#aJ=@Bg)WffvP>&Qt*GlH zy7$A;{^$aBW?L1spyz$vJhT$_j9{{7bkJeJ*8Xn&b0VAklLp+p5UFYN`wR=q-za+{ z#!7#t&gn5wAyux~r z{zvIv-7U%X=CDd`93&=65zeE)%92d}d%a|Qjd_2#BguIw=Yq8sB9NdooR!95nmU7s zd}P+m{=dyH#U1e2_8mbs`~`;c-#g#-sgHu;Q=pAz=poDlP*AYb1~?Umhd#Mb2yPII zeSL=*XLr1$HM9g~AwV2DZE#(CLaeo+@DD|3KCn~?=%6k^<*%!qGK+*S7iuo3{Dmum zdib$lfj3y+LYlRT21*;ELvGhj<4oSKfV?o|VFUUA^VTZWa1P8hJPql$aeV1?)B(>l zVM@aKhl-tscNXsS3DirutL^V$3Io?0^x%zGfCiM73{lxdQ(O$%eZPW6y7T$)`S(8? z%)k%F-!=)lZeEc`vHUog!ZXWAcq9y!jlff_QuVg`oy+I=^f=w+Ke6`U9`3wdoEkN& z>)NBeM>SBxnw`^)ge*j>1zaA8L9@I790D->XNiM^w>>Aqoo~6xVMwmTjzc~vcfVTk;*NXkde-m_A6tTX)y*tOHBlDzL)w{}$B1HH~2mRlNiD9`1O8znb9LDlL zZAU+4NWuoV0H9RY;L`@~WLek%EiheeeoG57GlK*(%w+*!I)Ja@nf5KZ<0RD->V6Ao ziGWqmcF#l_+EiVy67xI`BJ>DY_7LQ$#47!kk-+~|DVS+6eM0kekkg`REQm=5^FIQx znzT2by@m7vc19V1cdAyTYx@aNPv{8{9*=?DzsP2l~z|LvFwnZTVW{g0}%p1i~s zH(+@HU*AX>w8_M{12Fo(UGrW_2?hiWa9Z%ED`&677O`O%@%a11L4*m9F^`$~*5A%4 zA{$&E8=Q8sXV_*bT8q}CL84TTCd4yXo*@zej`Gq1ak<5zzLY{WcWN=mZy_bXy0}t( z77)PiytBv$j0iLV%3GJ6?laDucKG5R{bSk6^OAs{@iw>Oo|oyescFL zN)^~c#0N>F?5oHl-jm6{0_QLSrrK22tw53WH~(6MCei*aL^?hBM*~@oFVPU|POm)) zKx8gJTB2`7q3J!+;eY=hbY6gj*@gQU|9bYXJ9mGhm-x=1_C!sqP8A=Y*O1AA*3(}j zavugA4Y2hAijAak^Q7NUN=D+7$uj~6!`~tkVjNk&8HGqZpy>bY-P-csxIq*$FmAQC zkU3I1s6D{>7*><|7{(%co&xXm!xzuF(bGT_;FV$pS5-;$fXQJS#+BD}R+zxqEj!+l z+cmLTYGQb${)|=|P}u3y#XZX2YBOS`feh)Mdji&9ReU;~3t75KWkb0(c>%p7&8JGD8cXHJbM8jK$}^L+MGyw1x2bV zhnq!GSYLVZ%q9P1;?LI|`F)ZFV}WCUBD zsl`R0)YqZ<_@KNIC3V@ne}5=TSR1PdUAkgcHA8d3&~O8PMOA3ekQ=1}<^Y)w3BCaQ zbT!MGXf|x&Hvu9Kg6J9vD$On81LX6i-<$H)1^bQa{W!KaO1-Ki1A9YNovtT1+>?0) z!Dxq<7LQdxysKFv6R?5vjsY5JmIv) z$;4@{vw;h5clxGd&jZ2}w6eu;3jLi)YM_byIFdVgYcEm4W*8vmd_U=K_V5DoiAe4&>GQ3=j((yk~eW^py` z-xXGap+-Z)qFddVYcS3M5}I#9s71;u>G#_Bzifc_IY|-zSBRfQsK+sXy0VG<;S&eH7paAe5gWy>*b}>MyC?QG z9U2;-mhUAnI#e-&5wQTz7CTypajQ#kSGG0#@x2}vnXkg(@kj`mza{rUZ?^TR{RMVC zMh%#cojy%CXjA0t+;gB0cTr~Vr?D5_SL(6C>@6)sH7~KN=Z5v(Fg{-v{n{Ea>7aWt zOo6(i4}F#?{qPL)J1J=|yFYa)~mO07N*c;s-Cz#}voco3KB zwkgUX$0$D9fkZPIM(T^mZhJk~)>V94?>~zC7=T~938tj<#I;Z+5?r7U`HYR)dtgq4( z{H3jUI+T;q#+%c!k98&_m-^3 znNIat(Z&H({CbQSo<{Yv%85s_-rFY0+8<*B)!4b)5+N>fF8}nGJdYyDkI5%csY#Uu zhU$?BNqu1L4AWO@SR;FbY&4Ez2Z6u#=CY+~JTq}}P@O6&7nFn1nR&!R;Cf-NM!v8O z9X$yw;bh2iQ2f~uf46=xEuaEKKRnLPqtp42rhdD`nMnrKNti@%lNb!sS?k`>}^c?^zt`{!XH|5Z;r$l{oG_68vfiXTW30 zQx`w(9|mQ30J9`vAJbH(yeKJ(;KDnoqk*&qch<#IF+kTe;4vUa)jGjQj2+^@5ADgD z7^cv<|7(yNAwM9lqoPvR@De$gGiRh4S*C!zpIb|0XE_U<_ci+V1)xWQsFBZB@>y>0N!IWqD zi<1r*Pn*0YXYM1Kx)7)BlG+RP>UDFZd63=r1G-&cu`lgtZoNFu)rRToLU(8Z2x}B< z9KOF|pzylcdgDT|n+FK!LQGL!S&;Sin8DLAzje^8*WDl487_WxSLPcb>TjN}oCL)M zDS8JpSg=lrY?{2J%DkhJ*vtflJ_U9{QNT7#5bMi)DNudpFN&^mK8dZb>wr%f2?ZhR z@1j$}a;T3fYgrGEV__p?0XmP`p*A~(NVN|@E4Ar=!8-&KbZ2T0h9P(uo1tf?egW( z;8V)gpZ3aWagaXxQbip%?5HMKyLsU^%tKA|R zV{ZDX7_fTsVrkC!ZDOjfE7O%Q6S>WGKo%d(hJxmWaEi@xr$oXw&Iik6feSo7VLHh8 zY_>>O;VKpByBcY`U>Mbnv-9dj<-^LcMI#|>B-2xe4!AhR*D@2^e+Zb;D{6?MmSq2$+u;uL5wrNoR4- zCqrBq%;M95&4K;;m-n#tS-U#Lng-I@CpnFr9%uuXMdu{RoB#b=NT-s{rbZakX7WUx%}nLXRb|aY$obe&X_NZvRW+n}Xv2KEp=F8z;4|So z=NG%twPO(|9U)am3M#b3v#YPHDm(Lzxl>F2A%KE(Qet!>w|cMJf37M@X;CK#1u;C# zxsD)0xNvLJk#~GSt%Dyv6lJFj$%l1yp>Vt}`@t=bYd|DS zjy;G$qKpkh%9#8}(H&c*wlSK!{k7W=4v`eWY*}g=vaRD$pUCz**#cPlv=M5>g$k%@ z<{7Z6X`a%RwF~|BW&v#eMqge-dP}TcGEI#V{CHCg$!?hs*87IC#W>X_4Hh)PuwYx; z`d<7Ld=1d;JM1EtEfDqPi3Zr2B_jqF(bB{>sRPKUm-bSd;l@6lxdCZsHW#;rf3%dPUGy)rU$zdFQPE<-v}Ka(veEOE*J$dJyGlU<#Gkyeos` z*l@A!*F*3S+g)N+?JgtHllSSr&d6v2-1wv{&komvvpgdH?0p{-H)4D2>9 zs~ay7TmSSNE~RoWbt-Ye2TifMOUGp_4PVfmJvl3ptl~tHER6eE;|#p}K!C{hwOFZ# zU{*Nf6gPB@<6Kx7n%RP(XXY@LN=8D_pIGOjxp0^Idqb38+W{JW2nfIP%*v-nZ49K2 zEM*awJFituRngh^^YUWttT7oI8zcC3Dkv;WW%DA4fHMD^-ih}+oB;h`Icr4IWikFj zdDJ(5j$#sQ=^O^Y+mW#jci@9kQ6B4ld-V+jBFEh~(m)m6iMK7lI;!(@b4!Rhmd3)0 zb^hse_*3&LPKaFi(FydfO#kkHx?kRuH&y+!`?KUnZvmWM_3DAqe+?>w$t+br<$!mZ z9^N%|{qf{nzJLan-`OU@154`17F;xQFWiCo_xFz!;u``!YgT;qMm0Mwx2ffp_VVm>Bzs;hmqhkp{CP=v` zRDc}acU?-}KlU*ZpE^0g!77jZs;A90mj9q7z+O$=H?XMbA~kL6 z?=e_(FhX;*7kwXyeGi%;r}A(AiZE5@sehlkE{tG76VP;8^n!7#Cz{<>yL>#;t% zI$f(mvMV79IMsj-p73<|1WN?nkvTu(`}(|wuEz5*tE9xwdF4#XY(IX@0VaTGSc=T@ zu{IHcTfP1$1Y@%{ak-S+7{TswKga{796X)fz;19dV}pBgdt3A)c8+&Nb?Dclw9jQn zSaL*xFuj7*GX(KO)rm&0e!R{O!2)h*B?N(XQSnA!u6I6t(U5hnTFSWu=qM7Vac)Yp zUu6Z|BeedOI}yI0(JA4|Am@w)A1=ucVe@sn zp&fBJiCWh#oC$9s`i%W5-r@dNEMiDbjm-Omd4C++b?uc8UlrbQG`sy?Y#Ib#wH^Xn zW18FEUXy17?cU;8+a{H*OX&^$M_VTA8|$4_j?Rjt#>1S1(vkd@S4x2i5ru0x82>Ft zFqVDEBM(GGyY;g)ML5ns6ke**c`p}3id5;t(~f}B*^COKg6f&l6xfa=SG#5w{-p)UZU&`cT(&l4;Dv7s9DaZfa4WMc+L zaK16PL7VyNqf3g7NK-Tb=yh6J{9#OGKM#;V^fx$05xF8!LiUw)R34dBF=i&i^2W$t z*KjvUk-JcC$%(NVmkhDi4uq?2TFCGR#Hb{Wd^9-??(ARv&W0X@N(Xes9=r6e+0qc)~dK%8oVdUY(=UT{d z*Bb-Sx52X+AVxB)id?|r6~g8ahMYf%^7BW zKe^dXaQUaDs=y%O(D7HzesFLn)$*?&mDMuc$A2}y2|nQ@BKoS^p#!lBOM?X{Q5)+ZrddQ`dUhqR z2MXz+UbeZcLHF>_mz9)43P^znbi2k+YwvdI8&HOcvS%hes9Ts@lrT6z+LN`32A7}{ z(hZc&Qv3L?r4W0K+MUUZx;0q>-z)cl2gBdZOoLt8iy7}SgZ(b)lCk9^*3|p-4rG?G zM^@}brMS~GbSBdE0V&#cDD}2dmpCWHKfQ`7begk1!siWH`lO+tuXi@5j+EGSRE{)q zW=jCLXb|d<&^3A0>r^x+)T@Z^M6|q_G3{DW&0LWTZz!WQzU1xdn-As?vy@d^Tgc=hA4 zWYoAT-51g#Ii746?|yC5?tkr(erV0Aj25yuvb^QGelE21dM12sNa%1@C5vlI_ z*9zfEuwR}YngFiKYQFUcm5!ffBJn(f0sUp($;_HF8y#i6f#^ZV_Enu)Cri(m^;Ncn zoDq)1?sM!yV;!U-2Tm$plN&?7O=y68#i^g*)NpeMW!VKtDNuZU_`ZZFyorsh6+%rjuf4~X1D*l0Wnx2guk~tY~JFN zL!{@vJmAUA6y9Qnfl182y$DmV8MDJ?gHkl}ceiSpkv6ZFv!R3LI>3H}nj0K01`co| zHQ%9q8uH&=Q$b8S6P^zF{oSFg1;rjvDERnE+Rf^&u4Af-_cDK68#$2YL-_;cW4;FM z%&+GfaxjZk7*6QYH*HH<0Fy$d!l&j_iVViY>r=OdMKEp|4R62y9ankbdwpbK0O}|$ zht#}}O^2{;&v-XGr4Jp2lr~m5x_Dg}hsnL^`SrpP=(zWcr!~M4n&I~hn^o;_7G}2gIwprfjPq0VC z+hropUWo41roGPu={|h*ZdgAfZBU3T68fP&vc7u5?l&92#H>}@@k0EU&g|T|N2)$T zp2z>a#&rYtL_GLGK}M){My{)eauVMumeh1R!&2KAM-N4fR1hz{*_all%d8jzyUP3k3cA|v+-VQMOm zG<|vnDxY^lWmbX)W+EXBFLw8dpY(K-CpB(gQsG!5DFBFBrzr#MXekEaiS(wz-~27# zTmC2uI-uk!J!prR$3WdfV7txjr~qd7^_YsAUxxBS`AC7KxF1Uv%oBl>&Lou6rpzO_ z-ENzN8Se_X-t?mLR^V#>X77AN4Wk!UxpY6)ly*;e-rZ(NyD#x#c82^c%7qP7@`0NB z`?hBU#*H3xS|@|!yEWbmk`Ee|>7@4u_r|Wmn6so5vYm=&!)A612J0pPKG@OzqpE^L1rc5-q95>8)}k4~Eq=H*J>W-)8LgP7l=sY(>iZ)qSOB zxFJJgJhRjiI1}Qxu@yH~yQ^Eq7UHj<9OfH_YtNXbeqS89(!OD}feGg-e1TXxaD(@y zY`ZTgbICXj<&fN`jWR=wV6g$FXc<1*;RqomradADZ#%>*=O~7gc^9Qn+}rKoc?TpO z5amhlr2Jj@_Sn9~u-IV6jkkbAvu*8Bv+vv9NO-9NK=^jnxm0em>H zVc@l@Gv>MQ5Xrk%t@ZI(_o8HJXlHeW!wSBQTj`cdV>!Ofc_PKKFp}-Y{nD6y`K$+kMy1Hikuv5fZ#? z|5*N2B8j!^!-M#9bO%E(8vzl_3$=pS>r3y$^m=JGU((I%}1*==NdDqOXoeb()6rLCq1_&G@IM^VKCtf zIKqzi6aO2ATfL}#P5N6!@3z_HfIWRTGP#t)$8!U%p_uJDjAs?(v-t&+)%bK!-Kc7k zrPcTu2ubuz4Z$Dyc7E2m4{)vP4z6|dbH-tlV^sFq;B2Y!T&fhR?P?E}68Qtw5Wf8O@SY8kU)?G84p%1l|BaW zy?R6{o)IEG*7*`fc<3f|fgy9X=QBcMua<(y@O~qtW}P_JoC7}j^*P&~Y?_n&$@hH2 zfv6hXC)eUSb5A47-i%j$7kZ#!1BEEK{tf&ZiGd9~XVQ^9;;f0JB$ z-wj-@?Ty>y2T7rFNty*4c?`qUz|G-95`<%9MQVMk4(_r96|EB4oK{F}m+;?+^Qfgl zZyeZ!zsT%E2lxIz(`2xq3XeZ=VhB_z{Q@e zO;DsgU6#jM%^eG3WnGT50{; zU#%D7!;R+wMKbogxpsHOMJJZby1)U zUeV9xxD=aW6HHUVS^0raC1UF?619L>j!=DXkkpjzP-arZ>Vq}2BKmvu7Zj+~-^t80 z(|G;j3k$>*BVGBK4+}0Nab}|P>YxiM@GG*DkXTa1VF?wExsIIJZQY&EjSRBIfYVCz z-A+ly0G$ESiU)}EQW)gcIW|-Vw|(8;!<+%$Px*bydepE7FU#*Guy(vQMk77K$I1S% zH~$+A3C7;aR6ZI${W@QSW{s+Rup&~zFZ=`5zc`0 zO4N(#_IlWRPYE$7!Vb|zIa+kdOh?45NTiL7{!4&g&;xLG$fzLPWVCb;x)|Tr^1hAm zdAEYq%w0ih$0E-U{GA#wbqh_PN#;Y?DT(-iM*=z&2LV{DYGCK7|AgMea4OL$@3 znG?$hW z#2p@LFmUWsuv(Vb*SqcDTwEVgcy(qvMB!cs9sw(K+*|({EbdbyIunm&(J|xlWb_LT zXI03%u93Dp9k}r1yZjFs5QUscm`=BA4eZSaM00{QxEI<${Lb$!TId)@ncy3J{i`4p zX4YEfTAli6ed5gFeb^T0OLa{RIqi_EHG8cA2As8`+)3;Ep{{$l+Qu)#Y2BuBrxh!1 zXM-b#>Ui#oS&i2~n0uqBjmg%ek3(EnmR9?1Ui4^*GF?k5R5?jI5t3wxlBO({le+T> zU3`V%h(gQtr1;A|-%F?*=;wT!c#U#YTL?Ce<7;K80pqiu?dKYA2|_Tk-(tu~D8hPq z{9>thEG)=pdXI_T9Q# z$9_rFPUS=`+%{9g3QSaS4GMbI9--X4#xi*79VDye#Wp2GUMI&h!Xul6;knBd^CYus0|27OGVKQAZXa=iq=8-iGx7yd=wFC;}2 zZXOrtuy(Us!@!#_*rxbZ?wsB$!jlu>$~~sREP?ov29xk@JwbX_VSK7wqDn_oI*g6k zPg%^qnJIy($4l$TH3K3oB`4mHhlqiNo+;did7_sra|T6avjsPgv8meCC_gjQ?d{$) zKXgsaqe3Z@(e~Uwfxi>v5LzEDAz{}(VW-j^y5csb#}0P%Vxx$qBLM>1s=x`++0w)M zYfLLY(rsEwAT3atQITI++?G$vG15)?cWtudDqij0cY_@NNKsOv^V- zxNX#Fo~1PQbADlH5#VvwzbF@T$BLFd)&qsGEw{uK1o|ylG^<_&^cvi#Je`@Y_^@CF zV_oPtlL!h-G-?gq)@hxWf5}3Af7aM%+#GU&qLUS-mPK^ z0r1b1s<`e zx0>qQb2Qp{P9f9v;BvXjz2$7gDV4Ih4hk){IK(S z*5Z@=jp5TN!d`M4k7(&3J`QTDf>osfoPgAw6+3n><~ICFTSvrrbJIr7wS=6*XChNv z5YIXXKhwzVKDyh|_(vRL;$M}ZcD>^GKd>oZkiLDnvQ6OuDnL}Eb}KOqP0%Ub9QxalqaA$}BFjQ-k%Xo3 ziA2|gjHf}Uaj;6XwT`s}^~fdm4C~)Hl&|A8N~C4RU;E(;M_dIMF#^yoYrr=UxwGa` zz~3h9XCC0(bsTUZt|p_d89b9{Gq`ryCILhKM8CDG7OqR%Jp8#2)1#}(r=Rl zJ!&}kmWjx4NGr|PK{aw;m;;%HnA4o1Q37}GmmE-GMIMG!m2;C2^UB&4Mm57f0-an& zSmdFZ{+~1ce_JiXYaMC+L3<&JPspn=2Y_ZEIQp-X1JsWAQXaR7MN-+DE-3lok@EkV zZ-HD(98Fr&RF2Ji1?Lm(d+e2~Y-u|J{{Tect*UiEO4q#HnrN*y^hba81Z@6U?kA7> zRfvjvF+;L;G~IhQR+DC{nxFqO^#X=gW#MX#97`wr*bE1IwTIWoD0L#3s=o^)zXs0C z8bS>wO*J&0%*Q_3o^P@$Wgijnk_WO;_v_N@)NEk&8kf#?DsIj2yt7bq!BE4AF|i6=6q~ z&hI6V3zanJrtD7xyM}y=-?bJXud7HHsK2iptoEey1D^Gf;bJXBeDG&<>8~&JA-`Vj z_D#7m@*HGV#SrMUI)3Vh%i<+LE~hTcxIdmus#a=xaB)cdHTVO>T%Ob%S3~woi#nO~ znz3wHp*??a&uW2uJ)Oqr-(fr7GF#6sc4Gg~%t;V3I)a03+NVYdkOS&L+6$F)ZcN|r!i94vX`n$s`%h&+nB9JIySplpM7@p!@6lERp!_8Z{hmBo3mdU&}!bX;+K=7ea}D)6;G7(~_?Rc$O@S&tFG{Xw26*PAn$G0c zZ=<>ABSQeCnidxXRPOJu88Mo`S;VXsME_|@@-vxQ z)I3nuct+J-W(F6%=W&L)vt`)e79Hu9sI#VSvQ#h++-E))$Y&<5{!!@TXZXA`WqME@ z$ISyn+Dp&SkM0=qNWS{p^btJyaC`Zk)xTU}Rb)s4-j7I!Xi$juLCm@J#&l3!&SEzEe}OLkhTBg@(WwDC1wsoeZ2$I0<3r16k7Tqo(uX5 zmgeox-m#3p!XA}Ej_}(*Gf#Vrm1@K^N{JjN2opHt5Q;i@k|KRspv5Lxb2twF;CyuX zwp|#c_bIknakUQmXgUjRR$YRBC>}C$>NI-(iWAJ2ofz*&{ExGXI7_vKBbSD-NjNTX zV~R;N%FG{5uuyfwm$mZ%Uy>)vTtUJ>POniZkef4^X{%_b#@DFFmj}$ZzwTM;K$Twc z-X$b0URmNkR2u!ZHK9BKEUt1EGy8g9=f9~ZTvO+5cS#b%#v`@MA?S<6<2&~4iisvA z;H{)J<*zGr3@OxHT}_*BpEuTIq#@4)ZN7hmI%d9chFY~!8v_nQT9vxc2qQGq0grrN z9+r#eLvL&yO~kNiniHG+#TT`|et+uKnqT>wxFS0=lVW?Nxep!620RqY5ylDgN9#>Vw07FVLUS6TRxs`$EAIB<$J`eIOp8BDZK6p@UlpO6b6tx= zQtKs&Y*WI!_s`}@+Ry%=rr$73%0q_#uvLp;H)Kz9v^+;a!M0P9m4Xc5q~EV6l`kT| z>CXgd%&7}XxHR->U#DHKd^0&u@3DfPhdj{KM^$`KQL`y|X5S$%=&LVQnx*O#;f4VPEQ6w)4kmQ@2tkIB#6fO`~r z0975Sqyjhg$5DYgT~nG_X9YDr==ev@)A3|;vFNDb(;kqc8+v!%S2nBVsPiybN&z3d zR)JenVw~>uU`j`BxwMazP)78mcj|w=#JZsULJf0-x_*gN@$&ABKreom9pXhE z*dCrdsC_zRXsw8#;$<$C47Z5aUiuiCV#=M>Lg&M-obfJA_zY10ze3;xJv=KsP%74X zYIJv>w5@?&)7~DivG@Datugxg@8RhXRm$jqvL~-~jFr(nLsF5DH}epbqQs!l7Q)oHHzy^admC*6Ul{FVFCUsG%lQ6FW}1TJ(F6jTOVw+W8Up> zsDYgy#M&DrYcbzKL@m(3a8bS0FDCPhuT$Afz^ZR}n2etywiTNn!Jh-u4xcb}$MzYJ{Pku1oY6aqrLGM!M znDkN_y7!``qkva2efIz8iw`ODb#PD}9KdimrjxOM4z}G< z6^G>Kc4K?QpZ%JF7ck@!LAp^Ew`cu)BlC2*?<}GfjYWrV&bR1Q`w3M=vkMpG@5fJP zGJZ6&9V8q;j9*Q$jTm}e;76!QA=5We<++0cCW%t zTf{RmXtezR5?gGoOL;0L6ZtfK=leW)shR?)ECuBY$o-TQF>1Z&iXl1G+=j&*f(^Wv zW@*^?_4iF~l^lA46_8J}NOynv-U2UOolYmYnDX}XnTO!5zzV(!RQH5>B5i<6`g5Tb z0|Kqrk)Orqcct~szYb6E; zTD1_(&yPEcDT8_5jUOg(vE6FDS|W-*EO{Zk~t#4q&TA0l4aVlc8JvkKKos9+53sTr`V$V(6*e zQ#I>39~A7fx$3`A=#lSJ(UhRQ@{R5Pt^NIF&d*;i6}92Ts)d(4mngm90G>_EHL+^} zaQ6vtH5!Yo;k=Nw&Bi;O5;`WHX9b?GwLtmU47}Ij z0;s3yqSe#~%?-*X2}w_&sd#f%Qjy9bIFIls|9?d)Sm_I&;DUMHSODyx9WC3TY%1Kef?!>++B`puBG2Y zZg|XhzRsy6>Zrc%X5f_Y-S?0M5`rFSm+)p4;?> z4dnYLe!x7A2p(Wz<^&2g&~hJ9M|W@!5NI5zlL`wEC$W#(FZ`9iBpu6}{KGG>3>ai5 zly1*8Z%^vGckpm~?4SJ~<}P}}G_h+!sNc?$)k~-GtrIv~UbP8$;+WI4iNL*NK|tS} zu$mKkL{k+MBMEDi{4||`mNISYvRDe#w?KIL9X;XYA;9B5N*+(~U74}(@`SS>PRjpu z;Q1tXflR~|mx|eYA?s;Of5aDR&D>!crk!Db*=37u{geI?@0aAK=$La97M z;m@#r@7DkH3;osrl;qm4<8R2=&E&ZyjE*Z_m-}gTrn20Bc}ffz%8?7pnJ0vOnE~u-OPNfV%+>N_sumB>+oInV zJqnKK{~59B{kqE$EA6aiIlT{TYX{l+UdM@%O&@p$>i(sXD|d-Kv5vgStR$-F{bl?7 zy%+KffQNxZ2RD3-{k~=M{sZN!Hn9VP?AnbN)AMJtEa3kY-SIBu|CBHJnJx3`eVK^6 i-IIt5ws2p{^z8qNi ${log} +# rm -fr hex + mkdir hex +for (( i = 1; i < ${#pic_name[@]}; ++i )) +do + touch Makefile + make device=${pic_name[$i]} >> ${log} + echo \($i\) make device=${pic_name[$i]} + + mv sd-wav-player-${pic_name[$i]}.hex hex/sd-wav-player-${pic_name[$i]}-${rev}.hex +done + diff --git a/lib/fat_lib.jal b/lib/fat_lib.jal new file mode 100644 index 0000000..cce0aa0 --- /dev/null +++ b/lib/fat_lib.jal @@ -0,0 +1,285 @@ +-- Copyright (C) 2017, avrin, http://mpu.seesaa.net +-- This program is licensed under BSD license. +-- Please refer to "LICENSE.txt". + +-- for debug +;const bit DEBUG_INFO1 = false +;const bit DEBUG_INFO2 = false + +-- setup the sd card CS pin +sd_chip_select = high +sd_chip_select_direction = output + +include spi_master_hw -- includes the spi library +-- define spi inputs/outputs +pin_sdi_direction = input -- spi input +pin_sdo_direction = output -- spi output +pin_sck_direction = output -- spi clock +-- +spi_init(SPI_MODE_00,SPI_RATE_FOSC_64) -- init spi, choose mode and speed +alias spi_master is spi_master_hw +alias spi_master_exchange is spi_master_hw_exchange +alias spi_send is spi_master_hw_exchange ; use : ex. ret = spi_send(0xF0) + +------------------------------------------------------------ +-- Initialize SD Card interface +------------------------------------------------------------ +-- +-- setup SD card library +alias sd_force_spi_mode is spi_master_hw_set_mode_00 -- always set spi mode to 0,0 +include sd_card_local -- include the sd card ide hard disk library +sd_init() -- initialize startup settings +-- Speed up SPI clock to max speed. +spi_master_hw_set_speed(SPI_RATE_FOSC_4) +-- However, speed down SPI clock according to the respect ability. +if defined(SPI_CLOCK_MORE_SLOW) then + if SPI_CLOCK_MORE_SLOW then + ; pic16f145x + ; pic16f1619 + ; pic16f1705 + ; pic16f1709 + ; pic16f1764 + ; pic16f18325 + + ; Set SPI clock = FOSC/( (SSPADD+1)*4 ) + ; SPI clock = 4MHz , PIC16F1705, PIC16F18325, etc + ; SPI clock = 6MHz , PIC16F145x, etc + SSPCON1_SSPM = 0b1010; + SSPADD = 1 ; + end if +end if +-- The SPI clock of other PICs is 8MHz. + +-- /****************** +-- send_ff +-- *******************/ +function send_ff() return byte is ; send 0xFF via SPI interface, optimized 'speed'. + pragma inline + SSPBUF = 0xFF; + ; Wait until send is end + while (!BF_bit) loop end loop + return SSPBUF; +end function + +-- /****************** +-- definition of global variables +-- *******************/ +var byte gDirEntryBuff[32] +var byte lgbBPB_SecPerClus -- E2P(*1) +var dword gdwBPB_FileSize + var byte _gdwBPB_FileSize[4] at gdwBPB_FileSize +var word lgwBPB_BytesPerSec + var byte _lgwBPB_BytesPerSec[2] at lgwBPB_BytesPerSec +var word gwBPB_RootEntCnt + var byte _gwBPB_RootEntCnt[2] at gwBPB_RootEntCnt +-- +var dword gdwRootdir_sector -- E2P(*1) +var dword gdwTargetFileSector +var word lgwSize_of_root -- E2P(*1) +var bit lgfFat32 = false + +-- /****************** +-- FAT_init +-- *******************/ +; Refer to ChaN's FAT info page, +; http://elm-chan.org/docs/fat.html#bpb +; Thank you, ChaN san. + +procedure FAT_init() is + pragma inline + alias bpbBuff is gDirEntryBuff ; shares as temporaly data memory + -- + var dword dwBPB_InfoSector at bpbBuff + 0 + var byte _dwBPB_InfoSector[4] at dwBPB_InfoSector + var word wBPB_RsvdSecCnt at bpbBuff + 14 + if HAVE_FAT32 then + var byte bBPB_NumFATs at bpbBuff + 16 + else + const byte bBPB_NumFATs = 2 ; to reduce Flash size + end if + var dword dwBPB_SecPerFats32 at bpbBuff + 22 + var byte _dwBPB_SecPerFats32[4] at dwBPB_SecPerFats32 + var dword dwBPB_HiddSec at bpbBuff + 28 + + sd_start_read(0) -- read MBR sector + sd_read_pulse_byte(454) -- go to partition info + _dwBPB_InfoSector[0] = sd_data_byte -- get BPB info sector number + _dwBPB_InfoSector[1] = sd_data_byte + _dwBPB_InfoSector[2] = sd_data_byte + _dwBPB_InfoSector[3] = sd_data_byte + sd_stop_read() + + sd_start_read( dwBPB_InfoSector ) -- go to BPB info sector + var byte bi + for 32 using bi loop + bpbBuff[bi] = sd_data_byte -- read BPB info to bpbBuff[] + end loop + + ; register BPB info to each variable + _lgwBPB_BytesPerSec[0] = bpbBuff[11] + _lgwBPB_BytesPerSec[1] = bpbBuff[12] + + lgbBPB_SecPerClus = bpbBuff[13] + + _gwBPB_RootEntCnt[0] = bpbBuff[17] + _gwBPB_RootEntCnt[1] = bpbBuff[18] + + ; BPB_FATSz16 + ;_dwBPB_SecPerFats32[0]= bpbBuff[22] ; for FAT16 ; eliminated for reducing code size + ;_dwBPB_SecPerFats32[1]= bpbBuff[23] ; for FAT16 : eliminated for reducing code size + + _dwBPB_SecPerFats32[2]= 0 ; for FAT16 + _dwBPB_SecPerFats32[3]= 0 ; for FAT16 + + if HAVE_FAT32 then + if (_dwBPB_SecPerFats32[0] == 0) & (_dwBPB_SecPerFats32[1] == 0 ) then + ----- enable FAT32 mode + lgfFat32 = true + bi = sd_data_byte ; dummy read + bi = sd_data_byte + bi = sd_data_byte + bi = sd_data_byte + ; BPB_FATSz32 + _dwBPB_SecPerFats32[0] = sd_data_byte + _dwBPB_SecPerFats32[1] = sd_data_byte + _dwBPB_SecPerFats32[2] = sd_data_byte + _dwBPB_SecPerFats32[3] = sd_data_byte + end if + end if + + ; /* Root DIR start sector : (absolute sector) */ + gdwRootdir_sector = ( dwBPB_SecperFats32 * bBPB_NumFATs ) + + wBPB_RsvdSecCnt + + dwBPB_HiddSec + + lgwSize_of_root = gwBPB_RootEntCnt * 32 + if defined(DEBUG_INFO1) then + include debug_info1 + end if + sd_stop_read() +end procedure + +-- /****************** +-- readDirEntry +-- *******************/ +procedure readDirEntry(word in wDestDirEntryIndex) is + var byte i + var word wCurrentDirEntryIndex = 0 + + sd_start_read( gdwRootdir_sector ) + while true loop + for 32 using i loop ; read one dir entry + gDirEntryBuff[i] = sd_data_byte + end loop + if wCurrentDirEntryIndex == wDestDirEntryIndex then + exit loop + end if + wCurrentDirEntryIndex = wCurrentDirEntryIndex + 32 + if !lgfFat32 then + if wCurrentDirEntryIndex >= lgwSize_of_root then + exit loop + end if + end if + end loop + sd_stop_read() +end procedure + +-- /****************** +-- searchNexFile +-- *******************/ +var word wNextDirEntryIndex = 0 ; initialize +procedure searchNextFile() is + var byte topChar + var dword dwTargetClusterNumber + var byte _dwTargetClusterNumber[4] at dwTargetClusterNumber + + if wNextDirEntryIndex != 0 then ; if 0 , search first song + wNextDirEntryIndex = wNextDirEntryIndex + 32 ; search next song + end if + while true loop ; start dir entry search + while true loop + readDirEntry(wNextDirEntryIndex) + topChar = gDirEntryBuff[0] + if( topChar == 0xE5 )then ; skip deleted entry + wNextDirEntryIndex = wNextDirEntryIndex + 32 + elsif (topChar == 0) then + ; dir entry table is end, so return to the top entry + wNextDirEntryIndex = 0 + else + exit loop + end if + end loop + + ; check long file name + if (topChar >= 0x42) & (topChar <= 0x54) then + if ( gDirEntryBuff[11] & 0x0F ) == 0x0F then ; long file name ID(=0x0F) or not + ; this is long file name, so set index to short file name address + wNextDirEntryIndex = wNextDirEntryIndex + (word((topChar - 0x40))<<5) + readDirEntry(wNextDirEntryIndex) + end if + end if + + ;get the file extention + if (gDirEntryBuff[8] =="W") & (gDirEntryBuff[9] =="A") + & (gDirEntryBuff[10]=="V") & (gDirEntryBuff[11]==" ") then + ; gDirEntryBuff[11]=" ": (space) is the mark of archive attribute + ; if the file extention matches 'WAV ', exit loop + ----------- + exit loop + ----------- + end if + ; for read next entry + wNextDirEntryIndex = wNextDirEntryIndex + 32 ; search next song + end loop ; end while: dir entry search + + -- print out music file name(short file name) to UART + if UART_INFO then + var byte fname[12],i + for 8 using i loop fname[i] = gDirEntryBuff[i] end loop + fname[8] = "." + fname[9] = gDirEntryBuff[8] + fname[10] = gDirEntryBuff[9] + fname[11] = gDirEntryBuff[10] + if defined(USE_UART2) then + if USE_UART2 then + print_string(serial_hw2_data,"\n") + print_string(serial_hw2_data,fname) + end if + else + print_string(serial_hw_data,"\n") + print_string(serial_hw_data,fname) + end if + end if + + if lgfFat32 then + _dwTargetClusterNumber[2] = (gDirEntryBuff[20]); + _dwTargetClusterNumber[3] = (gDirEntryBuff[21]); + else + _dwTargetClusterNumber[2] = 0 + _dwTargetClusterNumber[3] = 0 + end if + _dwTargetClusterNumber[0] = (gDirEntryBuff[26]); + _dwTargetClusterNumber[1] = (gDirEntryBuff[27]); + + _gdwBPB_FileSize[0] = (gDirEntryBuff[28]); // file size + _gdwBPB_FileSize[1] = (gDirEntryBuff[29]); + _gdwBPB_FileSize[2] = (gDirEntryBuff[30]); + _gdwBPB_FileSize[3] = (gDirEntryBuff[31]); + + var dword ldwRootdir_sector_size + ldwRootdir_sector_size = (32 * dword(gwBPB_RootEntCnt) + lgwBPB_BytesPerSec - 1 ) / lgwBPB_BytesPerSec + + ; calculate start sector of target song file + gdwTargetFileSector = gdwRootdir_sector + ldwRootdir_sector_size + + (dwTargetClusterNumber - 2) * lgbBPB_SecPerClus + + if defined(DEBUG_INFO2) then + include debug_info2 + end if +end procedure + + + + +-- (*1) E2P : Candidate that can be assigned to EEPROM to reduce SRAM size. + diff --git a/lib/power_off_mode.jal b/lib/power_off_mode.jal new file mode 100644 index 0000000..9ce7900 --- /dev/null +++ b/lib/power_off_mode.jal @@ -0,0 +1,40 @@ +-- Copyright (C) 2017, avrin, http://mpu.seesaa.net +-- This program is licensed under BSD license. +-- Please refer to "LICENSE.txt". + +; not using at this moment + + if HAVE_POWER_OFF_MODE then + if btn_power_off_on then + btn_power_off_on = false + GIE_disable() + fPlaying = false + if defined( pwm_r_duty) then + pwm_r_duty(0) + end if + pwm_l_duty(0) + led = 0 + ; wait released btn + while btn_bit_now == false loop end loop + for 0x8000 loop end loop ; 61msec + while btn_bit_now == false loop end loop + fwdtCtrl = true; enable Watchdog + while true loop + asm sleep ; it will wake up by watchdog trigger every 64msec + ; Here,wake up ! + asm nop ; + ; if btn is low, go to normal mode + if btn_bit_now == false then + fWdtCtrl = false; disable Watch dog + exit loop + end if + end loop + led = 1 + ; wait released btn + while btn_bit_now == false loop end loop + btn_pause_on = false ; release pause mode + fPlaying = true ; Play music + GIE_enable() + end if + end if + diff --git a/lib/pwm_lib.jal b/lib/pwm_lib.jal new file mode 100644 index 0000000..9eb99f5 --- /dev/null +++ b/lib/pwm_lib.jal @@ -0,0 +1,148 @@ +-- Copyright (C) 2017, avrin, http://mpu.seesaa.net +-- This program is licensed under BSD license. +-- Please refer to "LICENSE.txt". + +; PWM period timer is Timer2 + +-------------- +-- definitions +-------------- +alias periodTimerStart is TMR2ON_bit + +------------------------------------------ +-- Stereo | Mono +-- Left Right | ---- +-- Pattern1 CCP1 CCP2 | CCP1 +-- Pattern2 CCP3 CCP4 | CCP3 +-- Pattern3 CCP1 PWM3 PIC16F1764 | +-- Pattern4 PWM1 PWM2 PIC16F1455 | +-- Pattern5 PWM3 PWM4 PIC16F1619 (1) | + +-- (1) Selectable +------------------------------------------- + + +-- /****************** +-- periodTimer_IF_clear +-- *******************/ +procedure periodTimer_IF_clear() is + pragma inline + TMR2IF_bit = 0 +end procedure + +-- /****************** +-- isPeriodTimer_IF +-- *******************/ +function isPeriodTimer_IF() return bit is + pragma inline + return TMR2IF_bit +end function + +-- /****************** +-- pwm_l_duty_fast +-- *******************/ +procedure pwm_l_duty_fast(byte in duty) is + pragma inline + if defined(pwm_l_duty_lower_bits) then + if defined(PWM_DUTY_REG_LEFT_TYPE2) then ; for PIC_16F18313 etc. + if PWM_DUTY_REG_LEFT_TYPE2 then + pwm_l_duty_lower_bits = duty + else + _ERROR "Selection of option" + end if + else + pwm_l_duty_lower_bits = duty + pwm_l_duty_upper_bits = duty >> 2 + end if + end if +end procedure + +-- /****************** +-- pwm_l_duty +-- *******************/ +procedure pwm_l_duty(byte in duty) is + if defined(pwm_l_duty_lower_bits) then + if defined(PWM_DUTY_REG_LEFT_TYPE2) then ; for PIC_16F18313 etc. + if PWM_DUTY_REG_LEFT_TYPE2 then + pwm_l_duty_lower_bits = duty ; FMT bit must be 0. (CCPxCon.CCPxFMT) + else + _ERROR "Selection of option" + end if + else + pwm_l_duty_lower_bits = duty + pwm_l_duty_upper_bits = duty >> 2 + end if + end if +end procedure + +-- /****************** +-- pwm_r_duty_fast +-- *******************/ +if defined(pwm_r_duty_lower_bits) then + procedure pwm_r_duty_fast(byte in duty) is + pragma inline + if defined(PWM_DUTY_REG_RIGHT_TYPE2) then ; for PIC_16F18313 etc. + if PWM_DUTY_REG_RIGHT_TYPE2 then + pwm_r_duty_lower_bits = duty + else + _ERROR "Selection of option" + end if + else + pwm_r_duty_lower_bits = duty + pwm_r_duty_upper_bits = duty >> 2 + end if + end procedure + + -- /****************** + -- pwm_r_duty + -- *******************/ + procedure pwm_r_duty(byte in duty) is + if defined(PWM_DUTY_REG_RIGHT_TYPE2) then ; for PIC_16F18313 etc. + if PWM_DUTY_REG_RIGHT_TYPE2 then + pwm_r_duty_lower_bits = duty + else + _ERROR "Selection of option" + end if + else + pwm_r_duty_lower_bits = duty + pwm_r_duty_upper_bits = duty >> 2 + end if + end procedure +end if + +-- /****************** +-- pwm_start +-- *******************/ +procedure pwm_period_timer_start() is + periodTimerStart = true; + TMR2IF_bit = 0 + ; wait stable PWM timer + while TMR2IF_bit loop end loop + TMR2IF_bit = 0 + TMR2IE_bit = 1 +end procedure + +-- /****************** +-- pwm_stop +-- *******************/ +procedure pwm_period_timer_stop() is + pragma inline + TMR2IE_bit = 0 + periodTimerStart = false; + TMR2IF_bit = 0 +end procedure + +-- /****************** +-- pwm_init +-- *******************/ +procedure pwm_init() is + pragma inline + if defined(PR2) then + PR2 = SAMPLING_FREQ + else + T2PR = SAMPLING_FREQ + end if + +end procedure + + diff --git a/lib/register_def.jal b/lib/register_def.jal new file mode 100644 index 0000000..8b886d6 --- /dev/null +++ b/lib/register_def.jal @@ -0,0 +1,32 @@ +-- Copyright (C) 2017, avrin, http://mpu.seesaa.net +-- This program is licensed under BSD license. +-- Please refer to "LICENSE.txt". + +alias GIE_bit is INTCON_GIE +alias PEIE_bit is INTCON_PEIE +;alias T2CKPS0_bit is T2CON_T2CKPS0 +alias TMR2ON_bit is T2CON_TMR2ON +alias BF_bit is SSPSTAT_BF +alias TMR2IE_bit is PIE1_TMR2IE +alias TMR2IF_bit is PIR1_TMR2IF + +--------- Watchdog definition +if defined(WDTCON0_SEN) then + alias SWDTEN_bit is WDTCON0_SEN +else + alias SWDTEN_bit is WDTCON_SWDTEN +end if + +alias fWdtCtrl is SWDTEN_bit + +if target_chip != PIC_18F14K50 + & target_chip != PIC_18F13K50 + & target_chip != PIC_18F26J50 then + + if defined(WDTCON0_WDTPS) then + alias WDTPS_bit is WDTCON0_WDTPS + else + alias WDTPS_bit is WDTCON_WDTPS + end if +end if + diff --git a/lib/sd_card_local.jal b/lib/sd_card_local.jal new file mode 100644 index 0000000..e71b6a6 --- /dev/null +++ b/lib/sd_card_local.jal @@ -0,0 +1,1967 @@ +------------------------------------------------------------ +-- This files has been modified by avrin, as follows: +-- (1) The file name has been changed from 'sd_card.jal' to 'sd_card_local.jal'. +-- (2) Fixed: Bug in sd_init(). The search tag is 'fix bug'. +-- (3) Added: Comments for my reminder. +-- (4) Minimized code size for my application. +-- 2016/12, by avrin (http://mpu.seesaa.net) +------------------------------------------------------------ + + + + +-- Title: Library for communicating with SD memory cards +-- Author: Matthew Schinkel - borntechi.com, copyright (c) 2009, all rights reserved. +-- Adapted-by: +-- Compiler: >=2.4q2 +-- Revision: $Revision: 3534 $ +-- +-- This file is part of jallib (http://jallib.googlecode.com) +-- Released under the ZLIB license (http://www.opensource.org/licenses/zlib-license.html) +-- +-- Description: this library provides functions for SD memory cards. +-- +-- Notes: SD card SPI mode is 1,1 +-- +-- This version works with standard capacity sd cards up to 4gb and +-- high capacity up to 32 gb. Extended Capacity up to 2TB +-- may be supported later on. +-- +-- Sources: +-- SanDisk Secure Digital Card - http://www.cs.ucr.edu/~amitra/sdcard/ProdManualSDCardv1.9.pdf +-- How to use MMC/SDC - http://forums.parallax.com/forums/attach.aspx?a=32012 +-- + +-- fix a compatibility issue. compiler bug has been reported. +if jal_build == 20110306 then + --for jalv2 2.4o beta (compiled Mar 6 2011) + var volatile byte sd_sector_buffer_low[256] -- 256 low bytes + var volatile byte sd_sector_buffer_high[256] -- 256 high bytes +else + --for jalv2 2.4n and others + var byte sd_sector_buffer_low[256] -- 256 low bytes + var byte sd_sector_buffer_high[256] -- 256 high bytes +end if + +const word SD_BYTE_PER_SECTOR = 512 + +include print + +-- defaulting to MSSP1 if none of following aliases are previously defined +if !defined(spi_master_set_mode) then + alias spi_master_set_mode is spi_master_hw_set_mode +end if +if !defined(spi_master_set_speed) then + alias spi_master_set_speed is spi_master_hw_set_speed +end if + +-- counters +var word sd_byte_count = 0 +var word sd_sector_count = 0 +var dword sd_sector_select + +-- Basic Commands +const byte SD_GO_IDLE_STATE = 0 +const byte SD_SEND_OP_COND = 1 +const byte SD_SEND_IF_COND = 8 -- for SDHC only +const byte SD_SEND_CSD = 9 -- sd sends "Card Specific Data" standard or high capacity +const byte SD_SEND_CID = 10 +const byte SD_STOP_TRANSMISSION = 12 +const byte SD_SEND_STATUS = 13 + +-- Read Commands +const byte SD_SET_BLOCKLEN = 16 +const byte SD_READ_SINGLE_BLOCK = 17 +const byte SD_READ_MULTIPLE_BLOCK = 18 + +-- Write Commands +const byte SD_WRITE_BLOCK = 24 +const byte SD_WRITE_MULTIPLE_BLOCK = 25 +const byte SD_PROGRAM_CSD = 27 + +-- Write Protection Commands +const byte SD_SET_WRITE_PROT = 28 +const byte SD_CLR_WRITE_PROT = 29 +const byte SD_SEND_WRITE_PROT = 30 + +-- Erase Commands +const byte SD_ERASE_WR_BLK_START = 32 +const byte SD_ERASE_WR_BLK_END = 33 +const byte SD_ERASE = 38 + +-- Application Specific Commands +const byte SD_APP_CMD = 55 -- indicate that the next command is a application specific command +const byte SD_GEN_CMD = 56 + +-- Other Commands +const byte SD_READ_OCR = 58 +const byte SD_CRC_ON_OFF = 59 -- default is off + +-- application specific command, must write command 55 first +const byte SD_SD_STATUS = 13 +const byte SD_SEND_NUM_WR_BLOCKS = 22 +const byte SD_SET_WR_BLK_ERASE_COUNT = 23 +const byte SD_SD_APP_OP_COND = 41 +const byte SD_SET_CLR_CARD_DETECT = 42 +const byte SD_SEND_SCR = 51 + +-- R1 RESPONCE BITS +const byte SD_IN_IDLE_STATE = 0 +const byte SD_ERASE_RESET = 1 +const byte SD_ILLEGAL_COMMAND = 2 +const byte SD_COM_CRC_ERROR = 3 +const byte SD_ERASE_SEQUENCE_ERROR = 4 +const byte SD_ADDRESS_ERROR = 5 +const byte SD_PARAMETER_ERROR = 6 + +-- constants for fat32 library +const PATA_HARD_DISK = 0 +const SD_CARD = 1 +const DATA_MEDIA = SD_CARD + +-- misc variables +var bit sd_error = FALSE +var bit sd_card_type = 0 +const bit SD_HIGH_CAPACITY = 0 +const bit SD_STANDARD_CAPACITY = 1 + +-- carrier used to access SD-Card (pseudo-var dealing with SPI) +if !defined(spi_master) then + alias spi_master is spi_master_hw +end if + +-- set storage device +if !defined(STORAGE_DEVICE) then + const STORAGE_DEVICE = SD_CARD +end if + +-- give extra delay after writing. +-- may help to get old standard capacity cards working. +if !defined(SD_DELAY_AFTER_WRITE) then + const SD_DELAY_AFTER_WRITE = FALSE +end if + +-- Extra read & Write speed, takes up program memory, saves ram +if !defined(SD_READ_EXTRA_SPEED) then + const SD_READ_EXTRA_SPEED = FALSE +end if +if !defined(SD_WRITE_EXTRA_SPEED) then + const SD_WRITE_EXTRA_SPEED = FALSE +end if + +-- number of sectors variable +var dword sd_number_of_sectors -- number of sectors * 512 = sd card size +procedure sd_get_number_of_sectors() -- procedure prototype + +-------------------------------------------------------------------------------- +-- send a command to the sd card (commands with 1 response only) +-------------------------------------------------------------------------------- +procedure send_command(byte in command,dword in data, byte out response) is + var byte parameters[4] at data + var byte x + + -- send a valid CRC byte only for set idle command + -- right bit must always be 1 (stop bit) + if command == SD_GO_IDLE_STATE then + x = 0x95 + elsif command == SD_SEND_IF_COND then + x = 0x87 + else + x = 0xFF + end if + + command = command + 64 -- left bits must be 01 (start bits) + + spi_master = 0xFF -- send 8 clock pulses + + spi_master = command -- send the command + spi_master = parameters[3] -- send command parameters + spi_master = parameters[2] -- send command parameters + spi_master = parameters[1] -- send command parameters + spi_master = parameters[0] -- send command parameters + + -- CRC data byte, crc disabled in this lib, but required for SD_GO_IDLE_STATE & SD_SEND_IF_COND commands. + spi_master = x + + -- Get a responce from the card after each command + for 100 loop + response = spi_master + if response != 0xFF then + exit loop + end if + end loop +end procedure + +-------------------------------------------------------------------------------- +-- check if the sd card is ready after last command. +-------------------------------------------------------------------------------- +procedure sd_ready() is + var byte response = 1 + while response != 0 loop -- wait till last command has been completed + ;start sdcard initialize + send_command(SD_SEND_OP_COND,1, response) + end loop +end procedure + +; -------------------------------------------------------------------------------- +; -- send SD_READ_IF_COND command +; -------------------------------------------------------------------------------- +; function sd_read_if_cond() return byte is +; sd_chip_select = low -- enable the sd card +; +; var byte response,x +; send_command(SD_SEND_IF_COND, 0x1AA, response) +; print_byte_hex(serial_data,response) +; +; print_byte_hex(serial_data,spi_master) +; print_byte_hex(serial_data,spi_master) +; print_byte_hex(serial_data,spi_master) +; print_byte_hex(serial_data,spi_master) +; +; ;x = spi_master +; ;x = spi_master +; ;x = spi_master +; ;x = spi_master +; +; spi_master = 0xFF -- send 8 clock pulses +; +; sd_chip_select = high -- disable the sd card +; +; return response +; end function + +-------------------------------------------------------------------------------- +-- initalize the sd card in SPI data transfer mode. +-------------------------------------------------------------------------------- +procedure sd_init() is + + ;print_string(serial_data, "\n\r--------- SD card initialize start ------\n") + if defined(sd_force_spi_mode) == true then + sd_force_spi_mode() + end if + + var byte response = 0 -- shows if sd card init is ok + + pin_sdo = low + pin_sdi = low + pin_sck = low + + -- steps to set sd card to use SPI + _usec_delay(1_000) -- delay + sd_chip_select = high -- chip select high + for 11 loop + spi_master = 0xFF -- send clock pulses (0xFF 10 times) + end loop + -- try to contact the sd card + var byte count1 = 0 + while (response == 0) loop -- try 100 times + _usec_delay(1000) -- delay 1ms + sd_chip_select = low -- enable the sd card + _usec_delay(255) -- delay 255us + send_command(SD_GO_IDLE_STATE,0,response) -- command 0, Resets card to idle state, get a response + ;print_byte_hex(serial_data, response) + ;serial_data = "-" + sd_chip_select = high -- disable the sd card + count1 = count1 + 1 -- increment count + if count1 == 100 then + sd_error = TRUE + return + end if + end loop + + -- send SD_SEND_IF_COND command + sd_chip_select = low -- enable the sd card + send_command(SD_SEND_IF_COND, 0x1AA, response) ; CMD8 + ;print_byte_hex(serial_data,response) + + var bit illegal_command at response : SD_ILLEGAL_COMMAND + if illegal_command == TRUE then -- SD CARD SPEC 1 + ;print_string(serial_data, "\nSDv1\n") + ;print_string(serial_data, "STANDARD CAPACITY\r\n") + sd_card_type = SD_STANDARD_CAPACITY + + sd_chip_select = low -- enable the sd card + ;start sdcard initialize + sd_ready() -- CMD1 wait till sd card is ready + sd_chip_select = high -- disable the sd card + sd_get_number_of_sectors() + return + else -- SD CARD SPEC 2 + ;print_string(serial_data, "\nSDv2") + ;print_byte_hex(serial_data,spi_master) + ;print_byte_hex(serial_data,spi_master) + ;print_byte_hex(serial_data,spi_master) + ;print_byte_hex(serial_data,spi_master) + ; read OCR 4 byte + for 4 loop + response = spi_master ;[2]:0x01 [3]:0xAA + end loop + sd_chip_select = high -- disable the sd card + + if response == 0xAA then + sd_chip_select = low -- enable the sd card + + -- check if it has completed init + forever loop + ; send ACMD41 + send_command(SD_APP_CMD, 0, response) + send_command(SD_SD_APP_OP_COND,0x40_00_00_00, response) + if response == 0 then + exit loop + end if + end loop + ;print_string(serial_data, "\nACMD41 OK\n") + + -- read OCR here + send_command(SD_READ_OCR,0, response); CMD58 + if (spi_master & 0x40) > 0 then ; ocr[0] + sd_card_type = SD_HIGH_CAPACITY; and BLOCK mode + ;print_string(serial_data, "HIGH CAPACITY: Block mode\r\n") + else -- sd card spec 2 standard capacity?? + sd_card_type = SD_STANDARD_CAPACITY; and none BLOCK mode + ;print_string(serial_data, "STANDARD CAPACITY: Non Block mode\r\n") + end if + response = spi_master + response = spi_master + response = spi_master + + -- set block size to 512 + send_command(SD_SET_BLOCKLEN,512, response) + ;sd_ready() -- removed to fix bug + + sd_chip_select = high -- disable the sd card + else + ;print_string(serial_data, "\nFail: ACMD41 command\n") + sd_error = TRUE + sd_chip_select = high -- disable the sd card + sd_get_number_of_sectors() + return + end if + end if + sd_get_number_of_sectors() +end procedure + +-------------------------------------------------------------------------------- +-- set the sd card to idle state +-------------------------------------------------------------------------------- +procedure sd_set_idle() is + sd_chip_select = low -- enable the sd card + var byte response = 0 + for 4 loop + send_command(SD_STOP_TRANSMISSION,0,response) -- stop current transmission + end loop + sd_chip_select = high -- disable the sd card +end procedure + +-------------------------------------------------------------------------------- +-- tell sd card you will be reading data from a specified sector +-- do not interupt read process by switching to another spi component +-------------------------------------------------------------------------------- +procedure sd_start_read(dword in address) is + sd_sector_select = address + + -- put spi into mode + if defined(sd_force_spi_mode) == true then + sd_force_spi_mode() + end if + + var byte response + sd_chip_select = low -- enable the sd card + if sd_card_type == SD_STANDARD_CAPACITY then + address = address * SD_BYTE_PER_SECTOR -- make sd card sector addressable, sd cards are normally byte addressable. + end if + + send_command(SD_READ_MULTIPLE_BLOCK,address,response) -- send read multi block command, ignore response. + sd_byte_count = 0 + sd_sector_count = 0 -- reset count +end procedure + +-------------------------------------------------------------------------------- +-- read 1 bytes from the sd card (pseudo var) +-------------------------------------------------------------------------------- +function sd_data_byte'get() return byte is + var byte x, data_byte + + if sd_byte_count == 0 then -- beginning of sector read + while spi_master != 0xFE loop -- wait till data is ready to read + end loop + end if + + data_byte = spi_master -- get data byte + + sd_byte_count = sd_byte_count + 1 -- increment byte_count + if sd_byte_count == SD_BYTE_PER_SECTOR then -- end of sector read + sd_byte_count = 0 + sd_sector_count = sd_sector_count + 1 -- increment sector number + x = spi_master -- get junk crc data, crc is disabled + x = spi_master -- get junk crc data, crc is disabled + end if + + return data_byte +end function + + + +-------------------------------------------------------------------------------- +-- tell sd card you are finished reading +-- needed to be the same as other mass media libs +-------------------------------------------------------------------------------- +procedure sd_stop_read() is + sd_set_idle() + sd_chip_select = high -- disable the sd card +end procedure + +-------------------------------------------------------------------------------- +-- send a read pulse to the sd card, go 1 bytes forward in current sector. +-------------------------------------------------------------------------------- +procedure sd_read_pulse_byte(word in count1) is + var byte x + for count1 loop -- loop specified number of times + x = sd_data_byte -- do a data read and ignore the incomming data + end loop +end procedure + +-------------------------------------------------------------------------------- +-- tell sd card you will be writing data to a specified sector +-- must write 1 sector at a time, SD_BYTE_PER_SECTOR bytes +-- do not interupt write process by switching to another spi component +-------------------------------------------------------------------------------- +procedure sd_start_write(dword in address) is + + -- put spi into mode + if defined(sd_force_spi_mode) == true then + sd_force_spi_mode() + end if + + sd_chip_select = LOW -- enable the sd card + var byte response + if sd_card_type == SD_STANDARD_CAPACITY then + address = address * SD_BYTE_PER_SECTOR -- make sd card sector addressable, sd cards are normally byte addressable. + end if + send_command(SD_WRITE_MULTIPLE_BLOCK,address,response) -- send read multi block command, ignore response. + sd_byte_count = 0 -- reset count + sd_sector_count = 0 -- reset count + +end procedure + +-------------------------------------------------------------------------------- +-- write 1 byte to the sd card (pseudo var) +-------------------------------------------------------------------------------- +procedure sd_data_byte'put(byte in data_byte) is + var byte x + + if sd_byte_count == 0 then -- beginning of sector write + spi_master = 0xFC -- send "stop transmission token" write multiple command + ;spi_master = 0xFE -- send "stop transmission token" for write single command + end if + + spi_master = data_byte -- send data byte + + sd_byte_count = sd_byte_count + 1 -- increment byte count + + if sd_byte_count == SD_BYTE_PER_SECTOR then -- end of sector write + sd_byte_count = 0 + sd_sector_count = sd_sector_count + 1 -- increment sector count + + spi_master = 0xFF -- send junk crc, crc is disabled + spi_master = 0xFF -- send junk crc, crc is disabled + + x = spi_master -- wait for a response + while x == 0 loop + x = spi_master + end loop + -- response = 010 = data accepted + -- response = 101 = crc error + -- response = 110 = write error + + x = spi_master -- wait for sd card to become ready + while x != 0xFF loop + x = spi_master + end loop + end if +end procedure + +-------------------------------------------------------------------------------- +-- write till sector is finished with input byte +-- data does not actually get written till you get to the end of the sector +-------------------------------------------------------------------------------- +procedure sd_write_to_sector_end(byte in input_byte) is + if !(sd_byte_count == 0) then + var byte x + var word y + y = SD_BYTE_PER_SECTOR - sd_byte_count + for y loop + sd_data_byte = input_byte -- write 2 bytes, 0's as data + end loop + + sd_byte_count = 0 + sd_sector_count = sd_sector_count + 1 -- increment sector count + + spi_master = 0xFF -- send junk crc, crc is disabled + spi_master = 0xFF -- send junk crc, crc is disabled + + x = spi_master -- wait for a response + while x == 0 loop + x = spi_master + end loop + -- response = 010 = data accepted + -- response = 101 = crc error + -- response = 110 = write error + + x = spi_master -- wait for sd card to become ready + while x != 0xFF loop + x = spi_master + end loop + end if +end procedure + +-------------------------------------------------------------------------------- +-- tell sd card you are finished writing +-------------------------------------------------------------------------------- +procedure sd_stop_write() is + var byte response + sd_write_to_sector_end(0) -- writes 0's till end of sector + + spi_master = 0xFD -- send "stop transmission token" + + send_command(SD_STOP_TRANSMISSION,0,response) -- stop current transmission + + if SD_DELAY_AFTER_WRITE == TRUE then ; for trouble cards + _usec_delay (50_000) + else + for 50000 loop ; use this in most cases + send_command(SD_STOP_TRANSMISSION,0,response) -- stop current transmission + if response != 0 then + exit loop + end if + end loop + end if + sd_chip_select = high -- disable the sd card +end procedure + +;-------------------------------------------------------------------------------- +;-- send a write pulse to the sd card by writing 2 bytes, 0's as data +;-------------------------------------------------------------------------------- +procedure sd_write_pulse(byte in count1) is + _warn "This procedure is obsolete. Please use sd_write_pulse_byte()" + for count1 loop + sd_data_byte = 0 + sd_data_byte = 0 + end loop +end procedure + +;-------------------------------------------------------------------------------- +;-- send a write pulse to the sd card by writing 1 bytes, 0 as data +;-------------------------------------------------------------------------------- +procedure sd_write_pulse_byte(word in count1) is + for count1 loop + sd_data_byte = 0 + end loop +end procedure + +--------------------------------------------------------------------------- +-- define the sector buffer. Can be read as sd_sector_buffer[0-511] +--------------------------------------------------------------------------- +function sd_sector_buffer'get(word in address) return byte is + pragma inline + if bit(address) == 0 then + return sd_sector_buffer_low[address / 2] + else + return sd_sector_buffer_high[(address / 2)] + end if +end function +-- +procedure sd_sector_buffer'put(word in address, byte in data) is + pragma inline + if bit(address) == 0 then + sd_sector_buffer_low[address / 2] = data + else + sd_sector_buffer_high[(address / 2)] = data + end if +end procedure + +--------------------------------------------------------------------------- +-- Extra speed read procedure +--------------------------------------------------------------------------- +procedure _sd_read_512() is + sd_sector_buffer_low[0] = spi_master + sd_sector_buffer_high[0] = spi_master + sd_sector_buffer_low[1] = spi_master + sd_sector_buffer_high[1] = spi_master + sd_sector_buffer_low[2] = spi_master + sd_sector_buffer_high[2] = spi_master + sd_sector_buffer_low[3] = spi_master + sd_sector_buffer_high[3] = spi_master + sd_sector_buffer_low[4] = spi_master + sd_sector_buffer_high[4] = spi_master + sd_sector_buffer_low[5] = spi_master + sd_sector_buffer_high[5] = spi_master + sd_sector_buffer_low[6] = spi_master + sd_sector_buffer_high[6] = spi_master + sd_sector_buffer_low[7] = spi_master + sd_sector_buffer_high[7] = spi_master + sd_sector_buffer_low[8] = spi_master + sd_sector_buffer_high[8] = spi_master + sd_sector_buffer_low[9] = spi_master + sd_sector_buffer_high[9] = spi_master + sd_sector_buffer_low[10] = spi_master + sd_sector_buffer_high[10] = spi_master + sd_sector_buffer_low[11] = spi_master + sd_sector_buffer_high[11] = spi_master + sd_sector_buffer_low[12] = spi_master + sd_sector_buffer_high[12] = spi_master + sd_sector_buffer_low[13] = spi_master + sd_sector_buffer_high[13] = spi_master + sd_sector_buffer_low[14] = spi_master + sd_sector_buffer_high[14] = spi_master + sd_sector_buffer_low[15] = spi_master + sd_sector_buffer_high[15] = spi_master + sd_sector_buffer_low[16] = spi_master + sd_sector_buffer_high[16] = spi_master + sd_sector_buffer_low[17] = spi_master + sd_sector_buffer_high[17] = spi_master + sd_sector_buffer_low[18] = spi_master + sd_sector_buffer_high[18] = spi_master + sd_sector_buffer_low[19] = spi_master + sd_sector_buffer_high[19] = spi_master + sd_sector_buffer_low[20] = spi_master + sd_sector_buffer_high[20] = spi_master + sd_sector_buffer_low[21] = spi_master + sd_sector_buffer_high[21] = spi_master + sd_sector_buffer_low[22] = spi_master + sd_sector_buffer_high[22] = spi_master + sd_sector_buffer_low[23] = spi_master + sd_sector_buffer_high[23] = spi_master + sd_sector_buffer_low[24] = spi_master + sd_sector_buffer_high[24] = spi_master + sd_sector_buffer_low[25] = spi_master + sd_sector_buffer_high[25] = spi_master + sd_sector_buffer_low[26] = spi_master + sd_sector_buffer_high[26] = spi_master + sd_sector_buffer_low[27] = spi_master + sd_sector_buffer_high[27] = spi_master + sd_sector_buffer_low[28] = spi_master + sd_sector_buffer_high[28] = spi_master + sd_sector_buffer_low[29] = spi_master + sd_sector_buffer_high[29] = spi_master + sd_sector_buffer_low[30] = spi_master + sd_sector_buffer_high[30] = spi_master + sd_sector_buffer_low[31] = spi_master + sd_sector_buffer_high[31] = spi_master + sd_sector_buffer_low[32] = spi_master + sd_sector_buffer_high[32] = spi_master + sd_sector_buffer_low[33] = spi_master + sd_sector_buffer_high[33] = spi_master + sd_sector_buffer_low[34] = spi_master + sd_sector_buffer_high[34] = spi_master + sd_sector_buffer_low[35] = spi_master + sd_sector_buffer_high[35] = spi_master + sd_sector_buffer_low[36] = spi_master + sd_sector_buffer_high[36] = spi_master + sd_sector_buffer_low[37] = spi_master + sd_sector_buffer_high[37] = spi_master + sd_sector_buffer_low[38] = spi_master + sd_sector_buffer_high[38] = spi_master + sd_sector_buffer_low[39] = spi_master + sd_sector_buffer_high[39] = spi_master + sd_sector_buffer_low[40] = spi_master + sd_sector_buffer_high[40] = spi_master + sd_sector_buffer_low[41] = spi_master + sd_sector_buffer_high[41] = spi_master + sd_sector_buffer_low[42] = spi_master + sd_sector_buffer_high[42] = spi_master + sd_sector_buffer_low[43] = spi_master + sd_sector_buffer_high[43] = spi_master + sd_sector_buffer_low[44] = spi_master + sd_sector_buffer_high[44] = spi_master + sd_sector_buffer_low[45] = spi_master + sd_sector_buffer_high[45] = spi_master + sd_sector_buffer_low[46] = spi_master + sd_sector_buffer_high[46] = spi_master + sd_sector_buffer_low[47] = spi_master + sd_sector_buffer_high[47] = spi_master + sd_sector_buffer_low[48] = spi_master + sd_sector_buffer_high[48] = spi_master + sd_sector_buffer_low[49] = spi_master + sd_sector_buffer_high[49] = spi_master + sd_sector_buffer_low[50] = spi_master + sd_sector_buffer_high[50] = spi_master + sd_sector_buffer_low[51] = spi_master + sd_sector_buffer_high[51] = spi_master + sd_sector_buffer_low[52] = spi_master + sd_sector_buffer_high[52] = spi_master + sd_sector_buffer_low[53] = spi_master + sd_sector_buffer_high[53] = spi_master + sd_sector_buffer_low[54] = spi_master + sd_sector_buffer_high[54] = spi_master + sd_sector_buffer_low[55] = spi_master + sd_sector_buffer_high[55] = spi_master + sd_sector_buffer_low[56] = spi_master + sd_sector_buffer_high[56] = spi_master + sd_sector_buffer_low[57] = spi_master + sd_sector_buffer_high[57] = spi_master + sd_sector_buffer_low[58] = spi_master + sd_sector_buffer_high[58] = spi_master + sd_sector_buffer_low[59] = spi_master + sd_sector_buffer_high[59] = spi_master + sd_sector_buffer_low[60] = spi_master + sd_sector_buffer_high[60] = spi_master + sd_sector_buffer_low[61] = spi_master + sd_sector_buffer_high[61] = spi_master + sd_sector_buffer_low[62] = spi_master + sd_sector_buffer_high[62] = spi_master + sd_sector_buffer_low[63] = spi_master + sd_sector_buffer_high[63] = spi_master + sd_sector_buffer_low[64] = spi_master + sd_sector_buffer_high[64] = spi_master + sd_sector_buffer_low[65] = spi_master + sd_sector_buffer_high[65] = spi_master + sd_sector_buffer_low[66] = spi_master + sd_sector_buffer_high[66] = spi_master + sd_sector_buffer_low[67] = spi_master + sd_sector_buffer_high[67] = spi_master + sd_sector_buffer_low[68] = spi_master + sd_sector_buffer_high[68] = spi_master + sd_sector_buffer_low[69] = spi_master + sd_sector_buffer_high[69] = spi_master + sd_sector_buffer_low[70] = spi_master + sd_sector_buffer_high[70] = spi_master + sd_sector_buffer_low[71] = spi_master + sd_sector_buffer_high[71] = spi_master + sd_sector_buffer_low[72] = spi_master + sd_sector_buffer_high[72] = spi_master + sd_sector_buffer_low[73] = spi_master + sd_sector_buffer_high[73] = spi_master + sd_sector_buffer_low[74] = spi_master + sd_sector_buffer_high[74] = spi_master + sd_sector_buffer_low[75] = spi_master + sd_sector_buffer_high[75] = spi_master + sd_sector_buffer_low[76] = spi_master + sd_sector_buffer_high[76] = spi_master + sd_sector_buffer_low[77] = spi_master + sd_sector_buffer_high[77] = spi_master + sd_sector_buffer_low[78] = spi_master + sd_sector_buffer_high[78] = spi_master + sd_sector_buffer_low[79] = spi_master + sd_sector_buffer_high[79] = spi_master + sd_sector_buffer_low[80] = spi_master + sd_sector_buffer_high[80] = spi_master + sd_sector_buffer_low[81] = spi_master + sd_sector_buffer_high[81] = spi_master + sd_sector_buffer_low[82] = spi_master + sd_sector_buffer_high[82] = spi_master + sd_sector_buffer_low[83] = spi_master + sd_sector_buffer_high[83] = spi_master + sd_sector_buffer_low[84] = spi_master + sd_sector_buffer_high[84] = spi_master + sd_sector_buffer_low[85] = spi_master + sd_sector_buffer_high[85] = spi_master + sd_sector_buffer_low[86] = spi_master + sd_sector_buffer_high[86] = spi_master + sd_sector_buffer_low[87] = spi_master + sd_sector_buffer_high[87] = spi_master + sd_sector_buffer_low[88] = spi_master + sd_sector_buffer_high[88] = spi_master + sd_sector_buffer_low[89] = spi_master + sd_sector_buffer_high[89] = spi_master + sd_sector_buffer_low[90] = spi_master + sd_sector_buffer_high[90] = spi_master + sd_sector_buffer_low[91] = spi_master + sd_sector_buffer_high[91] = spi_master + sd_sector_buffer_low[92] = spi_master + sd_sector_buffer_high[92] = spi_master + sd_sector_buffer_low[93] = spi_master + sd_sector_buffer_high[93] = spi_master + sd_sector_buffer_low[94] = spi_master + sd_sector_buffer_high[94] = spi_master + sd_sector_buffer_low[95] = spi_master + sd_sector_buffer_high[95] = spi_master + sd_sector_buffer_low[96] = spi_master + sd_sector_buffer_high[96] = spi_master + sd_sector_buffer_low[97] = spi_master + sd_sector_buffer_high[97] = spi_master + sd_sector_buffer_low[98] = spi_master + sd_sector_buffer_high[98] = spi_master + sd_sector_buffer_low[99] = spi_master + sd_sector_buffer_high[99] = spi_master + sd_sector_buffer_low[100] = spi_master + sd_sector_buffer_high[100] = spi_master + sd_sector_buffer_low[101] = spi_master + sd_sector_buffer_high[101] = spi_master + sd_sector_buffer_low[102] = spi_master + sd_sector_buffer_high[102] = spi_master + sd_sector_buffer_low[103] = spi_master + sd_sector_buffer_high[103] = spi_master + sd_sector_buffer_low[104] = spi_master + sd_sector_buffer_high[104] = spi_master + sd_sector_buffer_low[105] = spi_master + sd_sector_buffer_high[105] = spi_master + sd_sector_buffer_low[106] = spi_master + sd_sector_buffer_high[106] = spi_master + sd_sector_buffer_low[107] = spi_master + sd_sector_buffer_high[107] = spi_master + sd_sector_buffer_low[108] = spi_master + sd_sector_buffer_high[108] = spi_master + sd_sector_buffer_low[109] = spi_master + sd_sector_buffer_high[109] = spi_master + sd_sector_buffer_low[110] = spi_master + sd_sector_buffer_high[110] = spi_master + sd_sector_buffer_low[111] = spi_master + sd_sector_buffer_high[111] = spi_master + sd_sector_buffer_low[112] = spi_master + sd_sector_buffer_high[112] = spi_master + sd_sector_buffer_low[113] = spi_master + sd_sector_buffer_high[113] = spi_master + sd_sector_buffer_low[114] = spi_master + sd_sector_buffer_high[114] = spi_master + sd_sector_buffer_low[115] = spi_master + sd_sector_buffer_high[115] = spi_master + sd_sector_buffer_low[116] = spi_master + sd_sector_buffer_high[116] = spi_master + sd_sector_buffer_low[117] = spi_master + sd_sector_buffer_high[117] = spi_master + sd_sector_buffer_low[118] = spi_master + sd_sector_buffer_high[118] = spi_master + sd_sector_buffer_low[119] = spi_master + sd_sector_buffer_high[119] = spi_master + sd_sector_buffer_low[120] = spi_master + sd_sector_buffer_high[120] = spi_master + sd_sector_buffer_low[121] = spi_master + sd_sector_buffer_high[121] = spi_master + sd_sector_buffer_low[122] = spi_master + sd_sector_buffer_high[122] = spi_master + sd_sector_buffer_low[123] = spi_master + sd_sector_buffer_high[123] = spi_master + sd_sector_buffer_low[124] = spi_master + sd_sector_buffer_high[124] = spi_master + sd_sector_buffer_low[125] = spi_master + sd_sector_buffer_high[125] = spi_master + sd_sector_buffer_low[126] = spi_master + sd_sector_buffer_high[126] = spi_master + sd_sector_buffer_low[127] = spi_master + sd_sector_buffer_high[127] = spi_master + sd_sector_buffer_low[128] = spi_master + sd_sector_buffer_high[128] = spi_master + sd_sector_buffer_low[129] = spi_master + sd_sector_buffer_high[129] = spi_master + sd_sector_buffer_low[130] = spi_master + sd_sector_buffer_high[130] = spi_master + sd_sector_buffer_low[131] = spi_master + sd_sector_buffer_high[131] = spi_master + sd_sector_buffer_low[132] = spi_master + sd_sector_buffer_high[132] = spi_master + sd_sector_buffer_low[133] = spi_master + sd_sector_buffer_high[133] = spi_master + sd_sector_buffer_low[134] = spi_master + sd_sector_buffer_high[134] = spi_master + sd_sector_buffer_low[135] = spi_master + sd_sector_buffer_high[135] = spi_master + sd_sector_buffer_low[136] = spi_master + sd_sector_buffer_high[136] = spi_master + sd_sector_buffer_low[137] = spi_master + sd_sector_buffer_high[137] = spi_master + sd_sector_buffer_low[138] = spi_master + sd_sector_buffer_high[138] = spi_master + sd_sector_buffer_low[139] = spi_master + sd_sector_buffer_high[139] = spi_master + sd_sector_buffer_low[140] = spi_master + sd_sector_buffer_high[140] = spi_master + sd_sector_buffer_low[141] = spi_master + sd_sector_buffer_high[141] = spi_master + sd_sector_buffer_low[142] = spi_master + sd_sector_buffer_high[142] = spi_master + sd_sector_buffer_low[143] = spi_master + sd_sector_buffer_high[143] = spi_master + sd_sector_buffer_low[144] = spi_master + sd_sector_buffer_high[144] = spi_master + sd_sector_buffer_low[145] = spi_master + sd_sector_buffer_high[145] = spi_master + sd_sector_buffer_low[146] = spi_master + sd_sector_buffer_high[146] = spi_master + sd_sector_buffer_low[147] = spi_master + sd_sector_buffer_high[147] = spi_master + sd_sector_buffer_low[148] = spi_master + sd_sector_buffer_high[148] = spi_master + sd_sector_buffer_low[149] = spi_master + sd_sector_buffer_high[149] = spi_master + sd_sector_buffer_low[150] = spi_master + sd_sector_buffer_high[150] = spi_master + sd_sector_buffer_low[151] = spi_master + sd_sector_buffer_high[151] = spi_master + sd_sector_buffer_low[152] = spi_master + sd_sector_buffer_high[152] = spi_master + sd_sector_buffer_low[153] = spi_master + sd_sector_buffer_high[153] = spi_master + sd_sector_buffer_low[154] = spi_master + sd_sector_buffer_high[154] = spi_master + sd_sector_buffer_low[155] = spi_master + sd_sector_buffer_high[155] = spi_master + sd_sector_buffer_low[156] = spi_master + sd_sector_buffer_high[156] = spi_master + sd_sector_buffer_low[157] = spi_master + sd_sector_buffer_high[157] = spi_master + sd_sector_buffer_low[158] = spi_master + sd_sector_buffer_high[158] = spi_master + sd_sector_buffer_low[159] = spi_master + sd_sector_buffer_high[159] = spi_master + sd_sector_buffer_low[160] = spi_master + sd_sector_buffer_high[160] = spi_master + sd_sector_buffer_low[161] = spi_master + sd_sector_buffer_high[161] = spi_master + sd_sector_buffer_low[162] = spi_master + sd_sector_buffer_high[162] = spi_master + sd_sector_buffer_low[163] = spi_master + sd_sector_buffer_high[163] = spi_master + sd_sector_buffer_low[164] = spi_master + sd_sector_buffer_high[164] = spi_master + sd_sector_buffer_low[165] = spi_master + sd_sector_buffer_high[165] = spi_master + sd_sector_buffer_low[166] = spi_master + sd_sector_buffer_high[166] = spi_master + sd_sector_buffer_low[167] = spi_master + sd_sector_buffer_high[167] = spi_master + sd_sector_buffer_low[168] = spi_master + sd_sector_buffer_high[168] = spi_master + sd_sector_buffer_low[169] = spi_master + sd_sector_buffer_high[169] = spi_master + sd_sector_buffer_low[170] = spi_master + sd_sector_buffer_high[170] = spi_master + sd_sector_buffer_low[171] = spi_master + sd_sector_buffer_high[171] = spi_master + sd_sector_buffer_low[172] = spi_master + sd_sector_buffer_high[172] = spi_master + sd_sector_buffer_low[173] = spi_master + sd_sector_buffer_high[173] = spi_master + sd_sector_buffer_low[174] = spi_master + sd_sector_buffer_high[174] = spi_master + sd_sector_buffer_low[175] = spi_master + sd_sector_buffer_high[175] = spi_master + sd_sector_buffer_low[176] = spi_master + sd_sector_buffer_high[176] = spi_master + sd_sector_buffer_low[177] = spi_master + sd_sector_buffer_high[177] = spi_master + sd_sector_buffer_low[178] = spi_master + sd_sector_buffer_high[178] = spi_master + sd_sector_buffer_low[179] = spi_master + sd_sector_buffer_high[179] = spi_master + sd_sector_buffer_low[180] = spi_master + sd_sector_buffer_high[180] = spi_master + sd_sector_buffer_low[181] = spi_master + sd_sector_buffer_high[181] = spi_master + sd_sector_buffer_low[182] = spi_master + sd_sector_buffer_high[182] = spi_master + sd_sector_buffer_low[183] = spi_master + sd_sector_buffer_high[183] = spi_master + sd_sector_buffer_low[184] = spi_master + sd_sector_buffer_high[184] = spi_master + sd_sector_buffer_low[185] = spi_master + sd_sector_buffer_high[185] = spi_master + sd_sector_buffer_low[186] = spi_master + sd_sector_buffer_high[186] = spi_master + sd_sector_buffer_low[187] = spi_master + sd_sector_buffer_high[187] = spi_master + sd_sector_buffer_low[188] = spi_master + sd_sector_buffer_high[188] = spi_master + sd_sector_buffer_low[189] = spi_master + sd_sector_buffer_high[189] = spi_master + sd_sector_buffer_low[190] = spi_master + sd_sector_buffer_high[190] = spi_master + sd_sector_buffer_low[191] = spi_master + sd_sector_buffer_high[191] = spi_master + sd_sector_buffer_low[192] = spi_master + sd_sector_buffer_high[192] = spi_master + sd_sector_buffer_low[193] = spi_master + sd_sector_buffer_high[193] = spi_master + sd_sector_buffer_low[194] = spi_master + sd_sector_buffer_high[194] = spi_master + sd_sector_buffer_low[195] = spi_master + sd_sector_buffer_high[195] = spi_master + sd_sector_buffer_low[196] = spi_master + sd_sector_buffer_high[196] = spi_master + sd_sector_buffer_low[197] = spi_master + sd_sector_buffer_high[197] = spi_master + sd_sector_buffer_low[198] = spi_master + sd_sector_buffer_high[198] = spi_master + sd_sector_buffer_low[199] = spi_master + sd_sector_buffer_high[199] = spi_master + sd_sector_buffer_low[200] = spi_master + sd_sector_buffer_high[200] = spi_master + sd_sector_buffer_low[201] = spi_master + sd_sector_buffer_high[201] = spi_master + sd_sector_buffer_low[202] = spi_master + sd_sector_buffer_high[202] = spi_master + sd_sector_buffer_low[203] = spi_master + sd_sector_buffer_high[203] = spi_master + sd_sector_buffer_low[204] = spi_master + sd_sector_buffer_high[204] = spi_master + sd_sector_buffer_low[205] = spi_master + sd_sector_buffer_high[205] = spi_master + sd_sector_buffer_low[206] = spi_master + sd_sector_buffer_high[206] = spi_master + sd_sector_buffer_low[207] = spi_master + sd_sector_buffer_high[207] = spi_master + sd_sector_buffer_low[208] = spi_master + sd_sector_buffer_high[208] = spi_master + sd_sector_buffer_low[209] = spi_master + sd_sector_buffer_high[209] = spi_master + sd_sector_buffer_low[210] = spi_master + sd_sector_buffer_high[210] = spi_master + sd_sector_buffer_low[211] = spi_master + sd_sector_buffer_high[211] = spi_master + sd_sector_buffer_low[212] = spi_master + sd_sector_buffer_high[212] = spi_master + sd_sector_buffer_low[213] = spi_master + sd_sector_buffer_high[213] = spi_master + sd_sector_buffer_low[214] = spi_master + sd_sector_buffer_high[214] = spi_master + sd_sector_buffer_low[215] = spi_master + sd_sector_buffer_high[215] = spi_master + sd_sector_buffer_low[216] = spi_master + sd_sector_buffer_high[216] = spi_master + sd_sector_buffer_low[217] = spi_master + sd_sector_buffer_high[217] = spi_master + sd_sector_buffer_low[218] = spi_master + sd_sector_buffer_high[218] = spi_master + sd_sector_buffer_low[219] = spi_master + sd_sector_buffer_high[219] = spi_master + sd_sector_buffer_low[220] = spi_master + sd_sector_buffer_high[220] = spi_master + sd_sector_buffer_low[221] = spi_master + sd_sector_buffer_high[221] = spi_master + sd_sector_buffer_low[222] = spi_master + sd_sector_buffer_high[222] = spi_master + sd_sector_buffer_low[223] = spi_master + sd_sector_buffer_high[223] = spi_master + sd_sector_buffer_low[224] = spi_master + sd_sector_buffer_high[224] = spi_master + sd_sector_buffer_low[225] = spi_master + sd_sector_buffer_high[225] = spi_master + sd_sector_buffer_low[226] = spi_master + sd_sector_buffer_high[226] = spi_master + sd_sector_buffer_low[227] = spi_master + sd_sector_buffer_high[227] = spi_master + sd_sector_buffer_low[228] = spi_master + sd_sector_buffer_high[228] = spi_master + sd_sector_buffer_low[229] = spi_master + sd_sector_buffer_high[229] = spi_master + sd_sector_buffer_low[230] = spi_master + sd_sector_buffer_high[230] = spi_master + sd_sector_buffer_low[231] = spi_master + sd_sector_buffer_high[231] = spi_master + sd_sector_buffer_low[232] = spi_master + sd_sector_buffer_high[232] = spi_master + sd_sector_buffer_low[233] = spi_master + sd_sector_buffer_high[233] = spi_master + sd_sector_buffer_low[234] = spi_master + sd_sector_buffer_high[234] = spi_master + sd_sector_buffer_low[235] = spi_master + sd_sector_buffer_high[235] = spi_master + sd_sector_buffer_low[236] = spi_master + sd_sector_buffer_high[236] = spi_master + sd_sector_buffer_low[237] = spi_master + sd_sector_buffer_high[237] = spi_master + sd_sector_buffer_low[238] = spi_master + sd_sector_buffer_high[238] = spi_master + sd_sector_buffer_low[239] = spi_master + sd_sector_buffer_high[239] = spi_master + sd_sector_buffer_low[240] = spi_master + sd_sector_buffer_high[240] = spi_master + sd_sector_buffer_low[241] = spi_master + sd_sector_buffer_high[241] = spi_master + sd_sector_buffer_low[242] = spi_master + sd_sector_buffer_high[242] = spi_master + sd_sector_buffer_low[243] = spi_master + sd_sector_buffer_high[243] = spi_master + sd_sector_buffer_low[244] = spi_master + sd_sector_buffer_high[244] = spi_master + sd_sector_buffer_low[245] = spi_master + sd_sector_buffer_high[245] = spi_master + sd_sector_buffer_low[246] = spi_master + sd_sector_buffer_high[246] = spi_master + sd_sector_buffer_low[247] = spi_master + sd_sector_buffer_high[247] = spi_master + sd_sector_buffer_low[248] = spi_master + sd_sector_buffer_high[248] = spi_master + sd_sector_buffer_low[249] = spi_master + sd_sector_buffer_high[249] = spi_master + sd_sector_buffer_low[250] = spi_master + sd_sector_buffer_high[250] = spi_master + sd_sector_buffer_low[251] = spi_master + sd_sector_buffer_high[251] = spi_master + sd_sector_buffer_low[252] = spi_master + sd_sector_buffer_high[252] = spi_master + sd_sector_buffer_low[253] = spi_master + sd_sector_buffer_high[253] = spi_master + sd_sector_buffer_low[254] = spi_master + sd_sector_buffer_high[254] = spi_master + sd_sector_buffer_low[255] = spi_master + sd_sector_buffer_high[255] = spi_master +end procedure + +-------------------------------------------------------------------------------- +-- read one entire sector +-------------------------------------------------------------------------------- +procedure sd_read_sector() is + var byte x + var word count1 = 0 + + while spi_master != 0xFE loop -- wait till data is ready to read + end loop + + -- get sector data + if defined(SD_READ_EXTRA_SPEED) == TRUE then + if SD_READ_EXTRA_SPEED == TRUE then + _sd_read_512() + else + for 256 using count1 loop + -- get the data trough spi + sd_sector_buffer_low[count1] = spi_master -- get low data + sd_sector_buffer_high[count1] = spi_master -- get high data + end loop + end if + else + for 256 using count1 loop + -- get the data trough spi + sd_sector_buffer_low[count1] = spi_master -- get low data + sd_sector_buffer_high[count1] = spi_master -- get high data + end loop + end if + + sd_sector_count = sd_sector_count + 1 -- increment sector number + x = spi_master -- get junk crc data, crc is disabled + x = spi_master -- get junk crc data, crc is disabled + + ;sd_byte_count = sd_byte_count + 2 -- increment byte_count + + sd_sector_select = sd_sector_select + 1 +end procedure + + +;------------------------------------------------------------------------------ +; storage_read_callback prototype definition, for use in libs such as USB. +;------------------------------------------------------------------------------ +if defined(SD_READ_EXTRA_SPEED) then + if SD_READ_EXTRA_SPEED == TRUE then + procedure storage_read_callback(word in chunk_size) + end if +end if + +if defined(SD_WRITE_EXTRA_SPEED) then + if SD_WRITE_EXTRA_SPEED == TRUE then + procedure storage_write_callback(word in chunk_size) + end if +end if + +;------------------------------------------------------------------------------ +; read one entire sector with callback to storage_read_callback() +; for direct reading with spi_master. Make sure you call spi_master +; chunk_size times in your storage_read_callback(). +; chunk_size must be a division of 512 (ex, chunk_size 64 is 512/8) +;------------------------------------------------------------------------------ +procedure sd_read_sector_with_callback(word in chunk_size) is + var byte x + var byte count1 + + if sd_byte_count == 0 then + while spi_master != 0xFE loop -- wait till data is ready to read + end loop + end if + + sd_byte_count = sd_byte_count + chunk_size + +; get sector data + if defined(SD_READ_EXTRA_SPEED) == TRUE then + if SD_READ_EXTRA_SPEED == TRUE then + storage_read_callback(chunk_size) + else + for chunk_size/2 using count1 loop + -- get the data trough spi + sd_sector_buffer_low[count1] = spi_master -- get low data + sd_sector_buffer_high[count1] = spi_master -- get high data + end loop + end if + else + for chunk_size/2 using count1 loop + -- get the data trough spi + sd_sector_buffer_low[count1] = spi_master -- get low data + sd_sector_buffer_high[count1] = spi_master -- get high data + end loop + end if + + + if sd_byte_count == 512 then + sd_sector_count = sd_sector_count + 1 -- increment sector number + x = spi_master -- get junk crc data, crc is disabled + x = spi_master -- get junk crc data, crc is disabled + + ;sd_byte_count = sd_byte_count + 2 -- increment byte_count + + sd_sector_select = sd_sector_select + 1 + end if +end procedure + + + +-------------------------------------------------------------------------------- +-- read one entire sector at address +-------------------------------------------------------------------------------- +procedure sd_read_sector_address(dword in address) is + sd_start_read(address) + sd_read_sector() + sd_stop_read() +end procedure + +--------------------------------------------------------------------------- +-- Extra speed write procedure +--------------------------------------------------------------------------- +procedure _sd_write_512() is + spi_master = sd_sector_buffer_low[0] + spi_master = sd_sector_buffer_high[0] + spi_master = sd_sector_buffer_low[1] + spi_master = sd_sector_buffer_high[1] + spi_master = sd_sector_buffer_low[2] + spi_master = sd_sector_buffer_high[2] + spi_master = sd_sector_buffer_low[3] + spi_master = sd_sector_buffer_high[3] + spi_master = sd_sector_buffer_low[4] + spi_master = sd_sector_buffer_high[4] + spi_master = sd_sector_buffer_low[5] + spi_master = sd_sector_buffer_high[5] + spi_master = sd_sector_buffer_low[6] + spi_master = sd_sector_buffer_high[6] + spi_master = sd_sector_buffer_low[7] + spi_master = sd_sector_buffer_high[7] + spi_master = sd_sector_buffer_low[8] + spi_master = sd_sector_buffer_high[8] + spi_master = sd_sector_buffer_low[9] + spi_master = sd_sector_buffer_high[9] + spi_master = sd_sector_buffer_low[10] + spi_master = sd_sector_buffer_high[10] + spi_master = sd_sector_buffer_low[11] + spi_master = sd_sector_buffer_high[11] + spi_master = sd_sector_buffer_low[12] + spi_master = sd_sector_buffer_high[12] + spi_master = sd_sector_buffer_low[13] + spi_master = sd_sector_buffer_high[13] + spi_master = sd_sector_buffer_low[14] + spi_master = sd_sector_buffer_high[14] + spi_master = sd_sector_buffer_low[15] + spi_master = sd_sector_buffer_high[15] + spi_master = sd_sector_buffer_low[16] + spi_master = sd_sector_buffer_high[16] + spi_master = sd_sector_buffer_low[17] + spi_master = sd_sector_buffer_high[17] + spi_master = sd_sector_buffer_low[18] + spi_master = sd_sector_buffer_high[18] + spi_master = sd_sector_buffer_low[19] + spi_master = sd_sector_buffer_high[19] + spi_master = sd_sector_buffer_low[20] + spi_master = sd_sector_buffer_high[20] + spi_master = sd_sector_buffer_low[21] + spi_master = sd_sector_buffer_high[21] + spi_master = sd_sector_buffer_low[22] + spi_master = sd_sector_buffer_high[22] + spi_master = sd_sector_buffer_low[23] + spi_master = sd_sector_buffer_high[23] + spi_master = sd_sector_buffer_low[24] + spi_master = sd_sector_buffer_high[24] + spi_master = sd_sector_buffer_low[25] + spi_master = sd_sector_buffer_high[25] + spi_master = sd_sector_buffer_low[26] + spi_master = sd_sector_buffer_high[26] + spi_master = sd_sector_buffer_low[27] + spi_master = sd_sector_buffer_high[27] + spi_master = sd_sector_buffer_low[28] + spi_master = sd_sector_buffer_high[28] + spi_master = sd_sector_buffer_low[29] + spi_master = sd_sector_buffer_high[29] + spi_master = sd_sector_buffer_low[30] + spi_master = sd_sector_buffer_high[30] + spi_master = sd_sector_buffer_low[31] + spi_master = sd_sector_buffer_high[31] + spi_master = sd_sector_buffer_low[32] + spi_master = sd_sector_buffer_high[32] + spi_master = sd_sector_buffer_low[33] + spi_master = sd_sector_buffer_high[33] + spi_master = sd_sector_buffer_low[34] + spi_master = sd_sector_buffer_high[34] + spi_master = sd_sector_buffer_low[35] + spi_master = sd_sector_buffer_high[35] + spi_master = sd_sector_buffer_low[36] + spi_master = sd_sector_buffer_high[36] + spi_master = sd_sector_buffer_low[37] + spi_master = sd_sector_buffer_high[37] + spi_master = sd_sector_buffer_low[38] + spi_master = sd_sector_buffer_high[38] + spi_master = sd_sector_buffer_low[39] + spi_master = sd_sector_buffer_high[39] + spi_master = sd_sector_buffer_low[40] + spi_master = sd_sector_buffer_high[40] + spi_master = sd_sector_buffer_low[41] + spi_master = sd_sector_buffer_high[41] + spi_master = sd_sector_buffer_low[42] + spi_master = sd_sector_buffer_high[42] + spi_master = sd_sector_buffer_low[43] + spi_master = sd_sector_buffer_high[43] + spi_master = sd_sector_buffer_low[44] + spi_master = sd_sector_buffer_high[44] + spi_master = sd_sector_buffer_low[45] + spi_master = sd_sector_buffer_high[45] + spi_master = sd_sector_buffer_low[46] + spi_master = sd_sector_buffer_high[46] + spi_master = sd_sector_buffer_low[47] + spi_master = sd_sector_buffer_high[47] + spi_master = sd_sector_buffer_low[48] + spi_master = sd_sector_buffer_high[48] + spi_master = sd_sector_buffer_low[49] + spi_master = sd_sector_buffer_high[49] + spi_master = sd_sector_buffer_low[50] + spi_master = sd_sector_buffer_high[50] + spi_master = sd_sector_buffer_low[51] + spi_master = sd_sector_buffer_high[51] + spi_master = sd_sector_buffer_low[52] + spi_master = sd_sector_buffer_high[52] + spi_master = sd_sector_buffer_low[53] + spi_master = sd_sector_buffer_high[53] + spi_master = sd_sector_buffer_low[54] + spi_master = sd_sector_buffer_high[54] + spi_master = sd_sector_buffer_low[55] + spi_master = sd_sector_buffer_high[55] + spi_master = sd_sector_buffer_low[56] + spi_master = sd_sector_buffer_high[56] + spi_master = sd_sector_buffer_low[57] + spi_master = sd_sector_buffer_high[57] + spi_master = sd_sector_buffer_low[58] + spi_master = sd_sector_buffer_high[58] + spi_master = sd_sector_buffer_low[59] + spi_master = sd_sector_buffer_high[59] + spi_master = sd_sector_buffer_low[60] + spi_master = sd_sector_buffer_high[60] + spi_master = sd_sector_buffer_low[61] + spi_master = sd_sector_buffer_high[61] + spi_master = sd_sector_buffer_low[62] + spi_master = sd_sector_buffer_high[62] + spi_master = sd_sector_buffer_low[63] + spi_master = sd_sector_buffer_high[63] + spi_master = sd_sector_buffer_low[64] + spi_master = sd_sector_buffer_high[64] + spi_master = sd_sector_buffer_low[65] + spi_master = sd_sector_buffer_high[65] + spi_master = sd_sector_buffer_low[66] + spi_master = sd_sector_buffer_high[66] + spi_master = sd_sector_buffer_low[67] + spi_master = sd_sector_buffer_high[67] + spi_master = sd_sector_buffer_low[68] + spi_master = sd_sector_buffer_high[68] + spi_master = sd_sector_buffer_low[69] + spi_master = sd_sector_buffer_high[69] + spi_master = sd_sector_buffer_low[70] + spi_master = sd_sector_buffer_high[70] + spi_master = sd_sector_buffer_low[71] + spi_master = sd_sector_buffer_high[71] + spi_master = sd_sector_buffer_low[72] + spi_master = sd_sector_buffer_high[72] + spi_master = sd_sector_buffer_low[73] + spi_master = sd_sector_buffer_high[73] + spi_master = sd_sector_buffer_low[74] + spi_master = sd_sector_buffer_high[74] + spi_master = sd_sector_buffer_low[75] + spi_master = sd_sector_buffer_high[75] + spi_master = sd_sector_buffer_low[76] + spi_master = sd_sector_buffer_high[76] + spi_master = sd_sector_buffer_low[77] + spi_master = sd_sector_buffer_high[77] + spi_master = sd_sector_buffer_low[78] + spi_master = sd_sector_buffer_high[78] + spi_master = sd_sector_buffer_low[79] + spi_master = sd_sector_buffer_high[79] + spi_master = sd_sector_buffer_low[80] + spi_master = sd_sector_buffer_high[80] + spi_master = sd_sector_buffer_low[81] + spi_master = sd_sector_buffer_high[81] + spi_master = sd_sector_buffer_low[82] + spi_master = sd_sector_buffer_high[82] + spi_master = sd_sector_buffer_low[83] + spi_master = sd_sector_buffer_high[83] + spi_master = sd_sector_buffer_low[84] + spi_master = sd_sector_buffer_high[84] + spi_master = sd_sector_buffer_low[85] + spi_master = sd_sector_buffer_high[85] + spi_master = sd_sector_buffer_low[86] + spi_master = sd_sector_buffer_high[86] + spi_master = sd_sector_buffer_low[87] + spi_master = sd_sector_buffer_high[87] + spi_master = sd_sector_buffer_low[88] + spi_master = sd_sector_buffer_high[88] + spi_master = sd_sector_buffer_low[89] + spi_master = sd_sector_buffer_high[89] + spi_master = sd_sector_buffer_low[90] + spi_master = sd_sector_buffer_high[90] + spi_master = sd_sector_buffer_low[91] + spi_master = sd_sector_buffer_high[91] + spi_master = sd_sector_buffer_low[92] + spi_master = sd_sector_buffer_high[92] + spi_master = sd_sector_buffer_low[93] + spi_master = sd_sector_buffer_high[93] + spi_master = sd_sector_buffer_low[94] + spi_master = sd_sector_buffer_high[94] + spi_master = sd_sector_buffer_low[95] + spi_master = sd_sector_buffer_high[95] + spi_master = sd_sector_buffer_low[96] + spi_master = sd_sector_buffer_high[96] + spi_master = sd_sector_buffer_low[97] + spi_master = sd_sector_buffer_high[97] + spi_master = sd_sector_buffer_low[98] + spi_master = sd_sector_buffer_high[98] + spi_master = sd_sector_buffer_low[99] + spi_master = sd_sector_buffer_high[99] + spi_master = sd_sector_buffer_low[100] + spi_master = sd_sector_buffer_high[100] + spi_master = sd_sector_buffer_low[101] + spi_master = sd_sector_buffer_high[101] + spi_master = sd_sector_buffer_low[102] + spi_master = sd_sector_buffer_high[102] + spi_master = sd_sector_buffer_low[103] + spi_master = sd_sector_buffer_high[103] + spi_master = sd_sector_buffer_low[104] + spi_master = sd_sector_buffer_high[104] + spi_master = sd_sector_buffer_low[105] + spi_master = sd_sector_buffer_high[105] + spi_master = sd_sector_buffer_low[106] + spi_master = sd_sector_buffer_high[106] + spi_master = sd_sector_buffer_low[107] + spi_master = sd_sector_buffer_high[107] + spi_master = sd_sector_buffer_low[108] + spi_master = sd_sector_buffer_high[108] + spi_master = sd_sector_buffer_low[109] + spi_master = sd_sector_buffer_high[109] + spi_master = sd_sector_buffer_low[110] + spi_master = sd_sector_buffer_high[110] + spi_master = sd_sector_buffer_low[111] + spi_master = sd_sector_buffer_high[111] + spi_master = sd_sector_buffer_low[112] + spi_master = sd_sector_buffer_high[112] + spi_master = sd_sector_buffer_low[113] + spi_master = sd_sector_buffer_high[113] + spi_master = sd_sector_buffer_low[114] + spi_master = sd_sector_buffer_high[114] + spi_master = sd_sector_buffer_low[115] + spi_master = sd_sector_buffer_high[115] + spi_master = sd_sector_buffer_low[116] + spi_master = sd_sector_buffer_high[116] + spi_master = sd_sector_buffer_low[117] + spi_master = sd_sector_buffer_high[117] + spi_master = sd_sector_buffer_low[118] + spi_master = sd_sector_buffer_high[118] + spi_master = sd_sector_buffer_low[119] + spi_master = sd_sector_buffer_high[119] + spi_master = sd_sector_buffer_low[120] + spi_master = sd_sector_buffer_high[120] + spi_master = sd_sector_buffer_low[121] + spi_master = sd_sector_buffer_high[121] + spi_master = sd_sector_buffer_low[122] + spi_master = sd_sector_buffer_high[122] + spi_master = sd_sector_buffer_low[123] + spi_master = sd_sector_buffer_high[123] + spi_master = sd_sector_buffer_low[124] + spi_master = sd_sector_buffer_high[124] + spi_master = sd_sector_buffer_low[125] + spi_master = sd_sector_buffer_high[125] + spi_master = sd_sector_buffer_low[126] + spi_master = sd_sector_buffer_high[126] + spi_master = sd_sector_buffer_low[127] + spi_master = sd_sector_buffer_high[127] + spi_master = sd_sector_buffer_low[128] + spi_master = sd_sector_buffer_high[128] + spi_master = sd_sector_buffer_low[129] + spi_master = sd_sector_buffer_high[129] + spi_master = sd_sector_buffer_low[130] + spi_master = sd_sector_buffer_high[130] + spi_master = sd_sector_buffer_low[131] + spi_master = sd_sector_buffer_high[131] + spi_master = sd_sector_buffer_low[132] + spi_master = sd_sector_buffer_high[132] + spi_master = sd_sector_buffer_low[133] + spi_master = sd_sector_buffer_high[133] + spi_master = sd_sector_buffer_low[134] + spi_master = sd_sector_buffer_high[134] + spi_master = sd_sector_buffer_low[135] + spi_master = sd_sector_buffer_high[135] + spi_master = sd_sector_buffer_low[136] + spi_master = sd_sector_buffer_high[136] + spi_master = sd_sector_buffer_low[137] + spi_master = sd_sector_buffer_high[137] + spi_master = sd_sector_buffer_low[138] + spi_master = sd_sector_buffer_high[138] + spi_master = sd_sector_buffer_low[139] + spi_master = sd_sector_buffer_high[139] + spi_master = sd_sector_buffer_low[140] + spi_master = sd_sector_buffer_high[140] + spi_master = sd_sector_buffer_low[141] + spi_master = sd_sector_buffer_high[141] + spi_master = sd_sector_buffer_low[142] + spi_master = sd_sector_buffer_high[142] + spi_master = sd_sector_buffer_low[143] + spi_master = sd_sector_buffer_high[143] + spi_master = sd_sector_buffer_low[144] + spi_master = sd_sector_buffer_high[144] + spi_master = sd_sector_buffer_low[145] + spi_master = sd_sector_buffer_high[145] + spi_master = sd_sector_buffer_low[146] + spi_master = sd_sector_buffer_high[146] + spi_master = sd_sector_buffer_low[147] + spi_master = sd_sector_buffer_high[147] + spi_master = sd_sector_buffer_low[148] + spi_master = sd_sector_buffer_high[148] + spi_master = sd_sector_buffer_low[149] + spi_master = sd_sector_buffer_high[149] + spi_master = sd_sector_buffer_low[150] + spi_master = sd_sector_buffer_high[150] + spi_master = sd_sector_buffer_low[151] + spi_master = sd_sector_buffer_high[151] + spi_master = sd_sector_buffer_low[152] + spi_master = sd_sector_buffer_high[152] + spi_master = sd_sector_buffer_low[153] + spi_master = sd_sector_buffer_high[153] + spi_master = sd_sector_buffer_low[154] + spi_master = sd_sector_buffer_high[154] + spi_master = sd_sector_buffer_low[155] + spi_master = sd_sector_buffer_high[155] + spi_master = sd_sector_buffer_low[156] + spi_master = sd_sector_buffer_high[156] + spi_master = sd_sector_buffer_low[157] + spi_master = sd_sector_buffer_high[157] + spi_master = sd_sector_buffer_low[158] + spi_master = sd_sector_buffer_high[158] + spi_master = sd_sector_buffer_low[159] + spi_master = sd_sector_buffer_high[159] + spi_master = sd_sector_buffer_low[160] + spi_master = sd_sector_buffer_high[160] + spi_master = sd_sector_buffer_low[161] + spi_master = sd_sector_buffer_high[161] + spi_master = sd_sector_buffer_low[162] + spi_master = sd_sector_buffer_high[162] + spi_master = sd_sector_buffer_low[163] + spi_master = sd_sector_buffer_high[163] + spi_master = sd_sector_buffer_low[164] + spi_master = sd_sector_buffer_high[164] + spi_master = sd_sector_buffer_low[165] + spi_master = sd_sector_buffer_high[165] + spi_master = sd_sector_buffer_low[166] + spi_master = sd_sector_buffer_high[166] + spi_master = sd_sector_buffer_low[167] + spi_master = sd_sector_buffer_high[167] + spi_master = sd_sector_buffer_low[168] + spi_master = sd_sector_buffer_high[168] + spi_master = sd_sector_buffer_low[169] + spi_master = sd_sector_buffer_high[169] + spi_master = sd_sector_buffer_low[170] + spi_master = sd_sector_buffer_high[170] + spi_master = sd_sector_buffer_low[171] + spi_master = sd_sector_buffer_high[171] + spi_master = sd_sector_buffer_low[172] + spi_master = sd_sector_buffer_high[172] + spi_master = sd_sector_buffer_low[173] + spi_master = sd_sector_buffer_high[173] + spi_master = sd_sector_buffer_low[174] + spi_master = sd_sector_buffer_high[174] + spi_master = sd_sector_buffer_low[175] + spi_master = sd_sector_buffer_high[175] + spi_master = sd_sector_buffer_low[176] + spi_master = sd_sector_buffer_high[176] + spi_master = sd_sector_buffer_low[177] + spi_master = sd_sector_buffer_high[177] + spi_master = sd_sector_buffer_low[178] + spi_master = sd_sector_buffer_high[178] + spi_master = sd_sector_buffer_low[179] + spi_master = sd_sector_buffer_high[179] + spi_master = sd_sector_buffer_low[180] + spi_master = sd_sector_buffer_high[180] + spi_master = sd_sector_buffer_low[181] + spi_master = sd_sector_buffer_high[181] + spi_master = sd_sector_buffer_low[182] + spi_master = sd_sector_buffer_high[182] + spi_master = sd_sector_buffer_low[183] + spi_master = sd_sector_buffer_high[183] + spi_master = sd_sector_buffer_low[184] + spi_master = sd_sector_buffer_high[184] + spi_master = sd_sector_buffer_low[185] + spi_master = sd_sector_buffer_high[185] + spi_master = sd_sector_buffer_low[186] + spi_master = sd_sector_buffer_high[186] + spi_master = sd_sector_buffer_low[187] + spi_master = sd_sector_buffer_high[187] + spi_master = sd_sector_buffer_low[188] + spi_master = sd_sector_buffer_high[188] + spi_master = sd_sector_buffer_low[189] + spi_master = sd_sector_buffer_high[189] + spi_master = sd_sector_buffer_low[190] + spi_master = sd_sector_buffer_high[190] + spi_master = sd_sector_buffer_low[191] + spi_master = sd_sector_buffer_high[191] + spi_master = sd_sector_buffer_low[192] + spi_master = sd_sector_buffer_high[192] + spi_master = sd_sector_buffer_low[193] + spi_master = sd_sector_buffer_high[193] + spi_master = sd_sector_buffer_low[194] + spi_master = sd_sector_buffer_high[194] + spi_master = sd_sector_buffer_low[195] + spi_master = sd_sector_buffer_high[195] + spi_master = sd_sector_buffer_low[196] + spi_master = sd_sector_buffer_high[196] + spi_master = sd_sector_buffer_low[197] + spi_master = sd_sector_buffer_high[197] + spi_master = sd_sector_buffer_low[198] + spi_master = sd_sector_buffer_high[198] + spi_master = sd_sector_buffer_low[199] + spi_master = sd_sector_buffer_high[199] + spi_master = sd_sector_buffer_low[200] + spi_master = sd_sector_buffer_high[200] + spi_master = sd_sector_buffer_low[201] + spi_master = sd_sector_buffer_high[201] + spi_master = sd_sector_buffer_low[202] + spi_master = sd_sector_buffer_high[202] + spi_master = sd_sector_buffer_low[203] + spi_master = sd_sector_buffer_high[203] + spi_master = sd_sector_buffer_low[204] + spi_master = sd_sector_buffer_high[204] + spi_master = sd_sector_buffer_low[205] + spi_master = sd_sector_buffer_high[205] + spi_master = sd_sector_buffer_low[206] + spi_master = sd_sector_buffer_high[206] + spi_master = sd_sector_buffer_low[207] + spi_master = sd_sector_buffer_high[207] + spi_master = sd_sector_buffer_low[208] + spi_master = sd_sector_buffer_high[208] + spi_master = sd_sector_buffer_low[209] + spi_master = sd_sector_buffer_high[209] + spi_master = sd_sector_buffer_low[210] + spi_master = sd_sector_buffer_high[210] + spi_master = sd_sector_buffer_low[211] + spi_master = sd_sector_buffer_high[211] + spi_master = sd_sector_buffer_low[212] + spi_master = sd_sector_buffer_high[212] + spi_master = sd_sector_buffer_low[213] + spi_master = sd_sector_buffer_high[213] + spi_master = sd_sector_buffer_low[214] + spi_master = sd_sector_buffer_high[214] + spi_master = sd_sector_buffer_low[215] + spi_master = sd_sector_buffer_high[215] + spi_master = sd_sector_buffer_low[216] + spi_master = sd_sector_buffer_high[216] + spi_master = sd_sector_buffer_low[217] + spi_master = sd_sector_buffer_high[217] + spi_master = sd_sector_buffer_low[218] + spi_master = sd_sector_buffer_high[218] + spi_master = sd_sector_buffer_low[219] + spi_master = sd_sector_buffer_high[219] + spi_master = sd_sector_buffer_low[220] + spi_master = sd_sector_buffer_high[220] + spi_master = sd_sector_buffer_low[221] + spi_master = sd_sector_buffer_high[221] + spi_master = sd_sector_buffer_low[222] + spi_master = sd_sector_buffer_high[222] + spi_master = sd_sector_buffer_low[223] + spi_master = sd_sector_buffer_high[223] + spi_master = sd_sector_buffer_low[224] + spi_master = sd_sector_buffer_high[224] + spi_master = sd_sector_buffer_low[225] + spi_master = sd_sector_buffer_high[225] + spi_master = sd_sector_buffer_low[226] + spi_master = sd_sector_buffer_high[226] + spi_master = sd_sector_buffer_low[227] + spi_master = sd_sector_buffer_high[227] + spi_master = sd_sector_buffer_low[228] + spi_master = sd_sector_buffer_high[228] + spi_master = sd_sector_buffer_low[229] + spi_master = sd_sector_buffer_high[229] + spi_master = sd_sector_buffer_low[230] + spi_master = sd_sector_buffer_high[230] + spi_master = sd_sector_buffer_low[231] + spi_master = sd_sector_buffer_high[231] + spi_master = sd_sector_buffer_low[232] + spi_master = sd_sector_buffer_high[232] + spi_master = sd_sector_buffer_low[233] + spi_master = sd_sector_buffer_high[233] + spi_master = sd_sector_buffer_low[234] + spi_master = sd_sector_buffer_high[234] + spi_master = sd_sector_buffer_low[235] + spi_master = sd_sector_buffer_high[235] + spi_master = sd_sector_buffer_low[236] + spi_master = sd_sector_buffer_high[236] + spi_master = sd_sector_buffer_low[237] + spi_master = sd_sector_buffer_high[237] + spi_master = sd_sector_buffer_low[238] + spi_master = sd_sector_buffer_high[238] + spi_master = sd_sector_buffer_low[239] + spi_master = sd_sector_buffer_high[239] + spi_master = sd_sector_buffer_low[240] + spi_master = sd_sector_buffer_high[240] + spi_master = sd_sector_buffer_low[241] + spi_master = sd_sector_buffer_high[241] + spi_master = sd_sector_buffer_low[242] + spi_master = sd_sector_buffer_high[242] + spi_master = sd_sector_buffer_low[243] + spi_master = sd_sector_buffer_high[243] + spi_master = sd_sector_buffer_low[244] + spi_master = sd_sector_buffer_high[244] + spi_master = sd_sector_buffer_low[245] + spi_master = sd_sector_buffer_high[245] + spi_master = sd_sector_buffer_low[246] + spi_master = sd_sector_buffer_high[246] + spi_master = sd_sector_buffer_low[247] + spi_master = sd_sector_buffer_high[247] + spi_master = sd_sector_buffer_low[248] + spi_master = sd_sector_buffer_high[248] + spi_master = sd_sector_buffer_low[249] + spi_master = sd_sector_buffer_high[249] + spi_master = sd_sector_buffer_low[250] + spi_master = sd_sector_buffer_high[250] + spi_master = sd_sector_buffer_low[251] + spi_master = sd_sector_buffer_high[251] + spi_master = sd_sector_buffer_low[252] + spi_master = sd_sector_buffer_high[252] + spi_master = sd_sector_buffer_low[253] + spi_master = sd_sector_buffer_high[253] + spi_master = sd_sector_buffer_low[254] + spi_master = sd_sector_buffer_high[254] + spi_master = sd_sector_buffer_low[255] + spi_master = sd_sector_buffer_high[255] +end procedure + +-------------------------------------------------------------------------------- +-- write one entire sector +-------------------------------------------------------------------------------- +procedure sd_write_sector() is + var byte x + var word count1 + + spi_master = 0xFC -- send "stop transmission token" write multiple command + + -- get sector data + if defined(SD_WRITE_EXTRA_SPEED) == TRUE then + if SD_WRITE_EXTRA_SPEED == TRUE then + _sd_write_512() + else + -- send the data via spi + for 256 using count1 loop + spi_master = sd_sector_buffer_low[count1] -- set low data + spi_master = sd_sector_buffer_high[count1]-- set high data + end loop + end if + else + -- send the data via spi + for 256 using count1 loop + spi_master = sd_sector_buffer_low[count1] -- set low data + spi_master = sd_sector_buffer_high[count1]-- set high data + end loop + end if + + + + sd_sector_count = sd_sector_count + 1 -- increment sector count + + spi_master = 0xFF -- send junk crc, crc is disabled + spi_master = 0xFF -- send junk crc, crc is disabled + + x = spi_master -- wait for a response + while x == 0 loop + x = spi_master + end loop + -- response = 010 = data accepted + -- response = 101 = crc error + -- response = 110 = write error + + x = spi_master -- wait for sd card to become ready + while x != 0xFF loop + x = spi_master + end loop +end procedure + +-------------------------------------------------------------------------------- +; write one entire sector with callback to storage_write_callback() +; for direct reading with spi_master. Make sure you call spi_master +; 512 times in your storage_write_callback(). +-------------------------------------------------------------------------------- +procedure sd_write_sector_with_callback(word in chunk_size) is + var byte x + var word count1 + + if sd_byte_count == 0 then + spi_master = 0xFC -- send "stop transmission token" write multiple command + end if + + -- get sector data + if defined(SD_WRITE_EXTRA_SPEED) == TRUE then + if SD_WRITE_EXTRA_SPEED == TRUE then + storage_write_callback(chunk_size) + sd_byte_count = sd_byte_count + chunk_size + else + _error "You can't use callback without SD_WRITE_EXTRA_SPEED == TRUE" + end if + else + _error "You can't use callback without SD_WRITE_EXTRA_SPEED == TRUE" + end if + + if sd_byte_count == 512 then + sd_sector_count = sd_sector_count + 1 -- increment sector count + + spi_master = 0xFF -- send junk crc, crc is disabled + spi_master = 0xFF -- send junk crc, crc is disabled + + x = spi_master -- wait for a response + while x == 0 loop + x = spi_master + end loop + -- response = 010 = data accepted + -- response = 101 = crc error + -- response = 110 = write error + + x = spi_master -- wait for sd card to become ready + while x != 0xFF loop + x = spi_master + end loop + end if +end procedure + +-------------------------------------------------------------------------------- +-- write one entire sector at address +-------------------------------------------------------------------------------- +procedure sd_write_sector_address(dword in address) is + sd_start_write(address) + sd_write_sector() + sd_stop_write() +end procedure + +-- ---------------------------------------------------------------------------- +-- print a sector to an output device +-- ---------------------------------------------------------------------------- +procedure sd_print_sector(volatile byte out device, dword in address) is + sd_start_read(address) + for SD_BYTE_PER_SECTOR loop + device = sd_data_byte + end loop + sd_stop_read +end procedure + +-- ---------------------------------------------------------------------------- +-- print a sector to an output device in ascii hex +-- ---------------------------------------------------------------------------- +procedure sd_print_sector_hex(volatile byte out device,word in bytes_per_line,dword in address) is + sd_start_read(address) + for SD_BYTE_PER_SECTOR / bytes_per_line loop + print_crlf(device) + for bytes_per_line loop + device = " " + print_byte_hex(device,sd_data_byte) + end loop + end loop + sd_stop_read +end procedure + +; -------------------------------------------------------------------------------- +; -- read CSD or CID to serial port. Example: +; -- sd_read_csd_cid(SD_SEND_CSD) +; -- sd_read_csd_cid(SD_SEND_CSD) +; -------------------------------------------------------------------------------- +; procedure sd_read_csd_cid(byte in command) is +; sd_chip_select = low -- enable the sd card +; +; var byte response,data, step +; send_command(command,0,response) +; +; -- wait till ready +; while spi_master != 0xFE loop -- wait till data is ready to read +; end loop +; +; -- get data +; for 16 using step loop +; data = spi_master +; print_byte_hex(serial_data, data) +; serial_data = " " +; end loop +; +; -- get crc +; data = spi_master +; data = spi_master +; +; sd_chip_select = high -- enable the sd card +; end procedure + +-------------------------------------------------------------------------------- +-- Gets sd card size in number of sectors into dword sd_number_of_sectors +-- Total size in bytes = sd_number_of_sectors * 512 +-------------------------------------------------------------------------------- +procedure sd_get_number_of_sectors() is +if false then + sd_chip_select = low -- enable the sd card + + var byte x + var byte*4 c_size = 0 + var byte _c_size[3] at c_size + var byte*2 c_size_mult + var byte _c_size_mult[2] at c_size_mult + + send_command(SD_SEND_CSD,0,x) + + -- wait till ready + while spi_master != 0xFE loop -- wait till data is ready to read + end loop + + if sd_card_type == SD_STANDARD_CAPACITY then + + -- throw data we dont' need + for 6 loop + x = spi_master + end loop + + _c_size[2] = spi_master + _c_size[1] = spi_master + _c_size[0] = spi_master + + _c_size[2] = _c_size[2] & 0b00000111 + c_size = c_size >> 6 + + -- get c_size_mult + _c_size_mult[1] = spi_master + _c_size_mult[0] = spi_master + + c_size_mult = (c_size_mult >> 7) & 0b00000111 + + -- throw the rest of data we dont' need + for 5 loop + x = spi_master + end loop + + -- get crc + x = spi_master + x = spi_master + + sd_chip_select = high -- disable the sd card + + sd_number_of_sectors = (c_size << (c_size_mult + 2)) + else + -- throw data we dont' need + for 7 loop + x = spi_master + end loop + + _c_size[2] = spi_master & 0b00111111 + _c_size[1] = spi_master + _c_size[0] = spi_master + + -- throw data we dont' need + for 6 loop + x = spi_master + end loop + + -- get crc + x = spi_master + x = spi_master + + sd_chip_select = high -- disable the sd card + sd_number_of_sectors = (dword(c_size)+1) * 1024 + + end if +end if +end procedure diff --git a/lib/timers.jal b/lib/timers.jal new file mode 100644 index 0000000..9802d70 --- /dev/null +++ b/lib/timers.jal @@ -0,0 +1,81 @@ +-- Copyright (C) 2017, avrin, http://mpu.seesaa.net +-- This program is licensed under BSD license. +-- Please refer to "LICENSE.txt". + +-- Tick timer is Timer1(16bit) +alias TMR1IF_bit is PIR1_TMR1IF +alias TMR1IE_bit is PIE1_TMR1IE +if defined(T1CON_CS) then + alias TMR1CS_bit is T1CON_CS +else + alias TMR1CS_bit is T1CON_TMR1CS +end if +if defined(T1CON_CKPS) then + alias T1CKPS_bit is T1CON_CKPS +else + alias T1CKPS_bit is T1CON_T1CKPS +end if +alias TICK_TMR is TMR1 +alias TMR1ON_bit is T1CON_TMR1ON + +if false then + -- not used, Timer0 + alias TMR0IE_bit is INTCON_TMR0IE + alias TMR0IF_bit is INTCON_TMR0IF + alias TMR0CS_bit is OPTION_REG_TMR0CS + alias PSA_bit is OPTION_REG_PSA +end if + +const dword TICK_TIMER_HZ = 100; // 10msec base +const dword PRESCALER_VAL = 8; // must be synchronize timer initialize +const word TICK_TIMER_RELOAD_VALUE = 0xFFFF - word(( target_clock / ( dword(4) * PRESCALER_VAL * TICK_TIMER_HZ ) )) + + +function isTickTimer_IE() return bit is + pragma inline + return TMR1IE_bit +end function + +function isTickTimer_IF() return bit is + pragma inline + return TMR1IF_bit +end function + +procedure tickTimer_IF_clear() is + pragma inline + TMR1IF_bit = 0 +end procedure + +procedure tickTimer_intr_enable() is + pragma inline + TMR1IE_bit = 1 +end procedure + +procedure tickTimer_intr_disable() is + pragma inline + TMR1IE_bit = 0 +end procedure + +procedure tickTimer_stop() is + pragma inline + TMR1ON_bit= 0; +end procedure + +procedure tickTimer_reload() is + pragma inline + TICK_TMR = TICK_TIMER_RELOAD_VALUE +end procedure + +-- /****************** +-- init_tickTimer +-- *******************/ +procedure init_ticKTimer() is + pragma inline + ; Use Timer1 for system ticks (10msec interval) + ; Clock source is Internal Fosc/4, use default setting + T1CKPS_bit= 0b11; set prescaler 1/8 + tickTimer_reload(); + TMR1ON_bit= 1; tickTimer start +end procedure + + diff --git a/m.bat b/m.bat new file mode 100644 index 0000000..14a2383 --- /dev/null +++ b/m.bat @@ -0,0 +1,19 @@ +@echo off +rem 2017, created by avrin. + +set device=16F1827 + +set compiler_root=d:/0pic-data/jalv2-data/jallib_full-1.6.0 + + +rem --- make device include file +@echo on +echo include %device% > device_select.jal +@echo off + +set main_source=main.jal +set compiler_option=-temp-reduce + +rem ------ compile command -------- +%compiler_root%/Compiler/jalv2.exe -s %compiler_root%/lib -s lib %compiler_option% -hex sd-wav-player-%device%.hex %main_source% + diff --git a/main.jal b/main.jal new file mode 100644 index 0000000..38b1a90 --- /dev/null +++ b/main.jal @@ -0,0 +1,59 @@ +-- Copyright (C) 2017, avrin, http://mpu.seesaa.net +-- This program is licensed under BSD license. +-- Please refer to "LICENSE.txt". + +---- Select device file using device_select.jal file ------ +include device_select +----------------------------------------------------------- + +---------------------- +-- Selectable Options +---------------------- + +-- Select FAT32/FAT16 or FAT16 only +const bit HAVE_FAT32 = true ; false: FAT16 only, true: FAT16 and FAT32 support + +-- debug purpose +const bit UART_INFO = false +const bit TEST_PORT_ENABLE = false +const word CUT_LAST_TAG_NOISE = 30_000 ; about 30Kbytes +--- end option setting + +---- sub modules +include register_def +include config_def + +-- set all pins to digital I/O +enable_digital_io() + +_usec_delay(100_000) -- 100msec Wait until Vdd become stable. + +---- jallibs +include format +include print +---- sub modules +include port_def +include fat_lib +include timers +include pwm_lib +include wave_player_main + +-- /****************** +-- Main program start +-- *******************/ + init_tickTimer() + pwm_init() + ------------------- + + -- enable interrupt + GIE_enable() + PEIE_enable() + ------------------- + + FAT_init() + + wave_player_main(); forever loop + +-- end program + + diff --git a/pin_map.txt b/pin_map.txt new file mode 100644 index 0000000..3902086 --- /dev/null +++ b/pin_map.txt @@ -0,0 +1,297 @@ +-- Copyright (C) 2017, avrin, http://mpu.seesaa.net +-- This program is licensed under BSD license. +-- Please refer to "LICENSE.txt". + +-- /* SD card Interface connection +-- * : aitendo : General +-- * MCU sig. : IFB-254-SD : PIN name +-- --- : 1 : 9 dat2 +-- CS : 2 : 1 cs/dat3 +-- MOSI : 3 : 2 di/cmd +-- GND : 4 : 3 vss1 +-- VCC : 5 : 4 vdd +-- CLK : 6 : 5 clk +-- GND : 7 : 6 vss2 +-- MISO : 8 : 7 do/dat0 +-- --- : 9 : 8 dat1 +-- --- : 10 : 11 wp +-- --- : 11 : 10 cd1 +-- --- : 12 : - case GND +-- */ + +-- /* SD card pin +-- Pin side +-- --------------\ +-- 9 = \ DAT2/NC +-- 1 ===| CS/DAT3 [CS] +-- 2 ===| CMD/DI [DI] +-- 3 ===| VSS1 +-- Bottom 4 ===| VDD +-- View 5 ===| CLK [CLK] +-- 6 ===| VSS2 +-- 7 ===| DO/DAT0 [DO] +-- 8 =| DAT1/IRQ +-- ----------------- +-- +-- Arduino NUCLEO-F411 NUCLEO-F030R8 +-- Logo side +-- ----------------- +-- 8 =| DAT1/IRQ +-- 7 ===| DO/DAT0 [DO] D12 D12/PA_6 D5/PB_4 +-- 6 ===| VSS2 +-- Top 5 ===| CLK [CLK] D13 D13/PA_5 D3/PB_3 +-- View 4 ===| VDD +-- 3 ===| VSS1 +-- 2 ===| CMD/DI [DI] D11 D11/PA_7 D4/PB_5 +-- 1 ===| CS/DAT3 [CS] D8 D10/PB_6 D10/PB_6 +-- 9 = / DAT2/NC +-- --------------/ +-- */ + +-- ------------------ +-- Pickit3 pin map +-- ------------------ +-- ----------- +-- \ +-- \ +-- --> |1 Vpp/MCLR +-- |2 VDD Target +-- |3 Vss ground +-- |4 ICSPDAT/PGD +-- |5 ICSPCLK/PGC +-- |6 Aux N.C. +-- / +-- / +-- ------------ +-- +-- /* PIC12F1840 4KW/256B +-- PIC16F18313 2KW/256B +-- ---__---- +-- 3.3V--- VDD|1 8|VSS --- GND +-- PWM CCP1 --- RA5|2 7|RA0 --- [PGD] - SPI SDO +-- SD CS --- RA4|3 6|RA1 --- [PGC] - SPI SCK +-- SW --- [/MCLR]/RA3|4 5|RA2 --- SPI SDI +-- --------- +-- */ +-- /* PIC16F1454 8KW/1024B +-- PIC16F1455 8KW/1024B +-- ---__---- +-- 3.3V--- VDD|1 14|VSS --- GND +-- LED --- RA5|2 13|RA0 --- (Input only port) +-- SD CS --- RA4|3 12|RA1 --- UART RX +--btn SW --- [/MCLR]/RA3|4 11|VUSB3V3 +-- PWM(L) PWM1 --- RC5|5 10|RC0 --- [PGD] SPI SCK --- Pickit3 +-- (UART TX) --- RC4|6 9|RC1 --- [PGC] SPI SDI --- Needs 47K ohm external pull-up +-- PWM(R) PWM2 --- RC3|7 8|RC2 --- SPI SDO +-- --------- +-- */ +-- /* PIC16F1705 8KW/1024B +-- PIC16F1764 4KW/ 512B [CCP2 -> PWM3] +-- PIC16F1825 8KW/1024B +-- PIC16F18325 8KW/1024B +-- ---__---- +-- 3.3V--- VDD|1 14|VSS --- GND +-- LED --- RA5|2 13|RA0 --- [PGD] +-- SD CS --- RA4|3 12|RA1 --- [PGC] +--btn SW --- [/MCLR]/RA3|4 11|RA2 --- TEST PORT +-- PWM(L) CPP1 --- RC5|5 10|RC0 --- SPI SCK +-- (UART TX) --- RC4|6 9|RC1 --- SPI SDI +-- PWM(R) CCP2 --- RC3|7 8|RC2 --- SPI SDO +-- --------- +-- */ +-- /* Mono PIC16F1825 debug test mode using UART 8KW/1024B +-- ---__---- +-- 3.3V--- VDD|1 14|VSS --- GND +-- LED --- RA5|2 13|RA0 --- [PGD] +-- SD CS --- RA4|3 12|RA1 --- [PGC] +--btn SW --- [/MCLR]/RA3|4 11|RA2 --- TEST PORT +-- UART RX --- RC5|5 10|RC0 --- SPI SCK +-- UART TX --- RC4|6 9|RC1 --- SPI SDI +-- PWM(R) CCP2 --- RC3|7 8|RC2 --- SPI SDO +-- --------- +-- */ +-- /* PIC16F1827 4KW/384B +-- ----_---- +-- TEST PORT --- RA2|1 18|RA1 +-- PWM(L) CCP3 --- RA3|2 17|RA0 +-- PWM(R) CCP4 --- RA4|3 16|RA7 +--btn SW [/MCLR] --- RA5|4 15|RA6 --- SPI SDO1 +-- GND --- GND|5 14|VDD --- 3.3V +-- LED --- RB0|6 13|RB7 --- [CSPDAT] +-- SPI SDI1 --- RB1|7 12|RB6 --- [CSPCLK] +-- UART_RX ---- RB2|8 11|RB5 --- UART_TX +-- SD CS --- RB3|9 10|RB4 --- SPI SCK1 +-- --------- +-- Playing: 26.2mA consumption +-- Sleeping: 22.0mA +-- */ +-- /* + PIC16F88 4KW/384B + Probably dose not work. + No tested, no support, +-- ----_---- +-- TEST PORT --- RA2|1 18|RA1 +-- RA3|2 17|RA0 +-- SD CS --- RA4|3 16|RA7 --- OSC1 +--btn sw [/MCLR] --- RA5|4 15|RA6 --- OSC2 +-- GND --- GND|5 14|VDD --- 3.3V +-- LED --- RB0|6 13|RB7 --- [PGD] +-- SPI SDI --- RB1|7 12|RB6 --- [PGC] +-- SPI SDO --- RB2|8 11|RB5 --- UART TX +-- PWM out CCP1 --- RB3|9 10|RB4 --- SPI SCK +-- --------- +-- */ +-- /* +-- PIC16F1459 8KW/1024B +-- ---__---- +-- 3.3V--- VDD|1 20|VSS --- GND +-- --- RA5|2 19|RA0 --- +-- --- RA4|3 18|RA1 --- +-- btn SW /MCLR RA3|4 17|VUSB3V3 +-- PWM(L) PWM1 --- RC5|5 16|RC0 --- [PGD] +-- LED --- RC4|6 15|RC1 --- [PGC] +-- SD CS --- RC3|7 14|RC2 --- TEST PORT +-- PWM(R) PWM2 --- RC6|8 13|RB4 --- SPI SDI +-- SPI SDO --- RC7|9 12|RB5 --- UART RX +-- UART TX --- RB7|10 11|RB6 --- SPI SCK +-- --------- +-- */ +-- /* PIC16F1619 8KW/1024B [PWM3,PWM4] <- [CCP1,CCP2] +-- PIC16F1709 8KW/1024B +-- PIC16F1829 8KW/1024B +-- ---__---- +-- 3.3V--- VDD|1 20|VSS --- GND +-- --- RA5|2 19|RA0 --- [PGD] +-- --- RA4|3 18|RA1 --- [PGC] +-- btn SW /MCLR RA3|4 17|RA2 +-- PWM(L) CCP1 --- RC5|5 16|RC0 +-- LED --- RC4|6 15|RC1 --- TEST PORT +-- PWM(R) CCP2 --- RC3|7 14|RC2 +-- SD CS --- RC6|8 13|RB4 --- SPI SDI +-- SPI SDO --- RC7|9 12|RB5 --- UART RX +-- UART TX --- RB7|10 11|RB6 --- SPI SCK +-- --------- +-- */ +-- /* PIC18F14K50 8KW/768B +-- ---__---- +-- 3.3V--- VDD|1 20|VSS --- GND +-- OSC IN --- RA5|2 19|RA0 --- [PGD] +-- OSC OUT--- RA4|3 18|RA1 --- [PGC] +-- btn SW /MCLR RA3|4 17|VUSB--- 3.3V +-- PWM CCP1 --- RC5|5 16|RC0 +-- LED --- RC4|6 15|RC1 --- TEST PORT +-- RC3|7 14|RC2 +-- SD CS --- RC6|8 13|RB4 --- SPI SDI +-- SPI SDO --- RC7|9 12|RB5 --- UART RX +-- UART TX --- RB7|10 11|RB6 --- SPI SCK +-- --------- +-- */ +-- /* PIC16F1938 16KW/1024B +-- ---__---- +-- btn SW --- /MCLR RE3|1 28|RB7 --- [ISPD] +-- LED --- RA0|2 27|RB6 --- [ISPG] +-- TEST PORT --- RA1|3 26|RB5 +-- RA2|4 25|RB4 +-- RA3|5 24|RB3 CCP2 --- PWM(L) +-- RA4|6 23|RB2 +-- RA5|7 22|RB1 +-- GND --- VSS|8 21|RB0 +-- RA7|9 20|VDD --- 3.3V +-- RA6|10 19|VSS --- GND +-- RC0|11 18|RC7 --- UART RX +-- SD CS --- RC1|12 17|RC6 --- UART TX +-- PWM(R) CCP1 --- RC2|13 16|RC5 --- SPI SDO +-- SPI SCK --- RC3|14 15|RC4 --- SPI SDI +-- --------- +-- */ +-- /* PIC18F26J50 32KW/3776B +-- ---__---- +-- Pull-up 10kOhm --- /MCLR|1 28|RB7 --- [ISPD] +-- LED --- RA0|2 27|RB6 --- [ISPG] +-- TEST PORT --- RA1|3 26|RB5 --- SPI SDI1 +-- RA2|4 25|RB4 --- SPI SCK1 +-- RA3|5 24|RB3/RP6 --- CCP2 PWM(R) +-- GND --- 10uF --- Vcap|6 23|RB2 --- +-- RA5|7 22|RB1 --- btn SW +-- GND --- VSS|8 21|RB0 +-- RA7|9 20|VDD --- 3.3V +-- RA6|10 19|VSS --- GND +-- UART RX2 --- RP12/RC0|11 18|RC7 --- SPI SDO1 +-- SD CS --- RC1|12 17|RC6/RP17 --- UART TX2 +-- PWM(L) CCP1 ---RP13/RC2|13 16|RC5 --- D+/VP +-- Vusb|14 15|RC4 --- D-/VP +-- --------- +-- */ +-- +-- 10pin 8pin +-- Stereo/SW Mono/SW Other +-- 1 PWM(L) +-- 2 PWM(R) 1 PWM 1 ICSPDAT +-- 3 SD CS 2 SD CS 2 ICSPCK +-- 4 SDI 3 SDI 3 UART TX +-- 5 SDO 4 SDO 4 UART RX +-- 6 SCK 5 SCK 5 TEST PORT +-- 7 SW 6 SW 6 I2C SDA +-- 8 VDD 7 VDD 7 I2C SCL +-- 9 GND 8 GND +-- 10 LED + + + + Pin Price FOSC FLASH SARM PPS SPI/I2C USB CCP ECCP PWM16/4 PWM10 +PIC16F1454 14pin 130 48MHz 8KW 1024 1 1 2 + +PIC16F1455 14pin 160 48MHz 8KW 1024 1 1 2 +PIC16F1459 20pin 180 48MHz 8KW 1024 1 1 2 +PIC16F1619 20pin 150 32MHz 8KW 1024 o 1 2 +PIC16F1705 14pin 100 32MHz 8KW 1024 o 1 2 +PIC16F1709 20pin 150 32MHz 8KW 1024 o 1 2 +PIC16F1764 14pin 120 32MHz 4KW 512 o 1 1 1 1 + +PIC16F1825 14pin 140 32MHz 8KW 1024 1 2 2 +PIC16F1827 18pin 135 32MHz 4KW 384 2 2 2 +PIC16F1829 20pin 160 32MHz 8KW 1024 2 2 2 +PIC16F18325 14pin 100 32MHz 8KW 1024 o 2 4 2 + +PIC16F18326 14pin ? 32MHz 16KW 2048 o 2 4 2 +PIC16F18346 20pin ? 32MHz 16KW 2048 o 2 4 2 + +PIC16F18313 8pin 75 32MHz 2KW 256 o 2 2 2 +PIC12F1840 8pin 115 32MHz 4KW 256 1 0 1 + + + Pin price FOSC FLASH SARM PPS SPI/I2C USB CCP ECCP PWM16/4 PWM10 3.3V UART +PIC12F1822 8pin 100 32MHz 2KW 128 1 1 +PIC16F1823 14pin 100 32MHz 2KW 128 1 1 +PIC16F1825 14pin 140 32MHz 8KW 1024 1 2 2 +PIC16F1827 18pin 135 32MHz 4KW 384 2 2 2 +PIC16F1938 28pin 32MHx 16KW 1024 1 2 3 +-- +PIC16F886 28pin 20MHz 8KW 368 1 1 1 2MIPS +PIC16F883 28pin 20MHz 4KW 256 1 1 1 2MIPS +PIC16F88 18pin 20MHz 4KW 368 1 1 2MIPS +PIC16F819 18pin 220 20MHz 2KW 256 1 1 2MIPS x +PIC12F629 8pin 20MHz 1KW 64 x x 2MIPS +PIC12F675 8pin 20MHz 1KW 64 x x 2MIPS +PIC12F683 8pin 20MHz 2KW 128 x x 2MIPS + +12f1572 +12f1612 + + +-- memo +* Clock source for Timer2 + FOSC/4 only + PIC16F1705 + PIC16F1840 + PIC16F1825 + PIC16F1827 + PIC16F1829 + PIC16F18313 + HAVE T2CLKCON + PIC16F1619 + PIC16F1764 + PIC16F1769 + + + diff --git a/port_def.jal b/port_def.jal new file mode 100644 index 0000000..fe41c15 --- /dev/null +++ b/port_def.jal @@ -0,0 +1,1094 @@ +----------------------------- +-- Refer to "pic_pin_map.txt" +----------------------------- + +--------- Target definition + +; PIC16F18313 +if (target_chip == PIC_16F18313) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = false; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = false; + const bit HAVE_POWER_OFF_MODE = false; under construction + + const bit PIN8_MCU = true + + ;if you set false(mono mode), it must be used 8bit mono wav file. + const bit CH_MODE_STEREO = false ; + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + ;OPTION_REG_WPUEN = 0 ; enable global Weak Pull-up + WPUA_WPUA3 = 1 ; enable pull-up: btn + WPUA_WPUA2 = 1 ; enable pull-up: SDI + + -- Port Slew rate control + SLRCONA = 0 ; set max slew rate + + -- PPS setting + include pps + -- in + SSP1DATPPS = PPS_RA2 ; RA2:SDI + -- out + RA0PPS = PPS_SDO1 ; RA0:SDO1 + RA1PPS = PPS_SCK1 ; RA1:SCK1 + RA5PPS = PPS_CCP1 ; RA5:CCP1 + ;RA4PPS_RA4PPS = 0x00 ; RA4:CS (LATA4) + + -- SPI definition (SD card interface) + alias pin_sdo_direction is pin_A0_direction + alias pin_sdo is pin_A0 + alias pin_sdi_direction is pin_A2_direction + alias pin_sdi is pin_A2 + alias pin_sck_direction is pin_A1_direction + alias pin_sck is pin_A1 + -- + alias sd_chip_select is pin_A4 + alias sd_chip_select_direction is pin_A4_direction + + -- btn sw definition + alias btn_bit_now is pin_A3 + + ;PIC16F18313 + -- PWM definition (audio out) + const bit PWM_DUTY_REG_LEFT_TYPE2 = true + const bit PWM_DUTY_REG_RIGHT_TYPE2 = true + CCP1CON = 0b1000_1111 ; set PWM enable and PWM mode. + CCPR1H = 0 ; clear higher register of duty in advance. + alias pwm_l_port_tris_bit is pin_A5_direction + pwm_l_port_tris_bit = OUTPUT; // ccp1 PWM(R) out + alias pwm_l_duty_lower_bits is CCPR1L + alias pwm_l_duty_upper_bits is CCPR1H + + +; PIC12F1840 +elsif (target_chip == PIC_12F1840) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = false; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = false; + const bit HAVE_POWER_OFF_MODE = false; under construction + + const bit PIN8_MCU = true + + ;if you set false(mono mode), it must be used 8bit mono wav file. + const bit CH_MODE_STEREO = false ; + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + OPTION_REG_WPUEN = 0 ; enable global Weak Pull-up + WPUA_WPUA3 = 1 ; enable pull-up: btn + WPUA_WPUA2 = 1 ; enable pull-up: SDI + + -- SPI definition (SD card interface) + alias pin_sdo_direction is pin_A0_direction + alias pin_sdo is pin_A0 + -- + alias sd_chip_select is pin_A4 + alias sd_chip_select_direction is pin_A4_direction + + -- btn sw definition + alias btn_bit_now is pin_A3 + + ; PIC12F1840 + -- PWM definition (audio out) + APFCON_CCP1SEL = 1; // ccp1 is RA5 + CCP1CON = 0b0000_1100 + alias pwm_l_port_tris_bit is pin_A5_direction + pwm_l_port_tris_bit = OUTPUT; // ccp1 PWM(R) out + alias pwm_l_duty_lower_bits is CCP1CON_DC1B + alias pwm_l_duty_upper_bits is CCPR1L + +; PIC16F1455 +elsif (target_chip == PIC_16F1454) | (target_chip == PIC_16F1455) | (target_chip == PIC_16F1459) then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + -- test mode + const bit PIC16F1455_TEST_MODE = false + + ;if you set false(mono mode), it must be used 8bit mono wav file. + const bit CH_MODE_STEREO = true ; + + ; fs=44.1KHz + T2CON_T2CKPS =0b01 ; Timre2 prescaler is 1/4 + const byte SAMPLING_FREQ = byte( ((target_clock>>4)/44100) - 1 ) ; = 67 + + -- Enable pull-ups + OPTION_REG_WPUEN = 0 ; enable global Weak Pull-up + WPUA_WPUA3 = 1 ; enable pull-up: btn + + -- Port Slew rate control + CLKRCON_CLKRSLR = 0 ; set max slew rate + + -- UART definition + const serial_hw_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + if target_chip == PIC_16F1459 then + alias pin_TX is pin_B7 + alias pin_TX_direction is pin_B7_direction + alias pin_RX is pin_B5 + alias pin_RX_direction is pin_B5_direction + else + alias pin_TX is pin_C4 + alias pin_TX_direction is pin_C4_direction + alias pin_RX is pin_A1 + + if !defined(pin_A1_direction) then ; bug fix for jallib of pic16f1455 at 2019/11/10. + var volatile bit TRISA_TRISA1 at TRISA : 1 + alias pin_A1_direction is TRISA_TRISA1 + end if + alias pin_RX_direction is pin_A1_direction + end if + + -- LED indicator definition + if target_chip == PIC_16F1459 then + alias led is pin_C4 + alias led_direction is pin_C4_direction + else + alias led is pin_A5 + alias led_direction is pin_A5_direction + end if + -- btn sw definition + alias btn_bit_now is pin_A3 + + -- SPI definition (SD card interface) + const bit SPI_CLOCK_MORE_SLOW = true + if target_chip == PIC_16F1459 then + alias sd_chip_select is pin_C3 + alias sd_chip_select_direction is pin_C3_direction + else + alias pin_sdo_direction is pin_C2_direction + alias pin_sdo is pin_C2 + -- + alias sd_chip_select is pin_A4 + alias sd_chip_select_direction is pin_A4_direction + end if + + ;PIC16F1455 etc + -- PWM definition (audio out) + if PIC16F1455_TEST_MODE == false then + PWM1CON = 0b1100_0000 + alias pwm_l_port_tris_bit is pin_C5_direction + pwm_l_port_tris_bit = OUTPUT; // ccp1 PWM(R) out + alias pwm_l_duty_lower_bits is PWM1DCL_PWM1DCL + alias pwm_l_duty_upper_bits is PWM1DCH + end if + PWM2CON = 0b1100_0000 + if target_chip == PIC_16F1459 then + alias pwm_r_port_tris_bit is pin_C6_direction + else + alias pwm_r_port_tris_bit is pin_C3_direction + end if + pwm_r_port_tris_bit = OUTPUT; // ccp2 PWM(L) out + alias pwm_r_duty_lower_bits is PWM2DCL_PWM2DCL + alias pwm_r_duty_upper_bits is PWM2DCH + + -- TEST PORT definition + +; PIC16F1619 +elsif (target_chip == PIC_16F1619) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + + ;if you set false(mono mode), it must be used 8bit mono wav file. + const bit CH_MODE_STEREO = true ; + + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + OPTION_REG_WPUEN = 0 ; enable global Weak Pull-up + WPUA_WPUA3 = 1 ; enable pull-up: btn + WPUB_WPUB4 = 1 ; enable pull-up: SDI + WPUB_WPUB5 = 1 ; enable pull-up: UART RX + + -- + const bit USE_CCPX = true ; use CCP1,CCP2 for PWM + -- Port Slew rate control + SLRCONA = 0 ; set max slew rate + + -- PPS setting + include pps + -- in + SSPDATPPS = PPS_RB4; RB4:SDI + -- out + RC7PPS = PPS_SDO; RC7:SDO + RB6PPS = PPS_SCK; RB6:SCK + if USE_CCPX then + RC5PPS = PPS_CCP1; RC5:CCP1 + RC3PPS = PPS_CCP2; RC3:CCP2 + else + RC5PPS = PPS_PWM3OUT; RC5:PWM3 + RC3PPS = PPS_PWM4OUT; RC3:PWM4 + end if + if UART_INFO then + RXPPS = PPS_RB5; RB5:UART RX + RB7PPS = PPS_TX ; RB7:UART TX + end if + ;RC6PPS = 0x00; RC6:CS (LATC6) + + -- UART definition + const serial_hw_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + alias pin_TX is pin_B7 + alias pin_TX_direction is pin_B7_direction + alias pin_RX is pin_B5 + alias pin_RX_direction is pin_B5_direction + + -- LED indicator definition + alias led is pin_C4 + alias led_direction is pin_C4_direction + -- btn sw definition + alias btn_bit_now is pin_A3 + + -- SPI definition (SD card interface) + const bit SPI_CLOCK_MORE_SLOW = true + alias pin_sdo_direction is pin_C7_direction + alias pin_sdo is pin_C7 + alias pin_sdi_direction is pin_B4_direction + alias pin_sdi is pin_B4 + alias pin_sck_direction is pin_B6_direction + alias pin_sck is pin_B6 + -- + alias sd_chip_select is pin_C6 + alias sd_chip_select_direction is pin_C6_direction + + ; PIC16F1619 + -- PWM definition (audio out) + T2CLKCON_CS = 0b0000 ; Use FOSC/4 for Period timer + if USE_CCPX then + const bit PWM_DUTY_REG_LEFT_TYPE2 = true + const bit PWM_DUTY_REG_RIGHT_TYPE2 = true + CCP1CON = 0b1000_1100 + CCPR1H = 0 + alias pwm_l_port_tris_bit is pin_C5_direction + pwm_l_port_tris_bit = OUTPUT; // CCP1 PWM(R) out + alias pwm_l_duty_lower_bits is CCPR1L + alias pwm_l_duty_upper_bits is CCPR1H + + CCP2CON = 0b1000_1100 + CCPR2H = 0 + alias pwm_r_port_tris_bit is pin_C3_direction + pwm_r_port_tris_bit = OUTPUT; // CCP2 PWM(L) out + alias pwm_r_duty_lower_bits is CCPR2L + alias pwm_r_duty_upper_bits is CCPR2H + else + PWM3CON = 0b1000_0000 + alias pwm_l_port_tris_bit is pin_C5_direction + pwm_l_port_tris_bit = OUTPUT; // PWM3 PWM(R) out + alias pwm_l_duty_lower_bits is PWM3DCL_DC + alias pwm_l_duty_upper_bits is PWM3DCH + + PWM4CON = 0b1000_0000 + alias pwm_r_port_tris_bit is pin_C3_direction + pwm_r_port_tris_bit = OUTPUT; // PWM4 PWM(L) out + alias pwm_r_duty_lower_bits is PWM4DCL_DC + alias pwm_r_duty_upper_bits is PWM4DCH + end if + + -- TEST PORT definition + alias test_port is pin_C1 + alias test_port_direction is pin_C1_direction + +; PIC16F1705 +elsif (target_chip == PIC_16F1705) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + -- test mode + const bit PIC16F1705_TEST_MODE = false + + ;if you set false(mono mode), it must be used 8bit mono wav file. + const bit CH_MODE_STEREO = true ; + + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + OPTION_REG_WPUEN = 0 ; enable global Weak Pull-up + WPUA_WPUA3 = 1 ; enable pull-up: btn + WPUC_WPUC1 = 1 ; enable pull-up: SDI + if PIC16F1705_TEST_MODE then + WPUC_WPUC5 = 1 ; enable pull-up: UART RX + end if + + -- Port Slew rate control + SLRCONA = 0 ; set max slew rate + + -- PPS setting + include pps + -- in + SSPDATPPS = PPS_RC1; RC1:SDI + -- out + RC2PPS = PPS_SDO ; RC2:SDO + RC0PPS = PPS_SCK ; RC0:SCK + RC5PPS = PPS_CCP1 ; RC5:CCP1 + RC3PPS = PPS_CCP2 ; RC3:CCP2 + ;RA4PPS_RA4PPS = 0x00 ; RA4:CS (LATA4) + + -- UART definition + const serial_hw_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + alias pin_TX is pin_C4 + alias pin_TX_direction is pin_C4_direction + alias pin_RX is pin_C5 + alias pin_RX_direction is pin_C5_direction + + -- LED indicator definition + alias led is pin_A5 + alias led_direction is pin_A5_direction + -- btn sw definition + alias btn_bit_now is pin_A3 + + -- SPI definition (SD card interface) + const bit SPI_CLOCK_MORE_SLOW = true + alias pin_sdo_direction is pin_C2_direction + alias pin_sdo is pin_C2 + alias pin_sdi_direction is pin_C1_direction + alias pin_sdi is pin_C1 + alias pin_sck_direction is pin_C0_direction + alias pin_sck is pin_C0 + -- + alias sd_chip_select is pin_A4 + alias sd_chip_select_direction is pin_A4_direction + + ; PIC16F1705 + -- PWM definition (audio out) + if PIC16F1705_TEST_MODE == false then + CCP1CON = 0b0000_1100 + alias pwm_l_port_tris_bit is pin_C5_direction + pwm_l_port_tris_bit = OUTPUT; // ccp1 PWM(R) out + alias pwm_l_duty_lower_bits is CCP1CON_DC1B + alias pwm_l_duty_upper_bits is CCPR1L + end if + CCP2CON = 0b0000_1100 + alias pwm_r_port_tris_bit is pin_C3_direction + pwm_r_port_tris_bit = OUTPUT; // ccp2 PWM(L) out + alias pwm_r_duty_lower_bits is CCP2CON_DC2B + alias pwm_r_duty_upper_bits is CCPR2L + + -- TEST PORT definition + alias test_port is pin_A2 + alias test_port_direction is pin_A2_direction + +; PIC16F1709 +elsif (target_chip == PIC_16F1709) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + ;if you set false(mono mode), it must be used 8bit mono wav file. + const bit CH_MODE_STEREO = true ; + + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + OPTION_REG_WPUEN = 0 ; enable global Weak Pull-up + WPUA_WPUA3 = 1 ; enable pull-up: btn + WPUB_WPUB4 = 1 ; enable pull-up: SDI + WPUB_WPUB5 = 1 ; enable pull-up: UART RX + + -- Port Slew rate control + SLRCONA = 0 ; set max slew rate + + -- PPS setting + include pps + -- in + SSPDATPPS = PPS_RB4; RB4:SDI + -- out + RC7PPS = PPS_SDO ; RC7:SDO + RB6PPS = PPS_SCK ; RB6:SCK + RC5PPS = PPS_CCP1 ; RC5:CCP1 + RC3PPS = PPS_CCP2 ; RC3:CCP2 + ;RC6PPS_RC6PPS = 0x00 ; RC6:CS (LATC6) + if UART_INFO then + RXPPS = PPS_RB5; RB5:UART RX + RB7PPS = PPS_TX ; RB7:UART TX + end if + + -- UART definition + const serial_hw_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + alias pin_TX is pin_B7 + alias pin_TX_direction is pin_B7_direction + alias pin_RX is pin_B5 + alias pin_RX_direction is pin_B5_direction + + -- LED indicator definition + alias led is pin_C4 + alias led_direction is pin_C4_direction + -- btn sw definition + alias btn_bit_now is pin_A3 + + -- SPI definition (SD card interface) + const bit SPI_CLOCK_MORE_SLOW = true + alias pin_sdo_direction is pin_C7_direction + alias pin_sdo is pin_C7 + alias pin_sdi_direction is pin_B4_direction + alias pin_sdi is pin_B4 + alias pin_sck_direction is pin_B6_direction + alias pin_sck is pin_B6 + -- + alias sd_chip_select is pin_C6 + alias sd_chip_select_direction is pin_C6_direction + + ; PIC16F1709 + -- PWM definition (audio out) + CCP1CON = 0b0000_1100 + alias pwm_l_port_tris_bit is pin_C5_direction + pwm_l_port_tris_bit = OUTPUT; // ccp1 PWM(R) out + alias pwm_l_duty_lower_bits is CCP1CON_DC1B + alias pwm_l_duty_upper_bits is CCPR1L + + CCP2CON = 0b0000_1100 + alias pwm_r_port_tris_bit is pin_C3_direction + pwm_r_port_tris_bit = OUTPUT; // ccp2 PWM(L) out + alias pwm_r_duty_lower_bits is CCP2CON_DC2B + alias pwm_r_duty_upper_bits is CCPR2L + + -- TEST PORT definition + alias test_port is pin_C1 + alias test_port_direction is pin_C1_direction + +; PIC16F1764 +elsif (target_chip == PIC_16F1764) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + -- test mode + const bit PIC16F1764_TEST_MODE = false + + ;if you set false(mono mode), it must be used 8bit mono wav file. + const bit CH_MODE_STEREO = true ; + + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + OPTION_REG_WPUEN = 0 ; enable global Weak Pull-up + WPUA_WPUA3 = 1 ; enable pull-up: btn + WPUC_WPUC1 = 1 ; enable pull-up: SDI + if PIC16F1764_TEST_MODE then + WPUC_WPUC5 = 1 ; enable pull-up: UART RX + end if + + -- Port Slew rate control + SLRCONA = 0 ; set max slew rate + + -- PPS setting + include pps + -- in + SSPDATPPS = PPS_RC1; RC1:SDI + -- out + RC2PPS = PPS_SDO ; RC2:SDO + RC0PPS = PPS_SCK ; RC0:SCK + RC5PPS = PPS_CCP1 ; RC5:CCP1 + RC3PPS = PPS_PWM3OUT ; RC3:PWM3 + if PIC16F1764_TEST_MODE then + RXPPS = PPS_RC5 ; RC5:UART RX + RC4PPS = PPS_TX ; RC4:UART TX + end if + + -- UART definition + const serial_hw_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + alias pin_TX is pin_C4 + alias pin_TX_direction is pin_C4_direction + alias pin_RX is pin_C5 + alias pin_RX_direction is pin_C5_direction + + -- LED indicator definition + alias led is pin_A5 + alias led_direction is pin_A5_direction + -- btn sw definition + alias btn_bit_now is pin_A3 + + -- SPI definition (SD card interface) + const bit SPI_CLOCK_MORE_SLOW = true + alias pin_sdo_direction is pin_C2_direction + alias pin_sdo is pin_C2 + alias pin_sdi_direction is pin_C1_direction + alias pin_sdi is pin_C1 + alias pin_sck_direction is pin_C0_direction + alias pin_sck is pin_C0 + -- + alias sd_chip_select is pin_A4 + alias sd_chip_select_direction is pin_A4_direction + + ; PIC16F1764 + -- PWM definition (audio out) + T2CLKCON_CS = 0b0001 ; Use FOSC/4 for Period timer + if PIC16F1764_TEST_MODE == false then + const bit PWM_DUTY_REG_LEFT_TYPE2 = true + CCP1CON = 0b1000_1100 + CCPR1H = 0 ; clear higher register of duty in advance. + alias pwm_l_port_tris_bit is pin_C5_direction + pwm_l_port_tris_bit = OUTPUT; // ccp1 PWM(L) out + alias pwm_l_duty_lower_bits is CCPR1L + alias pwm_l_duty_upper_bits is CCPR1H + end if + PWM3CON = 0b1000_0000 + alias pwm_r_port_tris_bit is pin_C3_direction + pwm_r_port_tris_bit = OUTPUT; // PWM3 PWM(R) out + alias pwm_r_duty_lower_bits is PWM3DCL_DC + alias pwm_r_duty_upper_bits is PWM3DCH + + -- TEST PORT definition + alias test_port is pin_A2 + alias test_port_direction is pin_A2_direction + +; PIC16F1825 +elsif (target_chip == PIC_16F1825) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + -- test mode + const bit PIC16F1825_TEST_MODE = false + + ;if you set false(mono mode), it must be used 8bit mono wav file. + const bit CH_MODE_STEREO = true ; + + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + OPTION_REG_WPUEN = 0 ; enable global Weak Pull-up + WPUA_WPUA3 = 1 ; enable pull-up: btn + WPUC_WPUC1 = 1 ; enable pull-up: SDI + if PIC16F1825_TEST_MODE then + WPUC_WPUC5 = 1 ; enable pull-up: UART RX + end if + + -- UART definition + const serial_hw_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + alias pin_TX is pin_TX_RC4 + alias pin_TX_direction is pin_TX_RC4_direction + alias pin_RX is pin_RX_RC5 + alias pin_RX_direction is pin_RX_RC5_direction + + -- LED indicator definition + alias led is pin_A5 + alias led_direction is pin_A5_direction + -- btn sw definition + alias btn_bit_now is pin_A3 + + -- SPI definition (SD card interface) + alias pin_sdo_direction is pin_C2_direction + alias pin_sdo is pin_C2 + -- + alias sd_chip_select is pin_A4 + alias sd_chip_select_direction is pin_A4_direction + + ; PIC16F1825 + -- PWM definition (audio out) + if PIC16F1825_TEST_MODE == false then + CCP1CON = 0b0000_1100 + alias pwm_l_port_tris_bit is pin_C5_direction + pwm_l_port_tris_bit = OUTPUT; // ccp1 PWM(R) out + alias pwm_l_duty_lower_bits is CCP1CON_DC1B + alias pwm_l_duty_upper_bits is CCPR1L + end if + CCP2CON = 0b0000_1100 + alias pwm_r_port_tris_bit is pin_C3_direction + pwm_r_port_tris_bit = OUTPUT; // ccp2 PWM(L) out + alias pwm_r_duty_lower_bits is CCP2CON_DC2B + alias pwm_r_duty_upper_bits is CCPR2L + + -- TEST PORT definition + alias test_port is pin_A2 + alias test_port_direction is pin_A2_direction + +; PIC16F18325 +elsif (target_chip == PIC_16F18325) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + -- test mode + const bit PIC16F18325_TEST_MODE = false + + ;if you set false(mono mode), it must be used 8bit mono wav file. + const bit CH_MODE_STEREO = true ; + + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + ;OPTION_REG_WPUEN = 0 ; enable global Weak Pull-up + WPUA_WPUA3 = 1 ; enable pull-up: btn + WPUC_WPUC1 = 1 ; enable pull-up: SDI + if PIC16F18325_TEST_MODE then + WPUC_WPUC5 = 1 ; enable pull-up: UART RX + end if + + -- UART definition + const serial_hw_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + alias pin_TX is pin_C4 + alias pin_TX_direction is pin_C4_direction + alias pin_RX is pin_C5 + alias pin_RX_direction is pin_C5_direction + + -- LED indicator definition + alias led is pin_A5 + alias led_direction is pin_A5_direction + + -- Port Slew rate control + SLRCONA = 0 ; set max slew rate + + -- PPS setting + include pps + -- in + SSP1DATPPS = PPS_RC1 ; RC1:SDI + -- out + RC2PPS = PPS_SDO1 ; RC2:SDO1 + RC0PPS = PPS_SCK1 ; RC0:SCK1 + RC5PPS = PPS_CCP1 ; RC5:CCP1 + RC3PPS = PPS_CCP2 ; RC3:CCP2 + if PIC16F18325_TEST_MODE then + RXPPS = PPS_RC5 ; RC5:UART RX + RC4PPS = PPS_TX ; RC4:UART TX + end if + + -- SPI definition (SD card interface) + const bit SPI_CLOCK_MORE_SLOW = true + alias pin_sdo_direction is pin_C2_direction + alias pin_sdo is pin_C2 + alias pin_sdi_direction is pin_C1_direction + alias pin_sdi is pin_C1 + alias pin_sck_direction is pin_C0_direction + alias pin_sck is pin_C0 + -- + alias sd_chip_select is pin_A4 + alias sd_chip_select_direction is pin_A4_direction + + -- btn sw definition + alias btn_bit_now is pin_A3 + + ; PIC16F18325 + -- PWM definition (audio out) + const bit PWM_DUTY_REG_LEFT_TYPE2 = true + const bit PWM_DUTY_REG_RIGHT_TYPE2 = true + if PIC16F18325_TEST_MODE == false then + CCP1CON = 0b1000_1111 ; set PWM enable and PWM mode. + CCPR1H = 0 ; clear higher register of duty in advance. + alias pwm_l_port_tris_bit is pin_C5_direction + pwm_l_port_tris_bit = OUTPUT; // ccp1 PWM(R) out + alias pwm_l_duty_lower_bits is CCPR1L + alias pwm_l_duty_upper_bits is CCPR1H + end if + CCP2CON = 0b1000_1111 ; set PWM enable and PWM mode. + CCPR2H = 0 ; clear higher register of duty in advance. + alias pwm_r_port_tris_bit is pin_C3_direction + pwm_r_port_tris_bit = OUTPUT; // ccp2 PWM(L) out + alias pwm_r_duty_lower_bits is CCPR2L + alias pwm_r_duty_upper_bits is CCPR2H + + -- TEST PORT definition + alias test_port is pin_A2 + alias test_port_direction is pin_A2_direction + + +; PIC16F1827 +elsif (target_chip == PIC_16F1827) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + const bit CH_MODE_STEREO = true + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + OPTION_REG_WPUEN = 0 ; enable global Weak Pull-up + WPUA_WPUA5 = 1 ; enable pull-up: btn + WPUB_WPUB1 = 1 ; enable pull-up: SDI1 + WPUB_WPUB2 = 1 ; enable pull-up: UART RX + + -- UART definition + const serial_hw_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + WPUB_WPUB2 = 1; /* Weak pull-up enable */ + APFCON0_RXDTSEL = 1; /* RX = RB2 , 8pin + APFCON1_TXCKSEL = 1; /* TX = RB5 , 11pin + alias pin_TX is pin_TX_RB5 + alias pin_TX_direction is pin_TX_RB5_direction + alias pin_RX is pin_RX_RB2 + alias pin_RX_direction is pin_RX_RB2_direction + + -- LED indicator definition + alias led is pin_B0 + alias led_direction is pin_B0_direction + + -- btn sw definition + ;var volatile bit pin_A5 at PORTA : 5 ; fix bug for jallib 1.2.0 + alias btn_bit_now is pin_A5 + + -- SPI definition (SD card interface) + APFCON0_SDO1SEL = 1 ; select alternate pin + alias pin_sdo_direction is pin_A6_direction + alias pin_sdo is pin_A6 + -- + alias sd_chip_select is pin_B3 + alias sd_chip_select_direction is pin_B3_direction + + ; PIC16F1827 + -- PWM definition (audio out) + CCP3CON = 0b0000_1100 + CCP4CON = 0b0000_1100 + alias pwm_l_port_tris_bit is pin_A3_direction + alias pwm_r_port_tris_bit is pin_A4_direction + pwm_l_port_tris_bit = OUTPUT; // ccp3 PWM(L) out + pwm_r_port_tris_bit = OUTPUT; // ccp4 PWM(R) out + alias pwm_l_duty_lower_bits is CCP3CON_DC3B + alias pwm_l_duty_upper_bits is CCPR3L + alias pwm_r_duty_lower_bits is CCP4CON_DC4B + alias pwm_r_duty_upper_bits is CCPR4L + + -- TEST PORT definition + alias test_port is pin_A2 + alias test_port_direction is pin_A2_direction + +; PIC16F1829 +elsif (target_chip == PIC_16F1829) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + ;if you set false(mono mode), it must be used 8bit mono wav file. + const bit CH_MODE_STEREO = true ; + + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + OPTION_REG_WPUEN = 0 ; enable global Weak Pull-up + WPUA_WPUA3 = 1 ; enable pull-up: btn + WPUC_WPUC1 = 1 ; enable pull-up: SDI + WPUB_WPUB5 = 1 ; enable pull-up: UART RX + + -- UART definition + const serial_hw_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + alias pin_TX is pin_TX_RB7 + alias pin_TX_direction is pin_TX_RB7_direction + alias pin_RX is pin_RX_RB5 + alias pin_RX_direction is pin_RX_RB5_direction + + -- LED indicator definition + alias led is pin_C4 + alias led_direction is pin_C4_direction + -- btn sw definition + alias btn_bit_now is pin_A3 + + -- SPI definition (SD card interface) + alias sd_chip_select is pin_C6 + alias sd_chip_select_direction is pin_C6_direction + + ; PIC16F1829 + -- PWM definition (audio out) + CCP1CON = 0b0000_1100 + alias pwm_l_port_tris_bit is pin_C5_direction + pwm_l_port_tris_bit = OUTPUT; // ccp1 PWM(R) out + alias pwm_l_duty_lower_bits is CCP1CON_DC1B + alias pwm_l_duty_upper_bits is CCPR1L + + CCP2CON = 0b0000_1100 + alias pwm_r_port_tris_bit is pin_C3_direction + pwm_r_port_tris_bit = OUTPUT; // ccp2 PWM(L) out + alias pwm_r_duty_lower_bits is CCP2CON_DC2B + alias pwm_r_duty_upper_bits is CCPR2L + + -- TEST PORT definition + alias test_port is pin_C1 + alias test_port_direction is pin_C1_direction + +; PIC16F88 +elsif (target_chip == PIC_16F88) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + const bit CH_MODE_STEREO = false + -- fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; + + -- Enable pull-ups + OPTION_REG_NRBPU = 0 ; enable RB port Weak Pull-up + ; auto pull-up each RBx, if it is set to input function + + -- UART definition + const serial_hw_baudrate = 9600 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + + -- PWM period timer2 prescale setting + ;T2CON_T2CKPS = 0b01; target_clock/4 + + -- LED indicator definition + alias led is pin_B0 + alias led_direction is pin_B0_direction + + -- btn sw definition + ;var volatile bit pin_A5 at PORTA : 5 ; fix bug for jallib 1.20 + alias btn_bit_now is pin_A5 + + -- SPI definition (SD card interface) + alias sd_chip_select is pin_A4 + alias sd_chip_select_direction is pin_A4_direction + + -- PWM definition + CCP1CON = 0b0000_1100 + alias pwm_l_port_tris_bit is pin_B3_direction + pwm_l_port_tris_bit = OUTPUT; // ccp1 PWM out + alias pwm_l_duty_lower_bits is CCP1CON_DC1B + alias pwm_l_duty_upper_bits is CCPR1L + + -- TEST PORT definition + alias test_port is pin_A2 + alias test_port_direction is pin_A2_direction + +; PIC16F1938 +elsif (target_chip == PIC_16F1938) Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + const bit CH_MODE_STEREO = true + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + OPTION_REG_WPUEN = 0 ; global Weak Pull-up + WPUE_WPUE3 = 1 ; enable pull-up: btn sw + ;WPUC_WPUC4 = 1 ; enable pull-up: SDI + ;WPUC_WPUC7 = 1 ; enable pull-up: UART RX + + -- UART definition + const serial_hw_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + + -- LED indicator definition + alias led is pin_A0 + alias led_direction is pin_A0_direction + + -- btn sw definition + alias btn_bit_now is pin_E3 + + -- SPI definition (SD card interface) + alias sd_chip_select is pin_C1 + alias sd_chip_select_direction is pin_C1_direction + + -- PWM definition (audio out) + APFCON_CCP2SEL = 1; select CCP2 to RB3 + CCP1CON = 0b0000_1100 + CCP2CON = 0b0000_1100 + alias pwm_l_port_tris_bit is pin_B3_direction + alias pwm_r_port_tris_bit is pin_C2_direction + pwm_l_port_tris_bit = OUTPUT; ccp2 // PWM(L) out + pwm_r_port_tris_bit = OUTPUT; ccp1 // PWM(R) out + alias pwm_l_duty_lower_bits is CCP2CON_DC2B + alias pwm_l_duty_upper_bits is CCPR2L + alias pwm_r_duty_lower_bits is CCP1CON_DC1B + alias pwm_r_duty_upper_bits is CCPR1L + + -- TEST PORT definition + alias test_port is pin_A0 + alias test_port_direction is pin_A0_direction + +; PIC18F14K50 +elsif (target_chip == PIC_18F14K50) | target_chip == PIC_18F13K50 Then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + const bit CH_MODE_STEREO = false + ; fs=44.1KHz + const byte SAMPLING_FREQ = byte( ((target_clock>>2)/44100) - 1 ) ; PR2=180 + + -- Enable pull-ups + INTCON2_RABPU = 0 ; enable global Weak Pull-up + WPUB_WPUB4 = 1 ; enable pull-up: SDI + WPUB_WPUB5 = 1 ; enable pull-up: UART RX + WPUA_WPUA3 = 1 ; enable pull-up: btn + + -- UART definition + const serial_hw_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + + -- LED indicator definition + alias led is pin_C4 + alias led_direction is pin_C4_direction + + -- btn sw definition + alias btn_bit_now is pin_A3 + + -- SPI definition (SD card interface) + alias sd_chip_select is pin_C6 + alias sd_chip_select_direction is pin_C6_direction + + -- PWM definition (audio out) + CCP1CON = 0b0000_1100 + alias pwm_l_port_tris_bit is pin_C5_direction + pwm_l_port_tris_bit = OUTPUT; //ccp1 PWM(L) out + alias pwm_l_duty_lower_bits is CCP1CON_DC1B + alias pwm_l_duty_upper_bits is CCPR1L + + -- TEST PORT definition + alias test_port is pin_C1 + alias test_port_direction is pin_C1_direction +end if + +; PIC18F26J50 +if target_chip == PIC_18F26J50 then + const bit HAVE_BUTTON_SW = true; for 'Play','Pause','Power off' + const bit HAVE_LED_IND_PWM = true; + const bit HAVE_LED_IND_BLINK = false; + const bit HAVE_LED_PAUSE_INDICATOR = true; + const bit HAVE_POWER_OFF_MODE = false; under construction + + const bit CH_MODE_STEREO = true + ; fs=44.1KHz + T2CON_T2CKPS =0b01 ; Timre2 prescaler is 1/4 + const byte SAMPLING_FREQ = byte( ((target_clock>>4)/44100) - 1 ) ; 67 + + -- Enable pull-ups + INTCON2_RBPU = 0 ; enable global Weak Pull-up + + -- PPS + include pps + -- in + PPS_MAP_RX2DT2 = RP12 ;RP12; RC0 UART RX2 + -- out + PPS_MAP_RP13 = PPS_CCP1 ;RP13: RC2: CPP1 PWM(L) + PPS_MAP_RP6 = PPS_CCP2 ;RP6: RB3: CPP2 PWM(R) + PPS_MAP_RP17 = PPS_TX2 ;RP17: RC6: UART TX2 + + -- UART definition + const bit USE_UART2 = true + const serial_hw2_baudrate = 115200 -- set the baudrate + alias UART_RX_ENABLE is RCSTA_CREN + alias pin_TX2 is pin_RP17 ; = RC6 + alias pin_TX2_direction is pin_RP17_direction + alias pin_RX2 is pin_RP12 ; = RC0 + alias pin_RX2_direction is pin_RP12_direction + + -- LED indicator definition + alias led is pin_A0 + alias led_direction is pin_A0_direction + + -- btn sw definition + alias btn_bit_now is pin_B1 + + -- SPI definition (SD card interface) + alias sd_chip_select is pin_C1 + alias sd_chip_select_direction is pin_C1_direction + + -- PWM definition (audio out) + CCP1CON = 0b0000_1100 + alias pwm_l_port_tris_bit is pin_C2_direction + pwm_l_port_tris_bit = OUTPUT; //ccp1 PWM(L) out + alias pwm_l_duty_lower_bits is CCP1CON_DC1B + alias pwm_l_duty_upper_bits is CCPR1L + + CCP2CON = 0b0000_1100 + alias pwm_r_port_tris_bit is pin_B3_direction + pwm_r_port_tris_bit = OUTPUT; //ccp2 PWM(R) out + alias pwm_r_duty_lower_bits is CCP2CON_DC2B + alias pwm_r_duty_upper_bits is CCPR2L + + -- TEST PORT definition + alias test_port is pin_A1 + alias test_port_direction is pin_A1_direction +end if + +; out port setting +; LED and TEST_PORT +if defined( led_direction ) then + led_direction = OUTPUT +end if +if defined( test_port_direction ) then + test_port_direction = OUTPUT +end if + +-- UART initialize +if UART_INFO then + if defined(USE_UART2) then + if USE_UART2 then + include serial_hardware2 + serial_hw2_init() + alias serial_write is serial_hw2_write + alias serial_read is serial_hw2_read + alias serial_data is serial_hw2_data + alias serial_data_available is serial_hw2_data_available + end if + else + include serial_hardware + serial_hw_init() + alias serial_write is serial_hw_write + alias serial_read is serial_hw_read + alias serial_data is serial_hw_data + alias serial_data_available is serial_hw_data_available + end if +end if + + +-- /****************** +-- GIE_enable +-- *******************/ +procedure GIE_enable() is + pragma inline + GIE_bit = 1 +end procedure + +-- /****************** +-- GIE_disable +-- *******************/ +procedure GIE_disable() is + pragma inline + GIE_bit = 0 +end procedure + +-- /****************** +-- PEIE_enable +-- *******************/ +procedure PEIE_enable() is + pragma inline + PEIE_bit = 1 +end procedure + diff --git a/wave_player_main.jal b/wave_player_main.jal new file mode 100644 index 0000000..0da1610 --- /dev/null +++ b/wave_player_main.jal @@ -0,0 +1,257 @@ +-- Copyright (C) 2017,2019 avrin, http://mpu.seesaa.net +-- This program is licensed under BSD license. +-- Please refer to "LICENSE.txt". +-- + +-- btn: meaning Button switch +-- + +-- /****************** +-- Varialble definitions +-- *******************/ +const byte LED_PERIOD_PLAYNG = 75 ; [ * 10 msec] +const byte LED_PERIOD_PAUSING = 10 ; [ * 10 msec] +var dword gdwSongFileSectors = 0 ; set to 0 for auto start music +var word gwReadCount +if CH_MODE_STEREO then + const word wREAD_COUNT = 256 ; (512/2) + const byte bHEADER_COUNT = 44/2 +else + const word wREAD_COUNT = 256*2 + const byte bHEADER_COUNT = 44 +end if + +-- /****************** +-- period_intr for PWM +-- *******************/ +procedure period_intr() is + pragma interrupt + var byte datL,datR + if isPeriodTimer_IF() then + if TEST_PORT_ENABLE then + test_port =1 + end if + + datL = send_ff() + if CH_MODE_STEREO then + datR = send_ff() + end if + if CH_MODE_STEREO & defined(pwm_r_duty_fast) then ; normal route + pwm_l_duty_fast(datL) + pwm_r_duty_fast(datR) + else + var byte bDmono + ;bDmono = byte( (word(datL) + datR)>>1 ) + pwm_l_duty_fast(datL) + end if + gwReadCount = gwReadCount - 1 + + ; check 512byte sector boundery + if gwReadCount == 0 then + ; end 1 sector + datL = send_ff() ; dummy read. discard CRC + datL = send_ff() + while send_ff() != 0xFE loop end loop + gwReadCount = wREAD_COUNT + gdwSongFileSectors = gdwSongFileSectors - 1 + end if + + ; end interrupt + periodTimer_IF_clear() + + if TEST_PORT_ENABLE then + test_port =0 + end if + end if ; isPeriodTimer_IF() +end procedure + +-- /****************** +-- wave_player_main +-- *******************/ +procedure wave_player_main() is + pragma inline + var word wBtnLowCount = 0 + if HAVE_LED_IND_BLINK then + var byte bTimeout_led = 0 + end if + var bit btn_bit_prev = true ,btn_short_on = false + var bit btn_long_on = false + if HAVE_POWER_OFF_MODE then + btn_long_on2 = false + alias btn_power_off_on is btn_long_on2 + end if + var bit btn_pause_prev = false + alias fPlaying is TMR2IE_bit + alias btn_next_song_on is btn_short_on + alias btn_pause_on is btn_long_on + + gwReadCount = wREAD_COUNT + + if HAVE_LED_IND_PWM then ; pseudo PWM setting + const sbyte IND_PERIOD = 125 + const sbyte IND_DUTY_LOW_SPEED = 1 + const sbyte IND_DUTY_HI_SPEED = 3 + var sbyte sbIndDuty = 0 + var sbyte sbIndCurrPos = 0 + var sbyte sbIndSpeed = IND_DUTY_LOW_SPEED + var sbyte sbIndDelta = sbIndSpeed + end if + + forever loop + ; wait 10msec Ticker flag + while !isTickTimer_IF() loop + if gdwSongFileSectors == 0 then ; found end of file + exit loop ; promptly exit and prepare next song + end if + + if HAVE_LED_IND_PWM then + --------------------- + -- pseudo PWM for LED + --------------------- + if sbIndCurrPos < sbIndDuty then + led = 1 + else + led = 0 + end if + sbIndCurrPos = sbIndCurrPos + 1 + if sbIndCurrPos == IND_PERIOD then + sbIndCurrPos = 0 + end if + end if + end loop + + ------------------- + tickTimer_IF_clear() + tickTimer_reload() + ------------------- + + ------------------- + -- Go to sleep mode (== Power off) + ------------------- + ;include power_off_mode + + ------------------- + --- Next song and start + ------------------- + if ( gdwSongFileSectors == 0 ) | btn_next_song_on then + pwm_period_timer_stop() + btn_next_song_on = false + sd_stop_read() + + ------------------- + --- Search next song + ------------------- + searchNextFile() + ;# Seek to Target file sector + sd_start_read( gdwTargetFileSector ) + + ; delete about last 30Kbyte to cut tag data in *.wav file + gdwSongFileSectors = dword( (gdwBPB_FileSize - CUT_LAST_TAG_NOISE) )>>9 ; /512 , change to sector + + ------------------- + --- skip WAV header size + ------------------- + sd_read_pulse_byte(44) ; + + ------------------- + --- music start + ------------------- + gwReadCount = wREAD_COUNT - bHEADER_COUNT + pwm_period_timer_start() + end if + + ------------------- + --- LED indicator 1 --- pseudo PWM + ------------------- + if HAVE_LED_IND_PWM & !defined(PIN8_MCU) then + sbIndDuty = sbIndDuty + sbIndDelta + if sbIndDuty > IND_PERIOD then + sbIndDelta = -1 * sbIndSpeed + end if + if sbIndDuty == 0 then + sbIndDelta = sbIndSpeed + end if + if fPlaying then + sbIndSpeed = IND_DUTY_LOW_SPEED + else + sbIndSpeed = IND_DUTY_HI_SPEED + end if + end if + + ------------------- + --- LED indicator 2 --- simple ON/OFF + ------------------- + if defined(HAVE_LED_IND_BLINK) & !defined(PIN8_MCU) then + if HAVE_LED_IND_BLINK then + if bTimeout_led == 0 then + if fPlaying then + bTimeout_led = LED_PERIOD_PLAYNG ; during Playing, on/off + led = !led + else + if HAVE_LED_PAUSE_INDICATOR then + bTimeout_led = LED_PERIOD_PAUSING ; during Pause, on/off + led = !led + else + bTimeout_led = 1 + led = 0 + end if + end if + end if + bTimeout_led = bTimeout_led - 1 + end if + end if + + ------------------- + --- button sw input + ------------------- + if HAVE_BUTTON_SW then + -- Using this push switch + -- http://akizukidenshi.com/catalog/g/gP-01282/ + -- + var bit btn = btn_bit_now + if btn_bit_prev ^ btn then + if btn then ; 0 --> 1: btn released + if (wBtnLowCount > 10) & (wBtnLowCount < 130) then ; 100msec < x < 1.3sec + btn_short_on = true + end if + wBtnLowCount = 0 + end if + end if + btn_bit_prev = btn + if btn == false then + wBtnLowCount = wBtnLowCount + 1 + end if + if (wBtnLowCount > 120) then ; 1.2sec > + ; recognized pause on + btn_long_on = true + end if + if HAVE_POWER_OFF_MODE then + if (wBtnLowCount > 400) then ; 4sec > + ; "long on2" is meaning go to sleep mode + btn_long_on2 = true; + end if + end if + ------------------- + -- Pause release + ------------------- + if btn_next_song_on then + if !fPlaying then ; if during pause + fPlaying = true; release pause + btn_next_song_on = false + btn_pause_on = false + end if + end if + ------------------- + --- Pause enter + ------------------- + if btn_pause_prev ^ btn_pause_on then + if btn_pause_on then + fPlaying = false + end if + end if + btn_pause_prev = btn_pause_on + end if + end loop ; [forever loop end] + +end procedure +