<?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 on MKL15 in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/I2C-on-MKL15/m-p/332955#M15718</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi.&lt;/P&gt;&lt;P&gt;I have some problems witch i2c on mkl15z128.&lt;/P&gt;&lt;P&gt;I try to communicate with RTC DS1338. For beginning i try get on the bug START condition, Slave address write and STOP condition.&lt;/P&gt;&lt;P&gt;But i have problems.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I use PTE0/TPE1 GPIO pins.&lt;/P&gt;&lt;P&gt;My init function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void init_I2C(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC4 |= SIM_SCGC4_I2C1_MASK; //Turn on clock to I2C1 module&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* configure GPIO for I2C1 function */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTE_PCR0 = PORT_PCR_ISF_MASK | PORT_PCR_MUX(6);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTE_PCR1 = PORT_PCR_ISF_MASK | PORT_PCR_MUX(6);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C1_F = I2C_F_ICR(14) | I2C_F_MULT(0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C1_C1 = I2C_C1_IICEN_MASK;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My functions for write i take from examples&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void i2c_Wait(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; while((I2C1_S &amp;amp; I2C_S_IICIF_MASK)==0)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wdtFeed();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C1_S |= I2C_S_IICIF_MASK;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void IIC_StartTransmission (unsigned char SlaveID, unsigned char Mode)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(Mode == MWSR)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* set transmission mode */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MasterTransmission = MWSR;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* set transmission mode */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MasterTransmission = MRSW;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* shift ID in right possition */&lt;/P&gt;&lt;P&gt;&amp;nbsp; SlaveID = (unsigned char) MMA7660_I2C_ADDRESS &amp;lt;&amp;lt; 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Set R/W bit at end of Slave Address */&lt;/P&gt;&lt;P&gt;&amp;nbsp; SlaveID |= (unsigned char)MasterTransmission;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* send start signal */&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Start();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* send ID with W/R bit */&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_write_byte(SlaveID);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void MMA7660WriteRegister(unsigned char u8RegisterAddress, unsigned char u8Data)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* send data to slave */&lt;/P&gt;&lt;P&gt;&amp;nbsp; IIC_StartTransmission(SlaveID,MWSR);&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Send I2C address */&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C1_D = u8RegisterAddress;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Send data */&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C1_D = u8Data;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Stop();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; //Pause();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When i call MMA7660WriteRegister(0x1, 0x2) i have reboot device by WDT.&lt;/P&gt;&lt;P&gt;When i insert wdtFeed in while loop i have no reboot.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; while((I2C1_S &amp;amp; I2C_S_IICIF_MASK)==0)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wdtFeed();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have START condition but in I2C1_S i have no I2C_S_IICIF_MASK after START.&lt;/P&gt;&lt;P&gt;I have no idea what i do wrong. Pleas help me.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 02 Sep 2014 12:36:00 GMT</pubDate>
    <dc:creator>serjnone</dc:creator>
    <dc:date>2014-09-02T12:36:00Z</dc:date>
    <item>
      <title>I2C on MKL15</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/I2C-on-MKL15/m-p/332955#M15718</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi.&lt;/P&gt;&lt;P&gt;I have some problems witch i2c on mkl15z128.&lt;/P&gt;&lt;P&gt;I try to communicate with RTC DS1338. For beginning i try get on the bug START condition, Slave address write and STOP condition.&lt;/P&gt;&lt;P&gt;But i have problems.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I use PTE0/TPE1 GPIO pins.&lt;/P&gt;&lt;P&gt;My init function&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void init_I2C(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC4 |= SIM_SCGC4_I2C1_MASK; //Turn on clock to I2C1 module&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC5 |= SIM_SCGC5_PORTE_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* configure GPIO for I2C1 function */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTE_PCR0 = PORT_PCR_ISF_MASK | PORT_PCR_MUX(6);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTE_PCR1 = PORT_PCR_ISF_MASK | PORT_PCR_MUX(6);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C1_F = I2C_F_ICR(14) | I2C_F_MULT(0);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C1_C1 = I2C_C1_IICEN_MASK;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My functions for write i take from examples&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void i2c_Wait(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; while((I2C1_S &amp;amp; I2C_S_IICIF_MASK)==0)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wdtFeed();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C1_S |= I2C_S_IICIF_MASK;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void IIC_StartTransmission (unsigned char SlaveID, unsigned char Mode)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; if(Mode == MWSR)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* set transmission mode */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MasterTransmission = MWSR;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* set transmission mode */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MasterTransmission = MRSW;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* shift ID in right possition */&lt;/P&gt;&lt;P&gt;&amp;nbsp; SlaveID = (unsigned char) MMA7660_I2C_ADDRESS &amp;lt;&amp;lt; 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Set R/W bit at end of Slave Address */&lt;/P&gt;&lt;P&gt;&amp;nbsp; SlaveID |= (unsigned char)MasterTransmission;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* send start signal */&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Start();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* send ID with W/R bit */&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_write_byte(SlaveID);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void MMA7660WriteRegister(unsigned char u8RegisterAddress, unsigned char u8Data)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* send data to slave */&lt;/P&gt;&lt;P&gt;&amp;nbsp; IIC_StartTransmission(SlaveID,MWSR);&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Send I2C address */&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C1_D = u8RegisterAddress;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Send data */&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C1_D = u8Data;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Stop();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; //Pause();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;When i call MMA7660WriteRegister(0x1, 0x2) i have reboot device by WDT.&lt;/P&gt;&lt;P&gt;When i insert wdtFeed in while loop i have no reboot.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; while((I2C1_S &amp;amp; I2C_S_IICIF_MASK)==0)&lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; wdtFeed();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have START condition but in I2C1_S i have no I2C_S_IICIF_MASK after START.&lt;/P&gt;&lt;P&gt;I have no idea what i do wrong. Pleas help me.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Sep 2014 12:36:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/I2C-on-MKL15/m-p/332955#M15718</guid>
      <dc:creator>serjnone</dc:creator>
      <dc:date>2014-09-02T12:36:00Z</dc:date>
    </item>
    <item>
      <title>Re: I2C on MKL15</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/I2C-on-MKL15/m-p/332956#M15719</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello serj none:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I assume you have pullup resistors in SCL and SDA lines, correct?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would recommend checking the bus with an oscilloscope or logic analyzer. The IICIF flag should set as soon as 9 clock cycles are shifted out (8-bit data + ack/nack). The flag should set disregarding if the slave responds or not.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And some observations about your code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;- You are using I2C&lt;STRONG&gt;1 &lt;/STRONG&gt;(not I2C0). Just double check that &lt;STRONG&gt;i2c_start()&lt;/STRONG&gt;, &lt;STRONG&gt;i2c_write_byte()&lt;/STRONG&gt; and &lt;STRONG&gt;i2c_Stop()&lt;/STRONG&gt; functions refer to this I2C module instance.&lt;/P&gt;&lt;P&gt;- For address cycle the bit I2C1_C1[TX] should be set to '1', indicating Transmit mode. I do not see this in your code.&lt;/P&gt;&lt;P&gt;- Your function &lt;STRONG&gt;IIC_StartTransmission&lt;/STRONG&gt; receives &lt;EM&gt;SlaveID&lt;/EM&gt; as parameter, but then completely ignores such value and overwrites it with MMA7660_I2C_ADDRESS. Verify that you use the correct address for your RTC slave device.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I hope these comments help.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Regards!,&lt;BR /&gt;Jorge Gonzalez&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------&lt;BR /&gt;Note: If this post answers your question, please click the Correct Answer button. Thank you!&lt;BR /&gt;-----------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Sep 2014 21:59:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/I2C-on-MKL15/m-p/332956#M15719</guid>
      <dc:creator>Jorge_Gonzalez</dc:creator>
      <dc:date>2014-09-02T21:59:41Z</dc:date>
    </item>
    <item>
      <title>Re: Re: I2C on MKL15</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/I2C-on-MKL15/m-p/332957#M15720</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you.&lt;/P&gt;&lt;P&gt;There are was shoted SCL and SCK lines.&lt;/P&gt;&lt;P&gt;I use i2c_1 and all fanctions referred to i2c_1.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think examples from IAR not fully corrected.&lt;/P&gt;&lt;P&gt;After simple code i2s_start() in my project dos not work - a wrong slave address transmitted.&lt;/P&gt;&lt;P&gt;But if i write&lt;/P&gt;&lt;P&gt;i2c_start();&lt;/P&gt;&lt;P&gt;while((I2C1_S &amp;amp; (1&amp;lt;&amp;lt;5)) == 0); //waite while BUSY bit set&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;in any cases transmit correct slave address.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also I change i2c_stop() :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;i2c_stop();&lt;/P&gt;&lt;P&gt;while((I2C1_S &amp;amp; (1&amp;lt;&amp;lt;5)) != 0); //waite while BUSY bit clear&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now my code work stable and relable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you fo help.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 17:44:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/I2C-on-MKL15/m-p/332957#M15720</guid>
      <dc:creator>serjnone</dc:creator>
      <dc:date>2014-09-04T17:44:06Z</dc:date>
    </item>
  </channel>
</rss>

