/* Wtv020sd16p - Library to control a WTV020-SD-16P module Created by Diego J. Arevalo, August 6th, 2012 for Arduino plaform Modified by Kamil Kanas, 17/5/2017 for mbed platforms Tested with FRDM KL25Z board Released into the public domain 9/6/2017. */
Dependents: WTV020SD16_Player_KL25
WTV020SD16.cpp@0:47be58458737, 2017-06-09 (annotated)
- Committer:
- kanatronics
- Date:
- Fri Jun 09 14:44:23 2017 +0000
- Revision:
- 0:47be58458737
/*; Wtv020sd16p - Library to control a WTV020-SD-16P module ; Created by Diego J. Arevalo, August 6th, 2012 for Arduino plaform; Modified by Kamil Kanas, 17/5/2017 for mbed platforms; Tested with FRDM KL25Z board; Released into the public domain 9/7/2...
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kanatronics | 0:47be58458737 | 1 | /* |
kanatronics | 0:47be58458737 | 2 | Wtv020sd16p.cpp - Library to control a WTV020-SD-16P module |
kanatronics | 0:47be58458737 | 3 | Created by Diego J. Arevalo, August 6th, 2012 for Arduino plaform |
kanatronics | 0:47be58458737 | 4 | Modified by Kamil Kanas, 17/5/2017 for mbed platforms |
kanatronics | 0:47be58458737 | 5 | Tested with FRDM KL25Z board |
kanatronics | 0:47be58458737 | 6 | Released into the public domain 9/6/2017. |
kanatronics | 0:47be58458737 | 7 | */ |
kanatronics | 0:47be58458737 | 8 | |
kanatronics | 0:47be58458737 | 9 | #include "mbed.h" |
kanatronics | 0:47be58458737 | 10 | #include "WTV020SD16.h" |
kanatronics | 0:47be58458737 | 11 | |
kanatronics | 0:47be58458737 | 12 | const unsigned int PLAY_PAUSE = 0xFFFE; |
kanatronics | 0:47be58458737 | 13 | const unsigned int STOP = 0xFFFF; |
kanatronics | 0:47be58458737 | 14 | const unsigned int VOLUME_MIN = 0xFFF0; |
kanatronics | 0:47be58458737 | 15 | const unsigned int VOLUME_MAX = 0xFFF7; |
kanatronics | 0:47be58458737 | 16 | |
kanatronics | 0:47be58458737 | 17 | /*Pin definition*/ |
kanatronics | 0:47be58458737 | 18 | DigitalOut _resetPin(PTB0); //reset pin Output |
kanatronics | 0:47be58458737 | 19 | DigitalOut _clockPin(PTB1); //clock pin Output |
kanatronics | 0:47be58458737 | 20 | DigitalOut _dataPin(PTB2); //data pin Output |
kanatronics | 0:47be58458737 | 21 | DigitalIn _busyPin(PTB3); //busy pin Input |
kanatronics | 0:47be58458737 | 22 | |
kanatronics | 0:47be58458737 | 23 | |
kanatronics | 0:47be58458737 | 24 | |
kanatronics | 0:47be58458737 | 25 | void Wtv020sd16p::reset(){ |
kanatronics | 0:47be58458737 | 26 | |
kanatronics | 0:47be58458737 | 27 | //Reset pulse. |
kanatronics | 0:47be58458737 | 28 | _clockPin=0; |
kanatronics | 0:47be58458737 | 29 | _resetPin=1; |
kanatronics | 0:47be58458737 | 30 | _resetPin=0; |
kanatronics | 0:47be58458737 | 31 | wait_ms(5); |
kanatronics | 0:47be58458737 | 32 | _resetPin=1; //Reset idle to start bit. |
kanatronics | 0:47be58458737 | 33 | _clockPin=1; |
kanatronics | 0:47be58458737 | 34 | wait_ms(300); |
kanatronics | 0:47be58458737 | 35 | } |
kanatronics | 0:47be58458737 | 36 | |
kanatronics | 0:47be58458737 | 37 | void Wtv020sd16p::playVoice(int voiceNumber){ |
kanatronics | 0:47be58458737 | 38 | sendCommand(voiceNumber); |
kanatronics | 0:47be58458737 | 39 | |
kanatronics | 0:47be58458737 | 40 | _busyPinState= _busyPin; |
kanatronics | 0:47be58458737 | 41 | |
kanatronics | 0:47be58458737 | 42 | while(_busyPinState==1){ |
kanatronics | 0:47be58458737 | 43 | _busyPinState=_busyPin; |
kanatronics | 0:47be58458737 | 44 | } |
kanatronics | 0:47be58458737 | 45 | } |
kanatronics | 0:47be58458737 | 46 | |
kanatronics | 0:47be58458737 | 47 | void Wtv020sd16p::asyncPlayVoice(int voiceNumber){ |
kanatronics | 0:47be58458737 | 48 | sendCommand(voiceNumber); |
kanatronics | 0:47be58458737 | 49 | } |
kanatronics | 0:47be58458737 | 50 | |
kanatronics | 0:47be58458737 | 51 | void Wtv020sd16p::stopVoice(){ |
kanatronics | 0:47be58458737 | 52 | sendCommand(STOP); |
kanatronics | 0:47be58458737 | 53 | } |
kanatronics | 0:47be58458737 | 54 | |
kanatronics | 0:47be58458737 | 55 | void Wtv020sd16p::pauseVoice(){ |
kanatronics | 0:47be58458737 | 56 | sendCommand(PLAY_PAUSE); |
kanatronics | 0:47be58458737 | 57 | } |
kanatronics | 0:47be58458737 | 58 | |
kanatronics | 0:47be58458737 | 59 | void Wtv020sd16p::mute(){ |
kanatronics | 0:47be58458737 | 60 | sendCommand(VOLUME_MIN); |
kanatronics | 0:47be58458737 | 61 | } |
kanatronics | 0:47be58458737 | 62 | |
kanatronics | 0:47be58458737 | 63 | void Wtv020sd16p::unmute(){ |
kanatronics | 0:47be58458737 | 64 | sendCommand(VOLUME_MAX); |
kanatronics | 0:47be58458737 | 65 | } |
kanatronics | 0:47be58458737 | 66 | |
kanatronics | 0:47be58458737 | 67 | void Wtv020sd16p::sendCommand(unsigned int command) { |
kanatronics | 0:47be58458737 | 68 | //Start bit Low level pulse. |
kanatronics | 0:47be58458737 | 69 | _clockPin=0; |
kanatronics | 0:47be58458737 | 70 | wait_ms(2); |
kanatronics | 0:47be58458737 | 71 | for (unsigned int mask = 0x8000; mask > 0; mask >>= 1) { |
kanatronics | 0:47be58458737 | 72 | //Clock low level pulse. |
kanatronics | 0:47be58458737 | 73 | _clockPin=0; |
kanatronics | 0:47be58458737 | 74 | wait_us(50); |
kanatronics | 0:47be58458737 | 75 | //Write data setup. |
kanatronics | 0:47be58458737 | 76 | if (command & mask) { |
kanatronics | 0:47be58458737 | 77 | _dataPin=1; |
kanatronics | 0:47be58458737 | 78 | } else |
kanatronics | 0:47be58458737 | 79 | { |
kanatronics | 0:47be58458737 | 80 | |
kanatronics | 0:47be58458737 | 81 | _dataPin=0; |
kanatronics | 0:47be58458737 | 82 | } |
kanatronics | 0:47be58458737 | 83 | //Write data hold. |
kanatronics | 0:47be58458737 | 84 | wait_us(50); |
kanatronics | 0:47be58458737 | 85 | //Clock high level pulse. |
kanatronics | 0:47be58458737 | 86 | |
kanatronics | 0:47be58458737 | 87 | _clockPin=1; |
kanatronics | 0:47be58458737 | 88 | wait_us(100); |
kanatronics | 0:47be58458737 | 89 | if (mask>0x0001){ |
kanatronics | 0:47be58458737 | 90 | //Stop bit high level pulse. |
kanatronics | 0:47be58458737 | 91 | wait_ms(2); |
kanatronics | 0:47be58458737 | 92 | } |
kanatronics | 0:47be58458737 | 93 | } |
kanatronics | 0:47be58458737 | 94 | //Busy active high from last data bit latch. |
kanatronics | 0:47be58458737 | 95 | wait_ms(20); |
kanatronics | 0:47be58458737 | 96 | } |