Tsuyoshi TSUCHIMOTO / Mbed 2 deprecated Synthesizer

Dependencies:   mbed

Committer:
117Florian
Date:
Sat Jan 30 09:26:02 2016 +0000
Revision:
3:32094530d55e
Child:
4:2febde858269
????????????????????????????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
117Florian 3:32094530d55e 1 #include "mbed.h"
117Florian 3:32094530d55e 2 #include "global.h"
117Florian 3:32094530d55e 3 #include "Occilator.h"
117Florian 3:32094530d55e 4
117Florian 3:32094530d55e 5 static long interrupt_us;
117Florian 3:32094530d55e 6 static int part_num=0;
117Florian 3:32094530d55e 7 static Occilator* part[OCCILATOR_PART_NUM];
117Florian 3:32094530d55e 8 static Ticker sTicker;
117Florian 3:32094530d55e 9 static long total_value_in_this_span;
117Florian 3:32094530d55e 10 static AnalogOut sAnalogOut(p18);
117Florian 3:32094530d55e 11
117Florian 3:32094530d55e 12 /* interrupt handler */
117Florian 3:32094530d55e 13 /*static void tick(uint32_t id);*/
117Florian 3:32094530d55e 14 static void tick();
117Florian 3:32094530d55e 15
117Florian 3:32094530d55e 16 Occilator::Occilator(long interrupt_us)
117Florian 3:32094530d55e 17 {
117Florian 3:32094530d55e 18 myled1=1;
117Florian 3:32094530d55e 19 ::interrupt_us=interrupt_us;
117Florian 3:32094530d55e 20 if(part_num==0)
117Florian 3:32094530d55e 21 {
117Florian 3:32094530d55e 22 sTicker.attach_us(::tick,interrupt_us);
117Florian 3:32094530d55e 23 }
117Florian 3:32094530d55e 24 part_num++;
117Florian 3:32094530d55e 25 for(int i=0;i<OCCILATOR_PART_NUM;i++)
117Florian 3:32094530d55e 26 {
117Florian 3:32094530d55e 27 if(part[i]==NULL)
117Florian 3:32094530d55e 28 {
117Florian 3:32094530d55e 29 part[i]=this;
117Florian 3:32094530d55e 30 break;
117Florian 3:32094530d55e 31 }
117Florian 3:32094530d55e 32 }
117Florian 3:32094530d55e 33
117Florian 3:32094530d55e 34 m_Volume=0x10000;
117Florian 3:32094530d55e 35 }
117Florian 3:32094530d55e 36
117Florian 3:32094530d55e 37 Occilator::~Occilator()
117Florian 3:32094530d55e 38 {
117Florian 3:32094530d55e 39 part_num--;
117Florian 3:32094530d55e 40 for(int i=0;i<OCCILATOR_PART_NUM;i++)
117Florian 3:32094530d55e 41 {
117Florian 3:32094530d55e 42 if(part[i]==this)
117Florian 3:32094530d55e 43 {
117Florian 3:32094530d55e 44 part[i]=NULL;
117Florian 3:32094530d55e 45 break;
117Florian 3:32094530d55e 46 }
117Florian 3:32094530d55e 47 }
117Florian 3:32094530d55e 48 if(part_num<=0)
117Florian 3:32094530d55e 49 {
117Florian 3:32094530d55e 50 sTicker.detach();
117Florian 3:32094530d55e 51 }
117Florian 3:32094530d55e 52 }
117Florian 3:32094530d55e 53
117Florian 3:32094530d55e 54 void Occilator::setOmega(long speed)
117Florian 3:32094530d55e 55 {
117Florian 3:32094530d55e 56 m_Omega=speed;
117Florian 3:32094530d55e 57 myled2=1;
117Florian 3:32094530d55e 58 }
117Florian 3:32094530d55e 59
117Florian 3:32094530d55e 60 void Occilator::setVolume(int volume)
117Florian 3:32094530d55e 61 {
117Florian 3:32094530d55e 62 m_Volume=volume;
117Florian 3:32094530d55e 63 }
117Florian 3:32094530d55e 64
117Florian 3:32094530d55e 65 unsigned long Occilator::tick()
117Florian 3:32094530d55e 66 {
117Florian 3:32094530d55e 67 m_Angle+=m_Omega;
117Florian 3:32094530d55e 68 if (m_Angle & 0x80000000)
117Florian 3:32094530d55e 69 {
117Florian 3:32094530d55e 70 myled3 = 1;
117Florian 3:32094530d55e 71 return (0xffff*m_Volume) >> 16;
117Florian 3:32094530d55e 72 }
117Florian 3:32094530d55e 73 else
117Florian 3:32094530d55e 74 {
117Florian 3:32094530d55e 75 myled3 = 0;
117Florian 3:32094530d55e 76 return 0;
117Florian 3:32094530d55e 77 }
117Florian 3:32094530d55e 78 }
117Florian 3:32094530d55e 79
117Florian 3:32094530d55e 80 void ::tick()
117Florian 3:32094530d55e 81 {
117Florian 3:32094530d55e 82 long long value=0;
117Florian 3:32094530d55e 83
117Florian 3:32094530d55e 84 for (int i=0;i<OCCILATOR_PART_NUM;i++)
117Florian 3:32094530d55e 85 {
117Florian 3:32094530d55e 86 if (part[i]!=NULL)
117Florian 3:32094530d55e 87 {
117Florian 3:32094530d55e 88 value+=total_value_in_this_span + part[i]->tick();
117Florian 3:32094530d55e 89 }
117Florian 3:32094530d55e 90 }
117Florian 3:32094530d55e 91 value = value>=0x10000 ? 0xffff : value;
117Florian 3:32094530d55e 92 sAnalogOut.write_u16(value);
117Florian 3:32094530d55e 93 myled4=value > 0x80000000;
117Florian 3:32094530d55e 94 }