<?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 Re: KL25 I2C DMA in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KL25-I2C-DMA/m-p/461502#M27656</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;+datasheet, registry map for MPU6050&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 06 Dec 2015 12:55:44 GMT</pubDate>
    <dc:creator>mqxman</dc:creator>
    <dc:date>2015-12-06T12:55:44Z</dc:date>
    <item>
      <title>KL25 I2C DMA</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KL25-I2C-DMA/m-p/461501#M27655</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I trying develope data transfer (acceleration data, gyroscope data, tempertaure data) &lt;STRONG&gt;FRDM-KL25&lt;/STRONG&gt; &amp;lt;&amp;lt;-------&amp;gt;&amp;gt; &lt;STRONG&gt;MPU6050&lt;/STRONG&gt; with I2C and DMA, Without DMA reading is going fine but with DMA is it still without success.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is the code for read data from MPU6050 throug I2C &lt;SPAN style="text-decoration: underline;"&gt;&lt;SPAN style="color: #3d3d3d; text-decoration: underline;"&gt;without&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="color: #3d3d3d; text-decoration: underline;"&gt; DMA&lt;/SPAN&gt;&lt;SPAN style="color: #3d3d3d;"&gt; this is going fine:&lt;/SPAN&gt;&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="_jivemacro_uid_14494048616938402 jive_macro_code jive_text_macro" data-renderedposition="121_8_1138_544" jivemacro_uid="_14494048616938402" modifiedtitle="true"&gt;&lt;P&gt;void read_MPU6050()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2CReadMultiRegisters(MPU6050_ADDRESS, MPU6050_RA_ACCEL_XOUT_H, &amp;amp;MPU_6050_buffer[0], 14);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; convert_data();&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;void I2CReadMultiRegisters(char SlaveID, char RegisterAddress, char * r, char n)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; char i;&lt;/P&gt;&lt;P&gt;&amp;nbsp; uint32_t t[3];&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;&amp;nbsp; i2c_write_byte(RegisterAddress);&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_RepeatedStart();&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_write_byte((SlaveID &amp;lt;&amp;lt; 1) | 0x01);&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_EnterRxMode();&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_EnableAck();&lt;/P&gt;&lt;P&gt;&amp;nbsp; i = I2C1_D ; // Dummy read&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&amp;nbsp; for(i=0;i&amp;lt;n-2;i++) &lt;/P&gt;&lt;P&gt;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *r = I2C1_D;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; r++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_DisableAck();&lt;/P&gt;&lt;P&gt;&amp;nbsp; *r = I2C1_D; &lt;/P&gt;&lt;P&gt;&amp;nbsp; r++;&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Stop(); &lt;/P&gt;&lt;P&gt;&amp;nbsp; *r = I2C1_D;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Pause();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Reading &lt;SPAN style="text-decoration: underline;"&gt;with DMA&lt;/SPAN&gt; is this:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14494051463907967 jive_text_macro" data-renderedposition="707_8_1138_464" jivemacro_uid="_14494051463907967" modifiedtitle="true"&gt;&lt;P&gt;void DMAread_MPU6050(){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_I2CReadMultiRegisters(MPU6050_ADDRESS,MPU6050_RA_ACCEL_XOUT_H,&amp;amp;MPU_6050_buffer[0],14);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; convert_data();&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;void DMA_I2CReadMultiRegisters(char SlaveID, char RegisterAddress, char * r, char n)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; char i;&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;&amp;nbsp; i2c_write_byte(RegisterAddress);&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_RepeatedStart();&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_write_byte((SlaveID &amp;lt;&amp;lt; 1) | 0x01);&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_EnterRxMode();&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_EnableAck();&lt;/P&gt;&lt;P&gt;&amp;nbsp; i = I2C1_D ; // Dummy read&lt;/P&gt;&lt;P&gt;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; DMA_starttransfer(DMA_BASE_PTR,0, 14);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;void DMA_starttransfer(DMA_MemMapPtr DMA_Channel, uint8_t index, uint32_t num_bytes)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_DSR_REG(DMA_Channel, index) = num_bytes;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_DAR_REG(DMA_Channel, index) = (uint32_t)(&amp;amp;MPU_6050_buffer[0]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_DCR_REG(DMA_Channel, index) = DMA_DCR_ERQ_MASK|DMA_DCR_EINT_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C1_C1 |= I2C_C1_DMAEN_MASK;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This is the initialization code for DMA and I2C:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14494053847278936 jive_text_macro" data-renderedposition="1213_8_1138_768" jivemacro_uid="_14494053847278936" modifiedtitle="true"&gt;&lt;P&gt;void Init_I2C(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp; SIM_SCGC5 |= SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTE_MASK | SIM_SCGC5_PORTB_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SIM_SCGC4 |= SIM_SCGC4_I2C1_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp; PORTC_PCR10 = PORT_PCR_MUX(2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //I2C SCL&lt;/P&gt;&lt;P&gt;&amp;nbsp; PORTC_PCR11 = PORT_PCR_MUX(2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //I2C SDA&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; I2C1_F&amp;nbsp; = 0x00;&lt;/P&gt;&lt;P&gt;&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;void DMA_RX_Init(DMA_MemMapPtr DMA_Channel, uint8_t dma_source, int index,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t source_addr, uint32_t dest_addr, uint32_t num_bytes,uint32_t bytes_per_xfer)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* num_bytes is total bytes */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* setup depends on how many bytes per transfer */&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SIM_SCGC7 |= SIM_SCGC7_DMA_MASK;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uint32_t ssize_dsize_attr;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* setup ssize and dsize parameter for TCD ATTR register based on transfer size assigned above */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* 0:32bit; 1:8-bit, 2:16-bit&amp;nbsp; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch (bytes_per_xfer) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 8:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; default:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ssize_dsize_attr = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; /* 8-bit */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 16:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ssize_dsize_attr = 2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; /* 16-bit */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 32:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ssize_dsize_attr = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break; /* 32-bit */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_SAR_REG(DMA_Channel, index)= source_addr;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Source address &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_DCR_REG(DMA_Channel, index)|= 0x0000;&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;&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; // Source address increments 0 bytes (uint32)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_DAR_REG(DMA_Channel, index)|= dest_addr;&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;&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; // Destination address &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_DCR_REG(DMA_Channel, index)|= ssize_dsize_attr &amp;lt;&amp;lt; DMA_DCR_DINC_SHIFT;&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; // Destination offset increments &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_DCR_REG(DMA_Channel, index)|= DMA_DCR_ERQ_MASK|DMA_DCR_EINT_MASK|DMA_DCR_D_REQ_MASK;//|DMA_DCR_CS_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C1_C1 |= I2C_C1_DMAEN_MASK;//|I2C_C1_IICIE_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_DSR_BCR_REG(DMA_Channel, index)= num_bytes;&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;&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; //Stop the transfer when all bytes is transfered&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_DCR_REG(DMA_Channel, index)|= ((ssize_dsize_attr&amp;lt;&amp;lt;DMA_DCR_DSIZE_SHIFT)|(ssize_dsize_attr&amp;lt;&amp;lt;DMA_DCR_SSIZE_SHIFT)); // Source a destination size 0:32bit; 1:8-bit, 2:16-bit&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMAMUX_CHCFG_REG(DMAMUX0_BASE_PTR,index)= (DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(dma_source)); // DMA source DMA Mux to tie source to DMA channel&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;And finally the main functon with DMA interrupt function:&lt;/P&gt;&lt;PRE __default_attr="c++" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14494055085841575 jive_text_macro" data-renderedposition="2023_8_1138_464" jivemacro_uid="_14494055085841575" modifiedtitle="true"&gt;&lt;P&gt;int main(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitClock();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitSysTick();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Init_I2C();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_RX_Init(DMA_BASE_PTR, I2C1_SOURCE, CHANNEL_0,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (uint32_t) (&amp;amp;(I2C1_D )),(uint32_t)(&amp;amp;(MPU_6050_buffer[0])), 12,8 );&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; init_MPU6050();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; enable_irq(INT_DMA0 - 16);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(;;) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read_MPU6050();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //DMAread_MPU6050();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; counter++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delay_mS(1000);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void DMA_interrupt()&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_DisableAck(); &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_Wait();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i2c_Stop(); &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; interrupt++;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DMA_DSR_BCR0 |= DMA_DSR_BCR_DONE_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I2C1_C1 &amp;amp;= ~I2C_C1_DMAEN_MASK;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Iam working on this over the weekend but still not going. Can anyone help me and modify this code? I attach the whole of project. Thank You!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 06 Dec 2015 12:47:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KL25-I2C-DMA/m-p/461501#M27655</guid>
      <dc:creator>mqxman</dc:creator>
      <dc:date>2015-12-06T12:47:35Z</dc:date>
    </item>
    <item>
      <title>Re: KL25 I2C DMA</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KL25-I2C-DMA/m-p/461502#M27656</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;+datasheet, registry map for MPU6050&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 06 Dec 2015 12:55:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KL25-I2C-DMA/m-p/461502#M27656</guid>
      <dc:creator>mqxman</dc:creator>
      <dc:date>2015-12-06T12:55:44Z</dc:date>
    </item>
    <item>
      <title>Re: KL25 I2C DMA</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KL25-I2C-DMA/m-p/461503#M27657</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Norbert Gal:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am not familiar with that &lt;STRONG&gt;MPU6050&lt;/STRONG&gt; module and I don't have one to test, but by looking at your code these are some things I noticed:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;- There is a line of DMA initialization code that does not make sense:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_14499842892905221 jive_text_macro" data-renderedposition="134.4499969482422_8_1233_16" jivemacro_uid="_14499842892905221"&gt;&lt;P&gt;DMA_DCR_REG(DMA_Channel, index)|= ssize_dsize_attr &amp;lt;&amp;lt; DMA_DCR_DINC_SHIFT;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment"&gt;// Destination offset increments&lt;/SPAN&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I guess this should be:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_macro_code _jivemacro_uid_1449984295124931 jive_text_macro" data-renderedposition="213.4499969482422_8_1233_16" jivemacro_uid="_1449984295124931"&gt;&lt;P&gt;DMA_DCR_REG(DMA_Channel, index) |= 1 &amp;lt;&amp;lt; DMA_DCR_DINC_SHIFT;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment"&gt;// Destination offset increments&lt;/SPAN&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;- Also, the DMA requests should be enabled before the dummy read in Receive mode. You have this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="_jivemacro_uid_14499843064154992 jive_macro_code jive_text_macro" data-renderedposition="292.45001220703125_8_1233_80" jivemacro_uid="_14499843064154992"&gt;&lt;P&gt;//...&lt;/P&gt;&lt;P&gt;i2c_EnableAck();&lt;/P&gt;&lt;P&gt;i = I2C1_D ; &lt;SPAN class="comment"&gt;// Dummy read&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;i2c_Wait();&lt;/P&gt;&lt;P&gt;DMA_starttransfer(DMA_BASE_PTR,&lt;SPAN class="number"&gt;0, &lt;SPAN class="number"&gt;14&lt;/SPAN&gt;); &lt;/SPAN&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;SPAN class="number"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="number"&gt;But it should be like this:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="_jivemacro_uid_1449984317365355 jive_macro_code jive_text_macro" data-renderedposition="435.45001220703125_8_1233_80" jivemacro_uid="_1449984317365355"&gt;&lt;P&gt;//...&lt;/P&gt;&lt;P&gt;i2c_EnableAck();&lt;/P&gt;&lt;P&gt;DMA_starttransfer(DMA_BASE_PTR,&lt;SPAN class="number"&gt;0, &lt;SPAN class="number"&gt;14&lt;/SPAN&gt;); 
&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;i = I2C1_D ; &lt;SPAN class="comment"&gt;// Dummy read
&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="number"&gt;//...&lt;/SPAN&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;SPAN class="number"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="number"&gt;The best way to debug I2C issues is to scan the bus with an oscilloscope or a logic analyzer, so you can see what exact transfers are being made or are missing.&lt;/SPAN&gt;&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>Sun, 13 Dec 2015 05:25:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KL25-I2C-DMA/m-p/461503#M27657</guid>
      <dc:creator>Jorge_Gonzalez</dc:creator>
      <dc:date>2015-12-13T05:25:14Z</dc:date>
    </item>
  </channel>
</rss>

