<?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: SPIDR unwriteable</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128891#M1007</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; Here is how my code has evolved:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;void SPI_init(void)&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; // 1.25 MHz&amp;nbsp;&amp;nbsp; / 896&lt;BR /&gt;&amp;nbsp;&amp;nbsp; // SPIBR: ??=0,SPPR2=1,SPPR1=1,SPPR0=0,??=0,SPR2=1,SPR1=1,SPR0=0&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; SPIBR = 0x66;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the baud rate register&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; // SPICR2: ??=0,??=0,??=0,MODFEN=1,BIDIROE=0,??=0,SPISWAI=0,SPC0=0&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; SPICR2 = 0x10;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set control register 2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; // SPICR1: SPIE=1,SPE=1,SPTIE=0,MSTR=1,CPOL=0,CPHA=1,SSOE=1,LSBFE=1&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; SPICR1 = 0xD7;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set control register 1&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; }&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;void SPI_func(void)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; int i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; PTG_PTG2 = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Drive SS* low&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; //EnterCritical();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Save the PS register&lt;BR /&gt;&amp;nbsp;&amp;nbsp; for (i=0; i&amp;lt;10; i++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDR = in_buf[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send 0xA4&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((SPISR &amp;amp; 0x80) == 0) ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out_buf[i] = SPIDR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive 0xA4&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; //ExitCritical();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Restore the PS register&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;As you can see I am no longer using an interrupt driven SPI system.&amp;nbsp; I do get a little data from the compass but only one byte.&amp;nbsp; That one byte fills the return buffer over and over again.&amp;nbsp; If I reset the NE64 the number which fills the return buffer changes.&amp;nbsp; But, I still only get one byte.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;What should be appearing in the return buffer is:&lt;BR /&gt;0xA4&lt;BR /&gt;0x02&lt;BR /&gt;two bytes of data&lt;BR /&gt;0xA0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;What is sent to the compass as a command string is:&lt;BR /&gt;0xA4&lt;BR /&gt;0x02&lt;BR /&gt;0xA0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Errors are written as:&lt;BR /&gt;0xAE&lt;BR /&gt;8 bit error code (0xFF, 0xFE, or 0xFD)&lt;BR /&gt;0xA0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am using an external pin PinG2 to drive the SS*.&amp;nbsp; This is what allowed me to gain even one byte back from the compass.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;My debugger shows the input buffer contains the correct string.&amp;nbsp; My oscilloscope only shows a flicker and then SS* goes back to where it was, and the SCK only shows one pulse and then it returns to baseline.&amp;nbsp; I am beginning to think the SPI port of the compass is dead.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Any more thoughts?&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Kevin.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 07 Sep 2006 05:37:26 GMT</pubDate>
    <dc:creator>kevinrock</dc:creator>
    <dc:date>2006-09-07T05:37:26Z</dc:date>
    <item>
      <title>SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128885#M1001</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I have somehow managed to make a register unwriteable.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The following code snippet initializes the SPI portion of an NE64 FreeScale chip. I am grabbing UDP packets in another section of the code and then sending them via SPI to a digital compass. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The data is coming through fine. However when I try writing it to SPIDR it simply will not change the register. I've tried hardwiring a number to SPIDR with no results. The information gets to the B register but STAB 0xDD does not write the B information to SPIDR located at 0xDD. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Can anyone give me a hint as to where I am going astray?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; Kevin.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;PS. I replaced the microcontroller with an exact duplicate with the same results.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; KJR&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void SPI_init(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; { // 1.25 MHz &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; // SPIBR: ??=0,SPPR2=1,SPPR1=1,SPPR0=0,??=0,SPR2=1,SPR1=1,SPR0=0 &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; SPIBR = 0x66; // Set the baud rate register &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; // SPICR2: ??=0,??=0,??=0,MODFEN=1,BIDIROE=0,??=0,SPISWAI=0,SPC0=0 &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; SPICR2 = 0x10; // Set control register 2 &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; // SPICR1: SPIE=1,SPE=1,SPTIE=0,MSTR=1,CPOL=0,CPHA=1,SSOE=1,LSBFE=1 &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; SPICR1 = 0xD7; // Set control register 1 &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; } &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;interrupt void SPI(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; int i=0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; int j=0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; // Send Command String to Compass&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; SPIDR = (UINT8) in_buf[i++]; // Send 0xA4&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; while ((SPISR &amp;amp; 0x20) == 0) ; // Wait for transmit buffer empty&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; SPIDR = (UINT8) in_buf[i++]; // Send command byte&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; while ((SPISR &amp;amp; 0x20) == 0) ; // Wait for transmit buffer empty&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; SPIDR = (UINT8) in_buf[i++]; // Send 0xA0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; while ((SPISR &amp;amp; 0x20) == 0) ; // Wait for transmit buffer empty&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; // Receive Data String from Compass &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; out_buf[j++] = (UINT8) SPIDR; // Receive 0xA4&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; //while ((SPISR &amp;amp; 0x80) == 0) ; // Wait for receiver full &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; out_buf[j++] = (UINT8) SPIDR; // Receive 0x02&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; //while ((SPISR &amp;amp; 0x80) == 0) ; // Wait for receiver full &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; out_buf[j++] = (UINT8) SPIDR; // Receive first data byte&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; //while ((SPISR &amp;amp; 0x80) == 0) ; // Wait for receiver full &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; out_buf[j++] = (UINT8) SPIDR; // Receive second data byte&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; //while ((SPISR &amp;amp; 0x80) == 0) ; // Wait for receiver full &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; out_buf[j++] = (UINT8) SPIDR; // Receive 0xA0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; // loop until SPIDR == 0xA0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; // since this char ends all data and error strings&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; // byte out_buf[]; output to UDP packet &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; // byte in_buf[]; input from UDP packet &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; }&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 Aug 2006 06:08:15 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128885#M1001</guid>
      <dc:creator>kevinrock</dc:creator>
      <dc:date>2006-08-31T06:08:15Z</dc:date>
    </item>
    <item>
      <title>Re: SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128886#M1002</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello kevinrock,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Is data actually being sent to the compass via MOSI line?&amp;nbsp; When you say "the register does not change", are you trying to read the register?&amp;nbsp; If so, that is the expected result.&amp;nbsp;&amp;nbsp;When reading SPIDR you are actually reading the&amp;nbsp;last &lt;U&gt;received&lt;/U&gt; byte value, not the byte value just sent.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;BR /&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 Aug 2006 09:25:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128886#M1002</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2006-08-31T09:25:14Z</dc:date>
    </item>
    <item>
      <title>Re: SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128887#M1003</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Yes, it is being sent over MOSI. I am tracking the reads and writes with the debugger and see no change in 0xDD which is the address of SPIDR. Nothing changes in that memory location even though STAB 0xDD has the correct data in register B. If I was receiving data I would expect some change in 0xDD. Zilch, nada, nothing, bupkis. As I mentioned: I tried hardwiring a write. SPIDR = 0xFF. There was absolutely no change when I ran this line of code through the debugger. Nothing I do changes 0xDD. Any idea how I can prevent a R/W register from being written?&lt;BR /&gt; Kevin.&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 Aug 2006 10:26:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128887#M1003</guid>
      <dc:creator>kevinrock</dc:creator>
      <dc:date>2006-08-31T10:26:01Z</dc:date>
    </item>
    <item>
      <title>Re: SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128888#M1004</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi, Kevin:&lt;BLOCKQUOTE&gt;&lt;HR /&gt;Any idea how I can prevent a R/W register from being written?&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;Keep in mind that SPIDR is not a read/write register. It a one write-only register (the transmitter) sharing the address with one read-only register (the receiver). In effect, you are not seeing the data that the SPI should be receiving, or you are but it never changes.&lt;BR /&gt;&lt;BR /&gt;So the question becomes: Is the SPI actually transmitting and receiving? Is it programmed as the master? Do you see any SCLKS?&lt;BR /&gt;&lt;BR /&gt;(Sorry, that was three questions.)&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 31 Aug 2006 12:20:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128888#M1004</guid>
      <dc:creator>rocco</dc:creator>
      <dc:date>2006-08-31T12:20:53Z</dc:date>
    </item>
    <item>
      <title>Re: SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128889#M1005</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Three questions; two answers, one waffle&amp;nbsp;&lt;IMG alt=":smileyhappy:" class="emoticon emoticon-smileyhappy" id="smileyhappy" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-happy.gif" title="Smiley Happy" /&gt;&amp;nbsp;&amp;nbsp; Yes, the SPI is configured as Master.&amp;nbsp; Yes, I am receiving clocks.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I do believe the SPI port is transmitting.&amp;nbsp; I do not have a digital scope but rather a Tek 2335.&amp;nbsp; It is sufficient to find clocks and logic levels but not store any imagery.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;As I single step through my TX/RX routine the status register changes as it should.&amp;nbsp; However, the data register does not ever show a change.&amp;nbsp; The data never once changes color to signify the register data has been written.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I just switched my oscilloscope probe to MOSI.&amp;nbsp; It fires each time assignment to SPIDR occurs.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;MISO fires (goes low) after the entire command string is sent to the compass as per the documentation included with it.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The only thing I am not getting is SPIDR to be written in either direction.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;What else should&lt;EM&gt;&amp;nbsp;&lt;/EM&gt;I check?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Kevin.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 01 Sep 2006 00:28:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128889#M1005</guid>
      <dc:creator>kevinrock</dc:creator>
      <dc:date>2006-09-01T00:28:35Z</dc:date>
    </item>
    <item>
      <title>Re: SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128890#M1006</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Kevin,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;In order to receive&amp;nbsp;each data byte from the compass on the MISO line, you need the master to send a (dummy) byte.&amp;nbsp; This is so the clock pulses will be generated by the master.&amp;nbsp; Your code does not appear to do this.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;It is also not clear how you are controlling the SS (slave select) line to the slave device.&amp;nbsp; If this is not correct, you would not get any data returned.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Finally, I have a problem with multiple SPI transactions occurring sequentially within the ISR - with this arrangement there is no point in using interrupts since you would not exit the ISR until all&amp;nbsp;the byte transactions were complete - and this may disrupt other more critical interrupts.&amp;nbsp; ISRs should always be as short as possible.&amp;nbsp; For an SPI master, there is usually no advantage to use interrupts, unless the SPI clock is very slow.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;BR /&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 02 Sep 2006 00:50:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128890#M1006</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2006-09-02T00:50:30Z</dc:date>
    </item>
    <item>
      <title>Re: SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128891#M1007</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp; Here is how my code has evolved:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;void SPI_init(void)&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; // 1.25 MHz&amp;nbsp;&amp;nbsp; / 896&lt;BR /&gt;&amp;nbsp;&amp;nbsp; // SPIBR: ??=0,SPPR2=1,SPPR1=1,SPPR0=0,??=0,SPR2=1,SPR1=1,SPR0=0&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; SPIBR = 0x66;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the baud rate register&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; // SPICR2: ??=0,??=0,??=0,MODFEN=1,BIDIROE=0,??=0,SPISWAI=0,SPC0=0&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; SPICR2 = 0x10;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set control register 2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; // SPICR1: SPIE=1,SPE=1,SPTIE=0,MSTR=1,CPOL=0,CPHA=1,SSOE=1,LSBFE=1&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; SPICR1 = 0xD7;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set control register 1&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; }&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;void SPI_func(void)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; int i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; PTG_PTG2 = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Drive SS* low&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; //EnterCritical();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Save the PS register&lt;BR /&gt;&amp;nbsp;&amp;nbsp; for (i=0; i&amp;lt;10; i++)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDR = in_buf[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send 0xA4&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((SPISR &amp;amp; 0x80) == 0) ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out_buf[i] = SPIDR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive 0xA4&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; //ExitCritical();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Restore the PS register&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;As you can see I am no longer using an interrupt driven SPI system.&amp;nbsp; I do get a little data from the compass but only one byte.&amp;nbsp; That one byte fills the return buffer over and over again.&amp;nbsp; If I reset the NE64 the number which fills the return buffer changes.&amp;nbsp; But, I still only get one byte.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;What should be appearing in the return buffer is:&lt;BR /&gt;0xA4&lt;BR /&gt;0x02&lt;BR /&gt;two bytes of data&lt;BR /&gt;0xA0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;What is sent to the compass as a command string is:&lt;BR /&gt;0xA4&lt;BR /&gt;0x02&lt;BR /&gt;0xA0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Errors are written as:&lt;BR /&gt;0xAE&lt;BR /&gt;8 bit error code (0xFF, 0xFE, or 0xFD)&lt;BR /&gt;0xA0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am using an external pin PinG2 to drive the SS*.&amp;nbsp; This is what allowed me to gain even one byte back from the compass.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;My debugger shows the input buffer contains the correct string.&amp;nbsp; My oscilloscope only shows a flicker and then SS* goes back to where it was, and the SCK only shows one pulse and then it returns to baseline.&amp;nbsp; I am beginning to think the SPI port of the compass is dead.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Any more thoughts?&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Kevin.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 Sep 2006 05:37:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128891#M1007</guid>
      <dc:creator>kevinrock</dc:creator>
      <dc:date>2006-09-07T05:37:26Z</dc:date>
    </item>
    <item>
      <title>Re: SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128892#M1008</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Kevin,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;I notice that you set SS low, but do not&amp;nbsp;raise the line at any point.&amp;nbsp; What are the requirements of the compass in this respect?&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;You define only three bytes in the command sent to the compass, but expect a response of five bytes.&amp;nbsp; Therefore the your send buffer must contain at least &lt;U&gt;three&lt;/U&gt; dummy bytes, appropriately positioned.&amp;nbsp; This is not clear from your code.&amp;nbsp; Note that the first byte returned&amp;nbsp;as the first command byte is sent will be garbage.&amp;nbsp; Any response to the first command byte will occur as the second command byte is sent.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;The master generates the SCK pulses - I presume that the compass definitely operates as a SPI slave device.&amp;nbsp; Try disconnecting the compass and see if you can observe any SCK pulses.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 Sep 2006 09:31:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128892#M1008</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2006-09-07T09:31:56Z</dc:date>
    </item>
    <item>
      <title>Re: SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128893#M1009</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;The init and call functions now read:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;void SPI_init(void)&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; // 1.25 MHz&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;// SPIBR: ??=0,SPPR2=1,SPPR1=1,SPPR0=0,??=0,SPR2=1,SPR1=1,SPR0=0&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;SPIBR = 0x66;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the baud rate register&lt;BR /&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// SPICR2: ??=0,??=0,??=0,MODFEN=0,BIDIROE=0,??=0,SPISWAI=0,SPC0=0&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;SPICR2 = 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; // Set control register 2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;// SPICR1: SPIE=1,SPE=1,SPTIE=0,MSTR=1,CPOL=0,CPHA=1,SSOE=0,LSBFE=1&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;SPICR1 = 0xD5;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set control register 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;void SPI_func(void)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;int i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;for (i=0; i&amp;lt;3; i++)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 command string&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PTG_PTG2 = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Drive SS* low&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPIDR = in_buf[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 0xA4&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while ((SPISR &amp;amp; 0x20) == 0) ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Transmit buffer empty&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PTG_PTG2 = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Drive SS* high&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;for (i=0; i&amp;lt;6; i++)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // receive response&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PTG_PTG2 = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Drive SS* low&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SPIDR = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // start transfer&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while ((SPISR &amp;amp; 0x20) == 0) ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Transmit buffer empty&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;out_buf[i] = SPIDR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PTG_PTG2 = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Drive SS* high&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Yes, the compass can act as a SPI slave device.&amp;nbsp; It is the missing clock pulses which are the mystery.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The input buffer has the command string as before.&amp;nbsp; I have tested this new routine both attached and unattached to the compass.&amp;nbsp; In neither case am I seeing a clock pulse string.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am about to give up on SPI and try another interface.&amp;nbsp; This simply does not work with the FreeScale processor.&amp;nbsp; It seems to be broken on all three of the NE64&amp;nbsp;demo boards&amp;nbsp;I have tried.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Kevin.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Sep 2006 01:05:12 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128893#M1009</guid>
      <dc:creator>kevinrock</dc:creator>
      <dc:date>2006-09-08T01:05:12Z</dc:date>
    </item>
    <item>
      <title>Re: SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128894#M1010</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi, Kevin:&lt;BR /&gt;&lt;BR /&gt;I have not looked closely at your init code yet (as that would require that I pull the manual &lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" id="smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt; ), but I see a potential problem with your subroutine.&lt;BR /&gt;&lt;BR /&gt;When you load the data into the transmitter's data register, you wait for the register to go empty, and then remove Slave-Select. But if the transmitter is operating double-buffered (which I need to pull the manual to verify), then that register will go empty at the START of the transmission, not when the transmission is complete, truncating the operation.&lt;BR /&gt;&lt;BR /&gt;Maybe you need something like this?&lt;PRE&gt;void SPI_func(void)
{
   int i;

   PTG_PTG2 = 0;                     // Drive SS* low

   for (i=0; i3; i++)                   // send command string
   {
      SPIDR = in_buf[i];                // Send 0xA4
      while ((SPISR &amp;amp; 0x20) == 0) ;     // Transmit buffer empty
   }
   for (i=0; i6; i++)                   // receive response
   {
      SPIDR = 0;                        // start transfer
      while ((SPISR &amp;amp; 0x20) == 0) ;     // Transmit buffer empty  
      out_buf[i] = SPIDR;               // Receive
   }

   SPIDR = 0;                        // one last transfer to wait for the buffering
   while ((SPISR &amp;amp; 0x20) == 0) ;     // Transmit buffer empty for the last time
   PTG_PTG2 = 1;                     // Drive SS* high
}&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Sep 2006 05:57:52 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128894#M1010</guid>
      <dc:creator>rocco</dc:creator>
      <dc:date>2006-09-08T05:57:52Z</dc:date>
    </item>
    <item>
      <title>Re: SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128895#M1011</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Kevin,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;What you now seem to be attempting to do is -&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;1.&amp;nbsp; Send three command&amp;nbsp; bytes to the compass, and ignore the return data, and then&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;2. Send six dummy bytes to the compass, and expect to receive six data bytes from the compass.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;3. The SS signal frames each individual byte sent to the compass.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;I this the way the compass is supposed to operate?&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;A problem - you are raising SS prematurely, before each byte is sent (and exacerbated by the double buffering within the SPI send buffer).&amp;nbsp; Additionally you are now attempting to read the return data prior to its arrival in the receive buffer.&amp;nbsp; These problems can be avoided by waiting until the receive buffer full flag is set, before reading the current byte, or sending the next byte, and ultimately raising SS.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;The following code demonstrates this.&amp;nbsp; I have created a new general function &lt;FONT face="Courier New"&gt;SPI_trans()&lt;/FONT&gt; to handle a single SPI byte transaction.&amp;nbsp; Also, I presume that &lt;FONT face="Courier New"&gt;in_buf[]&lt;/FONT&gt; and &lt;FONT face="Courier New"&gt;out_buf[]&lt;/FONT&gt; global arrays are declared as &lt;FONT face="Courier New"&gt;byte&lt;/FONT&gt; or &lt;FONT face="Courier New"&gt;unsigned char&lt;/FONT&gt;.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;byte SPI_trans (byte sendchr)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;{&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while ((SPISR &amp;amp; 0x20) == 0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait for transmit buffer empty&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp; SPIDR = sendchr;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 byte value&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp; while ((SPISR &amp;amp; 0x80) == 0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait for receive buffer full&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp; return (SPIDR);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Received byte value&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void SPI_func(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; int i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; for (i=0; i&amp;lt;3; i++)&amp;nbsp;&amp;nbsp;&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 command string&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;PTG_PTG2 = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Drive SS* low&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;SPI_trans (in_buf[i]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Ignore return byte&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;PTG_PTG2 = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Drive SS* high&lt;BR /&gt;&amp;nbsp; &amp;nbsp;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp; &amp;nbsp;for (i=0; i&amp;lt;6; i++)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// receive response&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;PTG_PTG2 = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Drive SS* low&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; out_buf[i] = SPI_trans(0)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Send dummy byte&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;PTG_PTG2 = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Drive SS* high&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT size="2"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Another thing you might need to check - after raising SS, how long does the compass require this to remain high before being again lowered?&amp;nbsp; If the requirement is more than a few bus cycles, you may need to add short delays to the above code.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;P&gt;Message Edited by bigmac on &lt;SPAN class="date_text"&gt;2006-09-08&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;03:37 PM&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Sep 2006 12:24:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128895#M1011</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2006-09-08T12:24:28Z</dc:date>
    </item>
    <item>
      <title>Re: SPIDR unwriteable</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128896#M1012</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I finally got my compass and my NE64 talking with one another!!!!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;This code works:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void SPI_init(void)&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; // 1.25 MHz&amp;nbsp;&amp;nbsp; / 896&lt;BR /&gt;&amp;nbsp;&amp;nbsp; // SPIBR: ??=0,SPPR2=1,SPPR1=1,SPPR0=0,??=0,SPR2=1,SPR1=1,SPR0=0&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; SPIBR = 0x66;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set the baud rate register&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; // SPICR2: ??=0,??=0,??=0,MODFEN=1,BIDIROE=0,??=0,SPISWAI=0,SPC0=0&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; SPICR2 = 0x10;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set control register 2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; // SPICR1: SPIE=0,SPE=1,SPTIE=0,MSTR=1,CPOL=1,CPHA=0,SSOE=0,LSBFE=0&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; SPICR1 = 0x58;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set control register 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void SPI_func(void)&lt;BR /&gt;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; int i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp; PTG_PTG2 = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Drive SS* low&lt;BR /&gt;&amp;nbsp;&amp;nbsp; for (i=0; i&amp;lt;3; i++)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 command string&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((SPISR &amp;amp; 0x20) == 0) ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Transmit buffer empty&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDR = in_buf[i];&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 0xA4&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp; for (i=0; i&amp;lt;7; i++)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // receive response&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while ((SPISR &amp;amp; 0x20) == 0) ;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Transmit buffer empty&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SPIDR = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // start transfer&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; while ((SPISR &amp;amp; 0x80) == 0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Wait for receive buffer full&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out_buf[i] = SPIDR;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Receive&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; PTG_PTG2 = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Drive SS* high&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;I may want to clean a few things up now that I have the SCK working.&amp;nbsp; Part of what led me to success was changing the polarity of the clock.&amp;nbsp; That may or may not have been the problem but help from you all was what really got me over the hump.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;A hearty thank you is well deserved!&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Kevin.&lt;/FONT&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 09 Sep 2006 03:05:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/SPIDR-unwriteable/m-p/128896#M1012</guid>
      <dc:creator>kevinrock</dc:creator>
      <dc:date>2006-09-09T03:05:44Z</dc:date>
    </item>
  </channel>
</rss>

