<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ims.ut.ee/index.php?action=history&amp;feed=atom&amp;title=Main.c</id>
	<title>Main.c - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://ims.ut.ee/index.php?action=history&amp;feed=atom&amp;title=Main.c"/>
	<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=Main.c&amp;action=history"/>
	<updated>2026-05-16T19:49:07Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://ims.ut.ee/index.php?title=Main.c&amp;diff=10792&amp;oldid=prev</id>
		<title>Jevgeni.Savostkin at 10:11, 27 May 2013</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=Main.c&amp;diff=10792&amp;oldid=prev"/>
		<updated>2013-05-27T10:11:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 13:11, 27 May 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l201&quot;&gt;Line 201:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 201:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	board_init();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	board_init();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	sysclk_init();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	sysclk_init();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        sysclk_enable_peripheral_clock(ID_PIOA);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	configure_dacc();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	configure_dacc();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	sd_mmc_init();&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	sd_mmc_init();&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key imswikidb-ims_:diff::1.12:old-10773:rev-10792 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=Main.c&amp;diff=10773&amp;oldid=prev</id>
		<title>Jevgeni.Savostkin at 07:20, 23 May 2013</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=Main.c&amp;diff=10773&amp;oldid=prev"/>
		<updated>2013-05-23T07:20:31Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 10:20, 23 May 2013&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;h1&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l396&quot;&gt;Line 396:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 397:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/h1&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key imswikidb-ims_:diff::1.12:old-10772:rev-10773 --&gt;
&lt;/table&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=Main.c&amp;diff=10772&amp;oldid=prev</id>
		<title>Jevgeni.Savostkin: Created page with &quot;&lt;source lang=&quot;c&quot;&gt;  #include &lt;asf.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt;  #define MAX_SAMPLES 15 #define MAX_FREQ_1FILES 90000 #define MAX_FREQ_2FILES 50000  //! Analog con...&quot;</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=Main.c&amp;diff=10772&amp;oldid=prev"/>
		<updated>2013-05-23T07:19:01Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;  #include &amp;lt;asf.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;string.h&amp;gt;  #define MAX_SAMPLES 15 #define MAX_FREQ_1FILES 90000 #define MAX_FREQ_2FILES 50000  //! Analog con...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;asf.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define MAX_SAMPLES 15&lt;br /&gt;
#define MAX_FREQ_1FILES 90000&lt;br /&gt;
#define MAX_FREQ_2FILES 50000&lt;br /&gt;
&lt;br /&gt;
//! Analog control value for DAC&lt;br /&gt;
#define DACC_ANALOG_CONTROL (DACC_ACR_IBCTLCH0(0x02) \&lt;br /&gt;
| DACC_ACR_IBCTLCH1(0x02) \&lt;br /&gt;
| DACC_ACR_IBCTLDACCORE(0x01))&lt;br /&gt;
&lt;br /&gt;
// Structure for definition of sample files&lt;br /&gt;
typedef struct&lt;br /&gt;
{&lt;br /&gt;
	//filename size max is 30 chars&lt;br /&gt;
	char filenames[MAX_SAMPLES][30];&lt;br /&gt;
	uint32_t file_frequencies[MAX_SAMPLES];&lt;br /&gt;
	&lt;br /&gt;
}sample_files;&lt;br /&gt;
&lt;br /&gt;
// FS struct&lt;br /&gt;
static FATFS fs;&lt;br /&gt;
// sample files struct&lt;br /&gt;
sample_files samples;&lt;br /&gt;
// file struct&lt;br /&gt;
static FIL sample0,sample1;&lt;br /&gt;
// DAC signal for ch.0&lt;br /&gt;
uint16_t ch0_value=0;&lt;br /&gt;
// DAC signal for ch.1&lt;br /&gt;
uint16_t ch1_value=0;&lt;br /&gt;
// merged data of DAC ch.0 and ch.1 &lt;br /&gt;
uint32_t dac_value;&lt;br /&gt;
// digital output defining bit array&lt;br /&gt;
uint8_t digitals=0;&lt;br /&gt;
// current frequency&lt;br /&gt;
uint32_t current_freq;&lt;br /&gt;
// number of bytes read from file&lt;br /&gt;
UINT br0,br1;&lt;br /&gt;
// ch.0 status&lt;br /&gt;
bool ch0=false;&lt;br /&gt;
// ch.1 status&lt;br /&gt;
bool ch1=false;&lt;br /&gt;
// common file for both channel&lt;br /&gt;
bool common_file=false;&lt;br /&gt;
//	PIOA struct pointing to peripheral&lt;br /&gt;
Pio *p_pio = (Pio *)((uint32_t)PIOA );&lt;br /&gt;
//	input data selection ch.0&lt;br /&gt;
uint8_t ch0_ss=0;&lt;br /&gt;
//	input data selection ch.1&lt;br /&gt;
uint8_t ch1_ss=0;&lt;br /&gt;
//	FS operation status&lt;br /&gt;
volatile FRESULT r;&lt;br /&gt;
//	file read buffer&lt;br /&gt;
volatile uint16_t buffer;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	compare given filename with the expecting one&lt;br /&gt;
	returns true if match&lt;br /&gt;
*/&lt;br /&gt;
bool validate_file(char *fn);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	scan all files in given as a parameter directory name&lt;br /&gt;
	returns status FR_OK if success&lt;br /&gt;
*/&lt;br /&gt;
FRESULT scan_files (char* path);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	check the selected sample for exact channel given as a parameter&lt;br /&gt;
	returns selected input data index&lt;br /&gt;
*/&lt;br /&gt;
uint8_t getSelectedSample(uint8_t channel);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	check frequency of file with given number on some digit &lt;br /&gt;
*/&lt;br /&gt;
int checkSelectedSample(uint8_t number);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	set temporary data (for one sample) for given DAC-channel and update digitals value&lt;br /&gt;
*/&lt;br /&gt;
void setData(uint16_t *ch_value1, uint8_t *digitals,uint8_t ch);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	initialize DAC&lt;br /&gt;
*/&lt;br /&gt;
void configure_dacc(void);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	update temporary data for the next sample&lt;br /&gt;
*/&lt;br /&gt;
int updateSamples(void);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	try to start generate signals with given inputs&lt;br /&gt;
*/&lt;br /&gt;
int startGenerating(void);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	read from file for given channel&lt;br /&gt;
*/&lt;br /&gt;
int readFile(uint8_t channel);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
	stop SysTick timer&lt;br /&gt;
*/&lt;br /&gt;
void stopSysTick(void);&lt;br /&gt;
&lt;br /&gt;
int updateSamples(){&lt;br /&gt;
	digitals=0;&lt;br /&gt;
	if (common_file){&lt;br /&gt;
		readFile(0);&lt;br /&gt;
		setData(&amp;amp;ch0_value,&amp;amp;digitals,0);&lt;br /&gt;
		setData(&amp;amp;ch1_value,&amp;amp;digitals,1);&lt;br /&gt;
	}&lt;br /&gt;
	else{&lt;br /&gt;
		if(ch0){&lt;br /&gt;
			readFile(0);&lt;br /&gt;
			setData(&amp;amp;ch0_value,&amp;amp;digitals,0);&lt;br /&gt;
		}&lt;br /&gt;
		if(ch1){&lt;br /&gt;
			readFile(1);&lt;br /&gt;
			setData(&amp;amp;ch1_value,&amp;amp;digitals,1);&lt;br /&gt;
		}		&lt;br /&gt;
	}	&lt;br /&gt;
	dac_value=((0x2000|ch0_value)&amp;lt;&amp;lt;16)|(0x1000|ch1_value);&lt;br /&gt;
	return 1;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
int readFile(uint8_t channel){&lt;br /&gt;
	if (channel==0){&lt;br /&gt;
		r = f_read(&amp;amp;sample0, &amp;amp;buffer, sizeof(buffer), &amp;amp;br0);&lt;br /&gt;
		if (r!=FR_OK){&lt;br /&gt;
			return 4;&lt;br /&gt;
		}&lt;br /&gt;
		if (sample0.fptr&amp;gt;sample0.fsize-2){&lt;br /&gt;
			sample0.fptr=0;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if (channel==1){&lt;br /&gt;
		r = f_read(&amp;amp;sample1, &amp;amp;buffer, sizeof(buffer), &amp;amp;br1);&lt;br /&gt;
		if (r!=FR_OK){&lt;br /&gt;
			return 4;&lt;br /&gt;
		}&lt;br /&gt;
		if (sample1.fptr&amp;gt;sample1.fsize-2){&lt;br /&gt;
			sample1.fptr=0;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void SysTick_Handler(void)&lt;br /&gt;
{&lt;br /&gt;
	/* If ready for new data */&lt;br /&gt;
	if ((dacc_get_interrupt_status(DACC) &amp;amp; DACC_ISR_TXRDY) == DACC_ISR_TXRDY) {&lt;br /&gt;
		dacc_write_conversion_data(DACC, dac_value);&lt;br /&gt;
		p_pio-&amp;gt;PIO_CODR |= (~(digitals)&amp;lt;&amp;lt;D3_GPIO);&lt;br /&gt;
		p_pio-&amp;gt;PIO_SODR |= (digitals&amp;lt;&amp;lt;D3_GPIO);&lt;br /&gt;
		updateSamples();&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
int startGenerating(){&lt;br /&gt;
	if (ch0_ss&amp;gt;0 &amp;amp;&amp;amp; checkSelectedSample(ch0_ss-1)) ch0=true;&lt;br /&gt;
	if (ch1_ss&amp;gt;0 &amp;amp;&amp;amp; checkSelectedSample(ch1_ss-1)) ch1=true;&lt;br /&gt;
	if (!(ch0 || ch1)) return 0;&lt;br /&gt;
	if (ch0 &amp;amp;&amp;amp; ch1){&lt;br /&gt;
		if (samples.file_frequencies[ch0_ss-1]!=samples.file_frequencies[ch1_ss-1]){&lt;br /&gt;
			return 2;&lt;br /&gt;
		}&lt;br /&gt;
	}	&lt;br /&gt;
	if (ch0 &amp;amp;&amp;amp; ch1 &amp;amp;&amp;amp; ch0_ss==ch1_ss){&lt;br /&gt;
		r=f_open(&amp;amp;sample0,samples.filenames[ch0_ss-1],FA_OPEN_EXISTING | FA_READ);&lt;br /&gt;
		if (r!=FR_OK) return 3;&lt;br /&gt;
		current_freq=samples.file_frequencies[ch0_ss-1];&lt;br /&gt;
		common_file=true;&lt;br /&gt;
	}&lt;br /&gt;
	else{&lt;br /&gt;
		if (ch0){&lt;br /&gt;
			r=f_open(&amp;amp;sample0,samples.filenames[ch0_ss-1],FA_OPEN_EXISTING | FA_READ);&lt;br /&gt;
			if (r!=FR_OK) return 3;&lt;br /&gt;
			current_freq=samples.file_frequencies[ch0_ss-1];&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if (ch1){&lt;br /&gt;
			r=f_open(&amp;amp;sample1,samples.filenames[ch1_ss-1],FA_OPEN_EXISTING | FA_READ);&lt;br /&gt;
			if (r!=FR_OK) return 3;&lt;br /&gt;
			current_freq=samples.file_frequencies[ch1_ss-1];&lt;br /&gt;
		}		&lt;br /&gt;
	}		&lt;br /&gt;
	if (!updateSamples()) return 4;&lt;br /&gt;
	return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(void){&lt;br /&gt;
	Ctrl_status status;&lt;br /&gt;
	board_init();&lt;br /&gt;
	sysclk_init();&lt;br /&gt;
	configure_dacc();&lt;br /&gt;
	sd_mmc_init();&lt;br /&gt;
	&lt;br /&gt;
	card_init:&lt;br /&gt;
	do {&lt;br /&gt;
		status = sd_mmc_test_unit_ready(0);&lt;br /&gt;
		if (CTRL_FAIL == status) {&lt;br /&gt;
			&lt;br /&gt;
			while (CTRL_NO_PRESENT != sd_mmc_check(0)) {&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	} while (CTRL_GOOD != status);&lt;br /&gt;
	gpio_set_pin_high(LED1_GPIO);&lt;br /&gt;
	&lt;br /&gt;
	r = f_mount(0, &amp;amp;fs);&lt;br /&gt;
	if (FR_OK != r) {&lt;br /&gt;
			&lt;br /&gt;
			goto card_init;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	scan_files(&amp;quot;/&amp;quot;);	&lt;br /&gt;
	&lt;br /&gt;
	while (gpio_pin_is_low(BUT0_GPIO));&lt;br /&gt;
	ch0_ss = getSelectedSample(0);&lt;br /&gt;
	ch1_ss = getSelectedSample(1);&lt;br /&gt;
	int state;&lt;br /&gt;
	&lt;br /&gt;
	start:&lt;br /&gt;
	state=startGenerating();&lt;br /&gt;
	if (state==1){&lt;br /&gt;
		&lt;br /&gt;
		gpio_set_pin_high(LED0_GPIO);&lt;br /&gt;
	&lt;br /&gt;
		if (ch0 &amp;amp;&amp;amp; ch1 &amp;amp;&amp;amp; !common_file){&lt;br /&gt;
			if (current_freq&amp;gt;MAX_FREQ_2FILES)&lt;br /&gt;
				current_freq=MAX_FREQ_2FILES;&lt;br /&gt;
		}&lt;br /&gt;
		else{&lt;br /&gt;
			if (current_freq&amp;gt;MAX_FREQ_1FILES)&lt;br /&gt;
				current_freq=MAX_FREQ_1FILES;&lt;br /&gt;
		}						&lt;br /&gt;
			&lt;br /&gt;
		SysTick_Config(sysclk_get_cpu_hz()/current_freq);&lt;br /&gt;
	}		&lt;br /&gt;
	else if(state&amp;gt;=3){&lt;br /&gt;
		goto close_files; &lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		goto card_init;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	while (gpio_pin_is_high(BUT0_GPIO)){&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	close_files:&lt;br /&gt;
	f_close(&amp;amp;sample0);&lt;br /&gt;
	f_close(&amp;amp;sample1);&lt;br /&gt;
	&lt;br /&gt;
	f_mount(0, NULL);&lt;br /&gt;
	goto card_init;&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void stopSysTick(){&lt;br /&gt;
	SysTick-&amp;gt;CTRL  = 0&amp;lt;&amp;lt;SysTick_CTRL_ENABLE_Pos;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
FRESULT scan_files (char* path)&lt;br /&gt;
{&lt;br /&gt;
    FRESULT res;&lt;br /&gt;
    FILINFO fno;&lt;br /&gt;
    DIR dir;&lt;br /&gt;
 &lt;br /&gt;
    char *fn; &lt;br /&gt;
	&lt;br /&gt;
#if _USE_LFN&lt;br /&gt;
    static char lfn[_MAX_LFN + 1];&lt;br /&gt;
    fno.lfname = lfn;&lt;br /&gt;
    fno.lfsize = sizeof(lfn);&lt;br /&gt;
#endif&lt;br /&gt;
    res = f_opendir(&amp;amp;dir, path); //Open dir&lt;br /&gt;
    if (res == FR_OK)&lt;br /&gt;
    {&lt;br /&gt;
	&lt;br /&gt;
        for (;;)&lt;br /&gt;
        {&lt;br /&gt;
            res = f_readdir(&amp;amp;dir, &amp;amp;fno);  // Read directory&lt;br /&gt;
            if (res != FR_OK || fno.fname[0] == 0) &lt;br /&gt;
               break; // if file end or error&lt;br /&gt;
            if (fno.fname[0] == '.')&lt;br /&gt;
               continue; // dot path&lt;br /&gt;
#if _USE_LFN&lt;br /&gt;
            fn = *fno.lfname ? fno.lfname : fno.fname;&lt;br /&gt;
			&lt;br /&gt;
#else&lt;br /&gt;
            fn = fno.fname;&lt;br /&gt;
#endif&lt;br /&gt;
            if (!(fno.fattrib &amp;amp; AM_DIR)){&lt;br /&gt;
				validate_file(fn);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return res;&lt;br /&gt;
}&lt;br /&gt;
/* Store filename into array if it is valid*/&lt;br /&gt;
bool validate_file(char *fn)&lt;br /&gt;
{&lt;br /&gt;
	uint8_t sample_num=0;&lt;br /&gt;
	uint16_t sample_freq=0;&lt;br /&gt;
	char * pch;&lt;br /&gt;
	&lt;br /&gt;
	if (fn[0]=='s'){&lt;br /&gt;
		char temp[30];&lt;br /&gt;
		strcpy(temp,fn);&lt;br /&gt;
		pch = strtok (temp,&amp;quot;_&amp;quot;);&lt;br /&gt;
		int i=0;&lt;br /&gt;
		while (pch != NULL)&lt;br /&gt;
		{&lt;br /&gt;
			i++;&lt;br /&gt;
			pch = strtok (NULL, &amp;quot;_&amp;quot;);&lt;br /&gt;
			if (i==1) sample_num=(uint8_t)atoi(pch);&lt;br /&gt;
			if (i==2) sample_freq=(uint16_t)atoi(pch);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	if (sample_num &amp;gt; 0 &amp;amp;&amp;amp; sample_freq &amp;gt;0 &amp;amp;&amp;amp; sample_num&amp;lt;=MAX_SAMPLES){&lt;br /&gt;
		strcpy(samples.filenames[sample_num-1],fn);&lt;br /&gt;
		samples.file_frequencies[sample_num-1]=sample_freq;&lt;br /&gt;
	}&lt;br /&gt;
	else {&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int checkSelectedSample(uint8_t number){&lt;br /&gt;
	if (samples.file_frequencies[number]&amp;gt;0 &amp;amp;&amp;amp; samples.filenames[number]!=NULL)&lt;br /&gt;
		return 1;&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint8_t getSelectedSample(uint8_t channel){&lt;br /&gt;
	uint8_t value=0;&lt;br /&gt;
	if (channel==0){&lt;br /&gt;
		value=(gpio_pin_is_high(SS0_GPIO) &amp;lt;&amp;lt;0) |(gpio_pin_is_high(SS1_GPIO) &amp;lt;&amp;lt;1) &lt;br /&gt;
		|(gpio_pin_is_high(SS2_GPIO) &amp;lt;&amp;lt;2) |(gpio_pin_is_high(SS3_GPIO) &amp;lt;&amp;lt;3);&lt;br /&gt;
	}&lt;br /&gt;
	else{&lt;br /&gt;
		value=(gpio_pin_is_high(SS4_GPIO) &amp;lt;&amp;lt;0) |(gpio_pin_is_high(SS5_GPIO) &amp;lt;&amp;lt;1)&lt;br /&gt;
		|(gpio_pin_is_high(SS6_GPIO) &amp;lt;&amp;lt;2) |(gpio_pin_is_high(SS7_GPIO) &amp;lt;&amp;lt;3);&lt;br /&gt;
	}&lt;br /&gt;
	return value;&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void configure_dacc(void){&lt;br /&gt;
	/* Enable clock for DACC */&lt;br /&gt;
	pmc_enable_periph_clk(ID_DACC);&lt;br /&gt;
	&lt;br /&gt;
	/* Reset DACC registers */&lt;br /&gt;
	dacc_reset(DACC);&lt;br /&gt;
&lt;br /&gt;
	/* Half word transfer mode */&lt;br /&gt;
	dacc_set_transfer_mode(DACC, 1);&lt;br /&gt;
	dacc_set_power_save(DACC, 0, 0);&lt;br /&gt;
	&lt;br /&gt;
	/* Timing:&lt;br /&gt;
	 * refresh        - 0x08 (1024*8 dacc clocks)&lt;br /&gt;
	 * max speed mode -    0 (disabled)&lt;br /&gt;
	 * startup time   - 0x10 (1024 dacc clocks)&lt;br /&gt;
	 */&lt;br /&gt;
	dacc_set_timing(DACC, 0x08, 0, 0x10);&lt;br /&gt;
&lt;br /&gt;
	/* Disable TAG and select output channel DACC_CHANNEL */&lt;br /&gt;
	//dacc_set_channel_selection(DACC, 0);&lt;br /&gt;
	dacc_enable_flexible_selection(DACC);&lt;br /&gt;
	&lt;br /&gt;
	/* Enable output channel DACC_CHANNEL */&lt;br /&gt;
	dacc_enable_channel(DACC, 0);&lt;br /&gt;
	dacc_enable_channel(DACC, 1);&lt;br /&gt;
	/* Set up analog current */&lt;br /&gt;
	dacc_set_analog_control(DACC, DACC_ANALOG_CONTROL);&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
void setData(uint16_t *ch_value, uint8_t *ch_digitals,uint8_t ch){&lt;br /&gt;
	*ch_value=(((buffer&amp;gt;&amp;gt;8)|(buffer&amp;lt;&amp;lt;8)));&lt;br /&gt;
	*ch_digitals|=(*ch_value &amp;amp; 0xF000)&amp;gt;&amp;gt;12-2*ch;&lt;br /&gt;
	*ch_value=(*ch_value &amp;amp; 0x0FFF);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
</feed>