<?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: Variable PORTAB read/store execution time in NE64?</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140495#M3115</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;Given that it's just a bunch of LDD and STD instructions, I'd expect each of these instruction pairs to take a &lt;B&gt;FIXED&lt;/B&gt; number of clock cycles.&amp;nbsp; But this doesn't seem to be the case.&amp;nbsp; If for example the FPGA sends (0, 1, 2, 3, 4, 5, 6, 7, etc.) leaving each unchanged for three clock cycles, the NE64 "stores" this as (0, 1, 2, 3, 4, 5, 7, etc.), with 6 missing.&amp;nbsp; &lt;IMG alt=":smileysad:" class="emoticon emoticon-smileysad" id="smileysad" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-sad.gif" title="Smiley Sad" /&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV&gt;Do you expect each LDD-STD pair taking fixed number of cycles, or each LDD and each STD taking the same fixed number of cycles? In your code LDD&amp;nbsp;ext takes 3 cycles, STD idx 2 cycles. So each LDD-STD pair - 5 cycles. I don't understand how, leaving the FPGA output unchanged for just 3 cycles, you are receiving 6 good numbers from FPGA?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;BTW, in your code, SEI instruction is way to late to have reliable protocol. It should be moved somewhere into the middle of handshaking procedure.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I see variable number of cycles only here:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; PointerTo16bitWideBuffer&amp;nbsp; // Load buffer address&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;LDX of misalignedd pointer variable in&amp;nbsp;FLASH will take 1 cycle more than LDX of pointer variable in internal RAM or word aligned var in&amp;nbsp;FLASH. But that's just one cycle.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 19 Jul 2007 01:11:24 GMT</pubDate>
    <dc:creator>kef</dc:creator>
    <dc:date>2007-07-19T01:11:24Z</dc:date>
    <item>
      <title>Variable PORTAB read/store execution time in NE64?</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140494#M3114</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;We have an NE64 connected to an FPGA for data transfer.&amp;nbsp; We transfer 16-bit words from the FPGA to the NE64 via PORTAB, using our own handshaking scheme implemented in software on PORTE.&amp;nbsp; When the handshaking completes, the FPGA just sends 16-bit word after word, every X clock cycles.&amp;nbsp; The FPGA uses the ECLK from the NE64 for the transfer.&amp;nbsp; The NE64 is in Normal Single Chip mode with NECLK = 0.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The code on the NE64 is the following (minus the handshaking):&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SEI&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Disable interrupts&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; PointerTo16bitWideBuffer&amp;nbsp; // Load buffer address&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; _PORTAB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Load 16-bit word to register&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; 0,X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Copy register to buffer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; _PORTAB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp; etc...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; 2,X&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; _PORTAB&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; 4,X&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Given that it's just a bunch of LDD and STD instructions, I'd expect each of these instruction pairs to take a &lt;/SPAN&gt;&lt;STRONG&gt;FIXED&lt;/STRONG&gt;&lt;SPAN&gt; number of clock cycles.&amp;nbsp; But this doesn't seem to be the case.&amp;nbsp; If for example the FPGA sends (0, 1, 2, 3, 4, 5, 6, 7, etc.) leaving each unchanged for three clock cycles, the NE64 "stores" this as (0, 1, 2, 3, 4, 5, 7, etc.), with 6 missing.&amp;nbsp; &lt;/SPAN&gt;&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-sad.gif"&gt;&lt;IMG alt=":smileysad:" class="emoticon emoticon-smileysad" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-sad.gif" title="Smiley Sad" /&gt;&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;If I repeat the same procedure with the FPGA leaving the data unchanged for 1, 2, 3, 4, 5, 6, 7 clock cycles, I always run into missing or duplicated codes.&amp;nbsp; No constant number of cycle transfer system works!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;A hack that I made which works keeps each code active for the following number of clock cycles:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3, 6, 2, 6, 6, 6, 6&amp;nbsp;&amp;nbsp;&amp;nbsp; Aaaaah!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So my question is: &lt;/SPAN&gt;&lt;STRONG&gt;what is going on?&amp;nbsp; Is the NE64 really taking a variable number of clock cycles to execute the LDD and STD pairs?&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've tried playing with the bus cycle stretching settings without success (they shouldn't do anything anyway).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Jeff&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-happy.gif"&gt;&lt;IMG alt=":smileyhappy:" class="emoticon emoticon-smileyhappy" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-happy.gif" title="Smiley Happy" /&gt;&lt;/A&gt;&lt;BR /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 18 Jul 2007 22:36:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140494#M3114</guid>
      <dc:creator>nerdboy</dc:creator>
      <dc:date>2007-07-18T22:36:50Z</dc:date>
    </item>
    <item>
      <title>Re: Variable PORTAB read/store execution time in NE64?</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140495#M3115</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE&gt;&lt;DIV&gt;Given that it's just a bunch of LDD and STD instructions, I'd expect each of these instruction pairs to take a &lt;B&gt;FIXED&lt;/B&gt; number of clock cycles.&amp;nbsp; But this doesn't seem to be the case.&amp;nbsp; If for example the FPGA sends (0, 1, 2, 3, 4, 5, 6, 7, etc.) leaving each unchanged for three clock cycles, the NE64 "stores" this as (0, 1, 2, 3, 4, 5, 7, etc.), with 6 missing.&amp;nbsp; &lt;IMG alt=":smileysad:" class="emoticon emoticon-smileysad" id="smileysad" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-sad.gif" title="Smiley Sad" /&gt;&lt;BR /&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV&gt;Do you expect each LDD-STD pair taking fixed number of cycles, or each LDD and each STD taking the same fixed number of cycles? In your code LDD&amp;nbsp;ext takes 3 cycles, STD idx 2 cycles. So each LDD-STD pair - 5 cycles. I don't understand how, leaving the FPGA output unchanged for just 3 cycles, you are receiving 6 good numbers from FPGA?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;BTW, in your code, SEI instruction is way to late to have reliable protocol. It should be moved somewhere into the middle of handshaking procedure.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I see variable number of cycles only here:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDX&amp;nbsp;&amp;nbsp; PointerTo16bitWideBuffer&amp;nbsp; // Load buffer address&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;LDX of misalignedd pointer variable in&amp;nbsp;FLASH will take 1 cycle more than LDX of pointer variable in internal RAM or word aligned var in&amp;nbsp;FLASH. But that's just one cycle.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Jul 2007 01:11:24 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140495#M3115</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2007-07-19T01:11:24Z</dc:date>
    </item>
    <item>
      <title>Re: Variable PORTAB read/store execution time in NE64?</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140496#M3116</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Thanks for the quick reply kef.&lt;BR /&gt;&lt;BR /&gt;I was expecting every LDD-STD pair to take a fixed number of cycles.&amp;nbsp; I've done a lot of debugging, and this is what I've found:&lt;BR /&gt;&lt;BR /&gt;The first nine LDD-STD pairs take &lt;B&gt;5&lt;/B&gt; clock cycles, and then all of those thereafter take &lt;B&gt;6&lt;/B&gt; clock cycles.&amp;nbsp; If I adjust my FPGA to change the data according to this standard, everything works fine.&amp;nbsp; &lt;SPAN&gt;&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;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;Could it be that the STD #,X instructions take an extra cycle if the # is greater than a certain value?&amp;nbsp; Different addressing mode?&amp;nbsp; &lt;SPAN&gt;&lt;IMG alt=":smileyindifferent:" class="emoticon emoticon-smileyindifferent" id="smileyindifferent" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-indifferent.gif" title="Smiley Indifferent" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;Would love to know why this occurs, but at least now I can write less-hacked code for my FPGA.&lt;BR /&gt;&lt;BR /&gt;Thanks again,&lt;BR /&gt;&lt;BR /&gt;Jeff&lt;BR /&gt;&lt;BR /&gt;&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;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Jul 2007 02:39:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140496#M3116</guid>
      <dc:creator>nerdboy</dc:creator>
      <dc:date>2007-07-19T02:39:43Z</dc:date>
    </item>
    <item>
      <title>Re: Variable PORTAB read/store execution time in NE64?</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140497#M3117</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;EDIT: I see I talked about S08 and not S12. Still the same principle is applicable. And the CPU12 book should be looked into.&lt;BR /&gt;&lt;HR size="2" width="100%" /&gt;&lt;BR /&gt;&lt;BR /&gt;Hi guys,&lt;BR /&gt;&lt;BR /&gt;I enclosed a part of the CPU reference manual.&lt;BR /&gt;Depending on the addressing mode, you have the access details and number of cycles.&lt;BR /&gt;I hope this helps you.&lt;BR /&gt;&lt;BR /&gt;The document is &lt;B&gt;&lt;A href="http://www.freescale.com/files/microcontrollers/doc/ref_manual/HCS08RMV1.pdf?fsrch=1" rel="nofollow" target="_blank"&gt;HCS08RMV1.pdf&lt;/A&gt;&lt;/B&gt;&lt;BR /&gt;&lt;BR /&gt;Cheers,&lt;BR /&gt;Alban.&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by Alban on &lt;SPAN class="date_text"&gt;2007-07-18&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;09:35 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Jul 2007 03:19:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140497#M3117</guid>
      <dc:creator>Alban</dc:creator>
      <dc:date>2007-07-19T03:19:34Z</dc:date>
    </item>
    <item>
      <title>Re: Variable PORTAB read/store execution time in NE64?</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140498#M3118</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I didn't know how many LDD-STD pairs do you have actually. Yes, 5bit indexed addressing mode offset (IDX) takes sometimes shorter than 9bit indexed addressing mode (IDX1). There's also IDX2 which sometimes takes even more. Assembler usually compiles&amp;nbsp;to the shortest and fastest form of instruction.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;LDD&amp;nbsp; (IDX) takes 3 cycles (See CPU12 reference manual, Section 6 "Instruction Glossary").&lt;/DIV&gt;&lt;DIV&gt;LDD&amp;nbsp; (IDX1) takes also 3 cycles&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;STD&amp;nbsp; (IDX) takes 2 cycles&lt;/DIV&gt;&lt;DIV&gt;STD&amp;nbsp; (IDX1) takes 3 cycles&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;So when offset is from -16 to +15 - assembler chooses more compact IDX addressing, that's why 8 pairs do take 5 cycles each, and starting from ninth they take 6 cycles.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;You could rewrite your code using postincrement indexed addressing mode like this&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; _PORTAB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Load 16-bit word to register&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; 2,X+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Copy register to buffer AND ADVANCE&amp;nbsp;POINTER to the buffer in register X&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; _PORTAB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp; etc...&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; 2,X+&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; _PORTAB&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; 2,X+&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;postincrement indexed STD takes the same like STD&amp;nbsp;with 5bit offset. So timing of one pair should be the same 5 cycles.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;CPU reference manual contains all the answers to such questions, it's free download :smileyhappy:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Jul 2007 03:24:08 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140498#M3118</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2007-07-19T03:24:08Z</dc:date>
    </item>
    <item>
      <title>Re: Variable PORTAB read/store execution time in NE64?</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140499#M3119</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BR /&gt;&lt;BLOCKQUOTE&gt;&lt;HR /&gt;kef wrote:&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;You could rewrite your code using postincrement indexed addressing mode like this&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; _PORTAB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Load 16-bit word to register&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; 2,X+&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Copy register to buffer AND ADVANCE&amp;nbsp;POINTER to the buffer in register X&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; _PORTAB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;&amp;nbsp; etc...&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; 2,X+&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LDD&amp;nbsp;&amp;nbsp; _PORTAB&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; STD&amp;nbsp;&amp;nbsp; 2,X+&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;postincrement indexed STD takes the same like STD&amp;nbsp;with 5bit offset. So timing of one pair should be the same 5 cycles.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;Thanks for the code kef.&amp;nbsp; I tested it out and &lt;B&gt;it does indeed execute at a constant 5 cycles per pair&lt;/B&gt;.&amp;nbsp; It also makes my VHDL code much less awkward.&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;&lt;BR /&gt;&lt;BR /&gt;I actually did have a good look through the manual last year when I wrote most of the (hacked) code, but I have to admit that I've never really warmed to this architecture.&amp;nbsp; I work in parallel with all sorts of PICs and, well, it requires a lot less effort to write good assembly code for them.&amp;nbsp; &lt;SPAN&gt;&lt;IMG alt=":smileyvery-happy:" class="emoticon emoticon-smileyvery-happy" id="smileyvery-happy" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-very-happy.gif" title="Smiley Very Happy" /&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;For instance, I'm disappointed that on the instruction description page of the CPU manual, there's no indication of execution time relative to addressing mode (unless it is very cryptically given?).&lt;BR /&gt;&lt;BR /&gt;But, I'm very happy to have better learned this architecture thanks again to this forum.&amp;nbsp; Thanks again guys!&lt;BR /&gt;&lt;BR /&gt;Jeff&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&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;&lt;/SPAN&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 19 Jul 2007 20:26:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Variable-PORTAB-read-store-execution-time-in-NE64/m-p/140499#M3119</guid>
      <dc:creator>nerdboy</dc:creator>
      <dc:date>2007-07-19T20:26:57Z</dc:date>
    </item>
  </channel>
</rss>

