<?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: HC(S)12: How to programm a interrupt in C???</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/HC-S-12-How-to-programm-a-interrupt-in-C/m-p/124921#M223</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;P&gt;Thanks a lot for your answer, but I got it working today...&lt;/P&gt;&lt;P&gt;First I config the PORT I connected the button, let the timer run, configured the PIN to detect falling edge and capture input.&lt;/P&gt;&lt;P&gt;After all, I wrote the vector.s the name of the interrupt function.&lt;/P&gt;&lt;P&gt;In the interrupt function is reseted the "interrupt occured" bit.........&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 28 Jul 2006 16:36:56 GMT</pubDate>
    <dc:creator>ChrisLambert</dc:creator>
    <dc:date>2006-07-28T16:36:56Z</dc:date>
    <item>
      <title>HC(S)12: How to programm a interrupt in C???</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/HC-S-12-How-to-programm-a-interrupt-in-C/m-p/124919#M221</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi to everyone,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;actually I'm new to the Motorola Microcontrollers, but I've to work around with a HCS12.&lt;/DIV&gt;&lt;DIV&gt;My first steps where connecting a LCD and using the AD-Converter. As an extra feature I implemented a Button?&lt;/DIV&gt;&lt;DIV&gt;But here is my probleme:&lt;/DIV&gt;&lt;DIV&gt;I tried to write a Interrupt Routine&amp;nbsp;for Button, that means, when the button is pushed the interrupt should be released, but somehow it doesn't work?!&lt;/DIV&gt;&lt;DIV&gt;For further information:&lt;/DIV&gt;&lt;DIV&gt;The&amp;nbsp;button is connected to PORT T (I/O Timer) and should occur&amp;nbsp;at a falling edge.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Here is my interrupt Routine:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;in the main function I implemented:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIOS &amp;amp;= ~(1&amp;lt;&amp;lt;5);&amp;nbsp;&amp;nbsp; // configure Pin 5 as capture input&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCTL3 = 0xAA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//not sure if this is right, want to configure PIN reacting on&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCTL4 = 0xAA;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// a falling edge&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIE |= (1&amp;lt;&amp;lt;0)|(1&amp;lt;&amp;lt;1)|(1&amp;lt;&amp;lt;2)|(1&amp;lt;&amp;lt;3)|(1&amp;lt;&amp;lt;4)|(1&amp;lt;&amp;lt;5)|(1&amp;lt;&amp;lt;6)|(1&amp;lt;&amp;lt;7);&lt;/DIV&gt;&lt;DIV&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;//enable&amp;nbsp;interrupt for a pins&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;when the button is pushed a interrupt should occur, here is the routine:&lt;/DIV&gt;&lt;DIV&gt;void INTERRUPT BUTTON_ISR(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;PTT = 0x01;&amp;nbsp; //for testing, a LED connected to PTT should flash&lt;BR /&gt;&amp;nbsp;delay();&lt;BR /&gt;&amp;nbsp;delay();&lt;BR /&gt;&amp;nbsp;delay();&lt;BR /&gt;&amp;nbsp;PTT=0x00;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;after all; I activated the IRQ in the Vector.s table:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;/*ATD1_ISR&amp;nbsp;*/&amp;nbsp;&amp;nbsp;/* 0xFFD0 ATD1*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;/*ATD0_ISR&amp;nbsp;*/&amp;nbsp;&amp;nbsp;/* 0xFFD2 ATD0*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word SCI1_ISR&amp;nbsp;&amp;nbsp;&amp;nbsp;/* 0xFFD4 SCI1*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word SCI0_ISR&amp;nbsp;&amp;nbsp;&amp;nbsp;/* 0xFFD6 SCI0*/&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* 0xFFD8&amp;nbsp; SPI0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* 0xFFDA&amp;nbsp; Pulse acc input edge&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* 0xFFDC&amp;nbsp; Pulse acc A overflow&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* 0xFFDE&amp;nbsp; Timer overflow&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* 0xFFE0&amp;nbsp; Timer channel 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* 0xFFE2&amp;nbsp; Timer channel 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&lt;STRONG style=": ; color: #ff0000;"&gt;&amp;nbsp; .word BUTTON_ISR&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* 0xFFE4&amp;nbsp; Timer channel 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/STRONG&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* 0xFFE6&amp;nbsp; Timer channel 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* 0xFFE8&amp;nbsp; Timer channel 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* 0xFFEA&amp;nbsp; Timer channel 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .word DEF_IRQ&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;/* 0xFFEC&amp;nbsp; Timer channel 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I'm not sure if this is alright, but perhaps anyone can help me?!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks a lot....&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Jul 2006 13:17:02 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/HC-S-12-How-to-programm-a-interrupt-in-C/m-p/124919#M221</guid>
      <dc:creator>ChrisLambert</dc:creator>
      <dc:date>2006-07-26T13:17:02Z</dc:date>
    </item>
    <item>
      <title>Re: HC(S)12: How to programm a interrupt in C???</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/HC-S-12-How-to-programm-a-interrupt-in-C/m-p/124920#M222</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;First of all, this is not how the input capture on the timer is intended to be used, but it can work.&amp;nbsp; I would go for the IRQ pin or the keyboard interrupts instead of the timer.&amp;nbsp; The IRQ is the simplest.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;There is more than one way to do interrupts in C.&amp;nbsp; Here is the way I do it:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;First of all, you have to enable interrupts in your main program with a line like this:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;asm cli;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;They start out being disabled, so you have to do this to get them to work.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;In the C file, I do it like this:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#pragma TRAP_PROC&lt;/DIV&gt;&lt;DIV&gt;void myISR() {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; clearFlagThatCausedInterrupt();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; doSomeStuff();&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Now find the *.prm file for the project and add a line at the end like this:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;VECTOR 13&amp;nbsp;myISR&amp;nbsp;&amp;nbsp; /* Serial receive vector */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;alternatively you can do this:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;VECTOR ADDRESS 0xFFFD myISR&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The vector number is the nth vector counting backwards from FFFE:FFFF, starting from 0.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;FFFE:FFFF = vector 0&lt;/DIV&gt;&lt;DIV&gt;FFFC:FFFD = vector 1&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;etc.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;You can ignore the vector.s table.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The #pragma TRAP_PROC tells the compiler to end the function with an RTI instruction instead of an RTS.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The VECTOR 13&amp;nbsp;myISR will write the address of the function, myISR() into the 13th vector.&amp;nbsp; That's all that needs to happen for it to work, provided that the interrupt source is configured correctly.&lt;/DIV&gt;&lt;P&gt;Message Edited by rhinoceroshead on &lt;SPAN class="date_text"&gt;2006-07-26&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;03:47 PM&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 27 Jul 2006 03:41:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/HC-S-12-How-to-programm-a-interrupt-in-C/m-p/124920#M222</guid>
      <dc:creator>rhinoceroshead</dc:creator>
      <dc:date>2006-07-27T03:41:39Z</dc:date>
    </item>
    <item>
      <title>Re: HC(S)12: How to programm a interrupt in C???</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/HC-S-12-How-to-programm-a-interrupt-in-C/m-p/124921#M223</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;P&gt;Thanks a lot for your answer, but I got it working today...&lt;/P&gt;&lt;P&gt;First I config the PORT I connected the button, let the timer run, configured the PIN to detect falling edge and capture input.&lt;/P&gt;&lt;P&gt;After all, I wrote the vector.s the name of the interrupt function.&lt;/P&gt;&lt;P&gt;In the interrupt function is reseted the "interrupt occured" bit.........&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 28 Jul 2006 16:36:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/HC-S-12-How-to-programm-a-interrupt-in-C/m-p/124921#M223</guid>
      <dc:creator>ChrisLambert</dc:creator>
      <dc:date>2006-07-28T16:36:56Z</dc:date>
    </item>
  </channel>
</rss>

