Demo working now.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2420 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
gdisirio 2010-11-22 17:50:39 +00:00
parent a7436d9f8f
commit ab51c68e2d
1 changed files with 15 additions and 15 deletions

View File

@ -95,24 +95,11 @@ static const SPIConfig spicfg = {
* calculated as average of the last sampling operations. * calculated as average of the last sampling operations.
*/ */
static void pwmpcb(PWMDriver *pwmp) { static void pwmpcb(PWMDriver *pwmp) {
adcsample_t avg_ch1, avg_ch2;
/* Calculates the average values from the previous ADC sampling
operation.*/
avg_ch1 = (samples[0] + samples[2] + samples[4] + samples[6]) / 4;
avg_ch2 = (samples[1] + samples[3] + samples[5] + samples[7]) / 4;
chSysLockFromIsr();
/* Changes the channels pulse width, the change will be effective
starting from the next cycle.*/
pwmEnableChannelI(pwmp, 2, PWM_FRACTION_TO_WIDTH(pwmp, 4096, avg_ch1));
pwmEnableChannelI(pwmp, 3, PWM_FRACTION_TO_WIDTH(pwmp, 4096, avg_ch2));
/* Starts an asynchronous ADC conversion operation, the conversion /* Starts an asynchronous ADC conversion operation, the conversion
will be executed in parallel to the current PWM cycle and will will be executed in parallel to the current PWM cycle and will
terminate before the next PWM cycle.*/ terminate before the next PWM cycle.*/
chSysLockFromIsr();
adcStartConversionI(&ADCD1, &adcgrpcfg, samples, ADC_GRP1_BUF_DEPTH); adcStartConversionI(&ADCD1, &adcgrpcfg, samples, ADC_GRP1_BUF_DEPTH);
chSysUnlockFromIsr(); chSysUnlockFromIsr();
} }
@ -127,10 +114,23 @@ void adccb(ADCDriver *adcp, adcsample_t *buffer, size_t n) {
/* Note, only in the ADC_COMPLETE state because the ADC driver fires an /* Note, only in the ADC_COMPLETE state because the ADC driver fires an
intermediate callback when the buffer is half full.*/ intermediate callback when the buffer is half full.*/
if (adcp->ad_state == ADC_COMPLETE) { if (adcp->ad_state == ADC_COMPLETE) {
/* SPI slave selection and transmission start.*/ adcsample_t avg_ch1, avg_ch2;
/* Calculates the average values from the ADC samples.*/
avg_ch1 = (samples[0] + samples[2] + samples[4] + samples[6]) / 4;
avg_ch2 = (samples[1] + samples[3] + samples[5] + samples[7]) / 4;
chSysLockFromIsr(); chSysLockFromIsr();
/* Changes the channels pulse width, the change will be effective
starting from the next cycle.*/
pwmEnableChannelI(&PWMD3, 2, PWM_FRACTION_TO_WIDTH(&PWMD3, 4096, avg_ch1));
pwmEnableChannelI(&PWMD3, 3, PWM_FRACTION_TO_WIDTH(&PWMD3, 4096, avg_ch2));
/* SPI slave selection and transmission start.*/
spiSelectI(&SPID1); spiSelectI(&SPID1);
spiStartSendI(&SPID1, ADC_GRP1_NUM_CHANNELS * ADC_GRP1_BUF_DEPTH, samples); spiStartSendI(&SPID1, ADC_GRP1_NUM_CHANNELS * ADC_GRP1_BUF_DEPTH, samples);
chSysUnlockFromIsr(); chSysUnlockFromIsr();
} }
} }