#include #include uint32_t dma_dummy, PWM_CH2_event; // Zeitstempel erzeugen: // DMA-Wert = Zeitpunkt, DMA-TRANS-COUNT = Ereignisse void init_dma_pio0(void) { RESETS_CLR->RESET = RESETS_RESET_dma_Msk | RESETS_RESET_busctrl_Msk; while (!(RESETS->RESET_DONE & RESETS_RESET_dma_Msk)); BUSCTRL->BUS_PRIORITY = BUSCTRL_BUS_PRIORITY_DMA_W_Msk | BUSCTRL_BUS_PRIORITY_DMA_R_Msk; // PIO0_SM0 DMA->CH0_READ_ADDR = (uint32_t) &PWM->CH2_CTR; // capture CH2-CTR DMA->CH0_WRITE_ADDR = (uint32_t) &PWM_CH2_event; // DMA->CH0_TRANS_COUNT = 1; DMA->CH0_CTRL_TRIG = DREQ_PIO0_RX0 << DMA_CH1_CTRL_TRIG_TREQ_SEL_Pos | // PIO0_RXF0 1 << DMA_CH0_CTRL_TRIG_CHAIN_TO_Pos | // trigger CH1 2 << DMA_CH0_CTRL_TRIG_DATA_SIZE_Pos | // word DMA_CH0_CTRL_TRIG_EN_Msk; // enable // triggered by CH0 and triggers CH0 again DMA->CH1_READ_ADDR = (uint32_t) &PIO0->RXF0; // transfer FIFO loeschen DMA->CH1_WRITE_ADDR = (uint32_t) &dma_dummy; // to dummy location DMA->CH1_TRANS_COUNT = 1; // one transfer only DMA->CH1_CTRL_TRIG = 0x3f<