#include "board.h"
#include "fsl_debug_console.h"
#include "fsl_adc16.h"
#include "fsl_ftm.h"
#include "fsl_common.h"
#include "pin_mux.h"
#include"fsl_port.h"
//#include"pin_mux.c"
#include <stdio.h>
#include "peripherals.h"
#define DEMO_ADC16_BASE ADC0
#define DEMO_ADC16_CHANNEL_GROUP 0U
#define DEMO_ADC16_USER_CHANNEL 8U
#define DEMO_PWM_BASE FTM0
#define DEMO_PWM_CHANNEL 0U
volatile uint32_t pwmDutyCyclePercent = 0;
uint32_t result = 0;
adc16_channel_config_t adc16ChannelConfigStruct;
//volatile uint32_t read = *((uint32_t*)0x00080000);
void BOARD_InitPWM(void) {
ftm_config_t ftmInfo;
FTM_GetDefaultConfig(&ftmInfo);
/* Initialize FTM module */
FTM_Init(DEMO_PWM_BASE, &ftmInfo);
/* Set the PWM period */
FTM_SetTimerPeriod(DEMO_PWM_BASE, kFTM_SystemClock);
/* Configure the PWM channel */
ftm_chnl_pwm_signal_param_t ftmParam;
ftmParam.chnlNumber = DEMO_PWM_CHANNEL;
ftmParam.level = kFTM_HighTrue;
ftmParam.dutyCyclePercent = 30;
ftmParam.firstEdgeDelayPercent = 0;
// PORT_SetPinMux(BOARD_FTM0_CH0_PORT, BOARD_FTM0_CH0_PIN, kPORT_MuxAlt4);
FTM_SetupPwm(DEMO_PWM_BASE, &ftmParam, 1U, kFTM_EdgeAlignedPwm, 25000U, kFTM_SystemClock);
//PORT_SetPinMux(BOARD_FTM0_CH0_PORT, BOARD_FTM0_CH0_PIN, kPORT_MuxAlt4);
//PORT_SetPinMux(PORTE,1,1);
//PORT_SetPinMux(BOARD_FTM0_CH0_PORT, BOARD_FTM0_CH0_PIN, kPORT_MuxAlt4);
/* Start the PWM */
FTM_StartTimer(DEMO_PWM_BASE, kFTM_SystemClock);
}
void BOARD_InitADC(void) {
adc16_config_t adc16ConfigStruct;
ADC16_GetDefaultConfig(&adc16ConfigStruct);
adc16ConfigStruct.resolution = kADC16_ResolutionSE12Bit; // Change as needed
ADC16_Init(DEMO_ADC16_BASE, &adc16ConfigStruct);
/* Configure ADC channel */
adc16ChannelConfigStruct.channelNumber = DEMO_ADC16_USER_CHANNEL;
adc16ChannelConfigStruct.enableInterruptOnConversionCompleted = false;
adc16ChannelConfigStruct.enableDifferentialConversion = false;
ADC16_SetChannelConfig(DEMO_ADC16_BASE, DEMO_ADC16_CHANNEL_GROUP, &adc16ChannelConfigStruct);
/* Enable the Injected Conversion */
// ADC16_EnableHardwareTrigger(DEMO_ADC16_BASE, true);
ADC16_EnableHardwareTrigger(DEMO_ADC16_BASE , false);
//ADC16_EnableInjectedSequences(DEMO_ADC16_BASE , false);
}
void FTM0_IRQHandler(void) {
/* Clear interrupt flag */
FTM_ClearStatusFlags(DEMO_PWM_BASE, kFTM_Chnl0Flag);
/* Update PWM duty cycle based on some condition */
pwmDutyCyclePercent = (result * 100U) / 4095U;
FTM_UpdatePwmDutycycle(DEMO_PWM_BASE, DEMO_PWM_CHANNEL, kFTM_EdgeAlignedPwm, pwmDutyCyclePercent);
}
/*void HardFault_Handler(void){
while(1){
}
}*/
int main(void) {
BOARD_InitPWM();
BOARD_InitADC();
/* Enable FTM0 interrupt */
EnableIRQ(FTM0_IRQn);
FTM_EnableInterrupts(DEMO_PWM_BASE, kFTM_Chnl0InterruptEnable);
NVIC_SetPriority(FTM0_IRQn, 0);
while (1) {
/* Start an injected conversion with software trigger */
ADC16_SetChannelConfig(DEMO_ADC16_BASE, DEMO_ADC16_CHANNEL_GROUP, &adc16ChannelConfigStruct);
//ADC16_DoSoftwareTrigger(DEMO_ADC16_BASE);
//PORT_SetPinMux(BOARD_FTM0_CH0_PORT, BOARD_FTM0_CH0_PIN, kPORT_MuxAlt4);
/* Wait for the conversion to complete */
while (0U == (kADC16_ChannelConversionDoneFlag & ADC16_GetChannelStatusFlags(DEMO_ADC16_BASE, DEMO_ADC16_CHANNEL_GROUP)))
{
}
/* Read ADC result */
result = ADC16_GetChannelConversionValue(DEMO_ADC16_BASE, DEMO_ADC16_CHANNEL_GROUP);
/* Print the result or use it as needed */
PRINTF("ADC Result: %d\r\n", result);
/* Delay for a while */
SDK_DelayAtLeastUs(1000000U, SystemCoreClock);
}
return 0;
}
this program adc inject trigger method if any changes let me know
BR
PANDI