PCM Digital Synthesizer

Dependencies:   LCD mbed

/media/uploads/p_igmon/img_1731-w480.jpg

Committer:
p_igmon
Date:
Fri Sep 02 13:24:16 2016 +0000
Revision:
0:ad6637c36dc7
for Micro Gen4 Synthesizer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
p_igmon 0:ad6637c36dc7 1 #include "synthesizer.h"
p_igmon 0:ad6637c36dc7 2
p_igmon 0:ad6637c36dc7 3 extern Serial pc;
p_igmon 0:ad6637c36dc7 4 //extern RawSerial pc;
p_igmon 0:ad6637c36dc7 5 extern U32 PresetVoiceAmount;
p_igmon 0:ad6637c36dc7 6 extern U32 SGenAmount;
p_igmon 0:ad6637c36dc7 7
p_igmon 0:ad6637c36dc7 8 uint8_t com[16];
p_igmon 0:ad6637c36dc7 9 uint8_t *com_ptr;
p_igmon 0:ad6637c36dc7 10
p_igmon 0:ad6637c36dc7 11 volatile U8 *param_rdptr;
p_igmon 0:ad6637c36dc7 12 volatile U8 *param_wrptr;
p_igmon 0:ad6637c36dc7 13 volatile U8 param_receivebuf[PARAM_BUFSIZE];
p_igmon 0:ad6637c36dc7 14
p_igmon 0:ad6637c36dc7 15 void init_param(void){
p_igmon 0:ad6637c36dc7 16 param_wrptr = param_rdptr = &param_receivebuf[0];
p_igmon 0:ad6637c36dc7 17 com_ptr = &com[0];
p_igmon 0:ad6637c36dc7 18
p_igmon 0:ad6637c36dc7 19 }
p_igmon 0:ad6637c36dc7 20
p_igmon 0:ad6637c36dc7 21 int strxcmp(uint8_t *str1 ,uint8_t *str2){
p_igmon 0:ad6637c36dc7 22 uint8_t *c1;
p_igmon 0:ad6637c36dc7 23 uint8_t *c2;
p_igmon 0:ad6637c36dc7 24 c1 = str1;
p_igmon 0:ad6637c36dc7 25 c2 = str2;
p_igmon 0:ad6637c36dc7 26 if ((*c1 == 0x0d)||(*c1 == 0x0a)) return 0;
p_igmon 0:ad6637c36dc7 27 while(*c1 != 0x0d){
p_igmon 0:ad6637c36dc7 28 if (*c1++ != *c2++) return 0;
p_igmon 0:ad6637c36dc7 29 }
p_igmon 0:ad6637c36dc7 30 return -1;
p_igmon 0:ad6637c36dc7 31 }
p_igmon 0:ad6637c36dc7 32
p_igmon 0:ad6637c36dc7 33 void name2pc(void){
p_igmon 0:ad6637c36dc7 34 uint8_t c;
p_igmon 0:ad6637c36dc7 35 uint8_t *ptr = (uint8_t *)&PresetVoice[0];
p_igmon 0:ad6637c36dc7 36 U32 len = PresetVoiceAmount;
p_igmon 0:ad6637c36dc7 37 while (len--){
p_igmon 0:ad6637c36dc7 38 c = *ptr++ & 0xff;
p_igmon 0:ad6637c36dc7 39 pc.putc(c);
p_igmon 0:ad6637c36dc7 40 }
p_igmon 0:ad6637c36dc7 41
p_igmon 0:ad6637c36dc7 42 }
p_igmon 0:ad6637c36dc7 43
p_igmon 0:ad6637c36dc7 44 void sgen2pc(void){
p_igmon 0:ad6637c36dc7 45 uint8_t c;
p_igmon 0:ad6637c36dc7 46 uint8_t *ptr = (uint8_t *)&sgen[0];
p_igmon 0:ad6637c36dc7 47 U32 len = SGenAmount;
p_igmon 0:ad6637c36dc7 48 while (len--){
p_igmon 0:ad6637c36dc7 49 c = *ptr++ & 0xff;
p_igmon 0:ad6637c36dc7 50 pc.putc(c);
p_igmon 0:ad6637c36dc7 51 }
p_igmon 0:ad6637c36dc7 52
p_igmon 0:ad6637c36dc7 53 }
p_igmon 0:ad6637c36dc7 54
p_igmon 0:ad6637c36dc7 55 void name2gen(void){
p_igmon 0:ad6637c36dc7 56 uint8_t *ptr = (uint8_t *)&PresetVoice[0];
p_igmon 0:ad6637c36dc7 57 U32 len = PresetVoiceAmount;
p_igmon 0:ad6637c36dc7 58 while (len){
p_igmon 0:ad6637c36dc7 59 if(param_rdptr != param_wrptr){
p_igmon 0:ad6637c36dc7 60 *ptr++ = *param_rdptr;
p_igmon 0:ad6637c36dc7 61 if (++param_rdptr >&param_receivebuf[255]) param_rdptr = &param_receivebuf[0];//
p_igmon 0:ad6637c36dc7 62 len--;
p_igmon 0:ad6637c36dc7 63 }
p_igmon 0:ad6637c36dc7 64 }
p_igmon 0:ad6637c36dc7 65 }
p_igmon 0:ad6637c36dc7 66
p_igmon 0:ad6637c36dc7 67 void sgen2gen(void){
p_igmon 0:ad6637c36dc7 68 uint8_t *ptr = (uint8_t *)&sgen[0];
p_igmon 0:ad6637c36dc7 69 U32 len = SGenAmount;
p_igmon 0:ad6637c36dc7 70 while (len){
p_igmon 0:ad6637c36dc7 71 if(param_rdptr != param_wrptr){
p_igmon 0:ad6637c36dc7 72 *ptr++ = *param_rdptr;
p_igmon 0:ad6637c36dc7 73 if (++param_rdptr >&param_receivebuf[255]) param_rdptr = &param_receivebuf[0];//
p_igmon 0:ad6637c36dc7 74 len--;
p_igmon 0:ad6637c36dc7 75 }
p_igmon 0:ad6637c36dc7 76 }
p_igmon 0:ad6637c36dc7 77 }
p_igmon 0:ad6637c36dc7 78
p_igmon 0:ad6637c36dc7 79 void param_work(void){
p_igmon 0:ad6637c36dc7 80 uint8_t c;
p_igmon 0:ad6637c36dc7 81 while(param_rdptr != param_wrptr){
p_igmon 0:ad6637c36dc7 82 /* レシーブバッファが空なら、リターン */
p_igmon 0:ad6637c36dc7 83 c = *param_rdptr;
p_igmon 0:ad6637c36dc7 84 if (++param_rdptr >&param_receivebuf[255]) param_rdptr = &param_receivebuf[0];//
p_igmon 0:ad6637c36dc7 85 if (c == 0x0a){
p_igmon 0:ad6637c36dc7 86 /* compare command */
p_igmon 0:ad6637c36dc7 87 com_ptr = &com[0];
p_igmon 0:ad6637c36dc7 88 if(strxcmp(&com[0],(uint8_t *)"name2PC")){name2pc();}
p_igmon 0:ad6637c36dc7 89 else if(strxcmp(&com[0],(uint8_t *)"gen2PC")){sgen2pc();}
p_igmon 0:ad6637c36dc7 90 else if(strxcmp(&com[0],(uint8_t *)"name2GEN")){name2gen();}
p_igmon 0:ad6637c36dc7 91 else if(strxcmp(&com[0],(uint8_t *)"gen2GEN")){
p_igmon 0:ad6637c36dc7 92 sgen2gen();
p_igmon 0:ad6637c36dc7 93 save2from();
p_igmon 0:ad6637c36dc7 94 lcd_print2("Saved Parameter ");
p_igmon 0:ad6637c36dc7 95 }
p_igmon 0:ad6637c36dc7 96 }else{
p_igmon 0:ad6637c36dc7 97 *com_ptr++ = c;
p_igmon 0:ad6637c36dc7 98 }
p_igmon 0:ad6637c36dc7 99 }
p_igmon 0:ad6637c36dc7 100 }
p_igmon 0:ad6637c36dc7 101
p_igmon 0:ad6637c36dc7 102