<?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 Re: SPWM WITH SCT BLOCK AND DMA in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1736165#M54324</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;Of course, it is impossible to update duty cycle without interrupt.&lt;/P&gt;
&lt;P&gt;I just give you suggestion from simplicity to complexity.&lt;/P&gt;
&lt;P&gt;Can you output PWM signal now?&lt;/P&gt;
&lt;P&gt;Hope it can help you&lt;/P&gt;
&lt;P&gt;BR&lt;/P&gt;
&lt;P&gt;XiangJun Rong&lt;/P&gt;</description>
    <pubDate>Tue, 10 Oct 2023 02:51:54 GMT</pubDate>
    <dc:creator>xiangjun_rong</dc:creator>
    <dc:date>2023-10-10T02:51:54Z</dc:date>
    <item>
      <title>SPWM WITH SCT BLOCK AND DMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1732788#M54261</link>
      <description>&lt;P&gt;Hello,&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;I am trying to generate a Sine PWM signal with fewer ISR, my source code looks like this at the moment:&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;DIV&gt;#include "board.h"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*****************************************************************************&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;* Private types/enumerations/variables&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;****************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define SCT_PWM&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_SCT&lt;/DIV&gt;&lt;DIV&gt;#define SCT_PWM_PIN_OUT&amp;nbsp; &amp;nbsp; 4 /* COUT4 Generate square wave */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define SCT_PWM_OUT&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1 /* Index of OUT PWM */&lt;/DIV&gt;&lt;DIV&gt;#define SCT_PWM_RATE&amp;nbsp; &amp;nbsp; 512 /* PWM frequency 51.2 KHz */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;// LED_W&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_PORT&amp;nbsp; &amp;nbsp; 0&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_PIN&amp;nbsp; &amp;nbsp; &amp;nbsp; 19&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_OUT&amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_GPIO-&amp;gt;DIR[LED_W_PORT] |= (1UL &amp;lt;&amp;lt; LED_W_PIN)&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_HI&amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_GPIO-&amp;gt;B[LED_W_PORT][LED_W_PIN] = true&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_LO&amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_GPIO-&amp;gt;B[LED_W_PORT][LED_W_PIN] = false&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_INP&amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_GPIO-&amp;gt;DIR[LED_W_PORT] &amp;amp;= ~(1UL &amp;lt;&amp;lt; LED_W_PIN)&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_IN&amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_GPIO-&amp;gt;B[LED_W_PORT][LED_W_PIN]&lt;/DIV&gt;&lt;DIV&gt;/*****************************************************************************&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;* Public types/enumerations/variables&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;****************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;#define TABLE_SIZE 20&lt;/DIV&gt;&lt;DIV&gt;uint16_t sine_table[TABLE_SIZE] = {488,647,788,897,962,975,935,848,721,569,408,256,129,41,2,15,80,188,330,488};&lt;/DIV&gt;&lt;DIV&gt;/*****************************************************************************&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;* Private functions&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;****************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/* Setup board specific pin muxing */&lt;/DIV&gt;&lt;DIV&gt;static void app_setup_pin(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 1, IOCON_FUNC3 | IOCON_MODE_INACT | IOCON_DIGITAL_EN | IOCON_INPFILT_OFF);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 19, IOCON_FUNC0 | IOCON_MODE_INACT | IOCON_DIGITAL_EN);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*****************************************************************************&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;* Public functions&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;****************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void update_pwm()&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; static uint16_t index = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; static uint8_t counter = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if(counter == 0) {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_SCT-&amp;gt;MATCHREL[1].L = sine_table[index] ;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; index = (index + 1) % TABLE_SIZE;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; counter = (counter + 1) % 5;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LED_W_INP;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void SCT0_IRQHandler(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (LPC_SCT-&amp;gt;EVFLAG &amp;amp; (1 &amp;lt;&amp;lt; 0))&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; update_pwm();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_SCT-&amp;gt;EVFLAG = (1 &amp;lt;&amp;lt; 0); // clear flag of event 0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void STC0_Init(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* Initialize the SCT as PWM and set frequency */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Chip_SCTPWM_Init(SCT_PWM);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;NVIC_EnableIRQ(SCT0_IRQn);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Chip_SCTPWM_SetRate(SCT_PWM, SCT_PWM_RATE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LPC_SCT-&amp;gt;EVENT[1].STATE = 0xFFFFFFFF; // valid event on all states&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LPC_SCT-&amp;gt;EVENT[1].CTRL = (1 &amp;lt;&amp;lt; 0) | (1 &amp;lt;&amp;lt; 12); //&amp;nbsp; MATCH[1].L and match event&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LPC_SCT-&amp;gt;EVFLAG = (1 &amp;lt;&amp;lt; 0); // clear flag of event 0&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LPC_SCT-&amp;gt;EVEN = (1 &amp;lt;&amp;lt; 0); // enable interrupt for event 0&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;int main(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;int loop = 1; /* Prevents the unreachable statement warning */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* Generic Initialization */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;SystemCoreClockUpdate();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Board_Init();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;STC0_Init();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* Setup Board specific output pin */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;app_setup_pin();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* Use SCT0_OUT1 pin */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;//LED_W_OUT;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_OUT, SCT_PWM_PIN_OUT);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Chip_SCTPWM_Start(SCT_PWM);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;while (loop) {&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;__WFI();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;This code is a modified version from the SCT example, I been able to successfully generate the modulation for the sine wave and after low pass filter I get good enough result BUT the main drawback is that it requires lots of interrupts.&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I want to configure the DMA to update the MATCHREL[1] to change the match value after the match register has reloaded the value 5 times (for signal integrity mainly).&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;I know that I have to enable the SCT DMAREQ0 to match the event 0 and also have to match it with DMA_ITRIG_INMUX[2].&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;But ain't sure what would be the right configuration required on the DMA side to be able to work with the size of the array that is getting loaded into the SCT blocks.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;can someone of tech support help get a general direction based on the code I have provided ???&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;thanks.&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;</description>
      <pubDate>Mon, 02 Oct 2023 21:50:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1732788#M54261</guid>
      <dc:creator>skanda19</dc:creator>
      <dc:date>2023-10-02T21:50:00Z</dc:date>
    </item>
    <item>
      <title>Re: SPWM WITH SCT BLOCK AND DMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1733304#M54266</link>
      <description>&lt;P&gt;This is the code I have developed so far:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#include "board.h"&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*****************************************************************************&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;* Private types/enumerations/variables&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;****************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define SCT_PWM&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_SCT&lt;/DIV&gt;&lt;DIV&gt;#define SCT_PWM_PIN_OUT&amp;nbsp; &amp;nbsp; 4 /* COUT4 Generate square wave */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define SCT_PWM_OUT&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1 /* Index of OUT PWM */&lt;/DIV&gt;&lt;DIV&gt;#define SCT_PWM_RATE&amp;nbsp; &amp;nbsp; 51200 /* PWM frequency 51.2 KHz */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;#define SCT_PWM_CHANNEL 0&amp;nbsp; // Definir el canal del SCT para el PWM&lt;/DIV&gt;&lt;DIV&gt;#define SIZE_SINE_TABLE (sizeof(sine_table) / sizeof(sine_table[0]))&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;volatile bool dmaDone;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;// LED_W&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_PORT&amp;nbsp; &amp;nbsp; 0&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_PIN&amp;nbsp; &amp;nbsp; &amp;nbsp; 19&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_OUT&amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_GPIO-&amp;gt;DIR[LED_W_PORT] |= (1UL &amp;lt;&amp;lt; LED_W_PIN)&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_HI&amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_GPIO-&amp;gt;B[LED_W_PORT][LED_W_PIN] = true&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_LO&amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_GPIO-&amp;gt;B[LED_W_PORT][LED_W_PIN] = false&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_INP&amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_GPIO-&amp;gt;DIR[LED_W_PORT] &amp;amp;= ~(1UL &amp;lt;&amp;lt; LED_W_PIN)&lt;/DIV&gt;&lt;DIV&gt;#define LED_W_IN&amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_GPIO-&amp;gt;B[LED_W_PORT][LED_W_PIN]&lt;/DIV&gt;&lt;DIV&gt;/*****************************************************************************&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;* Public types/enumerations/variables&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;****************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;#define TABLE_SIZE 20&lt;/DIV&gt;&lt;DIV&gt;uint16_t sine_table[TABLE_SIZE] = {488,647,788,897,962,975,935,848,721,569,408,256,129,41,2,15,80,188,330,488};&lt;/DIV&gt;&lt;DIV&gt;/*****************************************************************************&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;* Private functions&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;****************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/* Setup board specific pin muxing */&lt;/DIV&gt;&lt;DIV&gt;static void app_setup_pin(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Chip_IOCON_PinMuxSet(LPC_IOCON, 1, 1, IOCON_FUNC3 | IOCON_MODE_INACT | IOCON_DIGITAL_EN | IOCON_INPFILT_OFF);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 19, IOCON_FUNC0 | IOCON_MODE_INACT | IOCON_DIGITAL_EN);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*****************************************************************************&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;* Public functions&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;****************************************************************************/&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void update_pwm()&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; static uint16_t index = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; static uint8_t counter = 0;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if(counter == 0) {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_SCT-&amp;gt;MATCHREL[1].L = sine_table[index] ;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; index = (index + 1) % TABLE_SIZE;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; counter = (counter + 1) % 5;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LED_W_INP;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void SCT0_IRQHandler(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (LPC_SCT-&amp;gt;EVFLAG &amp;amp; (1 &amp;lt;&amp;lt; 0))&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; update_pwm();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LPC_SCT-&amp;gt;EVFLAG = (1 &amp;lt;&amp;lt; 0); // clear flag of event 0&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void STC0_Init(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/* Initialize the SCT as PWM and set frequency */&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Chip_SCTPWM_Init(SCT_PWM);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;NVIC_EnableIRQ(SCT0_IRQn);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Chip_SCTPWM_SetRate(SCT_PWM, SCT_PWM_RATE);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LPC_SCT-&amp;gt;EVENT[1].STATE = 0xFFFFFFFF; // valid event on all states&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LPC_SCT-&amp;gt;EVENT[1].CTRL = (1 &amp;lt;&amp;lt; 0) | (1 &amp;lt;&amp;lt; 12); //&amp;nbsp; MATCH[1].L and match event&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LPC_SCT-&amp;gt;EVFLAG = (1 &amp;lt;&amp;lt; 0); // clear flag of event 0&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LPC_SCT-&amp;gt;EVEN = (1 &amp;lt;&amp;lt; 0); // enable interrupt for event 0&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;LPC_SCT-&amp;gt;DMAREQ0 |= (1 &amp;lt;&amp;lt; 1);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void DMA_IRQHandler(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; if ((Chip_DMA_GetIntStatus(LPC_DMA) &amp;amp; DMA_INTSTAT_ACTIVEERRINT) != 0) {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Chip_DMA_DisableChannel(LPC_DMA, DMA_CH21);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while ((Chip_DMA_GetBusyChannels(LPC_DMA) &amp;amp; (1 &amp;lt;&amp;lt; DMA_CH21)) != 0) {}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Chip_DMA_AbortChannel(LPC_DMA, DMA_CH21);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Chip_DMA_ClearErrorIntChannel(LPC_DMA, DMA_CH21);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Chip_DMA_EnableChannel(LPC_DMA, DMA_CH21);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; Chip_DMA_ClearActiveIntAChannel(LPC_DMA, DMA_CH21);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; dmaDone = true;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;int main(void)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; int loop = 1; /* Prevents the unreachable statement warning */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; DMA_CHDESC_T sct_pwm_dma_descriptor;&amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* Generic Initialization */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; SystemCoreClockUpdate();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; Board_Init();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; STC0_Init();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* Setup Board specific output pin */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; app_setup_pin();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; /* Use SCT0_OUT1 pin */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; //LED_W_OUT;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_OUT, SCT_PWM_PIN_OUT);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; Chip_SCTPWM_Start(SCT_PWM);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; Chip_DMA_Init(LPC_DMA);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; Chip_DMA_Enable(LPC_DMA);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; Chip_DMA_SetSRAMBase(LPC_DMA, DMA_ADDR(Chip_DMA_Table));&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; // Configura el canal de DMA&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; Chip_DMA_EnableChannel(LPC_DMA, DMA_CH21);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; Chip_DMA_EnableIntChannel(LPC_DMA, DMA_CH21);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; Chip_DMA_SetupChannelConfig(LPC_DMA, DMA_CH21,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (DMA_CFG_PERIPHREQEN | DMA_CFG_TRIGTYPE_EDGE | DMA_CFG_TRIGPOL_HIGH |&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DMA_CFG_BURSTPOWER_16 | DMA_CFG_CHPRIORITY(0)));&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; sct_pwm_dma_descriptor.source = DMA_ADDR(&amp;amp;sine_table[SIZE_SINE_TABLE]);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; sct_pwm_dma_descriptor.dest = DMA_ADDR(&amp;amp;(LPC_SCT-&amp;gt;MATCHREL[1].L));&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; sct_pwm_dma_descriptor.next = DMA_ADDR(&amp;amp;sine_table[SIZE_SINE_TABLE]);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; NVIC_EnableIRQ(DMA_IRQn);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; while (loop) {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; __WFI();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Configura el descriptor de transferencia y válida el canal&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Chip_DMA_SetupTranChannel(LPC_DMA, DMA_CH21, &amp;amp;sct_pwm_dma_descriptor);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Chip_DMA_SetValidChannel(LPC_DMA, DMA_CH21);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Configura la transferencia de datos y dispara el DMA&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Chip_DMA_SetupChannelTransfer(LPC_DMA, DMA_CH21,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (DMA_XFERCFG_CFGVALID | DMA_XFERCFG_SETINTA | DMA_XFERCFG_SWTRIG | DMA_XFERCFG_RELOAD|&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DMA_XFERCFG_WIDTH_16 | DMA_XFERCFG_SRCINC_1 | DMA_XFERCFG_DSTINC_0 |&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DMA_XFERCFG_XFERCOUNT(SIZE_SINE_TABLE)));&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while (dmaDone == false) {}; // Espera a que se complete la transferencia DMA&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; return 0;&lt;/DIV&gt;&lt;DIV&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;I see on debug mode that on register DAMREQ0 and bit DRQ0 is set, the description says if I can see this bit set there's probably some issue with the configuration on the DMA side.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;would you be able to help me catch the mistake on the configuration of the DMA side ???&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;I am complete newbie with DMA.&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;thanks.&amp;nbsp;&lt;/DIV&gt;</description>
      <pubDate>Tue, 03 Oct 2023 18:15:47 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1733304#M54266</guid>
      <dc:creator>skanda19</dc:creator>
      <dc:date>2023-10-03T18:15:47Z</dc:date>
    </item>
    <item>
      <title>Re: SPWM WITH SCT BLOCK AND DMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1735642#M54310</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;Pls refer to the application note an11538.pdf which I attached.&lt;/P&gt;
&lt;P&gt;I suppose that you should follow up the procedures:&lt;/P&gt;
&lt;P&gt;1)use the code in AN so that you can output a PWM signal via PWM output pin without interrupt and DMA involved.&lt;/P&gt;
&lt;P&gt;2)have the SCT to generate interrupt, in the ISR, update the PWM duty cycle&amp;nbsp; with sine-table as you have done without DMA involved. You can see the variable duty cycle of PWM via scope.&lt;/P&gt;
&lt;P&gt;3)disable SCT interrupt, use DMA to update the PWM duty cycle. While you have to enable DMA interrupt after a sine cycle has completed, in the DMA ISR, assign the sine-table address to the DMA source address.&lt;/P&gt;
&lt;P&gt;For the SCT module, you can use register access as the AN, for the DMA, you can call the SDK function.&lt;/P&gt;
&lt;P&gt;Hope it can help you&lt;/P&gt;
&lt;P&gt;BR&lt;/P&gt;
&lt;P&gt;XiangJun Rong&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 09 Oct 2023 08:48:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1735642#M54310</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2023-10-09T08:48:27Z</dc:date>
    </item>
    <item>
      <title>Re: SPWM WITH SCT BLOCK AND DMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1735888#M54318</link>
      <description>&lt;P&gt;Thanks for replying, would it be possible to update the Duty Cycle of the SCT without any interrupt ? even without the DMA interrupt that you suggested ???&lt;/P&gt;</description>
      <pubDate>Mon, 09 Oct 2023 15:36:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1735888#M54318</guid>
      <dc:creator>skanda19</dc:creator>
      <dc:date>2023-10-09T15:36:40Z</dc:date>
    </item>
    <item>
      <title>Re: SPWM WITH SCT BLOCK AND DMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1736165#M54324</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;Of course, it is impossible to update duty cycle without interrupt.&lt;/P&gt;
&lt;P&gt;I just give you suggestion from simplicity to complexity.&lt;/P&gt;
&lt;P&gt;Can you output PWM signal now?&lt;/P&gt;
&lt;P&gt;Hope it can help you&lt;/P&gt;
&lt;P&gt;BR&lt;/P&gt;
&lt;P&gt;XiangJun Rong&lt;/P&gt;</description>
      <pubDate>Tue, 10 Oct 2023 02:51:54 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1736165#M54324</guid>
      <dc:creator>xiangjun_rong</dc:creator>
      <dc:date>2023-10-10T02:51:54Z</dc:date>
    </item>
    <item>
      <title>Re: SPWM WITH SCT BLOCK AND DMA</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1736669#M54330</link>
      <description>&lt;P&gt;understood, Yes, let me share the script.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;At this time the program will have the trigger by hardware set and creating the request for the interruption. I am having an issue were I can only transfer the first item of the buffer instead of the whole thing.&amp;nbsp;&lt;/P&gt;&lt;P&gt;so the program generates a PWM output and only transfers one item from the buffer.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;please see attachment.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 10 Oct 2023 15:11:30 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/SPWM-WITH-SCT-BLOCK-AND-DMA/m-p/1736669#M54330</guid>
      <dc:creator>skanda19</dc:creator>
      <dc:date>2023-10-10T15:11:30Z</dc:date>
    </item>
  </channel>
</rss>

