PokittoLib is the library needed for programming the Pokitto DIY game console (www.pokitto.com)
Dependents: YATTT sd_map_test cPong SnowDemo ... more
PokittoLib
Library for programming Pokitto hardware
How to Use
- Import this library to online compiler (see button "import" on the right hand side
- DO NOT import mbed-src anymore, a better version is now included inside PokittoLib
- Change My_settings.h according to your project
- Start coding!
Diff: POKITTO_HW/HWSound.h
- Revision:
- 43:6183b12dd99c
- Child:
- 67:068fa6345036
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/POKITTO_HW/HWSound.h Tue May 01 18:42:56 2018 +0000 @@ -0,0 +1,165 @@ +/**************************************************************************/ +/*! + @file HWSOUND.h + @author Jonne Valola + + @section LICENSE + + Software License Agreement (BSD License) + + Copyright (c) 2016, Jonne Valola + 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. + 3. Neither the name of the copyright holders nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''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 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. +*/ +/**************************************************************************/ +#ifndef HWSOUND_H +#define HWSOUND_H + +#include "mbed.h" +#include "Pokitto_settings.h" + +#define SPEAKER 3 +#define BUFFER_SIZE 512*4 //*8 //*8 // 512 // was 512 (works really well with crabator) was 256 + +#define SBUFSIZE 512*4 + +#if POK_BOARDREV == 1 + /** 2-layer board rev 1.3 **/ + #define DAC0_PORT 1 + #define DAC0_PIN 6 + #define DAC1_PORT 1 + #define DAC1_PIN 0 + #define DAC2_PORT 1 + #define DAC2_PIN 16 + #define DAC3_PORT 0 + #define DAC3_PIN 19 + #define DAC4_PORT 0 + #define DAC4_PIN 17 + #define DAC5_PORT 1 + #define DAC5_PIN 12 + #define DAC6_PORT 1 + #define DAC6_PIN 15 + #define DAC7_PORT 1 + #define DAC7_PIN 8 +#else + /** 4-layer board rev 2.1 **/ + #define DAC0_PORT 1 + #define DAC0_PIN 28 + #define DAC1_PORT 1 + #define DAC1_PIN 29 + #define DAC2_PORT 1 + #define DAC2_PIN 30 + #define DAC3_PORT 1 + #define DAC3_PIN 31 +/** has daniel made a mistake with dac ? **/ + #define DAC4_PORT 2 + #define DAC4_PIN 20 + #define DAC5_PORT 2 + #define DAC5_PIN 21 + #define DAC6_PORT 2 + #define DAC6_PIN 22 + #define DAC7_PORT 2 + #define DAC7_PIN 23 + + /** MASK FOR FASTER DAC **/ + #define SET_MASK_DAC LPC_GPIO_PORT->MASK[1] = ~(0xF0078000); //mask P1_15...P1_18 and P1_28...P1_31 + #define CLR_MASK_DAC LPC_GPIO_PORT->MASK[1] = 0; // all on + + /* fixing wrong pins from daniel*/ + #define SET_MASK_DAC_LO LPC_GPIO_PORT->MASK[1] = ~(0xF0000000); //mask P1_28...P1_31 + #define CLR_MASK_DAC_LO LPC_GPIO_PORT->MASK[1] = 0; // all on + #define SET_MASK_DAC_HI LPC_GPIO_PORT->MASK[2] = ~(0xF00000); //mask P2_20...P2_23 + #define CLR_MASK_DAC_HI LPC_GPIO_PORT->MASK[2] = 0; // all on + +#endif + +#define CLR_DAC0 LPC_GPIO_PORT->CLR[DAC0_PORT] = 1UL << DAC0_PIN; +#define SET_DAC0 LPC_GPIO_PORT->SET[DAC0_PORT] = 1UL << DAC0_PIN; +#define CLR_DAC1 LPC_GPIO_PORT->CLR[DAC1_PORT] = 1UL << DAC1_PIN; +#define SET_DAC1 LPC_GPIO_PORT->SET[DAC1_PORT] = 1UL << DAC1_PIN; +#define CLR_DAC2 LPC_GPIO_PORT->CLR[DAC2_PORT] = 1UL << DAC2_PIN; +#define SET_DAC2 LPC_GPIO_PORT->SET[DAC2_PORT] = 1UL << DAC2_PIN; +#define CLR_DAC3 LPC_GPIO_PORT->CLR[DAC3_PORT] = 1UL << DAC3_PIN; +#define SET_DAC3 LPC_GPIO_PORT->SET[DAC3_PORT] = 1UL << DAC3_PIN; +#define CLR_DAC4 LPC_GPIO_PORT->CLR[DAC4_PORT] = 1UL << DAC4_PIN; +#define SET_DAC4 LPC_GPIO_PORT->SET[DAC4_PORT] = 1UL << DAC4_PIN; +#define CLR_DAC5 LPC_GPIO_PORT->CLR[DAC5_PORT] = 1UL << DAC5_PIN; +#define SET_DAC5 LPC_GPIO_PORT->SET[DAC5_PORT] = 1UL << DAC5_PIN; +#define CLR_DAC6 LPC_GPIO_PORT->CLR[DAC6_PORT] = 1UL << DAC6_PIN; +#define SET_DAC6 LPC_GPIO_PORT->SET[DAC6_PORT] = 1UL << DAC6_PIN; +#define CLR_DAC7 LPC_GPIO_PORT->CLR[DAC7_PORT] = 1UL << DAC7_PIN; +#define SET_DAC7 LPC_GPIO_PORT->SET[DAC7_PORT] = 1UL << DAC7_PIN; + +/** the output holder **/ +extern uint16_t soundbyte; + + +namespace Pokitto { + +/** stream output and status */ +extern uint8_t streambyte, streamon, HWvolume; + +extern float pwm2; //virtual pwm output + +extern void soundInit(); +extern void dac_write(uint8_t value); +extern uint8_t ampIsOn(); +extern void ampEnable(uint8_t v); +extern void audio_IRQ(); +extern void updateSDAudioStream(); +extern uint8_t streamPaused(); +extern void pauseStream(); +extern void playStream(); +extern int setHWvolume(uint8_t); +extern uint8_t getHWvolume(); +extern void changeHWvolume(int8_t); + +extern pwmout_t audiopwm; +extern uint8_t pokAmpIsOn(); +extern void pokAmpEnable(uint8_t); + +extern Ticker audio; + +extern void update_SDAudioStream(); +} + + +extern void pokSoundIRQ(); +extern void pokSoundBufferedIRQ(); + +#if POK_STREAMING_MUSIC > 0 + extern unsigned char buffers[][BUFFER_SIZE]; + extern volatile int currentBuffer, oldBuffer; + extern volatile int bufindex, vol; + extern volatile unsigned char * currentPtr; + extern volatile unsigned char * endPtr; + extern int8_t streamvol; + extern uint32_t streamcounter; + extern uint8_t streamstep; +#endif + +#endif //HWSOUND_H + + +