|
我用定时器触发DMA去搬运GPIO的寄存器里的数据。DMA处于NORMAL模式,方向为外设到内存,定时器触发。
搬运一次数据可以正常搬运,可是搬运第二次时,如果再次指定同一片地址,那么数据不会存入。但是如果换一片存储区就可以正常存储,但是也不能被指定第二次。
同时发现,关闭cache可以正常采集。问题应该在cache,但是不知道如何处理。
程序如下:
__attribute__((section(".RAM_D2"))) uint16_t adc_buff[100];
__attribute__((section(".RAM_D2"))) uint16_t adc_buff2[100];
比如这样采集,第二次的采集可以正常运行,但是adc_buff里面的数据没有更新,还是第一次采集到的数据
HAL_DMA_Start_IT(htim4.hdma[TIM_DMA_ID_UPDATE], (uint32_t)(&GPIOD->IDR), (uint32_t)adc_buff, sizeof(adc_buff) / sizeof(adc_buff[0]));//此一次采集正常
...
HAL_DMA_Start_IT(htim4.hdma[TIM_DMA_ID_UPDATE], (uint32_t)(&GPIOD->IDR), (uint32_t)adc_buff, sizeof(adc_buff) / sizeof(adc_buff[0]));//第二次采集能运行,甚至进入中断,但是没有更新数据
这样就可以正常采集,但是每片区域也不能存放第二次
HAL_DMA_Start_IT(htim4.hdma[TIM_DMA_ID_UPDATE], (uint32_t)(&GPIOD->IDR), (uint32_t)adc_buff, sizeof(adc_buff) / sizeof(adc_buff[0]));//此一次采集正常
...
HAL_DMA_Start_IT(htim4.hdma[TIM_DMA_ID_UPDATE], (uint32_t)(&GPIOD->IDR), (uint32_t)adc_buff2, sizeof(adc_buff2) / sizeof(adc_buff2[0]));//第二次采集正常
|
|