<?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 Help with interrupts! in S12 / MagniV Microcontrollers</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Help-with-interrupts/m-p/156237#M4711</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I wrote a simple program that has 2 ISRs, one plays a music note, the other updates time every mS.&lt;/P&gt;&lt;P&gt;The problem that i am having is that when i disable the interrupt that updates the time, the tones are played as expected, however when i enable the time update interrupt, the some of the tones come and go and the program does not function correctly. Can you please help, Thank you&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;#include &amp;lt;hidef.h&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* common defines and macros */ #include "derivative.h"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* derivative-specific definitions */ #include &amp;lt;MC9S12C128.h&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* derivative information */ #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;math.h&amp;gt; ///&amp;nbsp;&amp;nbsp; FUNCTIONS&amp;nbsp;&amp;nbsp; /// void initializePorts(void); void Delay(); byte getKey(); byte control(); void play(); ///&amp;nbsp; GLOBAL VARIABLES&amp;nbsp;&amp;nbsp; /// volatile int msCount;&lt;/P&gt;&lt;P&gt;volatile int M; ////////////////////////////////////////////////////////&lt;/P&gt;&lt;P&gt;void main() { &amp;nbsp;volatile byte MODES; &amp;nbsp;initializePorts(); &amp;nbsp;TSCR1 = 0x80;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Allows the timer to function &amp;nbsp;TSCR2 = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //prescaler = 2, clock is at Buss Speed / 2 = 2MHz/2 = 1MHz &amp;nbsp;&amp;nbsp; TIE_C5I = 1; &amp;nbsp;&amp;nbsp; TIOS = 0xE0;&amp;nbsp;&amp;nbsp; //Chanal 7-5 isr act as an output campare with MCU timer //////////////////////////////////////////////////////////////////////////// //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; initializing timers and counters..&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// /////////////////////////////////////////////////////////////////////////// &amp;nbsp;EnableInterrupts;&amp;nbsp; &amp;nbsp; for(;&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif"&gt;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;/A&gt; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MODES = control(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(MODES == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; play();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; }/* loop forever */ }&lt;/P&gt;&lt;P&gt;///////////////// Timer6 Interrupt Service Routine&amp;nbsp; ///////////// void interrupt 14 ISR_Timer6(void) {&amp;nbsp; &amp;nbsp;&amp;nbsp; TC6 = TC6 + M;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //802&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; TFLG1_C6F = 1; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;void interrupt 13 ISR_Timer5(void) { &amp;nbsp;&amp;nbsp; msCount++; &amp;nbsp;&amp;nbsp; TC5 = TC5 + 1000; // Interrupt again in 1 second, set the next match value for TC5, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // When Timer chanal 5(TC5) matches the MCU counter, an interrupt occurs. &amp;nbsp;&amp;nbsp; TFLG1_C5F = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; //when TC5 matches MCU timer, a flag is set, this flag must be cleared &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // in order to work interrupt again. Right here, we are clearing the flag &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 for TC5 by clearing the flag set by TC5 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //TCTL1 regesters connects timers to pins PT&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void initializePorts() { &amp;nbsp;&amp;nbsp; DDRA = 0xFF;&amp;nbsp; &amp;nbsp;// PTA&amp;lt;7:0&amp;gt; - outputs&amp;nbsp; (LEDs) &amp;nbsp;&amp;nbsp; DDRB = 0xF0;&amp;nbsp;&amp;nbsp; // Make PTB&amp;lt;7:4&amp;gt; outputs &amp;nbsp;&amp;nbsp; DDRM = 0x00;&amp;nbsp;&amp;nbsp; //Make Portm&amp;nbsp; inputs &amp;nbsp;&amp;nbsp; PERM_PERM5; &amp;nbsp;&amp;nbsp; PERM_PERM4; &amp;nbsp; return; }&lt;/P&gt;&lt;P&gt;void Delay(int mS){ &amp;nbsp;&amp;nbsp; int j; &amp;nbsp;&amp;nbsp; int count; &amp;nbsp;&amp;nbsp; for(j = 0; j &amp;lt; mS; j++){ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(count = 0; count &amp;lt; 300; count++) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; &amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp; return; }&lt;/P&gt;&lt;P&gt;byte getKey(){ &amp;nbsp;&amp;nbsp;&amp;nbsp; byte row[4] = {1,2,4,8}; &amp;nbsp;&amp;nbsp;&amp;nbsp; int count = 0; &amp;nbsp;&amp;nbsp;&amp;nbsp; DDRT = 0x0F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //port T&amp;nbsp; is rows, output &amp;nbsp;&amp;nbsp;&amp;nbsp; DDRP = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //portp is coloumns, input &amp;nbsp;&amp;nbsp;&amp;nbsp; PPSP = 0x0F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //pull down imput P which is coloumns&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for(count = 0; count &amp;lt; 4; count++){ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTT = row[count]; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delay(0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(PTP_PTP0 == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 4*count;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(PTP_PTP1 == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 4*count+1; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(PTP_PTP2 == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 4*count+2; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(PTP_PTP3 == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 4*count+3; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0XFF; }&lt;/P&gt;&lt;P&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; PLAY FUCNION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //// ////////////////////////////////////////////////////////////////// void play() { &amp;nbsp;&amp;nbsp; byte keybounce; &amp;nbsp;&amp;nbsp; byte press; &amp;nbsp;&amp;nbsp; volatile int notes[16] = {1804,1607,1432,1352,1204,1073,1012,0,902,804,716,637,602,536,478,451}; &amp;nbsp;&amp;nbsp; PORTA = 0x11; &amp;nbsp;&amp;nbsp; TIE_C6I = 1;&amp;nbsp; &amp;nbsp;&amp;nbsp; while(1) &amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; press = getKey(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(press == 7) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIE_C6I = 0; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCTL1_OL6 = 0; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(press == 0xFF) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCTL1_OL6 =0; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; M = notes[press]; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCTL1_OL6 = 1; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybounce = press; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(keybounce == press) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; press = getKey();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp; } }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/////////////////////////////////////////////////////////////////// //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONTROL FUNCTION (PLAY, RECORD, PLAYBACK)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //// ////////////////////////////////////////////////////////////////// byte control(){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; byte options; &amp;nbsp;&amp;nbsp; int blinker = msCount; &amp;nbsp;&amp;nbsp; PORTA = 0x00; &amp;nbsp;&amp;nbsp; while(1) &amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(msCount - blinker &amp;gt; 200) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTA = ~PORTA; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; blinker = msCount; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp; options = getKey(); &amp;nbsp;&amp;nbsp; if(options == 0) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 1; &amp;nbsp;&amp;nbsp; else if(options == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 2; &amp;nbsp;&amp;nbsp; else if(options == 2) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 3;&amp;nbsp; &amp;nbsp;&amp;nbsp; } }&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 22 Apr 2012 06:37:53 GMT</pubDate>
    <dc:creator>Batigol1985</dc:creator>
    <dc:date>2012-04-22T06:37:53Z</dc:date>
    <item>
      <title>Help with interrupts!</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Help-with-interrupts/m-p/156237#M4711</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I wrote a simple program that has 2 ISRs, one plays a music note, the other updates time every mS.&lt;/P&gt;&lt;P&gt;The problem that i am having is that when i disable the interrupt that updates the time, the tones are played as expected, however when i enable the time update interrupt, the some of the tones come and go and the program does not function correctly. Can you please help, Thank you&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;#include &amp;lt;hidef.h&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* common defines and macros */ #include "derivative.h"&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* derivative-specific definitions */ #include &amp;lt;MC9S12C128.h&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* derivative information */ #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;math.h&amp;gt; ///&amp;nbsp;&amp;nbsp; FUNCTIONS&amp;nbsp;&amp;nbsp; /// void initializePorts(void); void Delay(); byte getKey(); byte control(); void play(); ///&amp;nbsp; GLOBAL VARIABLES&amp;nbsp;&amp;nbsp; /// volatile int msCount;&lt;/P&gt;&lt;P&gt;volatile int M; ////////////////////////////////////////////////////////&lt;/P&gt;&lt;P&gt;void main() { &amp;nbsp;volatile byte MODES; &amp;nbsp;initializePorts(); &amp;nbsp;TSCR1 = 0x80;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Allows the timer to function &amp;nbsp;TSCR2 = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //prescaler = 2, clock is at Buss Speed / 2 = 2MHz/2 = 1MHz &amp;nbsp;&amp;nbsp; TIE_C5I = 1; &amp;nbsp;&amp;nbsp; TIOS = 0xE0;&amp;nbsp;&amp;nbsp; //Chanal 7-5 isr act as an output campare with MCU timer //////////////////////////////////////////////////////////////////////////// //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; initializing timers and counters..&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// /////////////////////////////////////////////////////////////////////////// &amp;nbsp;EnableInterrupts;&amp;nbsp; &amp;nbsp; for(;&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif"&gt;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;/A&gt; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MODES = control(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(MODES == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; play();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; }/* loop forever */ }&lt;/P&gt;&lt;P&gt;///////////////// Timer6 Interrupt Service Routine&amp;nbsp; ///////////// void interrupt 14 ISR_Timer6(void) {&amp;nbsp; &amp;nbsp;&amp;nbsp; TC6 = TC6 + M;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //802&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; TFLG1_C6F = 1; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;void interrupt 13 ISR_Timer5(void) { &amp;nbsp;&amp;nbsp; msCount++; &amp;nbsp;&amp;nbsp; TC5 = TC5 + 1000; // Interrupt again in 1 second, set the next match value for TC5, &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // When Timer chanal 5(TC5) matches the MCU counter, an interrupt occurs. &amp;nbsp;&amp;nbsp; TFLG1_C5F = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; //when TC5 matches MCU timer, a flag is set, this flag must be cleared &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // in order to work interrupt again. Right here, we are clearing the flag &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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 for TC5 by clearing the flag set by TC5 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //TCTL1 regesters connects timers to pins PT&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void initializePorts() { &amp;nbsp;&amp;nbsp; DDRA = 0xFF;&amp;nbsp; &amp;nbsp;// PTA&amp;lt;7:0&amp;gt; - outputs&amp;nbsp; (LEDs) &amp;nbsp;&amp;nbsp; DDRB = 0xF0;&amp;nbsp;&amp;nbsp; // Make PTB&amp;lt;7:4&amp;gt; outputs &amp;nbsp;&amp;nbsp; DDRM = 0x00;&amp;nbsp;&amp;nbsp; //Make Portm&amp;nbsp; inputs &amp;nbsp;&amp;nbsp; PERM_PERM5; &amp;nbsp;&amp;nbsp; PERM_PERM4; &amp;nbsp; return; }&lt;/P&gt;&lt;P&gt;void Delay(int mS){ &amp;nbsp;&amp;nbsp; int j; &amp;nbsp;&amp;nbsp; int count; &amp;nbsp;&amp;nbsp; for(j = 0; j &amp;lt; mS; j++){ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(count = 0; count &amp;lt; 300; count++) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; &amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp; return; }&lt;/P&gt;&lt;P&gt;byte getKey(){ &amp;nbsp;&amp;nbsp;&amp;nbsp; byte row[4] = {1,2,4,8}; &amp;nbsp;&amp;nbsp;&amp;nbsp; int count = 0; &amp;nbsp;&amp;nbsp;&amp;nbsp; DDRT = 0x0F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //port T&amp;nbsp; is rows, output &amp;nbsp;&amp;nbsp;&amp;nbsp; DDRP = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //portp is coloumns, input &amp;nbsp;&amp;nbsp;&amp;nbsp; PPSP = 0x0F;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //pull down imput P which is coloumns&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; for(count = 0; count &amp;lt; 4; count++){ &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTT = row[count]; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delay(0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(PTP_PTP0 == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 4*count;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(PTP_PTP1 == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 4*count+1; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(PTP_PTP2 == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 4*count+2; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(PTP_PTP3 == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 4*count+3; &amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0XFF; }&lt;/P&gt;&lt;P&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; PLAY FUCNION&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //// ////////////////////////////////////////////////////////////////// void play() { &amp;nbsp;&amp;nbsp; byte keybounce; &amp;nbsp;&amp;nbsp; byte press; &amp;nbsp;&amp;nbsp; volatile int notes[16] = {1804,1607,1432,1352,1204,1073,1012,0,902,804,716,637,602,536,478,451}; &amp;nbsp;&amp;nbsp; PORTA = 0x11; &amp;nbsp;&amp;nbsp; TIE_C6I = 1;&amp;nbsp; &amp;nbsp;&amp;nbsp; while(1) &amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; press = getKey(); &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(press == 7) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIE_C6I = 0; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCTL1_OL6 = 0; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(press == 0xFF) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCTL1_OL6 =0; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; M = notes[press]; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCTL1_OL6 = 1; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keybounce = press; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(keybounce == press) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; press = getKey();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp; } }&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;/////////////////////////////////////////////////////////////////// //&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONTROL FUNCTION (PLAY, RECORD, PLAYBACK)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //// ////////////////////////////////////////////////////////////////// byte control(){&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; byte options; &amp;nbsp;&amp;nbsp; int blinker = msCount; &amp;nbsp;&amp;nbsp; PORTA = 0x00; &amp;nbsp;&amp;nbsp; while(1) &amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(msCount - blinker &amp;gt; 200) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTA = ~PORTA; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; blinker = msCount; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&amp;nbsp; options = getKey(); &amp;nbsp;&amp;nbsp; if(options == 0) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 1; &amp;nbsp;&amp;nbsp; else if(options == 1) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 2; &amp;nbsp;&amp;nbsp; else if(options == 2) &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 3;&amp;nbsp; &amp;nbsp;&amp;nbsp; } }&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Apr 2012 06:37:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Help-with-interrupts/m-p/156237#M4711</guid>
      <dc:creator>Batigol1985</dc:creator>
      <dc:date>2012-04-22T06:37:53Z</dc:date>
    </item>
    <item>
      <title>Re: Help with interrupts!</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Help-with-interrupts/m-p/156238#M4712</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;STRIKE&gt;TFLG1_C5F = 1;&amp;nbsp;&amp;nbsp;&amp;nbsp; //when TC5 matches MCU timer, a flag is set, this flag must be cleared&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/STRIKE&gt;&lt;/P&gt;&lt;P&gt;&lt;STRIKE&gt;TFLG1_C6F = 1;&lt;/STRIKE&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;^^ these lines is wrong. TFLG1_C5F=1 clears all timer flags, not just C5F. TFLG1_C6F=1 clears all timer flags, not just C6F. Search forums if you wonder why it is so. Correct way to clear just C5F is this&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;TFLG1 = TFLG1_C5F_MASK;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 22 Apr 2012 15:31:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Help-with-interrupts/m-p/156238#M4712</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2012-04-22T15:31:20Z</dc:date>
    </item>
  </channel>
</rss>

