/********************************* Loesung zum Termin 4 Aufgabe 1 von: Manfredd Pester am: Januar 2023 **********************************/ #include <sam.h> #include <utils.h> void init_wave_Timer0(unsigned int Frequenz) { PMC->PMC_PCER0 = 0x1 << ID_TC0; TC0->TC_CHANNEL[0].TC_CCR = TC_CCR_CLKDIS; TC0->TC_CHANNEL[0].TC_CMR = TC_CMR_WAVE | TC_CMR_TCCLKS_TIMER_CLOCK1 | TC_CMR_WAVSEL_UP_RC | TC_CMR_BCPB_CLEAR | TC_CMR_BCPC_SET | TC_CMR_EEVT_XC0; TC0->TC_CHANNEL[0].TC_RC = SystemCoreClock / 2 / (Frequenz); TC0->TC_CHANNEL[0].TC_RB = SystemCoreClock / 2 / (Frequenz) / 2; TC0->TC_CHANNEL[0].TC_CCR = TC_CCR_CLKEN | TC_CCR_SWTRG; PIOB->PIO_PDR = P27; PIOB->PIO_ABSR = P27; } void init_capt_Timer8(void) { PMC->PMC_PCER1 = 0x1u << 3; TC2->TC_CHANNEL[2].TC_CCR = TC_CCR_CLKDIS; TC2->TC_CHANNEL[2].TC_CMR = TC_CMR_TCCLKS_TIMER_CLOCK1 | TC_CMR_LDRA_FALLING | TC_CMR_LDRB_FALLING | TC_CMR_LDBSTOP | TC_CMR_LDBDIS; PIOD->PIO_PDR = P7; PIOD->PIO_ABSR = P7; } unsigned int Messe_Frequenz_TimerX(TcChannel * channel) { unsigned int Capture_RA, Capture_RB; channel->TC_CCR = TC_CCR_CLKEN | TC_CCR_SWTRG; while (~channel->TC_SR & TC_SR_LDRBS); Capture_RA = channel->TC_RA; Capture_RB = channel->TC_RB; return SystemCoreClock / (Capture_RB - Capture_RA) / 2; } int main(void) { unsigned int Frequenz; SystemInit(); WDT->WDT_MR = WDT_MR_WDDIS; init_wave_Timer0(1); init_capt_Timer8(); while(1) { Frequenz = Messe_Frequenz_TimerX(&TC2->TC_CHANNEL[2]); } }