<?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>S12 / MagniV MicrocontrollersのトピックRe: SPI Master-Slave communication between two MC9S12DG256's</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187453#M7112</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Jaeyun,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Does this code snippet do what you require?&amp;nbsp; The following code -&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;if (data == 0x40)    data = 0x04;else                 data = 0x01;SPI1DR = data;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;to be replaced with -&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;switch (data) {case 0x40:   SPI0DR = 0x04;   break;case 0x00:   break;       // Do nothing at present timedefault:   SPI0DR = 0x01;}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;A further comment - since&amp;nbsp;writing to a LCD device&amp;nbsp;is usually a very slow process,&amp;nbsp;the above code should be executed prior to commencing any display write, so that&amp;nbsp;return data is more immediately available for interrogation by the master(and lessening the delay requirement within the master).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 29 Oct 2020 09:38:48 GMT</pubDate>
    <dc:creator>bigmac</dc:creator>
    <dc:date>2020-10-29T09:38:48Z</dc:date>
    <item>
      <title>SPI Master-Slave communication between two MC9S12DG256's</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187445#M7104</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I am trying to communicate between two&amp;nbsp;MC9S12DG256's using SPI protocol having one as master and the other one as a slave. I wrote the following codes following some postings which were uploaded to this forum, but I couldn't make them work.&amp;nbsp;These postings are&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fcommunity.freescale.com%2Fmessage%2F24342%2324342" rel="nofollow" target="_blank"&gt;https://community.freescale.com/message/24342#24342&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fcommunity.freescale.com%2Fmessage%2F25173%2325173" rel="nofollow" target="_blank"&gt;https://community.freescale.com/message/25173#25173&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;First the connection b/w the master and the slave:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;// Connections:&lt;BR /&gt;// MASTER&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; SLAVE&lt;BR /&gt;// -------------------------------------&lt;BR /&gt;// PS4 (MISO) &amp;lt;------------&amp;nbsp;&amp;nbsp; PS4(MISO)&lt;BR /&gt;// PS5 (MOSI) ------------&amp;gt;&amp;nbsp;&amp;nbsp; PS5(MOSI)&lt;BR /&gt;// PS6 (SCLK) ------------&amp;gt;&amp;nbsp;&amp;nbsp;PS6(SCLK)&lt;BR /&gt;// PS7 (SS)&amp;nbsp;&amp;nbsp; &amp;lt;-- Vcc&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;// PS0 (GPIO) ------------&amp;gt;&amp;nbsp;&amp;nbsp; PS7(SS)&lt;BR /&gt;// GND&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; GND&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then, the code for the master:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;void main(void) {&lt;BR /&gt;&amp;nbsp; volatile byte data;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; PLL_init();&amp;nbsp; // set system clock frequency to 24 MHz&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; // SPI communication initialization as a master&lt;BR /&gt;&amp;nbsp; SPI0BR&amp;nbsp; = 0b00000011;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Baud rate = 24MHz/16 = 1.5MHz 0x53;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; SPI0CR2 = 0b00000010;&amp;nbsp; // SPI0CR2_SPISWAI=1 : Stop SPI clocks when in wait mode&lt;BR /&gt;&amp;nbsp; SPI0CR1 = 0b01010110;&amp;nbsp; // Enable SPI ; Master mode ; CPHA = 1 ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // SSOE=1 (SS input with MODF feature)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; DDRS |= 0x61;&amp;nbsp;&amp;nbsp; // 0b 0 1 1 0 0 0 0 1 : PS7(SS) and PS4(MISO) are input and PS6(SCK)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&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; // and PS5(MOSI) are output, PS0 is output for setting and clearing slave's SS&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; PTS &amp;amp;= (~0x01);&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; // Low slave's SS&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;BR /&gt;&amp;nbsp; for( ; ; ){&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PTS &amp;amp;= (~0x01);&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; // Low slave's SS&lt;BR /&gt;&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send a byte to the slave&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while( SPI0SR_SPTEF == 0); // Wait until SPIDR becomes empty.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI0DR = 0x04;&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; Clear the flag SPI0SR_STEF&amp;nbsp;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while( SPI0SR_SPIF == 0 );&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Wait until the end of an SPI transfer.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = SPI0DR;&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; // Read or write to clear SPI0SR_SPIF flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive a byte from the slave&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPI0SR_SPTEF == 0);&amp;nbsp; // Wait until the SPI0DR is empty&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI0DR = 0x00;&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; // Read SPI0DR to clear the SPI0SR_SPTEF flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPI0SR_SPIF == 0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Wait until a SPI transfer is finished&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = SPI0DR;&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; // Write the received data to data&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PTS |= (0x01);&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; // High slave's SS&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For the slave, I have:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;void main(void) {&lt;BR /&gt;&amp;nbsp; volatile byte data;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; PLL_init();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set system clock frequency to 24 MHz&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; // Initialization of SPI communication as a slave&amp;nbsp;&lt;BR /&gt;&amp;nbsp; SPI0BR =&amp;nbsp; 0b00000011; // baud rate = 24MHz/16=1.5MHz ; 0x53;&lt;BR /&gt;&amp;nbsp; SPI0CR2 = 0b00000010; // SPI0CR2_SPISWAI=1 : Stop SPI clocks when in wait mode&lt;BR /&gt;&amp;nbsp; SPI0CR1 = 0b01000110; // SPI enable ; slave mode ; CPHA=1 ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; // SSOE=1(SS input with MODF feature) ;&lt;BR /&gt;&amp;nbsp; DDRS &amp;amp;= 0x00;&lt;BR /&gt;&amp;nbsp; DDRS |= 0x10;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 0b 0 0 0 1 0 0 0 0&amp;nbsp; : PS7(SS), PS6(SCK), PS5(MOSI) are input&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&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; // and PS4(MISO) is an output&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; for( ; ; ) {&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive a byte from the master&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //while(SPI0SR_SPTEF == 0); // wait until SPI0DR becomes empty&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //SPI0DR = 0x00;&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;clear the SPI0SR_SPTEF flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPI0SR_SPIF == 0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // wait until the end of an SPI transfer.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = SPI0DR;&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; // Reads the byte and clears the flag SP0SR_SPIF.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send a byte to the master&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( data == 0x04){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPI0SR_SPTEF == 0); //Wait until SPIDR becomes empty.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI0DR = 0x08;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPI0SR_SPTEF == 0); //Wait until SPIDR becomes empty.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI0DR = 0x80;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(SPI0SR_SPIF == 0);&amp;nbsp;&amp;nbsp;&amp;nbsp; // wait until the end of an SPI transfer.&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = SPI0DR;&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; // dummy reading to clear SPI0SR_SPIF flag.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;}&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Running these codes, it seems like that the execution hangs at some of the while loops waiting for the&amp;nbsp;SPIF flag to be set (although I am not very sure).&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Alternatively, &amp;nbsp;I also tried&amp;nbsp;to run the programs by&amp;nbsp;assigning CPHA=0 for both master and slave, and use the PTS_PTS0 bit to bring the slave's SS line to down and then up (you can see this from the commented&amp;nbsp;instructions&amp;nbsp;in the code for the master), but even this trial didn't give positive results.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'd appreciate if anyone could help me.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Jaeyun&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Mar 2011 09:45:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187445#M7104</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2011-03-02T09:45:28Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Master-Slave communication between two MC9S12DG256's</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187446#M7105</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;- Your flag clearing doesn't make any sense, you are sending out various junk data when you try to clear the flags. Clear them once when you send by reading SPI0SR then writing to SPIDR, and once when you receive by reading from SPI0SR, then reading from SPI0DR. This is likely the main reason why the program isn't working.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- On S12, peripherals like SPI take precedence over GPIO. Meaning that if you have enabled SPI on a certain port, all port I/O on those 4 pins will be disabled. You don't have to set DDR and PORT registers.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- SSOE=1 means that the master MCU will automatically set the SS line low whenever data is sent.The slave will not care about the SSOE bit at all.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- If SSOE=0 on the master, the SPI module will release its grasp over the SS pin and you can use it for GPIO instead. This is useful if you wish to perform the SS manually. You will then need to use DDRS and PTS registers as you attempt in your code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- Although, SPI0 is found on PTS pins/bits 4,5,6,7. You are fiddling around with I/O on PTS0. Check the manual to find the SPI pins.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- CPHA and CPOL settings don't matter at all, &lt;EM&gt;as long as they are the same on both master and slave&lt;/EM&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;- You should consider removing all binary/hex junk from the code and use named bit masks so that humans can read it. Also, the binary 0b notation will not compile on a C compiler.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 02 Mar 2011 20:58:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187446#M7105</guid>
      <dc:creator>Lundin</dc:creator>
      <dc:date>2011-03-02T20:58:24Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Master-Slave communication between two MC9S12DG256's</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187447#M7106</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Lundin, thanks for your reply.&lt;/P&gt;&lt;P&gt;&amp;nbsp;I did some changes following&amp;nbsp;Lundin's&amp;nbsp;comments, but I am still having issues.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here I am trying to send a byte from master to slave, and then the slave sends another byte whose value depends on if the reception of the byte sent from the master was satisfactory or not. I can see that the slave receives correctly the the byte sent from the master, but the master does not get the right byte (sent from the slave), but it always receives 0xff.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I also&amp;nbsp;probed SCK, MOSI, MISO lines using an oscilloscope. SCK and MOSI look fine, but MISO is always high.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Does this problem have to do with delays? I haven't&amp;nbsp;used any&amp;nbsp;delay in&amp;nbsp;my code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'd appreciate if anyone could help me.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Below is attached&amp;nbsp;my latest code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Jaeyun&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;// Connections:&lt;BR /&gt;// MASTER&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; SLAVE&lt;BR /&gt;// --------------------------------------------------&lt;BR /&gt;// PS4 (MISO) &amp;nbsp;&amp;lt;------------&amp;nbsp;&amp;nbsp; PS4(MISO)&lt;BR /&gt;// PS5 (MOSI)&amp;nbsp; ------------&amp;gt;&amp;nbsp;&amp;nbsp; PS5(MOSI)&lt;BR /&gt;// PS6 (SCLK) ------------&amp;gt;&amp;nbsp;&amp;nbsp; PS6(SCLK)&lt;BR /&gt;//&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; PS7(SS) &amp;lt;-- GND&lt;BR /&gt;// GND&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; GND&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;// Master&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void main(void) {&lt;BR /&gt;&amp;nbsp; volatile byte data, status;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; PLL_init();&amp;nbsp; // set system clock frequency to 24 MHz&lt;/P&gt;&lt;P&gt;&amp;nbsp; // SPI communication initialization as a master&lt;BR /&gt;&amp;nbsp; SPI0BR&amp;nbsp; = 0x53; // Baud rate = 250kHz&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; SPI0CR2 = 0b00000000;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SPI0CR1 = 0b11010100; // Enable SPI ; Master mode ; CPHA = 1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; for( ; ; ){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send a byte to the slave&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPTEF_MASK)); //Wait until SPIDR becomes empty.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // while( SPI0SR_SPTEF == 0); // Wait until SPIDR becomes empty.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI0DR = 0x40;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // output a byte through SPI communication.&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPIF_MASK) ); //&amp;nbsp; Wait until the end of an SPI transfer.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //status = SPI0SR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to clear the flags&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = SPI0DR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read or write to clear SPI0SR_SPIF flag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive a byte from the slave&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPTEF_MASK)); //&amp;nbsp; Wait until SPIDR becomes empty.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI0DR = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Read SPI0DR to clear the SPI0SR_SPTEF flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPIF_MASK) ); //&amp;nbsp; Wait until the end of an SPI transfer.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //status = SPI0SR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to clear the flags&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = SPI0DR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Write the received data to 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;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;//SLAVE&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void main(void) {&lt;BR /&gt;&amp;nbsp; volatile byte data,status, dummy;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; PLL_init();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set system clock frequency to 24 MHz&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; // Initialization of SPI communication as a slave&amp;nbsp;&lt;BR /&gt;&amp;nbsp; SPI0BR =&amp;nbsp; 0x53; // baud rate =&amp;nbsp;250kHz&amp;nbsp;&lt;BR /&gt;&amp;nbsp; SPI0CR2 = 0b00000000;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SPI0CR1 = 0b11000100; // SPI enable ; slave mode ;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; for( ; ; ) {&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive a byte from the master&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPTEF_MASK)); //&amp;nbsp; Wait until SPIDR becomes empty.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //status = SPI0SR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to clear the flag SPI0SR_SPIF&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI0DR = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // write some dummy value to SPI0DR to clear the SPI0SR_SPTEF flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPIF_MASK) ); //&amp;nbsp; Wait until the end of an SPI transfer.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //status = SPI0SR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to clear the flag SPI0SR_SPIF&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = SPI0DR;&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; // Reads the byte and clears the flag SPI0SR_SPIF.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send a byte to the master&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( data == 0x40){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPTEF_MASK)); // Wait until SPIDR becomes empty.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = 0x04;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPTEF_MASK)); //&amp;nbsp; Wait until SPIDR becomes empty.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = 0x01;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI0DR = data;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPIF_MASK) ); // Wait until the end of an SPI transfer.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //status = SPI0SR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // to clear SPI0SR_SPIF flag&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dummy = SPI0DR;&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; // dummy reading to clear SPI0SR_SPIF flag.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 03 Mar 2011 03:19:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187447#M7106</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2011-03-03T03:19:14Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Master-Slave communication between two MC9S12DG256's</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187448#M7107</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I see that you have now corrected your wait loops so that they wait until each flag becomes set.&amp;nbsp; This would have been the cause of many of your previous problems.&amp;nbsp; However, the operation of your code should be much easier to understand if you were to create a general SPI transfer function, particularly for the master.&amp;nbsp; Maybe similar to&amp;nbsp;the following:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;#define SPI_send(x)  (void)SPI_trans(x)  // Ignore return
#define SPI_rcv()    SPI_trans(0)        // Send dummy byte


byte SPI_trans( byte val){   while(!(SPI0SR &amp;amp; SPI0SR_SPTEF_MASK)); // Wait until ready to send   SPI0DR = val;                         // Send SPI byte    while(!(SPI0SR &amp;amp; SPI0SR_SPIF_MASK) ); // Wait for transfer complete      return SPI0DR;                        // Also clears flag}  &lt;/PRE&gt;&lt;P&gt;&amp;nbsp;Your master code&amp;nbsp;might then have the following appearance:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;SPI_send( 0x40);
data = SPI_rcv();&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Yes, it is likely that you would need a small delay between these two statements, sufficient for the slave end to process the received byte and to write the required return value&amp;nbsp;to the SPI0DR register, all prior to the first clock edge generated by the master for the second byte transfer.&amp;nbsp; The delay must also take into account the possible occurrence of interrupts at the slave MCU.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Since the slave returns only a single byte at a time, it is unnecessary to test the SPTEF flag - this would be required only&amp;nbsp;if you were queuing two return&amp;nbsp;bytes, making use of the double buffer capability.&amp;nbsp; The basic slave&amp;nbsp;procedure would be:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;Wait until SPIF flag is set.&lt;/LI&gt;&lt;LI&gt;Read SPI0DR&lt;/LI&gt;&lt;LI&gt;Write return byte to SPI0DR&lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Usually the SPI interrupt would be used for the slave, to allow other tasks to execute while waiting for SPIF flag.&amp;nbsp; Should you need to return a data sequence, the use of double buffering would ease the master delay requirement after the return of the first byte.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 09:38:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187448#M7107</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2020-10-29T09:38:45Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Master-Slave communication between two MC9S12DG256's</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187449#M7108</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks bigmac for your reply.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried&amp;nbsp;bigmac's suggestion. Again, the&amp;nbsp;communcation from&amp;nbsp;Master to Slave is fine, but I am having issues in the opposite direction.&amp;nbsp;I am getting 0xff as of the received data by the master, whereas the data that the slave supposedly&amp;nbsp;sends is 0x04. Again, the MISO line is always high. It seems like it doesn't matter what data&amp;nbsp;the slave sends to the master. The master&amp;nbsp;always receives 0xff.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;From other posting threads I found&amp;nbsp;that the slave should have assigned a data to SPI0DR before&amp;nbsp;the master starts the communication. I think I am missing this part in my code. I'd appreciate if anyone could help me out with the part of slave sending data to the master.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Below is my latest code (after following bigmac's suggestion)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance,&lt;/P&gt;&lt;P&gt;Jaeyun&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;---------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;// Connections:&lt;BR /&gt;// MASTER&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; SLAVE&lt;BR /&gt;// -------------------------------------&lt;BR /&gt;// PS4 (MISO) &amp;lt;------------&amp;nbsp;&amp;nbsp; PS4(MISO)&lt;BR /&gt;// PS5 (MOSI) ------------&amp;gt;&amp;nbsp;&amp;nbsp; PS5(MOSI)&lt;BR /&gt;// PS6 (SCLK) ------------&amp;gt;&amp;nbsp;&amp;nbsp; PS6(SCLK)&lt;BR /&gt;//&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; PS7(SS) &amp;lt;-- GND&lt;BR /&gt;// GND&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -------------&amp;nbsp;&amp;nbsp; GND&lt;/P&gt;&lt;P&gt;---------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Code for Master:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;---------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;#define SPI_send(x) (void)SPI_trans(x) // Ignore return&lt;BR /&gt;#define SPI_rcv()&amp;nbsp;&amp;nbsp; SPI_trans(0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send dummy byte&lt;/P&gt;&lt;P&gt;byte SPI_trans( byte val){&lt;BR /&gt;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPTEF_MASK)); // Wait until ready to send&lt;BR /&gt;&amp;nbsp; SPI0DR = val;&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; // Send SPI byte&lt;BR /&gt;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPIF_MASK));&amp;nbsp; // Wait for transfer complete&lt;BR /&gt;&amp;nbsp; return SPI0DR;&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; // Also clears flag&lt;BR /&gt;}&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;void main(void) {&lt;BR /&gt;&amp;nbsp; volatile byte data;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; PLL_init();&amp;nbsp; // set system clock frequency to 24 MHz&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; // SPI communication initialization as a master&lt;BR /&gt;&amp;nbsp; SPI0BR&amp;nbsp; = 0x53;&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; // Baud rate = 250kHz&amp;nbsp;&lt;BR /&gt;&amp;nbsp; SPI0CR2 = 0b00000000;&lt;BR /&gt;&amp;nbsp; SPI0CR1 = 0b01010100; // Enable SPI ; Master mode ; CPHA = 1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; for( ; ; ){&amp;nbsp;&lt;BR /&gt;&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send a byte to the slave&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_send(0x40);&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ms_delay(100);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; // receive a byte from the slave&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = SPI_rcv();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ms_delay(100);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;---------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Code for slave:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;---------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;#define SPI_send(x) (void)SPI_trans(x)&amp;nbsp;&amp;nbsp; // Ignore return&lt;BR /&gt;#define SPI_rcv()&amp;nbsp;&amp;nbsp; SPI_trans(0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send dummy byte&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;byte SPI_trans( byte val){&lt;BR /&gt;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPTEF_MASK)); // Wait until ready to send&lt;BR /&gt;&amp;nbsp;&amp;nbsp; SPI0DR = val;&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; // Send SPI byte&lt;BR /&gt;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPIF_MASK));&amp;nbsp; // Wait for transfer complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp; return SPI0DR;&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; // Also clears flag&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void main(void) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; volatile byte data;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; PLL_init();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // set system clock frequency to 24 MHz&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; // Initialization of SPI communication as a slave&lt;BR /&gt;&amp;nbsp;&amp;nbsp; SPI0BR =&amp;nbsp; 0x53;&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; // baud rate = 250kHz&lt;BR /&gt;&amp;nbsp;&amp;nbsp; SPI0CR2 = 0b00000000;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; SPI0CR1 = 0b01000100; // SPI enable ; slave mode ; CPHA = 1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; for( ; ; ) {&lt;BR /&gt;&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive a byte from the master&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI0SR &amp;amp; SPI0SR_SPIF_MASK));&amp;nbsp; // Wait for transfer complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = SPI0DR;&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; // Also clears flag&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ms_delay(100);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send a byte to the master&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( data == 0x40 ){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = 0x04;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }else{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = 0x01;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_send(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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ms_delay(100);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 04 Mar 2011 03:43:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187449#M7108</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2011-03-04T03:43:40Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Master-Slave communication between two MC9S12DG256's</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187450#M7109</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Now I have the problem fixed.&lt;/P&gt;&lt;P&gt;I should have mentioned this from the beginning, but the two MC9S12DG256's are mounted on some commercial boards named Dragon Board 12 Plus. This board has PCB traces that connect&amp;nbsp; pins of&amp;nbsp;a DAC chip&amp;nbsp;to the pins of SPI0 module of the microcontroller, and it seems like&amp;nbsp;the MISO line&amp;nbsp;is always pulled up.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Therefore,&amp;nbsp;the&amp;nbsp;last code that I posted&amp;nbsp;but using&amp;nbsp;this time&amp;nbsp;registers&amp;nbsp;of SPI1 (instead of&amp;nbsp;those that correspond to SPI0) worked fine.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Before I leave, I'd like to give thanks to Ludin, BigMac and Oscar.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Jaeyun&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 04 Mar 2011 06:30:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187450#M7109</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2011-03-04T06:30:47Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Master-Slave communication between two MC9S12DG256's</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187451#M7110</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Jaeyun,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm glad that you solved your hardware problem.&amp;nbsp; However, I think I should briefly mention that the function and macros that I previously posted were never intended for slave usage, only for the master.&amp;nbsp; Further, the added delay would be required only for the master.&amp;nbsp; Placing additional delay within the slave code would be counter-productive - the fastest data turn-around is required.&amp;nbsp; The following code might have been expected for the slave.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;// Receive a byte from the masterwhile (!(SPI0SR &amp;amp; SPI0SR_SPIF_MASK));  // Wait for incoming datadata = SPI0DR;                         // Also clears flag// Send return byte to the masterif( data == 0x40)  SPI0DR = 0x04;else               SPI0DR = 0x01;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This code assumes that the COP timer is inoperative, othwise the timer will require to be cleared within the wait loop, to prevent COP timeout.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 09:38:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187451#M7110</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2020-10-29T09:38:47Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Master-Slave communication between two MC9S12DG256's</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187452#M7111</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Mac,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your comments (otherwise I wouldn't have understood correctly&amp;nbsp;how SPI works).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I just implemented&amp;nbsp;what you said in your&amp;nbsp;previous&amp;nbsp;posting, but now I&amp;nbsp;see someting that&amp;nbsp;I did not observe when I used the code that I posted lastly. The boards (Dragon-12 Plus) that I am using have LCD displays. The master's LCD displays both transmitted and&amp;nbsp;received data. The slave's LCD does the same thing (it shows the received and trasmitted data). Now, the displayed transmitted data from the master is always the same (0x40) while the displayed receiced data by the slave, the transmitted by the slave and received by the master have two different values: whatever the expected value is (0x40 or 0x04) and 0x00. 0x00 is something not intended. I could place an if statement to ignore the 0x00 value and consider only any nonzero value, but I hesitate to do so because&amp;nbsp;I could&amp;nbsp;also be interested in considering the zero value.&lt;/P&gt;&lt;P&gt;What could I do?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Code are followed:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Master:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;for( ; ; ){&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data = 0x40;&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI_send(data);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_lcd_addr(0x00);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; type_lcd("Tx: ");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_lcd_addr(0x04);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; write_int_lcd((int)data);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ms_delay(DELAY);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // receive a byte from the slave&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = SPI_rcv();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_lcd_addr(0x40);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; type_lcd("Rx: ");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_lcd_addr(0x44);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; write_int_lcd((int)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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ms_delay(DELAY);&lt;BR /&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Slave&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;for( ; ; ) {&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive a byte from the master&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(!(SPI1SR &amp;amp; SPI1SR_SPIF_MASK));&amp;nbsp; // Wait for transfer complete&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data = SPI1DR;&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; // Also clears flag&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_lcd_addr(0x00);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type_lcd("Rx: ");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_lcd_addr(0x04);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write_int_lcd((int)data);&lt;BR /&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;if (data == 0x40)&amp;nbsp;&amp;nbsp;&amp;nbsp; data = 0x04;&lt;/P&gt;&lt;P&gt;&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;&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; data = 0x01;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPI1DR = data;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_lcd_addr(0x40);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type_lcd("Tx: ");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set_lcd_addr(0x44);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; write_int_lcd((int)data);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance,&lt;/P&gt;&lt;P&gt;Jaeyun&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 11 Mar 2011 04:30:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187452#M7111</guid>
      <dc:creator>admin</dc:creator>
      <dc:date>2011-03-11T04:30:47Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Master-Slave communication between two MC9S12DG256's</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187453#M7112</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Jaeyun,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Does this code snippet do what you require?&amp;nbsp; The following code -&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;if (data == 0x40)    data = 0x04;else                 data = 0x01;SPI1DR = data;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;to be replaced with -&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;switch (data) {case 0x40:   SPI0DR = 0x04;   break;case 0x00:   break;       // Do nothing at present timedefault:   SPI0DR = 0x01;}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;A further comment - since&amp;nbsp;writing to a LCD device&amp;nbsp;is usually a very slow process,&amp;nbsp;the above code should be executed prior to commencing any display write, so that&amp;nbsp;return data is more immediately available for interrogation by the master(and lessening the delay requirement within the master).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 09:38:48 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187453#M7112</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2020-10-29T09:38:48Z</dc:date>
    </item>
    <item>
      <title>Re: SPI Master-Slave communication between two MC9S12DG256's</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187454#M7113</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I'm using a MCF51JM, 12Mhz bus, 6Mhz SPI.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For high speed writting you need to check only for TEF cause RF takes too long. But then, you need to clean up dirty bytes...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;void SPI_WriteHS(void* ptr, Word bytes){  Byte* p = (Byte*) ptr;      while(bytes--)   {        while(!SPI1S_SPTEF);    SPI1DL = *p++;          }        while(!SPI1S_SPTEF);   //clean up  while(!SPI1S_SPRF);  SPI_Temp = SPI1DL;}&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;NOTE: Clean up can miss the last byte depending on bus/spi clock&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I think this is a workaround, cause RF should be activated after TEF, but it wastes 50% of the time!!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Why RF flag takes so long to be activated?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Best regards,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Jose Ribeiro&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 29 Oct 2020 09:38:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPI-Master-Slave-communication-between-two-MC9S12DG256-s/m-p/187454#M7113</guid>
      <dc:creator>JCRib</dc:creator>
      <dc:date>2020-10-29T09:38:50Z</dc:date>
    </item>
  </channel>
</rss>

