I want to make a continuous conversion with external trigger with the pwm driver.
Everything work expected when using the I-class functions for pwmEnableChannelI and pwmEnableChannelNotificationI.
I'm using a STM32F103 with the latest stable branch 18.2.x.
In the 'normal' functions is a check:
Code: Select all
void pwmEnableChannelNotification(PWMDriver *pwmp, pwmchannel_t channel) {
osalDbgCheck((pwmp != NULL) && (channel < pwmp->channels));
and I run into chSysHalt() in this case. Because there is not check in I-Class, this works as expected.
Code: Select all
static const ADCConversionGroup adcgrp1cfg = {
TRUE,
ADC_GRP1_NUM_CHANNELS,
NULL, /* adc callback */
NULL, /* error callback */
0, ADC_CR2_EXTTRIG | ADC_CR2_EXTSEL_SRC(0x5), /* CR1, CR2 */
0,
ADC_SMPR2_SMP_AN2(ADC_SAMPLE_71P5),
ADC_SQR1_NUM_CH(ADC_GRP1_NUM_CHANNELS),
0,
ADC_SQR3_SQ1_N(ADC_CHANNEL_IN2),
};
Code: Select all
static const PWMConfig pwm_cfg = {
250000,
250,
NULL,
{
{PWM_OUTPUT_DISABLED, NULL},
{PWM_OUTPUT_DISABLED, NULL},
{PWM_OUTPUT_DISABLED, NULL},
{PWM_OUTPUT_ACTIVE_HIGH, adc_pwm_cb},
},
0,
0,
};
Code: Select all
static void startConversion(void *ip)
{
AnalogDriver *analog = (AnalogDriver *)ip;
(void)analog;
adc_counter = 0;
pwmEnableChannelI(&PWMD4, 3, 1);
pwmEnableChannelNotificationI(&PWMD4, 3);
}
Code: Select all
static void adc_pwm_cb(PWMDriver *pwmp){
(void)pwmp;
adc_counter++;
chSysLockFromISR();
chThdResumeI(&analog_tp, MSG_OK);
chSysUnlockFromISR();
if (adc_counter >= ADC_NUM_CONVERSIONS) {
chSysLockFromISR();
pwmDisableChannelI(&PWMD4, 3);
chSysUnlockFromISR();
}
}