This program generates sound by using FM tone generator YMF825 via SPI.
fmsd1_micro.cpp
- Committer:
- hasebems
- Date:
- 2018-01-05
- Revision:
- 0:c54d59d6fb78
File content as of revision 0:c54d59d6fb78:
#include "MicroBit.h" SPI ymf825(MOSI, MISO, SCK); MicroBitPin ss(MICROBIT_ID_IO_P16,MICROBIT_PIN_P16,PIN_CAPABILITY_DIGITAL); MicroBitPin rst(MICROBIT_ID_IO_P8,MICROBIT_PIN_P8,PIN_CAPABILITY_DIGITAL); //extern MicroBit uBit; //#define ss uBit.io.P16 //#define rst uBit.io.P8 void writeSingleCPP( unsigned char adrs, unsigned char data ) { ss.setDigitalValue(0); // select slave ymf825.write(adrs); ymf825.write(data); ss.setDigitalValue(1); wait_ms(1); } extern "C" void writeSingle( unsigned char adrs, unsigned char data ){ writeSingleCPP(adrs,data);} extern "C" void writeBurst( unsigned char adrs, unsigned char* data, int count ) { ss.setDigitalValue(0); ymf825.write(adrs); for (int i = 0; i<count; i++) { ymf825.write(*(data + i)); } ss.setDigitalValue(1); wait_ms(1); } extern "C" void delayMs( int ms ){ wait_ms(ms);} void initSPI(void) { // init SPI ymf825.format(8); // mode=0 ymf825.frequency(4000000); } void initSD1( void ) { // 1. powerOnReset( void ); rst.setDigitalValue(0); // 2. wait 100usec wait_us(100); // 3. RST_N : high rst.setDigitalValue(1); // 4. DRV_SEL : low writeSingleCPP(29, 1); // 3.3v // 5. AP0 : 0 writeSingleCPP(2, 0x0e); // 6. wait for Quarz stability wait_ms(1); // 7. CLKE : "1" writeSingleCPP(0, 0x01); // 8. ALRST : low writeSingleCPP(1, 0x00); // 9. SFTRST : 0xa3 writeSingleCPP(26, 0xa3); wait_ms(1); // 10. SFTRST : 0x00 writeSingleCPP(26, 0x00); // 11. wait 30msec wait_ms(30); // 12. AP1 AP3: "0" writeSingleCPP(2, 0x04); // 13. wait 10usec wait_us(10); // 14. AP2: "0" writeSingleCPP(2, 0x00); writeSingleCPP(25, 0xcc); // -32[dB] writeSingleCPP(27, 0x3f); // set itp max writeSingleCPP(20, 0x00); // set itp on writeSingleCPP(3, 0x01); // amp gain(6.5[dB]) writeSingleCPP(9, 0xf8); // Sequencer Volume }