ads1299 does not recover gracefully. Need to figure out transfer complete interrupt

This commit is contained in:
Nicolas Trimborn 2021-09-05 19:39:08 +02:00
parent c05a7675d0
commit 7ed41be749
4 changed files with 24 additions and 9 deletions

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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<<GPIO_PIN(SPI2_SS));
volatile int x = 1;
}
void ADS1299_Transfer_error_cb(void)

View File

@ -71,10 +71,11 @@ void enable_NVIC_IRQ(void)
NVIC_SetPriority(ADC1_0_IRQn, 3);
NVIC_EnableIRQ(TCC0_0_IRQn);
//NVIC_EnableIRQ(TCC1_0_IRQn);
//NVIC_EnableIRQ(EIC_2_IRQn);
NVIC_EnableIRQ(EIC_2_IRQn);
NVIC_EnableIRQ(SERCOM1_1_IRQn);
NVIC_EnableIRQ(SERCOM2_1_IRQn);
NVIC_EnableIRQ(SERCOM2_2_IRQn);
//NVIC_SetPriority(SERCOM1_1_IRQn, 1);
NVIC_EnableIRQ(TC0_IRQn);
//NVIC_EnableIRQ(TC0_IRQn);
@ -181,10 +182,12 @@ int main(void)
/* External IRQ Config */
custom_logic_enable();
__enable_irq();
delay_us(20);
ADS1299_START();
delay_us(20);
/* ADS Result Ready Interrupt, active low */
__enable_irq();
/* Enable Reception
* Enable RX channels at startup, Linked to itself so never ends
@ -193,8 +196,7 @@ int main(void)
_dma_enable_transaction(CONF_SERCOM_2_SPI_M_DMA_RX_CHANNEL, false);
/* Clear Exint Flag */
EIC->INTFLAG.bit.EXTINT = (1<<2);
//EIC->INTFLAG.bit.EXTINT = (1<<2);
//ext_irq_register(GPIO_PIN(ADS_DATA_RDY), ADS1299_dataReadyISR);
enable_NVIC_IRQ();