<?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 LPC1549 Multirate Timer Configuration Issue in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Multirate-Timer-Configuration-Issue/m-p/566577#M17345</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear All,&lt;/P&gt;&lt;P&gt;I am using LPC1549 Xpresso board for my initial development projects. Also, I am using LPCOpen libraries in KEIL MDK.&lt;/P&gt;&lt;P&gt;At present, I am using Multirate Timer (MRT) feature of this LPC1549 microcontroller as per datasheet UM10736, Chapter 19. For this, I am using LPCOpen libraries available for chip_15xx.&lt;/P&gt;&lt;P&gt;Purpose is to generate timer interrupt (Repeat Interupt Mode, Channel 0) @ 1 sec interval. For this, I did following coding :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define DEF_CHANNEL 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Set up and initialize clocking prior to call to main */&lt;/P&gt;&lt;P&gt;void MyBoardSetupIntClocking(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile int i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Powerup main IRC (likely already powered up) */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_SYSCTL_PowerUp(SYSCTL_POWERDOWN_IRC_PD);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_SYSCTL_PowerUp(SYSCTL_POWERDOWN_IRCOUT_PD);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Wait 200us for OSC to be stablized, no status indication, dummy wait. */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; 0x500; i++) {}&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set system PLL input to IRC */&lt;/P&gt;&lt;P&gt;&amp;nbsp; Chip_Clock_SetSystemPLLSource(SYSCTL_PLLCLKSRC_IRC);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Power down PLL to change the PLL divider ratio */&lt;/P&gt;&lt;P&gt;&amp;nbsp; Chip_SYSCTL_PowerDown(SYSCTL_POWERDOWN_SYSPLL_PD);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Setup PLL for main oscillator rate (FCLKIN = 12MHz) * 6 = 72MHz MSEL = 5 (this is pre-decremented), PSEL = 1 (for P = 2)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; FCLKOUT = FCLKIN * (MSEL + 1) = 12MHz * 6 = 72MHz&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; FCCO = FCLKOUT * 2 * P = 72MHz * 2 * 2 = 288MHz (within FCCO range)&lt;/P&gt;&lt;P&gt;*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; LPC_SYSCTL-&amp;gt;SYSPLLCTRL=0x00000045;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Powerup system PLL */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_SYSCTL_PowerUp(SYSCTL_POWERDOWN_SYSPLL_PD);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Wait for PLL to lock */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; while (!Chip_Clock_IsSystemPLLLocked()) {}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Set system clock divider to 1 */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_Clock_SetSysClockDiv(1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Setup FLASH access timing for 72MHz */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_FMC_SetFLASHAccess(SYSCTL_FLASHTIM_72MHZ_CPU);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Set main clock source to the system PLL. This will drive 72MHz for the main clock */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_Clock_SetMainClockSource(SYSCTL_MAINCLKSRC_SYSPLLOUT);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/**&lt;/P&gt;&lt;P&gt;* @brief&amp;nbsp;&amp;nbsp;&amp;nbsp; Handle interrupt from MRT&lt;/P&gt;&lt;P&gt;* @return&amp;nbsp;&amp;nbsp;&amp;nbsp; Nothing&lt;/P&gt;&lt;P&gt;*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void MRT_IRQHandler(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_IntClear(Chip_MRT_GetRegPtr(DEF_CHANNEL));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Clear the intrrupt pending flag*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(Chip_MRT_GetIntPendingByChannel(DEF_CHANNEL))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Clear the pending intterupt*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_IntPending(Chip_MRT_GetRegPtr(DEF_CHANNEL));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;//Blink LED&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_GPIO_SetPinToggle(LPC_GPIO, led_port[1], led_pin[1]); &lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void initTimer(uint8_t channel, MRT_MODE_T mode, uint32_t rate)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Enable the clock to the register interface */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_MRT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Reset MRT */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SYSCTL_PeriphReset(RESET_MRT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Get the channel pointer and disable that Timer*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_SetDisabled(Chip_MRT_GetRegPtr(channel));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Enable the Intterupt for the Timer*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(MRT_IRQn);;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Setup the timer with requested rate */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_SetInterval(Chip_MRT_GetRegPtr(channel), (Chip_Clock_GetSystemClockRate() / rate) |&amp;nbsp; MRT_INTVAL_LOAD);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Set the Timer mode*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_SetMode(Chip_MRT_GetRegPtr(channel),mode);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Clear the pending intterupt*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_IntPending(Chip_MRT_GetRegPtr(channel));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Enable the Timer correspond to the requested channel*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_SetEnabled(Chip_MRT_GetRegPtr(channel));&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/**&lt;/P&gt;&lt;P&gt;* @brief&amp;nbsp;&amp;nbsp;&amp;nbsp; main routine for blinky example&lt;/P&gt;&lt;P&gt;*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;int main(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyBoardSetupIntClocking();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SystemCoreClockUpdate();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; initTimer(DEF_CHANNEL,MRT_MODE_REPEAT,1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __WFI();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;&lt;STRONG&gt;My queries:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;1. Some how, I think my clock frequency is not getting setup properly. I want to work with 72 MHz clock frequency, so at this frequency, I want to generate different timer delays.&lt;/P&gt;&lt;P&gt;2. No matter what clock frequency I set ( 72 MHz or 12 MHz or 24 MHz), Blink interval of the LED must remain same (i.e. 1 sec), according to this API call by passing parameter "rate":&lt;/P&gt;&lt;P&gt; Chip_MRT_SetInterval(Chip_MRT_GetRegPtr(channel), (Chip_Clock_GetSystemClockRate() / rate) |&amp;nbsp; MRT_INTVAL_LOAD);&lt;/P&gt;&lt;P&gt;The "rate" parameter is desired frequency.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The problem is whenever I am changing the clock frequency , the blink interval get changes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;3. My purpose is to generate delays and interrupts in millisecond and microsecond interval. Which timer is most suitable out of MRT, RIT(Repititive Interupt Timer), SysTick Timer ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Raj S.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 03 Aug 2016 14:35:20 GMT</pubDate>
    <dc:creator>rajeshsh_</dc:creator>
    <dc:date>2016-08-03T14:35:20Z</dc:date>
    <item>
      <title>LPC1549 Multirate Timer Configuration Issue</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Multirate-Timer-Configuration-Issue/m-p/566577#M17345</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear All,&lt;/P&gt;&lt;P&gt;I am using LPC1549 Xpresso board for my initial development projects. Also, I am using LPCOpen libraries in KEIL MDK.&lt;/P&gt;&lt;P&gt;At present, I am using Multirate Timer (MRT) feature of this LPC1549 microcontroller as per datasheet UM10736, Chapter 19. For this, I am using LPCOpen libraries available for chip_15xx.&lt;/P&gt;&lt;P&gt;Purpose is to generate timer interrupt (Repeat Interupt Mode, Channel 0) @ 1 sec interval. For this, I did following coding :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;#define DEF_CHANNEL 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Set up and initialize clocking prior to call to main */&lt;/P&gt;&lt;P&gt;void MyBoardSetupIntClocking(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; volatile int i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Powerup main IRC (likely already powered up) */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_SYSCTL_PowerUp(SYSCTL_POWERDOWN_IRC_PD);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_SYSCTL_PowerUp(SYSCTL_POWERDOWN_IRCOUT_PD);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; /* Wait 200us for OSC to be stablized, no status indication, dummy wait. */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; 0x500; i++) {}&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set system PLL input to IRC */&lt;/P&gt;&lt;P&gt;&amp;nbsp; Chip_Clock_SetSystemPLLSource(SYSCTL_PLLCLKSRC_IRC);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Power down PLL to change the PLL divider ratio */&lt;/P&gt;&lt;P&gt;&amp;nbsp; Chip_SYSCTL_PowerDown(SYSCTL_POWERDOWN_SYSPLL_PD);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Setup PLL for main oscillator rate (FCLKIN = 12MHz) * 6 = 72MHz MSEL = 5 (this is pre-decremented), PSEL = 1 (for P = 2)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; FCLKOUT = FCLKIN * (MSEL + 1) = 12MHz * 6 = 72MHz&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; FCCO = FCLKOUT * 2 * P = 72MHz * 2 * 2 = 288MHz (within FCCO range)&lt;/P&gt;&lt;P&gt;*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; LPC_SYSCTL-&amp;gt;SYSPLLCTRL=0x00000045;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Powerup system PLL */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_SYSCTL_PowerUp(SYSCTL_POWERDOWN_SYSPLL_PD);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Wait for PLL to lock */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; while (!Chip_Clock_IsSystemPLLLocked()) {}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Set system clock divider to 1 */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_Clock_SetSysClockDiv(1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Setup FLASH access timing for 72MHz */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_FMC_SetFLASHAccess(SYSCTL_FLASHTIM_72MHZ_CPU);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; /* Set main clock source to the system PLL. This will drive 72MHz for the main clock */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Chip_Clock_SetMainClockSource(SYSCTL_MAINCLKSRC_SYSPLLOUT);&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/**&lt;/P&gt;&lt;P&gt;* @brief&amp;nbsp;&amp;nbsp;&amp;nbsp; Handle interrupt from MRT&lt;/P&gt;&lt;P&gt;* @return&amp;nbsp;&amp;nbsp;&amp;nbsp; Nothing&lt;/P&gt;&lt;P&gt;*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void MRT_IRQHandler(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_IntClear(Chip_MRT_GetRegPtr(DEF_CHANNEL));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Clear the intrrupt pending flag*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(Chip_MRT_GetIntPendingByChannel(DEF_CHANNEL))&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Clear the pending intterupt*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_IntPending(Chip_MRT_GetRegPtr(DEF_CHANNEL));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;//Blink LED&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_GPIO_SetPinToggle(LPC_GPIO, led_port[1], led_pin[1]); &lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void initTimer(uint8_t channel, MRT_MODE_T mode, uint32_t rate)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Enable the clock to the register interface */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_MRT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Reset MRT */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_SYSCTL_PeriphReset(RESET_MRT);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Get the channel pointer and disable that Timer*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_SetDisabled(Chip_MRT_GetRegPtr(channel));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Enable the Intterupt for the Timer*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NVIC_EnableIRQ(MRT_IRQn);;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Setup the timer with requested rate */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_SetInterval(Chip_MRT_GetRegPtr(channel), (Chip_Clock_GetSystemClockRate() / rate) |&amp;nbsp; MRT_INTVAL_LOAD);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Set the Timer mode*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_SetMode(Chip_MRT_GetRegPtr(channel),mode);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Clear the pending intterupt*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_IntPending(Chip_MRT_GetRegPtr(channel));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*Enable the Timer correspond to the requested channel*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chip_MRT_SetEnabled(Chip_MRT_GetRegPtr(channel));&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/**&lt;/P&gt;&lt;P&gt;* @brief&amp;nbsp;&amp;nbsp;&amp;nbsp; main routine for blinky example&lt;/P&gt;&lt;P&gt;*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;int main(void)&lt;/P&gt;&lt;P&gt;{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyBoardSetupIntClocking();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SystemCoreClockUpdate();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; initTimer(DEF_CHANNEL,MRT_MODE_REPEAT,1);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; __WFI();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="text-decoration: underline;"&gt;&lt;STRONG&gt;My queries:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;1. Some how, I think my clock frequency is not getting setup properly. I want to work with 72 MHz clock frequency, so at this frequency, I want to generate different timer delays.&lt;/P&gt;&lt;P&gt;2. No matter what clock frequency I set ( 72 MHz or 12 MHz or 24 MHz), Blink interval of the LED must remain same (i.e. 1 sec), according to this API call by passing parameter "rate":&lt;/P&gt;&lt;P&gt; Chip_MRT_SetInterval(Chip_MRT_GetRegPtr(channel), (Chip_Clock_GetSystemClockRate() / rate) |&amp;nbsp; MRT_INTVAL_LOAD);&lt;/P&gt;&lt;P&gt;The "rate" parameter is desired frequency.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The problem is whenever I am changing the clock frequency , the blink interval get changes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;3. My purpose is to generate delays and interrupts in millisecond and microsecond interval. Which timer is most suitable out of MRT, RIT(Repititive Interupt Timer), SysTick Timer ?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Raj S.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 03 Aug 2016 14:35:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Multirate-Timer-Configuration-Issue/m-p/566577#M17345</guid>
      <dc:creator>rajeshsh_</dc:creator>
      <dc:date>2016-08-03T14:35:20Z</dc:date>
    </item>
    <item>
      <title>Re: LPC1549 Multirate Timer Configuration Issue</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Multirate-Timer-Configuration-Issue/m-p/566578#M17346</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Rajesh&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Sorry for late response, according to your queries, here are the answers:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Why do you think that PLL is not being set correctly? Following is an initialization that I used for LPCXpresso1549 board and it worked well:&lt;/LI&gt;&lt;/UL&gt;&lt;PRE class="language-c line-numbers"&gt;&lt;CODE&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN class="comment token"&gt;/* Powerup main IRC (likely already powered up) */&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="token function"&gt;Chip_SYSCTL_PowerUp&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;SYSCTL_POWERDOWN_IRC_PD&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="token function"&gt;Chip_SYSCTL_PowerUp&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;SYSCTL_POWERDOWN_IRCOUT_PD&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;/* Wait 200us for OSC to be stablized, no status
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; indication, dummy wait. */&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="keyword token"&gt;for&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;i &lt;SPAN class="operator token"&gt;=&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; i &lt;SPAN class="operator token"&gt;&amp;lt;&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;0x200&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt; i&lt;SPAN class="operator token"&gt;++&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;/* Set system PLL input to main oscillator */&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="token function"&gt;Chip_Clock_SetSystemPLLSource&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;SYSCTL_PLLCLKSRC_IRC&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;/* Power down PLL to change the PLL divider ratio */&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="token function"&gt;Chip_SYSCTL_PowerDown&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;SYSCTL_POWERDOWN_SYSPLL_PD&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;/* Setup PLL for main oscillator rate (FCLKIN = 12MHz) * 6 = 72MHz
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MSEL = 5 (this is pre-decremented), PSEL = 1 (for P = 2)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FCLKOUT = FCLKIN * (MSEL + 1) = 12MHz * 6 = 72MHz
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FCCO = FCLKOUT * 2 * P = 72MHz * 2 * 2 = 288MHz (within FCCO range) */&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="token function"&gt;Chip_Clock_SetupSystemPLL&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;5&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;,&lt;/SPAN&gt; &lt;SPAN class="number token"&gt;2&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;/* Powerup system PLL */&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="token function"&gt;Chip_SYSCTL_PowerUp&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;SYSCTL_POWERDOWN_SYSPLL_PD&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;/* Wait for PLL to lock */&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="keyword token"&gt;while&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="operator token"&gt;!&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;Chip_Clock_IsSystemPLLLocked&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt; &lt;SPAN class="punctuation token"&gt;{&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;}&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;/* Set system clock divider to 1 */&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="token function"&gt;Chip_Clock_SetSysClockDiv&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;&lt;SPAN class="number token"&gt;1&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;/* Setup FLASH access timing for 72MHz */&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="token function"&gt;Chip_FMC_SetFLASHAccess&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;SYSCTL_FLASHTIM_72MHZ_CPU&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="comment token"&gt;/* Set main clock source to the system PLL. This will drive 72MHz
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for the main clock */&lt;/SPAN&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;SPAN class="token function"&gt;Chip_Clock_SetMainClockSource&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;(&lt;/SPAN&gt;SYSCTL_MAINCLKSRC_SYSPLLOUT&lt;SPAN class="punctuation token"&gt;)&lt;/SPAN&gt;&lt;SPAN class="punctuation token"&gt;;&lt;/SPAN&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;UL&gt;&lt;LI&gt;Are you sure that INTVAL register has a valid IVALUE? Remeber that MRT is a 24-bit timer, and, when you configure to get an interrupt every 1 seg, you configure IVALUE to be (72MHz / 1Hz = 72000000 or 0x44AA200), as you may see, 0x44AA200 cannot be set to MRT (it is a 28-bit value) so period for this timer is not the want that you desire:&lt;/LI&gt;&lt;/UL&gt;&lt;P style="text-align: center;"&gt;&lt;SPAN class="lia-inline-image-display-wrapper" image-alt="MRT period.jpg"&gt;&lt;IMG alt="MRT period.jpg" src="https://community.nxp.com/t5/image/serverpage/image-id/5758i9EC3CEF9BD0BEF4F/image-size/large?v=v2&amp;amp;px=999" title="MRT period.jpg" /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;So, you cannot get a 1 Hz frequency when MRT uses 72 MHz as its source frequency.&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;Taking in mind this previous point, you can use RIT period which is a 48-bit counter that is fed from Main Clock. It can provide a bigger period timer than Systcik and MRT (24-bit counters)&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;I hope this helps!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Isaac&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Nov 2020 13:42:37 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/LPC1549-Multirate-Timer-Configuration-Issue/m-p/566578#M17346</guid>
      <dc:creator>isaacavila</dc:creator>
      <dc:date>2020-11-02T13:42:37Z</dc:date>
    </item>
  </channel>
</rss>

