<?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>PowerQUICC ProcessorsのトピックP1012 SPI queries</title>
    <link>https://community.nxp.com/t5/PowerQUICC-Processors/P1012-SPI-queries/m-p/670392#M2071</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi I am using P1012 ESPI in master mode and have few queries regarding it . Can someone please answer these ?&lt;/P&gt;&lt;P&gt;1.The &amp;nbsp;eSPI Event Register (SPIE) reports events . I do not wan't interrupts , so I have set SPIM to 0 to mask the interrupts. The manual says that we should clear SPIE by writing a 1. Now suppose I have set&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;eSPI Mode Register (SPMODE) to &amp;nbsp;0x80001D03 which enables interrupts , and sets&amp;nbsp;RXTHR -3 , TXTHR -29. I wan't to do a 4 byte write and a 4 byte read , hence the values of RXTHR and TXTHR. &amp;nbsp;For writing I use the following code -&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;*******************************************************&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;For writing &lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;*********************************************************&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;spieData = SPI_REG_READ_32 (SPIE);&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;/*check if TNF is 1 i.e TX &lt;SPAN class=""&gt;fifo&lt;/SPAN&gt; is not full , and TXT is set i.e Transmit FIFO has at most&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;/SPAN&gt;* TXTHR -1 (29-1) - 28 bytes. So we can do a 4 byte write.&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;/SPAN&gt;*/&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;while&lt;/SPAN&gt;( (spieData &amp;amp; (0x100) == 0) || (spieData &amp;amp; (0x800))&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;== 0 ){&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;/*SPI core not ready , wait */&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt;(timeout &amp;gt;= sendSpansionFlashTransTimeout){&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;printf(&lt;/SPAN&gt;"%s :Error !! TNF/TXT not set spieData = 0x%08x\n"&lt;SPAN class=""&gt;,__FUNCTION__,spieData);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=""&gt;return&lt;/SPAN&gt; ERROR;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;timeout = timeout+1;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;sysUsDelay (100);&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;/P&gt;&lt;P class=""&gt;/*can write the data now */&lt;/P&gt;&lt;P class=""&gt;SPI_REG_WRITE_32 (SPITF, *(&lt;SPAN class=""&gt;VUINT32&lt;/SPAN&gt; *) cmd);&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;*****************************************************&lt;/P&gt;&lt;P class=""&gt;For reading&lt;/P&gt;&lt;P class=""&gt;*****************************************************&lt;/P&gt;&lt;P class=""&gt;spieData = SPI_REG_READ_32 (SPIE);&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;SPAN class=""&gt;timeout&lt;/SPAN&gt; =0;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;/*check if RNE(22nd bit) is 1 i.e RX &lt;SPAN class=""&gt;fifo&lt;/SPAN&gt; is not empty , and RXT(18th bit) is set i.e Receive FIFO has at least&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; * RXTHR +1 (3+1) = 4 bytes. So we can do a 4 byte read.&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; */&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;SPAN class=""&gt;while&lt;/SPAN&gt;( (spieData &amp;amp; (0x200) == 0) || (spieData &amp;amp; (0x2000))&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;== 0 ){&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/*SPI core not ready , wait */&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt;(timeout &amp;gt;= readIdReceiveTimeout){&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;printf(&lt;/SPAN&gt;"%s Error !! RNE/RXT not set spieData = 0x%08x in empty buffer\n"&lt;SPAN class=""&gt;,__FUNCTION__,spieData);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=""&gt;return&lt;/SPAN&gt; ERROR;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;timeout = timeout+1;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;sysUsDelay (100);&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;/* read the SPIRF&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;in 32 bit, to empty the buffer */&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; readData = SPI_REG_READ_32 (SPIRF);&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;Is this implementation correct ? Is there a better way to read /write ?&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;2. Suppose&amp;nbsp;&lt;SPAN&gt;(SPMODE) is &amp;nbsp;0x80001D0 and SPIM to 0x0. &amp;nbsp;I have more than 4 bytes in my RX FIFO so I assume that the RXT (bit 18) of SPIE will be set. Now I read few bytes and the number of bytes become less than 4 bytes , say 2 bytes &amp;nbsp;then will the RXT(bit 18) clear automatically or I have to clear it every time it is set to 1 , so see any further changes. Is this behaviour same for every bit of SPIE i.e I have to clear every time it sets to 1 ?(As mentioned RNE,TNF,RXCNT and TXCNT are not affected by clear SPIE).&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN&gt;3. Suppose I have to read 65000 bytes from a flash with 24 bit address and one byte instruction.. So I set the SPCOM to 0x0004FDEB . Now the rx buffer is only 32 bytes but here the CPU will send 65000+4 = 65004 clock cycles so the CPU rx buffer will overflow . Am I correct ? If yes then what is the recommended way to read large amount of data from a flash , say 16mb, which will involve multiple SPCOM writes.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN&gt;4. What happens when the EN (bit 0) of the SPMODE is toggled from 0 to 1 &amp;nbsp;OR 1 to 0. Which all registers are impacted ? What happens if the frame is not transmitted fully ?&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN&gt;Thanks in advance.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 14 Jul 2017 16:23:19 GMT</pubDate>
    <dc:creator>ankitmaurya</dc:creator>
    <dc:date>2017-07-14T16:23:19Z</dc:date>
    <item>
      <title>P1012 SPI queries</title>
      <link>https://community.nxp.com/t5/PowerQUICC-Processors/P1012-SPI-queries/m-p/670392#M2071</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi I am using P1012 ESPI in master mode and have few queries regarding it . Can someone please answer these ?&lt;/P&gt;&lt;P&gt;1.The &amp;nbsp;eSPI Event Register (SPIE) reports events . I do not wan't interrupts , so I have set SPIM to 0 to mask the interrupts. The manual says that we should clear SPIE by writing a 1. Now suppose I have set&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;eSPI Mode Register (SPMODE) to &amp;nbsp;0x80001D03 which enables interrupts , and sets&amp;nbsp;RXTHR -3 , TXTHR -29. I wan't to do a 4 byte write and a 4 byte read , hence the values of RXTHR and TXTHR. &amp;nbsp;For writing I use the following code -&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;*******************************************************&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;For writing &lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;*********************************************************&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;spieData = SPI_REG_READ_32 (SPIE);&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;/*check if TNF is 1 i.e TX &lt;SPAN class=""&gt;fifo&lt;/SPAN&gt; is not full , and TXT is set i.e Transmit FIFO has at most&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;/SPAN&gt;* TXTHR -1 (29-1) - 28 bytes. So we can do a 4 byte write.&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;/SPAN&gt;*/&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;while&lt;/SPAN&gt;( (spieData &amp;amp; (0x100) == 0) || (spieData &amp;amp; (0x800))&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;== 0 ){&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;/*SPI core not ready , wait */&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt;(timeout &amp;gt;= sendSpansionFlashTransTimeout){&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;printf(&lt;/SPAN&gt;"%s :Error !! TNF/TXT not set spieData = 0x%08x\n"&lt;SPAN class=""&gt;,__FUNCTION__,spieData);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=""&gt;return&lt;/SPAN&gt; ERROR;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;timeout = timeout+1;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;sysUsDelay (100);&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&amp;nbsp;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;}&lt;/P&gt;&lt;P class=""&gt;/*can write the data now */&lt;/P&gt;&lt;P class=""&gt;SPI_REG_WRITE_32 (SPITF, *(&lt;SPAN class=""&gt;VUINT32&lt;/SPAN&gt; *) cmd);&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;*****************************************************&lt;/P&gt;&lt;P class=""&gt;For reading&lt;/P&gt;&lt;P class=""&gt;*****************************************************&lt;/P&gt;&lt;P class=""&gt;spieData = SPI_REG_READ_32 (SPIE);&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;SPAN class=""&gt;timeout&lt;/SPAN&gt; =0;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;/*check if RNE(22nd bit) is 1 i.e RX &lt;SPAN class=""&gt;fifo&lt;/SPAN&gt; is not empty , and RXT(18th bit) is set i.e Receive FIFO has at least&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; * RXTHR +1 (3+1) = 4 bytes. So we can do a 4 byte read.&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; */&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;SPAN class=""&gt;while&lt;/SPAN&gt;( (spieData &amp;amp; (0x200) == 0) || (spieData &amp;amp; (0x2000))&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;== 0 ){&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;/*SPI core not ready , wait */&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=""&gt;if&lt;/SPAN&gt;(timeout &amp;gt;= readIdReceiveTimeout){&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;printf(&lt;/SPAN&gt;"%s Error !! RNE/RXT not set spieData = 0x%08x in empty buffer\n"&lt;SPAN class=""&gt;,__FUNCTION__,spieData);&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN class=""&gt;return&lt;/SPAN&gt; ERROR;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;timeout = timeout+1;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; &lt;SPAN class=""&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;sysUsDelay (100);&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;}&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;/SPAN&gt;/* read the SPIRF&lt;SPAN class=""&gt;&amp;nbsp; &lt;/SPAN&gt;in 32 bit, to empty the buffer */&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt;&lt;SPAN class=""&gt; &lt;/SPAN&gt; readData = SPI_REG_READ_32 (SPIRF);&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;Is this implementation correct ? Is there a better way to read /write ?&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;2. Suppose&amp;nbsp;&lt;SPAN&gt;(SPMODE) is &amp;nbsp;0x80001D0 and SPIM to 0x0. &amp;nbsp;I have more than 4 bytes in my RX FIFO so I assume that the RXT (bit 18) of SPIE will be set. Now I read few bytes and the number of bytes become less than 4 bytes , say 2 bytes &amp;nbsp;then will the RXT(bit 18) clear automatically or I have to clear it every time it is set to 1 , so see any further changes. Is this behaviour same for every bit of SPIE i.e I have to clear every time it sets to 1 ?(As mentioned RNE,TNF,RXCNT and TXCNT are not affected by clear SPIE).&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN&gt;3. Suppose I have to read 65000 bytes from a flash with 24 bit address and one byte instruction.. So I set the SPCOM to 0x0004FDEB . Now the rx buffer is only 32 bytes but here the CPU will send 65000+4 = 65004 clock cycles so the CPU rx buffer will overflow . Am I correct ? If yes then what is the recommended way to read large amount of data from a flash , say 16mb, which will involve multiple SPCOM writes.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN&gt;4. What happens when the EN (bit 0) of the SPMODE is toggled from 0 to 1 &amp;nbsp;OR 1 to 0. Which all registers are impacted ? What happens if the frame is not transmitted fully ?&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN&gt;Thanks in advance.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 14 Jul 2017 16:23:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/PowerQUICC-Processors/P1012-SPI-queries/m-p/670392#M2071</guid>
      <dc:creator>ankitmaurya</dc:creator>
      <dc:date>2017-07-14T16:23:19Z</dc:date>
    </item>
    <item>
      <title>Re: P1012 SPI queries</title>
      <link>https://community.nxp.com/t5/PowerQUICC-Processors/P1012-SPI-queries/m-p/670393#M2072</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;BR /&gt;Have a great day,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;SPAN style="font-size: 12.0pt;"&gt; I do not see where you read status to the spieData in the while loops. So you will check the same value in the loop until timeout in case when the SPI was not ready before the while{}.&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="font-size: 12.0pt;"&gt; You wrote “(SPMODE) is &amp;nbsp;0x80001D0”. According to the ESPI_SPMODE description in the manual you do not enable eSPI, set reserved bits and set 5-bit RXTHR field to 0x10, i.e. 32 bytes threshold.&lt;BR /&gt; The RXCNT and TXCNT are read only fileds. While the RXT ( RNE, TNF) bit has been set it can be cleared by writing 1 only. &lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="font-size: 12.0pt;"&gt;&amp;nbsp; You should estimate you the system load, the CPU response delay, eSPI bit rate and then make conclusion. The safe way is using transactions with length less than FIFO depth.&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN style="font-size: 12.0pt;"&gt;&amp;nbsp; &amp;gt;What happens when the EN (bit 0) of the SPMODE is toggled from 0 to 1 &amp;nbsp;OR 1 to 0.&lt;BR /&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="font-size: 12.0pt;"&gt;SPI controller is enabled or disabled&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;SPAN style="font-size: 12.0pt;"&gt;&amp;gt; Which all registers are impacted ? &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12.0pt;"&gt;This question is fuzzy. You should care for SPMODE itself. Any bits in SPMODE must not change when EN is set. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12.0pt;"&gt;&amp;gt;What happens if the frame is not transmitted fully ?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12.0pt;"&gt;The frame will not be transmitted fully.&lt;/SPAN&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, 18 Jul 2017 06:20:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/PowerQUICC-Processors/P1012-SPI-queries/m-p/670393#M2072</guid>
      <dc:creator>r8070z</dc:creator>
      <dc:date>2017-07-18T06:20:34Z</dc:date>
    </item>
    <item>
      <title>Re: P1012 SPI queries</title>
      <link>https://community.nxp.com/t5/PowerQUICC-Processors/P1012-SPI-queries/m-p/670394#M2073</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the reply . Sorry If some of my questions were not clear.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;1.Yes , you are correct I should read SPIE in the while loop. I missed it.&lt;/P&gt;&lt;P&gt;2.The SPMODE is set to&amp;nbsp;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;0x80001D03(it was a typo)&amp;nbsp;&lt;SPAN&gt;and SPIM to 0x0. My question is regarding the SPIE register.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Suppose the TXE bit is set in the ESPI. I read that bit and did a write , now I wan't to read again the TXE bit to&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;determine when the TX FIFO becomes empty. Can I read the TXE bit again , without clearing it the first time or do I have to clear it every time I read it, so that I can get proper status next time I read the TXE bit. Does similar logic clear /read logic applies to DON,RXT , RXF and TXT bit as well ?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;&lt;SPAN&gt;3. Will read less then 32 bytes to avoid overflow.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;&lt;SPAN&gt;4. Suppose I have written 0x00000004 to SPCOM(so number of characters in the frame is 5). Now , suppose after sending 2 characters I stopped(due to some error). Now I wan't to start the complete transaction again. So again&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;&lt;SPAN&gt;I write&amp;nbsp;&lt;SPAN style="background-color: #ffffff;"&gt;0x00000004 to SPCOM and this time I sent 5 characters , but in this case I do not see the DON bit in SPIE being set to 1 . Even if I do soft reset of CPU and try the transaction again I still see DON bit in the SPIE is not set to 1. &amp;nbsp;Why is this ? How to handle such broken writes/reads ?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: #ffffff; color: #51626f;"&gt;5. Is there a way to reset the CPU espi block ?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: #ffffff; color: #51626f;"&gt;Thanks,&lt;BR /&gt;Ankit&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 01 Aug 2017 14:33:55 GMT</pubDate>
      <guid>https://community.nxp.com/t5/PowerQUICC-Processors/P1012-SPI-queries/m-p/670394#M2073</guid>
      <dc:creator>ankitmaurya</dc:creator>
      <dc:date>2017-08-01T14:33:55Z</dc:date>
    </item>
  </channel>
</rss>

