Content originally posted in LPCWare by audriusmerfeldas on Sun Sep 06 12:50:52 MST 2015
I am very new at programming but using examples i am developing me own code. I am trying to set 16 bit timmer for increasing variable 'count' that I am using to display digit on 7 segment indicator. I am trying to get timer interrupt and at that moment increase variable 'count', but now it doesn't seem to work. Please find the code below:
#include "LPC11xx.h"                        /* LPC11xx definitions */
#include "timer16.h"
#include "clkconfig.h"
#include "gpio.h"
#include <cr_section_macros.h>
#include <NXP/crp.h>
__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;
#define LED_ON 0
#define LED_OFF 1
int main (void) {
  GPIOInit();
  long count;
  // Set port for LED to output
  // GPIOSetDir( LED_PORT, LED_BIT, 1 );
  GPIOSetDir( 2, 2, 1 );
  GPIOSetDir( 0, 7, 1 );
  GPIOSetDir( 0, 6, 1 );
  GPIOSetDir( 1, 8, 1 );
  GPIOSetDir( 3, 1, 1 );
  GPIOSetDir( 3, 2, 1 );
  GPIOSetDir( 3, 0, 1 );
  // Set port for input
  // GPIOSetDir( LED_PORT, LED_BIT, 0 );
  GPIOSetDir( 1, 10, 0 );
  // Initial variable values
  count=0;
  //Set up 16 bit timer
  LPC_SYSCON->SYSAHBCLKCTRL |= (1<<7);                                  //enable clock signal to 16 bit timer0 (sec 3.5.14)
  LPC_TMR16B0->PR           = 0x0;                                      //set prescaler max value, not used here (sec 18.7.4)
  LPC_TMR16B0->MCR          = 0x10;                                     //set for reset on counter match (sec 18.7.6)
  LPC_TMR16B0->CCR          = 0;                                        //set to timer mode (sec 18.7.11)
  LPC_TMR16B0->MR1          = 0x64;                                     //set value for period (sec 18.7.7)
  LPC_TMR16B0->TCR          |= 0x3;                                     //enable and reset counter (sec 18.7.2)
  LPC_TMR16B0->TCR          &= ~(0x2);                                  //clear reset bit (sec 18.7.2)
  while (1)                                   // Loop forever
  {
   // 7 SEGMENT INDICATOR CODES FOR DIFFERENT NUMBERS
   //1
      if (count==1) {
      GPIOSetValue( 2, 2, LED_OFF );
      GPIOSetValue( 0, 7, LED_OFF );
      GPIOSetValue( 0, 6, LED_OFF );
      GPIOSetValue( 1, 8, LED_ON );
      GPIOSetValue( 3, 0, LED_OFF );
      GPIOSetValue( 3, 1, LED_ON );
      GPIOSetValue( 3, 2, LED_OFF );
      }
   //2
      if (count==2) {
      GPIOSetValue( 2, 2, LED_ON );
      GPIOSetValue( 0, 7, LED_OFF );
      GPIOSetValue( 0, 6, LED_ON );
      GPIOSetValue( 1, 8, LED_ON );
      GPIOSetValue( 3, 0, LED_ON );
      GPIOSetValue( 3, 1, LED_OFF );
      GPIOSetValue( 3, 2, LED_ON );
      }
   //3
      if (count==3) {
      GPIOSetValue( 2, 2, LED_ON );
      GPIOSetValue( 0, 7, LED_OFF );
      GPIOSetValue( 0, 6, LED_ON );
      GPIOSetValue( 1, 8, LED_ON );
       GPIOSetValue( 3, 0, LED_ON );
       GPIOSetValue( 3, 1, LED_ON );
       GPIOSetValue( 3, 2, LED_OFF );
      }
   //4
      if (count==4) {
      GPIOSetValue( 2, 2, LED_ON );
      GPIOSetValue( 0, 7, LED_ON );
        GPIOSetValue( 0, 6, LED_OFF );
        GPIOSetValue( 1, 8, LED_ON );
      GPIOSetValue( 3, 0, LED_OFF );
       GPIOSetValue( 3, 1, LED_ON );
       GPIOSetValue( 3, 2, LED_OFF );
      }
   //5
      if (count==5) {
      GPIOSetValue( 2, 2, LED_ON );
       GPIOSetValue( 0, 7, LED_ON );
       GPIOSetValue( 0, 6, LED_ON );
       GPIOSetValue( 1, 8, LED_OFF );
       GPIOSetValue( 3, 0, LED_ON );
        GPIOSetValue( 3, 1, LED_ON );
       GPIOSetValue( 3, 2, LED_OFF );
      }
   //6
      if (count==6) {
      GPIOSetValue( 2, 2, LED_ON );
       GPIOSetValue( 0, 7, LED_ON );
      GPIOSetValue( 0, 6, LED_ON );
       GPIOSetValue( 1, 8, LED_OFF );
       GPIOSetValue( 3, 0, LED_ON );
      GPIOSetValue( 3, 1, LED_ON );
       GPIOSetValue( 3, 2, LED_ON );
      }
   //7
      if (count==7) {
      GPIOSetValue( 2, 2, LED_OFF );
       GPIOSetValue( 0, 7, LED_OFF );
      GPIOSetValue( 0, 6, LED_ON );
       GPIOSetValue( 1, 8, LED_ON );
        GPIOSetValue( 3, 0, LED_OFF );
        GPIOSetValue( 3, 1, LED_ON );
        GPIOSetValue( 3, 2, LED_OFF );
      }
   //8
      if (count==8) {
      GPIOSetValue( 2, 2, LED_ON );
       GPIOSetValue( 0, 7, LED_ON );
       GPIOSetValue( 0, 6, LED_ON );
       GPIOSetValue( 1, 8, LED_ON );
      GPIOSetValue( 3, 0, LED_ON );
       GPIOSetValue( 3, 1, LED_ON );
        GPIOSetValue( 3, 2, LED_ON );
      }
   //9
      if (count==9) {
      GPIOSetValue( 2, 2, LED_ON );
        GPIOSetValue( 0, 7, LED_ON );
       GPIOSetValue( 0, 6, LED_ON );
        GPIOSetValue( 1, 8, LED_ON );
      GPIOSetValue( 3, 0, LED_ON );
        GPIOSetValue( 3, 1, LED_ON );
        GPIOSetValue( 3, 2, LED_OFF );
      }
      if (count==10) {count=0;}
   //0
      if (count==0) {
      GPIOSetValue( 2, 2, LED_OFF );
       GPIOSetValue( 0, 7, LED_ON );
       GPIOSetValue( 0, 6, LED_ON );
       GPIOSetValue( 1, 8, LED_ON );
       GPIOSetValue( 3, 0, LED_ON );
       GPIOSetValue( 3, 1, LED_ON );
       GPIOSetValue( 3, 2, LED_ON );
          }
  }
void TIMER16_0_IRQHandler(void)
{
 if(LPC_TMR16B0->IR & (1<<4))            //capture interrupt?
 {
  LPC_TMR16B0->TC = 0;                    //reset timer
  count++;
  LPC_TMR16B0->IR |= (1<<4);            //reset capture interrupt
 }                                         //end capture interrupt
}
}