<?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>LPC MicrocontrollersのトピックLPC1769 encoder interrupt</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1769-encoder-interrupt/m-p/524739#M7375</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Shoaib on Sat Aug 16 01:25:27 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi everyone!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am working on the QEI of LPC1769 but was facing few issues with the interrupt status register. I want to measure the velocity of the motor whenever the LPC_QEI-&amp;gt;QEITIME register overflows.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The problem is that the timer interrupt in the LPC_QEI-&amp;gt;QEIINTSTAT becomes high even though the timer has not overflowed. It does it even clear the interrupt when the LPC_QEI-&amp;gt;QEICLR is used.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/**** code****/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef __USE_CMSIS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "LPC17xx.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#include &amp;lt;cr_section_macros.h&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t meas_rpm,i=0,j=0,k=0,test=0,test1=0,test2=0,ans;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void qei_init()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_SC-&amp;gt;PCONP&amp;nbsp;&amp;nbsp;&amp;nbsp; |= 1&amp;lt;&amp;lt;18;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Power up QEI&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_SC-&amp;gt;PCLKSEL1 |= 3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Select clock for QEI = cclk/8&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_PINCON-&amp;gt;PINSEL3 |= (1&amp;lt;&amp;lt;8);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // configure as MCI0-QEA&amp;nbsp; - P1.20&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_PINCON-&amp;gt;PINSEL3 |= (1&amp;lt;&amp;lt;14);&amp;nbsp;&amp;nbsp;&amp;nbsp; // configure as MCI1-QEB&amp;nbsp; - P1.23&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_PINCON-&amp;gt;PINSEL3 |= (1&amp;lt;&amp;lt;16);&amp;nbsp;&amp;nbsp;&amp;nbsp; // configure as MCI2-INDX - P1.24&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_QEI-&amp;gt;QEICONF |= (1&amp;lt;&amp;lt;2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set quadrature mode - 4x mode&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_QEI-&amp;gt;QEIMAXPOS= 0xFFFFFFFF;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Maximum pulse count limit after which counter resets&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_QEI-&amp;gt;FILTER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 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; // Number of clk delays&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void en_encoderint() [color=#c0f]//Done in two ways[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//LPC_QEI-&amp;gt;QEIIES |= (1&amp;lt;&amp;lt;5);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//LPC_QEI-&amp;gt;QEIIES &amp;amp;= 0xFFFFE002 ;[color=#c0f]1) Used only this line[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_QEI-&amp;gt;QEIIES |= (1&amp;lt;&amp;lt;5); [color=#c0f]2) Used this and the following line[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_QEI-&amp;gt;QEIIES |= (1&amp;lt;&amp;lt;1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void QEI_IRQHandler()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;k=k+1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void main(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;qei_init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;en_encoderint();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_QEI-&amp;gt;QEICLR &amp;amp;=0x00001FFF;[color=#c0f]//INTSTAT = 0x120, expected value = 0 as all bits cleared[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_QEI-&amp;gt;QEILOAD = 10000;[color=#c0f]// Has no effect with a smaller value (eg 10)[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; while(1) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ans=LPC_QEI-&amp;gt;QEIINTSTAT &amp;amp; 2;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(ans == 2) [color=#c0f] //the statement if(LPC_QEI-&amp;gt;QEIINTSTAT &amp;amp; 2 == 2) is giving incorrect solution (res=1?)[/color]&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;LPC_QEI-&amp;gt;QEICLR &amp;amp;= 0x00001FFF;[color=#c0f]// is not affecting the INTSTAT reg[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;meas_rpm = (SystemCoreClock/8)*LPC_QEI-&amp;gt;QEICAP*60/(LPC_QEI-&amp;gt;QEILOAD*1024*4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[color=#c0f]// I want to clear the interrupt so that I measure the velocity at the exact instant when the velocity timer reg overflows[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; /**** End of code****/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The second problem I am facing is that the code never enters the QEI ISR. I used a test int k to see if ISR code was implemented but it did not change.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 18:10:10 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T18:10:10Z</dc:date>
    <item>
      <title>LPC1769 encoder interrupt</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1769-encoder-interrupt/m-p/524739#M7375</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Shoaib on Sat Aug 16 01:25:27 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi everyone!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am working on the QEI of LPC1769 but was facing few issues with the interrupt status register. I want to measure the velocity of the motor whenever the LPC_QEI-&amp;gt;QEITIME register overflows.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The problem is that the timer interrupt in the LPC_QEI-&amp;gt;QEIINTSTAT becomes high even though the timer has not overflowed. It does it even clear the interrupt when the LPC_QEI-&amp;gt;QEICLR is used.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;/**** code****/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#ifdef __USE_CMSIS&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "LPC17xx.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#endif&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#include &amp;lt;cr_section_macros.h&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;uint32_t meas_rpm,i=0,j=0,k=0,test=0,test1=0,test2=0,ans;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void qei_init()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_SC-&amp;gt;PCONP&amp;nbsp;&amp;nbsp;&amp;nbsp; |= 1&amp;lt;&amp;lt;18;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Power up QEI&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_SC-&amp;gt;PCLKSEL1 |= 3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Select clock for QEI = cclk/8&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_PINCON-&amp;gt;PINSEL3 |= (1&amp;lt;&amp;lt;8);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // configure as MCI0-QEA&amp;nbsp; - P1.20&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_PINCON-&amp;gt;PINSEL3 |= (1&amp;lt;&amp;lt;14);&amp;nbsp;&amp;nbsp;&amp;nbsp; // configure as MCI1-QEB&amp;nbsp; - P1.23&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_PINCON-&amp;gt;PINSEL3 |= (1&amp;lt;&amp;lt;16);&amp;nbsp;&amp;nbsp;&amp;nbsp; // configure as MCI2-INDX - P1.24&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_QEI-&amp;gt;QEICONF |= (1&amp;lt;&amp;lt;2);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set quadrature mode - 4x mode&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_QEI-&amp;gt;QEIMAXPOS= 0xFFFFFFFF;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Maximum pulse count limit after which counter resets&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; LPC_QEI-&amp;gt;FILTER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = 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; // Number of clk delays&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void en_encoderint() [color=#c0f]//Done in two ways[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//LPC_QEI-&amp;gt;QEIIES |= (1&amp;lt;&amp;lt;5);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//LPC_QEI-&amp;gt;QEIIES &amp;amp;= 0xFFFFE002 ;[color=#c0f]1) Used only this line[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_QEI-&amp;gt;QEIIES |= (1&amp;lt;&amp;lt;5); [color=#c0f]2) Used this and the following line[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_QEI-&amp;gt;QEIIES |= (1&amp;lt;&amp;lt;1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void QEI_IRQHandler()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;k=k+1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void main(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;qei_init();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;en_encoderint();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_QEI-&amp;gt;QEICLR &amp;amp;=0x00001FFF;[color=#c0f]//INTSTAT = 0x120, expected value = 0 as all bits cleared[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_QEI-&amp;gt;QEILOAD = 10000;[color=#c0f]// Has no effect with a smaller value (eg 10)[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; while(1) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ans=LPC_QEI-&amp;gt;QEIINTSTAT &amp;amp; 2;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if(ans == 2) [color=#c0f] //the statement if(LPC_QEI-&amp;gt;QEIINTSTAT &amp;amp; 2 == 2) is giving incorrect solution (res=1?)[/color]&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;LPC_QEI-&amp;gt;QEICLR &amp;amp;= 0x00001FFF;[color=#c0f]// is not affecting the INTSTAT reg[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;meas_rpm = (SystemCoreClock/8)*LPC_QEI-&amp;gt;QEICAP*60/(LPC_QEI-&amp;gt;QEILOAD*1024*4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;[color=#c0f]// I want to clear the interrupt so that I measure the velocity at the exact instant when the velocity timer reg overflows[/color]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; /**** End of code****/&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The second problem I am facing is that the code never enters the QEI ISR. I used a test int k to see if ISR code was implemented but it did not change.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:10:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1769-encoder-interrupt/m-p/524739#M7375</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:10:10Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1769 encoder interrupt</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1769-encoder-interrupt/m-p/524740#M7376</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by wmues on Sun Aug 17 06:22:06 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;How do you enable the Interrupt in the NVIC?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Wolfgang&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:10:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1769-encoder-interrupt/m-p/524740#M7376</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:10:11Z</dc:date>
    </item>
  </channel>
</rss>

