<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ims.ut.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jevgeni.Savostkin</id>
	<title>Intelligent Materials and Systems Lab - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://ims.ut.ee/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jevgeni.Savostkin"/>
	<link rel="alternate" type="text/html" href="https://ims.ut.ee/Special:Contributions/Jevgeni.Savostkin"/>
	<updated>2026-04-24T22:21:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://ims.ut.ee/index.php?title=User_board.h&amp;diff=10794</id>
		<title>User board.h</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=User_board.h&amp;diff=10794"/>
		<updated>2013-05-27T10:13:20Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * \file&lt;br /&gt;
 *&lt;br /&gt;
 * \brief User board definition (definiton of used pins)&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 /* This file is intended to contain definitions and configuration details for&lt;br /&gt;
 * features and devices that are available on the board, e.g., frequency and&lt;br /&gt;
 * startup time for an external crystal, external memory devices, LED and USART&lt;br /&gt;
 * pins.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#ifndef USER_BOARD_H&lt;br /&gt;
#define USER_BOARD_H&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;conf_board.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/** Board oscillator settings */&lt;br /&gt;
#define BOARD_FREQ_SLCK_XTAL		(32768U)&lt;br /&gt;
#define BOARD_FREQ_SLCK_BYPASS		(32768U)&lt;br /&gt;
#define BOARD_FREQ_MAINCK_XTAL		(12000000U)&lt;br /&gt;
#define BOARD_FREQ_MAINCK_BYPASS	(12000000U)&lt;br /&gt;
&lt;br /&gt;
/** Master clock frequency */&lt;br /&gt;
#define BOARD_MCK					CHIP_FREQ_CPU_MAX&lt;br /&gt;
&lt;br /&gt;
/** board main clock xtal statup time */&lt;br /&gt;
#define BOARD_OSC_STARTUP_US   15625&lt;br /&gt;
&lt;br /&gt;
/** LED #0 (onboard) pin definition. */&lt;br /&gt;
#define LED0_GPIO    (PIO_PA0_IDX)&lt;br /&gt;
#define LED0_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** LED #1 (external) pin definition. */&lt;br /&gt;
#define LED1_GPIO    (PIO_PA6_IDX)&lt;br /&gt;
#define LED1_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** LED #2 (external) pin definition. */&lt;br /&gt;
#define LED2_GPIO    (PIO_PA5_IDX)&lt;br /&gt;
#define LED2_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** BUT #0 (external) pin definition. */&lt;br /&gt;
#define BUT0_GPIO	(PIO_PA16_IDX)&lt;br /&gt;
#define BUT0_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** Sample Select #0 (external) pin definition. */&lt;br /&gt;
#define SS0_GPIO    (PIO_PA19_IDX)&lt;br /&gt;
#define SS0_FLAGS (PIO_INPUT | PIO_DEFAULT | PIO_DEGLITCH| PIO_DEBOUNCE )&lt;br /&gt;
/** Sample Select #1 (external) pin definition. */&lt;br /&gt;
#define SS1_GPIO    (PIO_PA22_IDX)&lt;br /&gt;
#define SS1_FLAGS (PIO_INPUT | PIO_DEFAULT | PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #2 (external) pin definition. */&lt;br /&gt;
#define SS2_GPIO    (PIO_PA23_IDX)&lt;br /&gt;
#define SS2_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #3 (external) pin definition. */&lt;br /&gt;
#define SS3_GPIO    (PIO_PA20_IDX)&lt;br /&gt;
#define SS3_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #4 (external) pin definition. */&lt;br /&gt;
#define SS4_GPIO    (PIO_PA15_IDX)&lt;br /&gt;
#define SS4_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #5 (external) pin definition. */&lt;br /&gt;
#define SS5_GPIO    (PIO_PA14_IDX)&lt;br /&gt;
#define SS5_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #6 (external) pin definition. */&lt;br /&gt;
#define SS6_GPIO    (PIO_PA13_IDX)&lt;br /&gt;
#define SS6_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #7 (external) pin definition. */&lt;br /&gt;
#define SS7_GPIO    (PIO_PA24_IDX)&lt;br /&gt;
#define SS7_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** Digital output #0 (external) pin definition. */&lt;br /&gt;
#define D0_GPIO    (PIO_PA12_IDX)&lt;br /&gt;
#define D0_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
/** Digital output #1 (external) pin definition. */&lt;br /&gt;
#define D1_GPIO    (PIO_PA11_IDX)&lt;br /&gt;
#define D1_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
/** Digital output #2 (external) pin definition. */&lt;br /&gt;
#define D2_GPIO    (PIO_PA10_IDX)&lt;br /&gt;
#define D2_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
/** Digital output #3 (external) pin definition. */&lt;br /&gt;
#define D3_GPIO    (PIO_PA9_IDX)&lt;br /&gt;
#define D3_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
/** Define pins for HSMCI driver*/&lt;br /&gt;
#define PINS_HSMCI   {0x3fUL &amp;lt;&amp;lt; 26, PIOA, ID_PIOA, PIO_PERIPH_C, PIO_PULLUP}&lt;br /&gt;
#    define SD_MMC_HSMCI_MEM_CNT          1&lt;br /&gt;
&lt;br /&gt;
#    define SD_MMC_HSMCI_SLOT_0_SIZE      4 // 4-bits connector pin&lt;br /&gt;
#    define PIN_HSMCI_MCCDA_GPIO          (PIO_PA28_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCCDA_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCCK_GPIO           (PIO_PA29_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCCK_FLAGS          (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA0_GPIO          (PIO_PA30_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA0_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA1_GPIO          (PIO_PA31_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA1_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA2_GPIO          (PIO_PA26_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA2_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA3_GPIO          (PIO_PA27_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA3_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#endif // USER_BOARD_H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=User_board.h&amp;diff=10793</id>
		<title>User board.h</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=User_board.h&amp;diff=10793"/>
		<updated>2013-05-27T10:12:31Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * \file&lt;br /&gt;
 *&lt;br /&gt;
 * \brief User board definition (definiton of used pins)&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 /* This file is intended to contain definitions and configuration details for&lt;br /&gt;
 * features and devices that are available on the board, e.g., frequency and&lt;br /&gt;
 * startup time for an external crystal, external memory devices, LED and USART&lt;br /&gt;
 * pins.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#ifndef USER_BOARD_H&lt;br /&gt;
#define USER_BOARD_H&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;conf_board.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/** Board oscillator settings */&lt;br /&gt;
#define BOARD_FREQ_SLCK_XTAL		(32768U)&lt;br /&gt;
#define BOARD_FREQ_SLCK_BYPASS		(32768U)&lt;br /&gt;
#define BOARD_FREQ_MAINCK_XTAL		(12000000U)&lt;br /&gt;
#define BOARD_FREQ_MAINCK_BYPASS	(12000000U)&lt;br /&gt;
&lt;br /&gt;
/** Master clock frequency */&lt;br /&gt;
#define BOARD_MCK					CHIP_FREQ_CPU_MAX&lt;br /&gt;
&lt;br /&gt;
/** board main clock xtal statup time */&lt;br /&gt;
#define BOARD_OSC_STARTUP_US   15625&lt;br /&gt;
&lt;br /&gt;
/** LED #0 (onboard) pin definition. */&lt;br /&gt;
#define LED0_GPIO    (PIO_PA0_IDX)&lt;br /&gt;
#define LED0_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** LED #1 (external) pin definition. */&lt;br /&gt;
#define LED1_GPIO    (PIO_PA6_IDX)&lt;br /&gt;
#define LED1_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** LED #2 (external) pin definition. */&lt;br /&gt;
#define LED2_GPIO    (PIO_PA5_IDX)&lt;br /&gt;
#define LED2_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** BUT #0 (external) pin definition. */&lt;br /&gt;
#define BUT0_GPIO	(PIO_PA16_IDX)&lt;br /&gt;
#define BUT0_FLAGS (PIO_INPUT | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** Sample Select #0 (external) pin definition. */&lt;br /&gt;
#define SS0_GPIO    (PIO_PA19_IDX)&lt;br /&gt;
#define SS0_FLAGS (PIO_INPUT | PIO_DEFAULT | PIO_DEGLITCH| PIO_DEBOUNCE )&lt;br /&gt;
/** Sample Select #1 (external) pin definition. */&lt;br /&gt;
#define SS1_GPIO    (PIO_PA22_IDX)&lt;br /&gt;
#define SS1_FLAGS (PIO_INPUT | PIO_DEFAULT | PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #2 (external) pin definition. */&lt;br /&gt;
#define SS2_GPIO    (PIO_PA23_IDX)&lt;br /&gt;
#define SS2_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #3 (external) pin definition. */&lt;br /&gt;
#define SS3_GPIO    (PIO_PA20_IDX)&lt;br /&gt;
#define SS3_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #4 (external) pin definition. */&lt;br /&gt;
#define SS4_GPIO    (PIO_PA15_IDX)&lt;br /&gt;
#define SS4_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #5 (external) pin definition. */&lt;br /&gt;
#define SS5_GPIO    (PIO_PA14_IDX)&lt;br /&gt;
#define SS5_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #6 (external) pin definition. */&lt;br /&gt;
#define SS6_GPIO    (PIO_PA13_IDX)&lt;br /&gt;
#define SS6_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
/** Sample Select #7 (external) pin definition. */&lt;br /&gt;
#define SS7_GPIO    (PIO_PA24_IDX)&lt;br /&gt;
#define SS7_FLAGS (PIO_INPUT | PIO_DEFAULT| PIO_DEGLITCH| PIO_DEBOUNCE)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** Digital output #0 (external) pin definition. */&lt;br /&gt;
#define D0_GPIO    (PIO_PA12_IDX)&lt;br /&gt;
#define D0_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
/** Digital output #1 (external) pin definition. */&lt;br /&gt;
#define D1_GPIO    (PIO_PA11_IDX)&lt;br /&gt;
#define D1_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
/** Digital output #2 (external) pin definition. */&lt;br /&gt;
#define D2_GPIO    (PIO_PA10_IDX)&lt;br /&gt;
#define D2_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
/** Digital output #3 (external) pin definition. */&lt;br /&gt;
#define D3_GPIO    (PIO_PA9_IDX)&lt;br /&gt;
#define D3_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
/** Define pins for HSMCI driver*/&lt;br /&gt;
#define PINS_HSMCI   {0x3fUL &amp;lt;&amp;lt; 26, PIOA, ID_PIOA, PIO_PERIPH_C, PIO_PULLUP}&lt;br /&gt;
#    define SD_MMC_HSMCI_MEM_CNT          1&lt;br /&gt;
&lt;br /&gt;
#    define SD_MMC_HSMCI_SLOT_0_SIZE      4 // 4-bits connector pin&lt;br /&gt;
#    define PIN_HSMCI_MCCDA_GPIO          (PIO_PA28_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCCDA_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCCK_GPIO           (PIO_PA29_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCCK_FLAGS          (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA0_GPIO          (PIO_PA30_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA0_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA1_GPIO          (PIO_PA31_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA1_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA2_GPIO          (PIO_PA26_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA2_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA3_GPIO          (PIO_PA27_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA3_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#endif // USER_BOARD_H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=Main.c&amp;diff=10792</id>
		<title>Main.c</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=Main.c&amp;diff=10792"/>
		<updated>2013-05-27T10:11:35Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;&lt;br /&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;
        sysclk_enable_peripheral_clock(ID_PIOA);&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;br /&gt;
&amp;lt;/h1&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=User_board.h&amp;diff=10775</id>
		<title>User board.h</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=User_board.h&amp;diff=10775"/>
		<updated>2013-05-23T07:28:58Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: Created page with &amp;quot;&amp;lt;h1&amp;gt; &amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt; /**  * \file  *  * \brief User board definition (definiton of used pins)  *  */   /* This file is intended to contain definitions and configuration deta...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * \file&lt;br /&gt;
 *&lt;br /&gt;
 * \brief User board definition (definiton of used pins)&lt;br /&gt;
 *&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
 /* This file is intended to contain definitions and configuration details for&lt;br /&gt;
 * features and devices that are available on the board, e.g., frequency and&lt;br /&gt;
 * startup time for an external crystal, external memory devices, LED and USART&lt;br /&gt;
 * pins.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#ifndef USER_BOARD_H&lt;br /&gt;
#define USER_BOARD_H&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;conf_board.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
/** Board oscillator settings */&lt;br /&gt;
#define BOARD_FREQ_SLCK_XTAL		(32768U)&lt;br /&gt;
#define BOARD_FREQ_SLCK_BYPASS		(32768U)&lt;br /&gt;
#define BOARD_FREQ_MAINCK_XTAL		(12000000U)&lt;br /&gt;
#define BOARD_FREQ_MAINCK_BYPASS	(12000000U)&lt;br /&gt;
&lt;br /&gt;
/** Master clock frequency */&lt;br /&gt;
#define BOARD_MCK					CHIP_FREQ_CPU_MAX&lt;br /&gt;
&lt;br /&gt;
/** board main clock xtal statup time */&lt;br /&gt;
#define BOARD_OSC_STARTUP_US   15625&lt;br /&gt;
&lt;br /&gt;
/** LED #0 (onboard) pin definition. */&lt;br /&gt;
#define LED0_GPIO    (PIO_PA0_IDX)&lt;br /&gt;
#define LED0_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** LED #1 (external) pin definition. */&lt;br /&gt;
#define LED1_GPIO    (PIO_PA6_IDX)&lt;br /&gt;
#define LED1_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** LED #2 (external) pin definition. */&lt;br /&gt;
#define LED2_GPIO    (PIO_PA5_IDX)&lt;br /&gt;
#define LED2_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** BUT #0 (external) pin definition. */&lt;br /&gt;
#define BUT0_GPIO	(PIO_PA16_IDX)&lt;br /&gt;
#define BUT0_FLAGS (PIO_INPUT | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** Sample Select #0 (external) pin definition. */&lt;br /&gt;
#define SS0_GPIO    (PIO_PA19_IDX)&lt;br /&gt;
#define SS0_FLAGS (PIO_INPUT | PIO_DEFAULT )&lt;br /&gt;
/** Sample Select #1 (external) pin definition. */&lt;br /&gt;
#define SS1_GPIO    (PIO_PA22_IDX)&lt;br /&gt;
#define SS1_FLAGS (PIO_INPUT | PIO_DEFAULT)&lt;br /&gt;
/** Sample Select #2 (external) pin definition. */&lt;br /&gt;
#define SS2_GPIO    (PIO_PA23_IDX)&lt;br /&gt;
#define SS2_FLAGS (PIO_INPUT | PIO_DEFAULT)&lt;br /&gt;
/** Sample Select #3 (external) pin definition. */&lt;br /&gt;
#define SS3_GPIO    (PIO_PA20_IDX)&lt;br /&gt;
#define SS3_FLAGS (PIO_INPUT | PIO_DEFAULT)&lt;br /&gt;
/** Sample Select #4 (external) pin definition. */&lt;br /&gt;
#define SS4_GPIO    (PIO_PA15_IDX)&lt;br /&gt;
#define SS4_FLAGS (PIO_INPUT | PIO_DEFAULT)&lt;br /&gt;
/** Sample Select #5 (external) pin definition. */&lt;br /&gt;
#define SS5_GPIO    (PIO_PA14_IDX)&lt;br /&gt;
#define SS5_FLAGS (PIO_INPUT | PIO_DEFAULT)&lt;br /&gt;
/** Sample Select #6 (external) pin definition. */&lt;br /&gt;
#define SS6_GPIO    (PIO_PA13_IDX)&lt;br /&gt;
#define SS6_FLAGS (PIO_INPUT | PIO_DEFAULT)&lt;br /&gt;
/** Sample Select #7 (external) pin definition. */&lt;br /&gt;
#define SS7_GPIO    (PIO_PA24_IDX)&lt;br /&gt;
#define SS7_FLAGS (PIO_INPUT | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** Digital output #0 (external) pin definition. */&lt;br /&gt;
#define D0_GPIO    (PIO_PA12_IDX)&lt;br /&gt;
#define D0_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
/** Digital output #1 (external) pin definition. */&lt;br /&gt;
#define D1_GPIO    (PIO_PA11_IDX)&lt;br /&gt;
#define D1_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
/** Digital output #2 (external) pin definition. */&lt;br /&gt;
#define D2_GPIO    (PIO_PA10_IDX)&lt;br /&gt;
#define D2_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
/** Digital output #3 (external) pin definition. */&lt;br /&gt;
#define D3_GPIO    (PIO_PA9_IDX)&lt;br /&gt;
#define D3_FLAGS (PIO_OUTPUT_0 | PIO_DEFAULT)&lt;br /&gt;
&lt;br /&gt;
/** Define pins for HSMCI driver*/&lt;br /&gt;
#define PINS_HSMCI   {0x3fUL &amp;lt;&amp;lt; 26, PIOA, ID_PIOA, PIO_PERIPH_C, PIO_PULLUP}&lt;br /&gt;
#    define SD_MMC_HSMCI_MEM_CNT          1&lt;br /&gt;
&lt;br /&gt;
#    define SD_MMC_HSMCI_SLOT_0_SIZE      4 // 4-bits connector pin&lt;br /&gt;
#    define PIN_HSMCI_MCCDA_GPIO          (PIO_PA28_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCCDA_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCCK_GPIO           (PIO_PA29_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCCK_FLAGS          (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA0_GPIO          (PIO_PA30_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA0_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA1_GPIO          (PIO_PA31_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA1_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA2_GPIO          (PIO_PA26_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA2_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#    define PIN_HSMCI_MCDA3_GPIO          (PIO_PA27_IDX)&lt;br /&gt;
#    define PIN_HSMCI_MCDA3_FLAGS         (PIO_PERIPH_C | PIO_DEFAULT)&lt;br /&gt;
#endif // USER_BOARD_H&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=Programmi_kood&amp;diff=10774</id>
		<title>Programmi kood</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=Programmi_kood&amp;diff=10774"/>
		<updated>2013-05-23T07:28:05Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Siin asuvad olulisemad programmifailid, mis on kirjutatud iseseisvalt.&lt;br /&gt;
&lt;br /&gt;
Peaprogrammi fail:&lt;br /&gt;
&lt;br /&gt;
[[main.c]]&lt;br /&gt;
&lt;br /&gt;
Kasutatud väljundviikude konfiguratsioon:&lt;br /&gt;
&lt;br /&gt;
[[user_board.h]]&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=Main.c&amp;diff=10773</id>
		<title>Main.c</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=Main.c&amp;diff=10773"/>
		<updated>2013-05-23T07:20:31Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;&lt;br /&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;br /&gt;
&amp;lt;/h1&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=Main.c&amp;diff=10772</id>
		<title>Main.c</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=Main.c&amp;diff=10772"/>
		<updated>2013-05-23T07:19:01Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: 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;hr /&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>
	<entry>
		<id>https://ims.ut.ee/index.php?title=Programmi_kood&amp;diff=10744</id>
		<title>Programmi kood</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=Programmi_kood&amp;diff=10744"/>
		<updated>2013-05-22T12:07:18Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: Created page with &amp;quot;main.c&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[main.c]]&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=Mitmekanaliline_programmeeritav_signaaligeneraator&amp;diff=10743</id>
		<title>Mitmekanaliline programmeeritav signaaligeneraator</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=Mitmekanaliline_programmeeritav_signaaligeneraator&amp;diff=10743"/>
		<updated>2013-05-22T12:06:53Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: Created page with &amp;quot;Programmi kood&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Programmi kood]]&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=User:Jevgeni.Savostkin&amp;diff=10742</id>
		<title>User:Jevgeni.Savostkin</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=User:Jevgeni.Savostkin&amp;diff=10742"/>
		<updated>2013-05-22T12:06:24Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Jevgeni Savostkin'''&lt;br /&gt;
[[File:Savostkin.png |thumb]]&lt;br /&gt;
'''E-mail:''' jevgeni.savostkin@gmail.com&lt;br /&gt;
&lt;br /&gt;
'''Skype:''' jevgeni.savostkin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Mitmekanaliline programmeeritav signaaligeneraator]]&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=People&amp;diff=10534</id>
		<title>People</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=People&amp;diff=10534"/>
		<updated>2013-02-11T20:04:22Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Staff==&lt;br /&gt;
* [[File:Alvo Facebook.JPG|40px|link=User:Alvo|Alvo Aabloo]] [[User:Alvo|Alvo Aabloo]], professor, head of the lab (polymer materials) &lt;br /&gt;
* [[File:Nz.jpg|40px|link=User:Rudolf|Rudolf Kiefer]] [[User:Rudolf|Rudolf Kiefer]], invited professor (Electroactive polymers, energy and solar applications)&lt;br /&gt;
* [[File:Punn.jpg|40px|link=User:Punn|Andres Punning]] [[User:Punn|Andres Punning]], senior researcher (ionic and dielectric electroactive polymer actuators and sensors)&lt;br /&gt;
* [[File:Tarmo.jpg|40px|link=User:Tarmo|Tarmo Tamm]] [[User:Tarmo|Tarmo Tamm]], senior researcher (conducting polymers)&lt;br /&gt;
* [[File:Pilt11.jpg|40px|link=User:Urmas|Urmas Johanson]] [[User:Urmas|Urmas Johanson]], researcher (electrochemistry)&lt;br /&gt;
* [[File:HeikiKasemagi-0180x0240.jpg|40px|link=User:Heiki|Heiki Kasemägi]] [[User:Heiki|Heiki Kasemägi]], researcher (ion-conducting polymer, computer simulations)&lt;br /&gt;
* [[File:Annaliisa.jpg|40px|link=User:Annaliisa|Anna-Liisa Peikolainen]] [[User:Annaliisa|Anna-Liisa Peikolainen]], postdoc (carbon materials, chemistry)&lt;br /&gt;
* [[File:Vahur.jpg|40px|link=User:Vahur|Vahur Zadin]] [[User:Vahur|Vahur Zadin]], researcher (finite element modelling, molecular dynamics, high electric fields, CERN)&lt;br /&gt;
* [[File:Janno.jpg|40px|link=User:Janno|Janno Torop]] [[User:Janno|Janno Torop]], researcher (EAP materials)&lt;br /&gt;
* [[File:Priit-kull.jpg|40px|link=User:Kullprii|Priit Kull]] [[User:Kullprii|Priit Kull]], engineering project manager (robotics)&lt;br /&gt;
* [[File:Me.jpg|40px|link=User:Aleksander|Aleksander Tõnnisson]] [[User:Aleksander|Aleksander Tõnnisson]], engineer (electronics) &amp;amp; Computer engineering study programme manager&lt;br /&gt;
* [[File:Roman Facebook.jpg|40px|link=User:Roman|Roman Leinus]] [[User:Roman|Roman Leinus]], engineer (robotics)&lt;br /&gt;
* [[File:Teet.jpg|40px|link=User:Teet|Teet Tilk]] [[User:Teet|Teet Tilk]], engineer (electronics)&lt;br /&gt;
* [[File:Empty.jpg|40px|link=User:Tauri|Tauri Tätte]] [[User:Tauri|Tauri Tätte]], engineer (robotics)&lt;br /&gt;
* [[File:Renno Facebook.jpg|40px|link=User:Renno|Renno Rehtla]] [[User:Renno|Renno Rehtla]], engineer (robotics)&lt;br /&gt;
* [[File:Kaupo Facebook.jpg|40px|link=User:Kaupo|Kaupo Karja]] [[User:Kaupo|Kaupo Karja]], engineer (mechanics)&lt;br /&gt;
* [[File:Helina.jpg|40px|link=User:Helina|Helina Kitsing]] [[User:Helina|Helina Kitsing]], project manager (robotics)&lt;br /&gt;
* [[File:Empty.jpg|40px|link=User:Laivi|Laivi Karu]] [[User:Laivi|Laivi Karu]], assistant&lt;br /&gt;
* [[File:Merle.jpg|40px|link=User:Merle|Merle Miliste]] [[User:Merle|Merle Miliste]], assistant&lt;br /&gt;
&lt;br /&gt;
==Ph.D. students==&lt;br /&gt;
&lt;br /&gt;
* [[File:Artur Facebook.jpg|40px|link=User:Artur|Artur Abels]] [[User:Artur|Artur Abels]], Ph.D. student (nonlinear control)&lt;br /&gt;
* [[File:David facebook.jpg|40px|link=User:David|David Pugal]] [[User:David|David Pugal]], Ph.D. student (finite element modelling of polymeric materials)&lt;br /&gt;
* [[File:Blue.jpg|40px|link=User:Jaas|Jaas Ježov]] [[User:Jaas|Jaas Ježov]], Ph.D. student (fluid dynamics and robotics)&lt;br /&gt;
* [[File:Indrek.jpg|40px|link=User:Indrekm|Indrek Must]] [[User:Indrekm|Indrek Must]], Ph.D student (EAP research)&lt;br /&gt;
* [[File:Rauno.jpg|40px|link=User:Rauno|Rauno Temmer]] [[User:Rauno|Rauno Temmer]], Ph.D student (conductive polymers)&lt;br /&gt;
* [[File:Veiko.jpg|40px|link=User:Veix|Veiko Vunder]] [[User:Veix|Veiko Vunder]], Ph.D. student (EAP Control)&lt;br /&gt;
* [[File:Artur.jpg|40px|link=User:Arturt|Artur Tamm]] [[User:Arturt|Artur Tamm]], Ph.D. student (radiation defect modeling)&lt;br /&gt;
* [[File:Friedrich Facebook.jpg|40px|link=User:Frkaasik|Friedrich Kaasik]] [[User:Frkaasik|Friedrich Kaasik]], Ph.D. student (carbon-polymer actuators)&lt;br /&gt;
* [[File:Inga.jpg|40px|link=User:Grecebo|Inga Põldsalu]] [[User:Grecebo|Inga Põldsalu]], Ph.D student (microfabrication, EAP)&lt;br /&gt;
* [[File:Endel.jpg|40px|link=User:Endel|Endel Soolo]] [[User:Endel|Endel Soolo]], Ph.D. student (molecular dynamics simulations)&lt;br /&gt;
* [[File:Heilo.jpg|40px|link=User:Heilo|Heilo Altin]] [[User:Heilo|Heilo Altin]], Ph.D. student (educational robotics)&lt;br /&gt;
* [[File:Arko.jpeg|40px|link=User:Arko|Arko Kesküla]] [[User:Arko|Arko Kesküla]], Ph.D. student (ionic liquid polymerization)&lt;br /&gt;
&lt;br /&gt;
==Students==&lt;br /&gt;
&amp;lt;!--* [[User:Margus|Margus Luik]], student, surface modelling (robotics)--&amp;gt;&lt;br /&gt;
&amp;lt;!--* [[User:Siimsundla|Siim Sundla]], master student (robotics) --&amp;gt;&lt;br /&gt;
* [[File:tonis tiimus.jpg|40px|link=User:tonnius|Tõnis Tiimus]] [[User:tonnius|Tõnis Tiimus]], student (biorobotics)&lt;br /&gt;
* [[File:ev.jpg|40px|link=User:megaerki|Erki Viidalepp]] [[User:megaerki|Erki Viidalepp]], student (EAP)&lt;br /&gt;
* [[File:Tonis lulla.jpg|40px|link=User:tonislulla|Tõnis Lulla]] [[User:tonislulla|Tõnis Lulla]], student (EAP robotics)&lt;br /&gt;
* [[File:Lauri.jpg|40px|link=User:lauri793|Lauri Mihkels]] [[User:lauri793|Lauri Mihkels]], student &lt;br /&gt;
* [[File:madis ollikainen.jpg|40px|link=User:MadisOllikainen|Madis Ollikainen]] [[User:MadisOllikainen|Madis Ollikainen]], student (FEM)&lt;br /&gt;
&amp;lt;!--* [[User:Karulont|Karl Tarbe]], student--&amp;gt;&lt;br /&gt;
* [[File:Silver.jpg|40px|link=User:Silver|Silver Jõemetsa]] [[User:Silver|Silver Jõemetsa]], student (MD simulations)&lt;br /&gt;
* [[File:Tonis.JPG|40px|link=User:pjurchaos|Tõnis Terasmaa]] [[User:pjurchaos|Tõnis Terasmaa]], student (robotics)&lt;br /&gt;
* [[File:67447 112104222187422 2594470 n.jpg|40px|link=User:Fred|Fred Elhi]] [[User:Fred|Fred Elhi]], student (microfabrication, EAP)&lt;br /&gt;
* [[File:Savostkin.png|40px|link=User:Jevgeni.Savostkin|Jevgeni Savostkin]] [[User:Jevgeni.Savostkin|Jevgeni Savostkin]], student (EAP)&lt;br /&gt;
* [[File:Empty.jpg|40px|link=User:martinmlder|Martin Mölder]] [[User:martinmlder|Martin Mölder]], student (EAP)&lt;br /&gt;
* [[File:pauljaak.jpg|40px|link=User:pauljaak|Paul Jaakson]] [[User:pauljaak|Paul Jaakson]], student (vax)&lt;br /&gt;
* [[File:paara.jpg|40px|link=User:tonis.paara|Tõnis Paara]] [[User:tonis.paara|Tõnis Paara]], student (vax)&lt;br /&gt;
* [[File:siims.jpg|40px|link=User:Siims|Siim Schults]] [[User:Siims|Siim Schults]], student (robotics)&lt;br /&gt;
* [[File:momentum.jpg|40px|link=User:moment92|Andres Traumann]] [[User:moment92|Andres Traumann]], student (robotics)&lt;br /&gt;
* [[File:Empty.jpg|40px|link=User:EdgarHamburg|Edgar Hamburg]] [[User:EdgarHamburg|Edgar Hamburg]], student (EAP)&lt;br /&gt;
&lt;br /&gt;
==Colleagues==&lt;br /&gt;
* [[User:Karl|Karl Kruusamäe]], Post-doc at AIST-Osaka (EAP research)&lt;br /&gt;
* [[User:Jaanuska|Jaanus Karo]], senior researcher [http://www.ioc.ee/inimene.php?pid=182&amp;amp;lang=en Laboratory of Systems Biology]&lt;br /&gt;
* [[User:Rosin|Margus Rosin]], lecturer (FPGA)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--* &lt;br /&gt;
==Colleagues==&lt;br /&gt;
* [[User:Daniel|Daniel Brandell]], ex-postdoctoral fellow (ion-conducting polymers)&lt;br /&gt;
* [[User:Anti|Anti Liivat]], senior researcher (currently in Uppsala) (cathode materials, ion-conducting polymers, computer simulations)&lt;br /&gt;
* [[User:Alar|Alar Ainla]], Ph.D. student (Nanoengineer in Sweden)&lt;br /&gt;
* [[User:Mart|Mart Anton]], postdoctoral fellow, in [http://www.biorobotics.ttu.ee Center for Biorobotics] (EAP actuator control)&lt;br /&gt;
* [[User:Maarja|Maarja Kruusmaa]], professor in [http://www.biorobotics.ttu.ee Center for Biorobotics] (electroactive polymer artificial muscles, biorobotics, robot learning)&lt;br /&gt;
* [[User:Jaanuska|Jaanus Karo]], senior researcher [http://www.ioc.ee/inimene.php?pid=182&amp;amp;lang=en Laboratory of Systems Biology]&lt;br /&gt;
* [[User:Rosin|Margus Rosin]], ex-master student (FPGA)&lt;br /&gt;
* [[User:Viljar|Viljar Palmre]], The Man in Las Vegas--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=User:Jevgeni.Savostkin&amp;diff=10533</id>
		<title>User:Jevgeni.Savostkin</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=User:Jevgeni.Savostkin&amp;diff=10533"/>
		<updated>2013-02-11T20:01:24Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Jevgeni Savostkin'''&lt;br /&gt;
[[File:Savostkin.png |thumb]]&lt;br /&gt;
'''E-mail:''' jevgeni.savostkin@gmail.com&lt;br /&gt;
&lt;br /&gt;
'''Skype:''' jevgeni.savostkin&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
	<entry>
		<id>https://ims.ut.ee/index.php?title=File:Savostkin.png&amp;diff=10532</id>
		<title>File:Savostkin.png</title>
		<link rel="alternate" type="text/html" href="https://ims.ut.ee/index.php?title=File:Savostkin.png&amp;diff=10532"/>
		<updated>2013-02-11T19:50:58Z</updated>

		<summary type="html">&lt;p&gt;Jevgeni.Savostkin: Personal image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Personal image&lt;/div&gt;</summary>
		<author><name>Jevgeni.Savostkin</name></author>
	</entry>
</feed>