MCUXpresso_LPC54102/boards/lpcxpresso54102/driver_examples/sctimer/simple_pwm/cm4/sctimer_simple_pwm.c
2022-05-14 22:28:55 +08:00

92 lines
3.0 KiB
C

/*
* Copyright (c) 2016, Freescale Semiconductor, Inc.
* Copyright 2016-2017 NXP
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "fsl_debug_console.h"
#include "board.h"
#include "fsl_sctimer.h"
#include "pin_mux.h"
#include <stdbool.h>
/*******************************************************************************
* Definitions
******************************************************************************/
#define SCTIMER_CLK_FREQ CLOCK_GetFreq(kCLOCK_BusClk)
#define DEMO_FIRST_SCTIMER_OUT kSCTIMER_Out_4
#define DEMO_SECOND_SCTIMER_OUT kSCTIMER_Out_2
/*******************************************************************************
* Prototypes
******************************************************************************/
/*******************************************************************************
* Variables
******************************************************************************/
/*******************************************************************************
* Code
******************************************************************************/
/*!
* @brief Main function
*/
int main(void)
{
sctimer_config_t sctimerInfo;
sctimer_pwm_signal_param_t pwmParam;
uint32_t event;
uint32_t sctimerClock;
/* Board pin, clock, debug console init */
/* attach 12 MHz clock to USART0 (debug console) */
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
BOARD_InitPins();
BOARD_BootClockPLL150M(); /* Rev B device can only support max core frequency to 96Mhz.
Rev C device can support 150Mhz,use BOARD_BootClockPLL150M() to boot core to 150Mhz.
DEVICE_ID1 register in SYSCON shows the device version.
More details please refer to user manual and errata. */
BOARD_InitDebugConsole();
sctimerClock = SCTIMER_CLK_FREQ;
/* Print a note to terminal */
PRINTF("\r\nSCTimer example to output 2 center-aligned PWM signals\r\n");
PRINTF("\r\nProbe the signal using an oscilloscope");
SCTIMER_GetDefaultConfig(&sctimerInfo);
/* Initialize SCTimer module */
SCTIMER_Init(SCT0, &sctimerInfo);
/* Configure first PWM with frequency 24kHZ from first output */
pwmParam.output = DEMO_FIRST_SCTIMER_OUT;
pwmParam.level = kSCTIMER_HighTrue;
pwmParam.dutyCyclePercent = 50;
if (SCTIMER_SetupPwm(SCT0, &pwmParam, kSCTIMER_CenterAlignedPwm, 24000U, sctimerClock, &event) == kStatus_Fail)
{
return -1;
}
/* Configure second PWM with different duty cycle but same frequency as before */
pwmParam.output = DEMO_SECOND_SCTIMER_OUT;
pwmParam.level = kSCTIMER_LowTrue;
pwmParam.dutyCyclePercent = 20;
if (SCTIMER_SetupPwm(SCT0, &pwmParam, kSCTIMER_CenterAlignedPwm, 24000U, sctimerClock, &event) == kStatus_Fail)
{
return -1;
}
/* Start the timer */
SCTIMER_StartTimer(SCT0, kSCTIMER_Counter_L);
while (1)
{
}
}