ST意法半导体
直播中

李维嘉

8年用户 1513经验值
私信 关注
[问答]

创建动态位​​图后DMA2D配置错误IRQ的原因?

我在使用动态位图时遇到问题(在模拟器中没有问题,仅在 MCU 上)。
调用 Bitmap::dynamicBitmapCreate() 函数时没有出现问题,它返回一个有效的 bitmap_id,但是当我用这个 bitmap_id 设置图像时,事情就出错了。
我们一直进入 DMA2D_IRQHandler(),直到看门狗重置 MCU。
检查寄存器时,我看到在 DMA2D->ISR 中设置了 CEIF(配置错误)。
  • void DMA2D_IRQHandler(void)
  • {
  •     if (DMA2D->ISR & 2)
  •     {
  •         DMA2D->IFCR = 2;
  •         //invalidate D-Cache after DMA transfer
  •         SCB_CleanInvalidateDCache();
  •         touchgfx::HAL::getinstance()->signalDMAInterrupt();
  •     }
有谁知道可能是什么问题?
提前致谢!
亲切的问候,
詹斯·琼克希尔
平台信息:
  • STM32F767
  • 8 MB 外部 SDRAM







回帖(1)

何禄蔓

2023-1-17 10:32:01
通过更改以下内容“解决”了此问题:


  • HAL& hal = touchgfx_generic_init(dma, display, tc, 480, 272, (uint16_t*)bitmap_cache, sizeof(bitmap_cache), 1);

到:


  • HAL& hal = touchgfx_generic_init(dma, display, tc, 480, 272, (uint16_t*)bitmap_cache, sizeof(bitmap_cache), 4);

因此,通过将 touchgfx_generic_init 中的参数 numberOfDynamicBitmaps 更改为 4,函数 Bitmap::dynamicBitmapGetAddress() 返回一个 32 位对齐的地址。
这不是一个很好的解决方案,但它有效,因为我只使用 1 个动态位图,所以我希望它总是返回相同的地址。
我想这是 touchgfx 中的一个错误,我认为动态位图的地址(至少是 Bitmap::ARGB8888 类型)应该始终对齐。否则它会在 DMA2D 外设中产生错误。
这是在 touchgfx 版本 4.12.3 中。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分