<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic I2C slave doesn't see stop condiction in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-slave-doesn-t-see-stop-condiction/m-p/565243#M17043</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by shoeloader on Mon Jul 07 07:22:01 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am trying to implement a high level I2C protocol specified by a customer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The protocol is multimaster and messages have a variable length.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I use two lpc800's to test the protocol.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Device A sends a request message to Device B.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Device B correctly receives this message and acks every byte (nacking corrupt messages is allowed though).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Now Device B has to switch to master mode and send a message to Device A.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The problem is I can't detect the end of the message send by Device A. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The length of the message is can be found out by looking in the content of the message, but&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I prefer to keep the&amp;nbsp; I2C driver as simple as possible and use the stop condition as a trigger&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;to process the message and to send a response (later I want to specify time-out conditions as well).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;From what I understand the datasheet tells me I can use SLVDESEL to detect a stop condition.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;SLVDESEL &lt;BR /&gt;Slave Deselected flag. &lt;BR /&gt;This flag will cause an interrupt when set if enabled via INTENSET. This flag can be cleared by writing a 1 to this bit.&lt;BR /&gt;0:&lt;BR /&gt;Not deselected. The Slave function has not become deselected. This does not mean that it is currently selected. That information can be found in the SLVSEL flag.&lt;BR /&gt;1:&lt;BR /&gt;Deselected. The Slave function has become deselected. This is specifically caused by the &lt;STRONG&gt;SLVSEL flag changing from 1 to 0&lt;/STRONG&gt;. See the description of SLVSEL for details on when that event occurs.&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;SLVSEL &lt;BR /&gt;Slave selected flag. SLVSEL is set after an address match when software tells the Slave function to acknowledge the address.&lt;STRONG&gt;It is cleared&lt;/STRONG&gt; when another address cycle presents an address that does not match an enabled address on the Slave function, when slave software decides to NACK a matched address, or &lt;STRONG&gt;when there is a Stop detected on the bus&lt;/STRONG&gt;. SLVSEL is not cleared if software NACKs data.&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The driver I use is interrupt based.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
//add-on i2c handler
void I2C_IRQHandler(void){&amp;nbsp; 
&amp;nbsp; 
&amp;nbsp; uint32_t intstat = LPC_I2C-&amp;gt;INTSTAT;&amp;nbsp; 
&amp;nbsp; uint32_t stat = LPC_I2C-&amp;gt;STAT;&amp;nbsp; 
&amp;nbsp; uint32_t mater_state;
&amp;nbsp; uint32_t slave_state;
 
[...]
&amp;nbsp; 
&amp;nbsp; if(intstat &amp;amp; I2C_STAT_SLVPENDING){
&amp;nbsp;&amp;nbsp;&amp;nbsp; slave_state = stat &amp;amp; I2C_STAT_SLVSTATE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(slave_state== I2C_STAT_SLVST_ADDR){

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(i2c_rx_data_available){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C-&amp;gt;SLVCTL = I2C_SLVCTL_SLVNACK; // nack address: still processing data
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C-&amp;gt;SLVCTL = I2C_SLVCTL_SLVCONTINUE; // ack address&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(add_on_rx_size){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add_on_rx_size=0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add_on_rx[add_on_rx_size]=add_on_address&amp;lt;&amp;lt;1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ++add_on_rx_size;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(slave_state== I2C_STAT_SLVST_RX){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(add_on_rx_size&amp;gt;=add_on_max_rx_size){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C-&amp;gt;SLVCTL = I2C_SLVCTL_SLVNACK; // nack data&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add_on_rx[add_on_rx_size]=LPC_I2C-&amp;gt;SLVDAT;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ++add_on_rx_size;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C-&amp;gt;SLVCTL = I2C_SLVCTL_SLVCONTINUE; // ack data&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(stat&amp;amp;I2C_STAT_SLVDESEL){&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C-&amp;gt;STAT=I2C_STAT_SLVDESEL;//clear flag
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);//test to see where stop condition is detected
&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; } 
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The weird thing is that the SLVDESEL flag is set after the address byte of the second message.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;So I receive and ack a complete message. A stop occurs. Another message is send to the slave.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I ack the address. Then the SLVDESEL flag is set before I got a chance to ack the second byte.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;How do I detect a stop condition using i2c interrupts?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 20:05:17 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T20:05:17Z</dc:date>
    <item>
      <title>I2C slave doesn't see stop condiction</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-slave-doesn-t-see-stop-condiction/m-p/565243#M17043</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by shoeloader on Mon Jul 07 07:22:01 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am trying to implement a high level I2C protocol specified by a customer.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The protocol is multimaster and messages have a variable length.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I use two lpc800's to test the protocol.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Device A sends a request message to Device B.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Device B correctly receives this message and acks every byte (nacking corrupt messages is allowed though).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Now Device B has to switch to master mode and send a message to Device A.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The problem is I can't detect the end of the message send by Device A. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The length of the message is can be found out by looking in the content of the message, but&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I prefer to keep the&amp;nbsp; I2C driver as simple as possible and use the stop condition as a trigger&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;to process the message and to send a response (later I want to specify time-out conditions as well).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;From what I understand the datasheet tells me I can use SLVDESEL to detect a stop condition.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;SLVDESEL &lt;BR /&gt;Slave Deselected flag. &lt;BR /&gt;This flag will cause an interrupt when set if enabled via INTENSET. This flag can be cleared by writing a 1 to this bit.&lt;BR /&gt;0:&lt;BR /&gt;Not deselected. The Slave function has not become deselected. This does not mean that it is currently selected. That information can be found in the SLVSEL flag.&lt;BR /&gt;1:&lt;BR /&gt;Deselected. The Slave function has become deselected. This is specifically caused by the &lt;STRONG&gt;SLVSEL flag changing from 1 to 0&lt;/STRONG&gt;. See the description of SLVSEL for details on when that event occurs.&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: &lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;SLVSEL &lt;BR /&gt;Slave selected flag. SLVSEL is set after an address match when software tells the Slave function to acknowledge the address.&lt;STRONG&gt;It is cleared&lt;/STRONG&gt; when another address cycle presents an address that does not match an enabled address on the Slave function, when slave software decides to NACK a matched address, or &lt;STRONG&gt;when there is a Stop detected on the bus&lt;/STRONG&gt;. SLVSEL is not cleared if software NACKs data.&lt;BR /&gt;&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The driver I use is interrupt based.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
//add-on i2c handler
void I2C_IRQHandler(void){&amp;nbsp; 
&amp;nbsp; 
&amp;nbsp; uint32_t intstat = LPC_I2C-&amp;gt;INTSTAT;&amp;nbsp; 
&amp;nbsp; uint32_t stat = LPC_I2C-&amp;gt;STAT;&amp;nbsp; 
&amp;nbsp; uint32_t mater_state;
&amp;nbsp; uint32_t slave_state;
 
[...]
&amp;nbsp; 
&amp;nbsp; if(intstat &amp;amp; I2C_STAT_SLVPENDING){
&amp;nbsp;&amp;nbsp;&amp;nbsp; slave_state = stat &amp;amp; I2C_STAT_SLVSTATE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(slave_state== I2C_STAT_SLVST_ADDR){

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(i2c_rx_data_available){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C-&amp;gt;SLVCTL = I2C_SLVCTL_SLVNACK; // nack address: still processing data
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C-&amp;gt;SLVCTL = I2C_SLVCTL_SLVCONTINUE; // ack address&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(add_on_rx_size){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add_on_rx_size=0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add_on_rx[add_on_rx_size]=add_on_address&amp;lt;&amp;lt;1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ++add_on_rx_size;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(slave_state== I2C_STAT_SLVST_RX){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(add_on_rx_size&amp;gt;=add_on_max_rx_size){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C-&amp;gt;SLVCTL = I2C_SLVCTL_SLVNACK; // nack data&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; add_on_rx[add_on_rx_size]=LPC_I2C-&amp;gt;SLVDAT;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ++add_on_rx_size;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C-&amp;gt;SLVCTL = I2C_SLVCTL_SLVCONTINUE; // ack data&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(stat&amp;amp;I2C_STAT_SLVDESEL){&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_I2C-&amp;gt;STAT=I2C_STAT_SLVDESEL;//clear flag
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1);//test to see where stop condition is detected
&amp;nbsp;&amp;nbsp;&amp;nbsp; } 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp; } 
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The weird thing is that the SLVDESEL flag is set after the address byte of the second message.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;So I receive and ack a complete message. A stop occurs. Another message is send to the slave.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I ack the address. Then the SLVDESEL flag is set before I got a chance to ack the second byte.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;How do I detect a stop condition using i2c interrupts?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:05:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-slave-doesn-t-see-stop-condiction/m-p/565243#M17043</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:05:17Z</dc:date>
    </item>
    <item>
      <title>Re: I2C slave doesn't see stop condiction</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-slave-doesn-t-see-stop-condiction/m-p/565244#M17044</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by shoeloader on Tue Jul 08 01:59:52 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I found out what I did wrong. The SLVPENDING isn't set when there is a SLVDESEL interrupt. So I only processed the SLVDESEL flag when the SLVPENDING&amp;nbsp; flag was high.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;By then It was too late. Another side effect was that I didn't clear that flag so I got millions of interrupts which caused me to miss timer overflow interrupts.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 20:05:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/I2C-slave-doesn-t-see-stop-condiction/m-p/565244#M17044</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T20:05:18Z</dc:date>
    </item>
  </channel>
</rss>

