From 7ed41be749575fc06bbcbb7853f3826209b17b0a Mon Sep 17 00:00:00 2001 From: Nicolas Trimborn Date: Sun, 5 Sep 2021 19:39:08 +0200 Subject: [PATCH] ads1299 does not recover gracefully. Need to figure out transfer complete interrupt --- .../Two_Motor_D51/Two_Motor_D51/configuration.h | 6 ++++-- .../Two_Motor_D51/Two_Motor_D51/hpl/dmac/hpl_dmac.c | 4 ++-- .../Two_Motor_D51/Two_Motor_D51/interrupts.h | 13 ++++++++++++- .../Two_Motor_D51/Two_Motor_D51/main.c | 10 ++++++---- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/configuration.h b/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/configuration.h index 5254044..ea10d7c 100644 --- a/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/configuration.h +++ b/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/configuration.h @@ -229,10 +229,12 @@ static void spi_ads1299_init_dma_descriptors() _dma_get_channel_resource(&resource_rx, CONF_SERCOM_2_SPI_M_DMA_RX_CHANNEL); _dma_get_channel_resource(&resource_tx, CONF_SERCOM_2_SPI_M_DMA_TX_CHANNEL); resource_rx->dma_cb.transfer_done = ADS1299_Transfer_Complete_cb; - //resource_rx->dma_cb.error = ADS1299_Transfer_error_cb; - + resource_rx->dma_cb.error = ADS1299_Transfer_error_cb; + + resource_tx->dma_cb.transfer_done = ADS1299_Transfer_Complete_cb; /* Enable DMA transfer complete interrupt */ _dma_set_irq_state(CONF_SERCOM_2_SPI_M_DMA_RX_CHANNEL, DMA_TRANSFER_COMPLETE_CB, true); + _dma_set_irq_state(CONF_SERCOM_2_SPI_M_DMA_TX_CHANNEL, DMA_TRANSFER_COMPLETE_CB, true); //_dma_set_irq_state(CONF_SERCOM_2_SPI_M_DMA_RX_CHANNEL, DMA_TRANSFER_ERROR_CB, true); diff --git a/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/hpl/dmac/hpl_dmac.c b/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/hpl/dmac/hpl_dmac.c index 7dddc9d..60623be 100644 --- a/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/hpl/dmac/hpl_dmac.c +++ b/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/hpl/dmac/hpl_dmac.c @@ -218,8 +218,8 @@ static void _dmac_handler(void) if (hri_dmac_get_INTPEND_TERR_bit(DMAC)) { hri_dmac_clear_CHINTFLAG_TERR_bit(DMAC, channel); tmp_resource->dma_cb.error(tmp_resource); - } else if (hri_dmac_get_INTPEND_TCMPL_bit(DMAC)) { - hri_dmac_clear_CHINTFLAG_TCMPL_bit(DMAC, channel); + } else if (hri_dmac_get_CHINTFLAG_TCMPL_bit(DMAC, channel)) { + hri_dmac_clear_CHINTFLAG_TCMPL_bit(DMAC, channel); /********* ADDED **************/ tmp_resource->dma_cb.transfer_done(tmp_resource); } } diff --git a/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/interrupts.h b/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/interrupts.h index 4bdcbc8..cb1bb14 100644 --- a/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/interrupts.h +++ b/2_Motor_Master_D51/Two_Motor_D51/Two_Motor_D51/interrupts.h @@ -72,7 +72,16 @@ static void b2bTransferComplete_cb(struct _dma_resource *resource) volatile int x = 0; } - +void SERCOM2_1_Handler() +{ + volatile int x = 0; + +} +void SERCOM2_2_Handler() +{ + volatile int x = 0; + +} // ---------------------------------------------------------------------- // ADC Callback for Motor Phase Current Measurement. @@ -142,7 +151,9 @@ void ADS1299_dataReadyISR(void) void ADS1299_Transfer_Complete_cb(void) { //PORT->Group[0].OUTSET.reg = (1<INTFLAG.bit.EXTINT = (1<<2); - + //EIC->INTFLAG.bit.EXTINT = (1<<2); //ext_irq_register(GPIO_PIN(ADS_DATA_RDY), ADS1299_dataReadyISR); enable_NVIC_IRQ();