<?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 PWM0 and PWM1 synchronization in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/PWM0-and-PWM1-synchronization/m-p/547921#M13550</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by justinx90 on Sun Sep 27 20:31:51 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am currently writing some firmware for an LPC4078FBD208 using the LPC Peripheral Driver Library.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I need to ensure syncronization between PWM0 and PWM1.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I would like some clarity on the use of the Master Disable (MDIS) bit in the PWM Timer Control Register. I have read the user manual (UM10562), but I find it is lacking in detail in this area.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;These are the bullet pointed steps I have taken to enable syncronization between PWM0 and PWM1.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[list]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Enable power to PWM0 and PWM1.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set PWM0 and PWM1 prescaler.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]&lt;/SPAN&gt;&lt;STRONG&gt;Set Master Disable (MIDS) to 1.&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set GPIO direction for each pwm channel pin.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set IOCON for each pwm channel pin.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set PWM0 and PWM1 match register 0.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set PWM0 and PWM1 interrupt settings.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set PWM0 and PWM1 channel 1-6 settings.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Reset PWM0 and PWM1 counter.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Enable PWM mode for PWM0 and PWM1.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set counter enable for PWM0 and PWM1.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]&lt;/SPAN&gt;&lt;STRONG&gt;Set Master Disable (MIDS) to 0 to ensure syncronised starting of the counters.&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;[/list]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any feedback on whether this is the correct procedure and use of MDIS to ensure syncronization would be much appreaciated.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;PWM initilisation code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void Hal_PWMInitialise(void)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_TIMERCFG_Type PWMCfgDat;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_MATCHCFG_Type PWMMatchCfgDat;
&amp;nbsp;&amp;nbsp;&amp;nbsp; size_t i;

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Initialize PWM peripheral(s).
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMCfgDat.PrescaleOption = PWM_TIMER_PRESCALE_USVAL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMCfgDat.PrescaleValue = 10U;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_Init(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N, PWM_MODE_TIMER, &amp;amp;PWMCfgDat);
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_Init(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N, PWM_MODE_TIMER, &amp;amp;PWMCfgDat);
 

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Master disable for PWM0 and PWM1 peripherals.
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM0_TCR |= (1 &amp;lt;&amp;lt; LPC_PWM0_TCR_MDIS_BIT);


&amp;nbsp;&amp;nbsp;&amp;nbsp; // Initialize PWM pin connect.
&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; N_ELEMENTS(m_OutputChannelLowCurrentLayout); i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIO_SetDir(m_OutputChannelLowCurrentLayout&lt;I&gt;.port, (1U &amp;lt;&amp;lt; m_OutputChannelLowCurrentLayout&lt;I&gt;.pin), GPIO_DIRECTION_OUTPUT);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PINSEL_ConfigPin(m_OutputChannelLowCurrentLayout&lt;I&gt;.port, m_OutputChannelLowCurrentLayout&lt;I&gt;.pin, BRD_OUTPUT_CHANNEL_LC_FET_PWM_FUNC_NO);
&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; // Set match value for PWM match channel 0 and update immediately.
&amp;nbsp;&amp;nbsp;&amp;nbsp; // PWM levels are set between 0 - 1000ppt (0 - 100%). A level of 100% = 1000ppt.
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* 26.4.1 Rules for Single Edge Controlled PWM Outputs
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. All single edge controlled PWM outputs go high at the beginning of a PWM cycle
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unless their match value is equal to 0.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. Each PWM output will go low when its match value is reached. If no match occurs (i.e.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the match value is greater than the PWM rate), the PWM output remains continuously
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; high. */
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_MatchUpdate(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N, 0, (BRD_OUTPUT_CHANNEL_LC_FET_PWM_PERIOD - 1U), PWM_MATCH_UPDATE_NOW);
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_MatchUpdate(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N, 0, (BRD_OUTPUT_CHANNEL_LC_FET_PWM_PERIOD - 1U), PWM_MATCH_UPDATE_NOW);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 

&amp;nbsp;&amp;nbsp;&amp;nbsp; // PWM Timer/Counter will be reset when channel 0 matching
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.IntOnMatch = ENABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.MatchChannel = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.ResetOnMatch = ENABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.StopOnMatch = DISABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ConfigMatch(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N, &amp;amp;PWMMatchCfgDat);

&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.IntOnMatch = DISABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ConfigMatch(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N, &amp;amp;PWMMatchCfgDat);
 

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Configure each PWM channel.
&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; N_ELEMENTS(m_OutputChannelLowCurrentLayout); i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ChannelConfig(m_OutputChannelLowCurrentLayout&lt;I&gt;.pwm, m_OutputChannelLowCurrentLayout&lt;I&gt;.channel, PWM_CHANNEL_SINGLE_EDGE);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_MatchUpdate(m_OutputChannelLowCurrentLayout&lt;I&gt;.pwm, m_OutputChannelLowCurrentLayout&lt;I&gt;.channel, 0, PWM_MATCH_UPDATE_NEXT_RST);
&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; PWMMatchCfgDat.IntOnMatch = DISABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.MatchChannel = m_OutputChannelLowCurrentLayout&lt;I&gt;.channel;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.ResetOnMatch = DISABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.StopOnMatch = DISABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ConfigMatch(m_OutputChannelLowCurrentLayout&lt;I&gt;.pwm, &amp;amp;PWMMatchCfgDat);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ChannelCmd(m_OutputChannelLowCurrentLayout&lt;I&gt;.pwm, m_OutputChannelLowCurrentLayout&lt;I&gt;.channel, ENABLE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }


&amp;nbsp;&amp;nbsp;&amp;nbsp; // Reset counter.
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ResetCounter(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N);
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ResetCounter(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N);

&amp;nbsp;&amp;nbsp;&amp;nbsp; // PWM mode enable.&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_Cmd(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N, ENABLE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_Cmd(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N, ENABLE);

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Start counter.
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_CounterCmd(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N, ENABLE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_CounterCmd(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N, ENABLE);

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Master enable for PWM0 and PWM1 peripherals.
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM0_TCR &amp;amp;= ~(1U &amp;lt;&amp;lt; LPC_PWM0_TCR_MDIS_BIT);
}
&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 18:29:56 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T18:29:56Z</dc:date>
    <item>
      <title>PWM0 and PWM1 synchronization</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/PWM0-and-PWM1-synchronization/m-p/547921#M13550</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by justinx90 on Sun Sep 27 20:31:51 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I am currently writing some firmware for an LPC4078FBD208 using the LPC Peripheral Driver Library.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I need to ensure syncronization between PWM0 and PWM1.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I would like some clarity on the use of the Master Disable (MDIS) bit in the PWM Timer Control Register. I have read the user manual (UM10562), but I find it is lacking in detail in this area.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;These are the bullet pointed steps I have taken to enable syncronization between PWM0 and PWM1.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;[list]&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Enable power to PWM0 and PWM1.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set PWM0 and PWM1 prescaler.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]&lt;/SPAN&gt;&lt;STRONG&gt;Set Master Disable (MIDS) to 1.&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set GPIO direction for each pwm channel pin.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set IOCON for each pwm channel pin.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set PWM0 and PWM1 match register 0.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set PWM0 and PWM1 interrupt settings.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set PWM0 and PWM1 channel 1-6 settings.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Reset PWM0 and PWM1 counter.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Enable PWM mode for PWM0 and PWM1.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]Set counter enable for PWM0 and PWM1.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; [*]&lt;/SPAN&gt;&lt;STRONG&gt;Set Master Disable (MIDS) to 0 to ensure syncronised starting of the counters.&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;[/list]&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any feedback on whether this is the correct procedure and use of MDIS to ensure syncronization would be much appreaciated.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;PWM initilisation code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
void Hal_PWMInitialise(void)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_TIMERCFG_Type PWMCfgDat;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_MATCHCFG_Type PWMMatchCfgDat;
&amp;nbsp;&amp;nbsp;&amp;nbsp; size_t i;

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Initialize PWM peripheral(s).
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMCfgDat.PrescaleOption = PWM_TIMER_PRESCALE_USVAL;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMCfgDat.PrescaleValue = 10U;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_Init(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N, PWM_MODE_TIMER, &amp;amp;PWMCfgDat);
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_Init(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N, PWM_MODE_TIMER, &amp;amp;PWMCfgDat);
 

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Master disable for PWM0 and PWM1 peripherals.
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM0_TCR |= (1 &amp;lt;&amp;lt; LPC_PWM0_TCR_MDIS_BIT);


&amp;nbsp;&amp;nbsp;&amp;nbsp; // Initialize PWM pin connect.
&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; N_ELEMENTS(m_OutputChannelLowCurrentLayout); i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GPIO_SetDir(m_OutputChannelLowCurrentLayout&lt;I&gt;.port, (1U &amp;lt;&amp;lt; m_OutputChannelLowCurrentLayout&lt;I&gt;.pin), GPIO_DIRECTION_OUTPUT);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PINSEL_ConfigPin(m_OutputChannelLowCurrentLayout&lt;I&gt;.port, m_OutputChannelLowCurrentLayout&lt;I&gt;.pin, BRD_OUTPUT_CHANNEL_LC_FET_PWM_FUNC_NO);
&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; // Set match value for PWM match channel 0 and update immediately.
&amp;nbsp;&amp;nbsp;&amp;nbsp; // PWM levels are set between 0 - 1000ppt (0 - 100%). A level of 100% = 1000ppt.
&amp;nbsp;&amp;nbsp;&amp;nbsp; /* 26.4.1 Rules for Single Edge Controlled PWM Outputs
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. All single edge controlled PWM outputs go high at the beginning of a PWM cycle
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unless their match value is equal to 0.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. Each PWM output will go low when its match value is reached. If no match occurs (i.e.
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the match value is greater than the PWM rate), the PWM output remains continuously
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; high. */
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_MatchUpdate(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N, 0, (BRD_OUTPUT_CHANNEL_LC_FET_PWM_PERIOD - 1U), PWM_MATCH_UPDATE_NOW);
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_MatchUpdate(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N, 0, (BRD_OUTPUT_CHANNEL_LC_FET_PWM_PERIOD - 1U), PWM_MATCH_UPDATE_NOW);
&amp;nbsp;&amp;nbsp;&amp;nbsp; 

&amp;nbsp;&amp;nbsp;&amp;nbsp; // PWM Timer/Counter will be reset when channel 0 matching
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.IntOnMatch = ENABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.MatchChannel = 0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.ResetOnMatch = ENABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.StopOnMatch = DISABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ConfigMatch(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N, &amp;amp;PWMMatchCfgDat);

&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.IntOnMatch = DISABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ConfigMatch(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N, &amp;amp;PWMMatchCfgDat);
 

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Configure each PWM channel.
&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; N_ELEMENTS(m_OutputChannelLowCurrentLayout); i++)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ChannelConfig(m_OutputChannelLowCurrentLayout&lt;I&gt;.pwm, m_OutputChannelLowCurrentLayout&lt;I&gt;.channel, PWM_CHANNEL_SINGLE_EDGE);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_MatchUpdate(m_OutputChannelLowCurrentLayout&lt;I&gt;.pwm, m_OutputChannelLowCurrentLayout&lt;I&gt;.channel, 0, PWM_MATCH_UPDATE_NEXT_RST);
&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; PWMMatchCfgDat.IntOnMatch = DISABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.MatchChannel = m_OutputChannelLowCurrentLayout&lt;I&gt;.channel;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.ResetOnMatch = DISABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMMatchCfgDat.StopOnMatch = DISABLE;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ConfigMatch(m_OutputChannelLowCurrentLayout&lt;I&gt;.pwm, &amp;amp;PWMMatchCfgDat);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ChannelCmd(m_OutputChannelLowCurrentLayout&lt;I&gt;.pwm, m_OutputChannelLowCurrentLayout&lt;I&gt;.channel, ENABLE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; }


&amp;nbsp;&amp;nbsp;&amp;nbsp; // Reset counter.
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ResetCounter(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N);
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_ResetCounter(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N);

&amp;nbsp;&amp;nbsp;&amp;nbsp; // PWM mode enable.&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_Cmd(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N, ENABLE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_Cmd(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N, ENABLE);

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Start counter.
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_CounterCmd(BRD_OUTPUT_CHANNEL_LC_FET_PWMA_PERPH_N, ENABLE);
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWM_CounterCmd(BRD_OUTPUT_CHANNEL_LC_FET_PWMB_PERPH_N, ENABLE);

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Master enable for PWM0 and PWM1 peripherals.
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM0_TCR &amp;amp;= ~(1U &amp;lt;&amp;lt; LPC_PWM0_TCR_MDIS_BIT);
}
&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:29:56 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/PWM0-and-PWM1-synchronization/m-p/547921#M13550</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:29:56Z</dc:date>
    </item>
  </channel>
</rss>

