SLAAEL1A January   2025  – August 2025 MSPM0C1105 , MSPM0C1106 , MSPM0G3507 , MSPM0H3216 , MSPM0L1306

 

  1.   1
  2. Description
  3. Required Peripherals
  4. Design Steps
  5. Design Considerations
  6. Software Flow Chart
  7. Application Code
  8. Results
  9. Additional Resources
  10. E2E
  11. 10Revision History
  12.   Trademarks

Application Code

There are two main sections of the application code. The first is the waveform look up table (LUT). The following code has a table for a 256 point sine wave for an 8-bit peak. This DAC look up table can be easily generated with the use of online calculators.

/* Number of samples in the function array */
#define SINE_ARRAY_SAMPLES 256

/* Array of samples for function stored in flash */
const uint8_t gSineArray[SINE_ARRAY_SAMPLES] =
            {
            0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,
            0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
            0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,
            0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
            0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,
            0xea,0xeb,0xed,0xef,0xf0,0xf2,0xf3,0xf4,
            0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfb,0xfc,
            0xfd,0xfd,0xfe,0xfe,0xfe,0xff,0xff,0xff,
            0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfd,
            0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,
            0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xeb,
            0xe9,0xe7,0xe5,0xe3,0xe1,0xdf,0xdd,0xdb,
            0xd9,0xd7,0xd4,0xd2,0xcf,0xcd,0xca,0xc8,
            0xc5,0xc3,0xc0,0xbd,0xba,0xb8,0xb5,0xb2,
            0xaf,0xac,0xa9,0xa6,0xa3,0xa0,0x9d,0x9a,
            0x97,0x94,0x91,0x8e,0x8a,0x87,0x84,0x81,
            0x7e,0x7b,0x78,0x75,0x71,0x6e,0x6b,0x68,
            0x65,0x62,0x5f,0x5c,0x59,0x56,0x53,0x50,
            0x4d,0x4a,0x47,0x45,0x42,0x3f,0x3c,0x3a,
            0x37,0x35,0x32,0x30,0x2d,0x2b,0x28,0x26,
            0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,
            0x14,0x13,0x11,0x10,0xe,0xd,0xb,0xa,
            0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x3,
            0x2,0x2,0x1,0x1,0x0,0x0,0x0,0x0,
            0x0,0x0,0x0,0x1,0x1,0x1,0x2,0x2,
            0x3,0x4,0x4,0x5,0x6,0x7,0x8,0x9,
            0xb,0xc,0xd,0xf,0x10,0x12,0x14,0x15,
            0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,
            0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,
            0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,0x4f,
            0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,
            0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c,0x80
            };

The second section is the main application code which configures the DMA and starts the timer as Figure 5-1 shows.

int main(void)
{
    SYSCFG_DL_init();

    /* Configure DMA to load samples from the gSineArray to the CTL3 register of COMP_0_INST */
    DL_DMA_setSrcAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t) &gSineArray[0]);
    DL_DMA_setDestAddr(DMA, DMA_CH0_CHAN_ID, (uint32_t) &COMP_0_INST->CTL3);
    DL_DMA_setTransferSize(DMA, DMA_CH0_CHAN_ID, SINE_ARRAY_SAMPLES);
    DL_DMA_setSubscriberChanID(DMA, DL_DMA_SUBSCRIBER_INDEX_0, 1);
    DL_DMA_enableChannel(DMA, DMA_CH0_CHAN_ID);

    /* Start the timer counting, the zero event of this timer acts as the trigger for transfer */
    DL_TimerG_startCounter(TIMER_0_INST);

    while (1) {
        __WFI();
    }
}