<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic reserved register bits clarification in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/reserved-register-bits-clarification/m-p/522358#M4994</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by jmhartmann on Fri Aug 14 14:01:03 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;In the User Manual UM10470, many configuration registers described have bits described as "Reserved. Read value is undefined, only zero should be written". This implies that read/modify/write operations such as "example-&amp;gt;register |= 0x01" would not be allowed because the entire register is read, bit zero is set, and the entire register is written back.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;However, in driver code provided by NXP such as the drivers here: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fwww.lpcware.com%2Fcontent%2Fnxpfile%2Flpc177x-and-lpc178x-cmsis-compliant-standard-peripheral-firmware-driver-library-keil" rel="nofollow" target="_blank"&gt;https://www.lpcware.com/content/nxpfile/lpc177x-and-lpc178x-cmsis-compliant-standard-peripheral-firmware-driver-library-keil&lt;/A&gt;&lt;SPAN&gt;, this is precisely what the driver is doing. For example, in the file lpc177x_8x_timer.c where the register TCR is modified. TCR bits 31:2 are defined as "Reserved. Read value is undefined, only zero should be written".&amp;nbsp; See the code below for the implementation.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My question is, is the UM correct and the example code wrong?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************//**&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @brief&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Start/Stop Timer/Counter device&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @param[in]&amp;nbsp;&amp;nbsp; TIMx Pointer to timer device, should be:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; - LPC_TIM0: TIMER0 peripheral&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; - LPC_TIM1: TIMER1 peripheral&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; - LPC_TIM2: TIMER2 peripheral&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; - LPC_TIM3: TIMER3 peripheral&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @param[in]&amp;nbsp;&amp;nbsp; NewState&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; ENABLE&amp;nbsp; : set timer enable&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; DISABLE : disable timer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; **********************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void TIM_Cmd(LPC_TIM_TypeDef *TIMx, FunctionalState NewState)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (NewState == ENABLE)&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;&amp;nbsp;&amp;nbsp; TIMx-&amp;gt;TCR&amp;nbsp;&amp;nbsp; |=&amp;nbsp; TIM_ENABLE;&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; else&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;&amp;nbsp;&amp;nbsp; TIMx-&amp;gt;TCR &amp;amp;= ~TIM_ENABLE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:55:32 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:55:32Z</dc:date>
    <item>
      <title>reserved register bits clarification</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/reserved-register-bits-clarification/m-p/522358#M4994</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by jmhartmann on Fri Aug 14 14:01:03 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;In the User Manual UM10470, many configuration registers described have bits described as "Reserved. Read value is undefined, only zero should be written". This implies that read/modify/write operations such as "example-&amp;gt;register |= 0x01" would not be allowed because the entire register is read, bit zero is set, and the entire register is written back.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&lt;SPAN&gt;However, in driver code provided by NXP such as the drivers here: &lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://community.nxp.com/external-link.jspa?url=https%3A%2F%2Fwww.lpcware.com%2Fcontent%2Fnxpfile%2Flpc177x-and-lpc178x-cmsis-compliant-standard-peripheral-firmware-driver-library-keil" rel="nofollow" target="_blank"&gt;https://www.lpcware.com/content/nxpfile/lpc177x-and-lpc178x-cmsis-compliant-standard-peripheral-firmware-driver-library-keil&lt;/A&gt;&lt;SPAN&gt;, this is precisely what the driver is doing. For example, in the file lpc177x_8x_timer.c where the register TCR is modified. TCR bits 31:2 are defined as "Reserved. Read value is undefined, only zero should be written".&amp;nbsp; See the code below for the implementation.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My question is, is the UM correct and the example code wrong?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/*********************************************************************//**&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @brief&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Start/Stop Timer/Counter device&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @param[in]&amp;nbsp;&amp;nbsp; TIMx Pointer to timer device, should be:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; - LPC_TIM0: TIMER0 peripheral&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; - LPC_TIM1: TIMER1 peripheral&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; - LPC_TIM2: TIMER2 peripheral&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; - LPC_TIM3: TIMER3 peripheral&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @param[in]&amp;nbsp;&amp;nbsp; NewState&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; ENABLE&amp;nbsp; : set timer enable&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&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; DISABLE : disable timer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; * @return&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; None&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; **********************************************************************/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void TIM_Cmd(LPC_TIM_TypeDef *TIMx, FunctionalState NewState)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (NewState == ENABLE)&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;&amp;nbsp;&amp;nbsp; TIMx-&amp;gt;TCR&amp;nbsp;&amp;nbsp; |=&amp;nbsp; TIM_ENABLE;&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; else&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;&amp;nbsp;&amp;nbsp; TIMx-&amp;gt;TCR &amp;amp;= ~TIM_ENABLE;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:55:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/reserved-register-bits-clarification/m-p/522358#M4994</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:55:32Z</dc:date>
    </item>
  </channel>
</rss>

