Example #1
0
// every ~15.25us
void ADC_DMA_HANDLER(void) {
    register uint32_t flag = ADC_DMA_ISR;
    register unsigned long *s, *a;
    register uint16_t *w;
    int i;

    // clear intr flags
    ADC_DMA_CR = (uint32_t)ADC_DMA_FLAGS;

    // second half?
    w = ((flag & ADC_DMA_TC_FLAG) == RESET) ? adcDMAData.adc123Raw1 : adcDMAData.adc123Raw2;

    // accumulate totals
    s = adcData.interrupt123Sums;
    *s++ += (w[36] + w[39] + w[42] + w[45]);	// rateX
    *s++ += (w[1]  + w[4]  + w[7]  + w[10]);	// rateY
    *s++ += (w[2]  + w[5]  + w[8]  + w[11]);	// rateZ
    *s++ += (w[0]  + w[3]  + w[6]  + w[9]);	// magX
    *s++ += (w[12] + w[15] + w[18] + w[21]);	// magY
    *s++ += (w[24] + w[27] + w[30] + w[33]);	// magZ
    *s++ += (w[14]);				// temp1
    *s++ += (w[32]);				// Vin
    *s++ += (w[13] + w[16] + w[19] + w[22]);	// accX
    *s++ += (w[25] + w[28] + w[31] + w[34]);	// accY
    *s++ += (w[37] + w[40] + w[43] + w[46]);	// accZ
    *s++ += (w[20] + w[23] + w[26] + w[29]);	// press1
    *s++ += (w[38] + w[41] + w[44] + w[47]);	// press2
    *s++ += (w[17]);				// temp2
    *s   += (w[35]);				// temp3

    if (++adcData.sample == ADC_SAMPLES) {
        register unsigned long micros = timerMicros();
        adcData.sample = 0;

        if (++adcData.loops & 0x01) {
            if (ADC_MAG_SIGN) {
                digitalLo(adcData.magSetReset);
            } else {
                digitalHi(adcData.magSetReset);
            }
        }

        s = adcData.interrupt123Sums;
        a = (unsigned long *)adcData.adcSums;
        for (i = 0; i < ADC_SENSORS; i++) {
            *a++ = *s;
            *s++ = 0;
        }

        adcData.sampleTime = micros - adcData.lastSample;
        adcData.lastSample = micros;

        CoEnterISR();
        isr_SetFlag(adcData.adcFlag);
        CoExitISR();
    }
}
Example #2
0
/**
 *******************************************************************************
 * @brief      EXTI15_10_IRQHandler(Vector :56, PC13)	  
 * @param[in]  None	 	 
 * @param[out] None  
 * @retval	   None
 *		 
 * @details	   This is external interrupt handler,Use to add time when setting time.  
 *******************************************************************************
 */
void EXTI15_10_IRQHandler(void)
{
    CoEnterISR();                                       

	isr_SetFlag(button_add_flg);
	EXTI_ClearITPendingBit(EXTI_Line13);

	CoExitISR();
}
Example #3
0
/**
 *******************************************************************************
 * @brief		EXTI0_IRQHandler(Vector :22, PA0)	  
 * @param[in] 	None	 	 
 * @param[out] 	None  
 * @retval		None
 *		 
 * @details	   	This is external interrupt handler,use to select to set hour,
 *              minute,second.  
 *******************************************************************************
 */
void EXTI0_IRQHandler(void)
{
    CoEnterISR();                                       
 	
	isr_SetFlag(button_sel_flg);
	EXTI_ClearITPendingBit(EXTI_Line0);

	CoExitISR();  
}
Example #4
0
void
inqueue_putI(queue_t *q, uint8_t value) {
    if (q->count == q->size) {
        return;
    }
    *q->p_write++ = value;
    if (q->p_write == q->p_top) {
        q->p_write = q->p_bot;
    }
    if (++q->count >= q->wakeup) {
        isr_SetFlag(q->flag);
    }
}
Example #5
0
int16_t
outqueue_getI(queue_t *q) {
    uint16_t ret;
    if (q->count == 0) {
        return -1;
    }
    ret = *q->p_read++;
    if (q->p_read == q->p_top) {
        q->p_read = q->p_bot;
    }
    if (--q->count <= q->wakeup) {
        isr_SetFlag(q->flag);
    }
    return ret;
}
Example #6
0
extern "C" void DMA1_Stream7_IRQHandler()
{
//	DMA1_Stream7->CR &= ~DMA_SxCR_EN ;		// Disable DMA
	DMA1_Stream7->CR &= ~DMA_SxCR_TCIE ;		// Stop interrupt
	DMA1->HIFCR = DMA_HIFCR_CTCIF7 | DMA_HIFCR_CHTIF7 | DMA_HIFCR_CTEIF7 | DMA_HIFCR_CDMEIF7 | DMA_HIFCR_CFEIF7 ; // Write ones to clear flags
	SPI3->CR2 &= ~SPI_CR2_TXDMAEN ;
	DmaDebugNDTR = DMA1_Stream7->NDTR ;
	DmaDone = 1 ;
	DmaDebugCount += 1 ;

	if ( Main_running )
	{
		CoEnterISR() ; // Enter the interrupt
		isr_SetFlag( LcdFlag ) ;		// Tell task transfer finished
		CoExitISR() ; // Exit the interrupt
	}
}
Example #7
0
void DIMU_ISR(void) {
    // CC2 is used for IMU period timing
    if (TIM_GetITStatus(DIMU_TIM, TIM_IT_CC2) != RESET) {
        DIMU_TIM->SR = (uint16_t)~TIM_IT_CC2;

        // set next alarm
        dImuData.nextPeriod += DIMU_INNER_PERIOD;
        DIMU_TIM->CCR2 = dImuData.nextPeriod;

        CoEnterISR();
        isr_SetFlag(dImuData.flag);
        CoExitISR();
    }
    else if (TIM_GetITStatus(DIMU_TIM, TIM_IT_CC1) != RESET) {
        DIMU_TIM->SR = (uint16_t)~TIM_IT_CC1;

        // Disable the Interrupt
        DIMU_TIM->DIER &= (uint16_t)~TIM_IT_CC1;

        dImuData.alarm1Callback(dImuData.alarm1Parameter);
    }
}
Example #8
0
void
inqueue_flushI(queue_t *q) {
    if (q->count > 0) {
        isr_SetFlag(q->flag);
    }
}