This is a part of the Kinetiszer project.

Dependencies:   inc

Dependents:   kinetisizer

Revision:
0:cb80470434eb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/master.c	Tue Oct 28 12:19:42 2014 +0000
@@ -0,0 +1,45 @@
+#include "atmegatron.h"
+//#include "chip.h"  // For SystemCoreClock only.
+
+//#define F_CPU  SystemCoreClock
+
+
+unsigned long master_tick;  //current tick.  used for all timing of lfos, arp and envs
+volatile uint16_t master_index = 0;  //position in master_output wavetable
+unsigned char master_output[WAVE_LEN];  //output wavetable
+unsigned char master_output_ch2[WAVE_LEN];  //output wavetable
+unsigned long master_ocr1 = 10227;  //interrupt frequency (sets pitch of synth)
+unsigned long master_sf = 7040;  //sample frequency, ocr1 derived from this
+
+
+// Set the sample frequency (pitch)
+void Master_Let_SampleFreq(void)
+{
+	// Has the pitch actually changed?
+	if (Pitch_Get_PitchChanged()==true)
+	{
+		// Calculate new sample frequency.
+		master_sf = Pitch_Get_FreqCalc()*WAVE_LEN;
+		// Convert sample frequency to interrupt ticks.
+		master_ocr1 = /*Chip_Clock_GetSystemClockRate() / */ master_sf;
+		//master_ocr1 = F_CPU/master_sf;  //convert to interrupt time
+		if (master_ocr1>65535)
+		{
+			// Highest possible value for ocr1 (lowest freq)
+			master_ocr1 = 65535;
+		}
+		if (master_ocr1<100)
+		{
+			// Lowest possible value for ocr1.  Any lower and code in interrupt doesn't have time to complete.
+			// Worked out by trial and error.
+			master_ocr1 = 100;
+		}
+		//master_ocr1 >>= 2; // cpv
+	}
+}
+
+
+unsigned long Master_Get_SampleFreq(void)
+{
+	return master_sf;
+}