inline uint16_t satAddU16S16(uint16_t a, int16_t b) { int32_t r; r=a; r+=b; r=__USAT(r,16); return r; }
int main(void) { int i=0, offset; #if FILTRO_PASA_BANDA fir_q31_init(&filtro, history, bandpass_taps, BANDPASS_TAP_NUM); offset=500; #elif FILTRO_PASA_BAJOS fir_q31_init(&filtro, history, lowpass_taps, LOWPASS_TAP_NUM); offset=-100; #endif initHardware(); *DWT_CTRL |= 1; while(1) { if(adcFlag) { adcFlag=0; *DWT_CYCCNT=0; /* para medir tiempos de ejecucion */ #if(USAR_FUNCIONES_ASSEMBLER) y[i] = asm_fir_q31_get(&filtro)+offset; y[i] = __USAT(y[i],10); #else y[i] = fir_q31_get(&filtro)+offset; if(y[i]>0x3FF) y[i] = 0x3FF; else if(y[i]<0) y[i] = 0; #endif dacWrite(y[i]); i++; if(i==500) i=0; } } }