<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>how to send i2s data by timer in NCS1.8.0?</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/84707/how-to-send-i2s-data-by-timer-in-ncs1-8-0</link><description>Hello, 
 NCS1.8.0 Windows10 X64; 
 i2s test,see the source code , 
 it runing ok; 
 
 but,when i change to timer send,got error. 
 i want to send data by timer, 
 
 
 source code 
 
 logs 
 
 
 thanks 
 Best Regards</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 16 Feb 2022 00:22:39 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/84707/how-to-send-i2s-data-by-timer-in-ncs1-8-0" /><item><title>RE: how to send i2s data by timer in NCS1.8.0?</title><link>https://devzone.nordicsemi.com/thread/353211?ContentTypeID=1</link><pubDate>Wed, 16 Feb 2022 00:22:39 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:27889da6-d67d-4528-bfdf-7d73c1a004d9</guid><dc:creator>yoyou</dc:creator><description>&lt;p&gt;&lt;span style="font-size:150%;"&gt;got it&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;thanks&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: how to send i2s data by timer in NCS1.8.0?</title><link>https://devzone.nordicsemi.com/thread/352897?ContentTypeID=1</link><pubDate>Mon, 14 Feb 2022 13:27:18 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a590b726-0b54-4a95-9bd9-31ef1f072b0d</guid><dc:creator>Vidar Berg</dc:creator><description>&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;This API cannot be used from an interrupt context (timer callback in this case). That is why the assert is raised:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;ASSERTION FAIL [!&lt;strong&gt;arch_is_in_isr&lt;/strong&gt;() || ((timeout).ticks == (((k_timeout_t) {})).ticks)] @ WEST_TOPDIR/zephyr/kernel/msg_q.c:118&lt;/p&gt;
&lt;p&gt;A solution is to use a semaphore like this:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;K_SEM_DEFINE(i2s_transfer, 0, 1);

void timer_ms_handler(struct k_timer *dummy)
{
	k_sem_give(&amp;amp;i2s_transfer);
}

void test_main() 
{
	...
	while(1) {
		k_sem_take(&amp;amp;i2s_transfer, K_FOREVER);
		i2c_transfer_send();
	}
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Vidar&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>