c - 如何使用中断而不是偶尔发生,环形缓冲区实现问题
问题描述
我正在尝试使用 DMA 中断来指示新数据可从连接到相机的 DCMI 接口获得。
然后在主循环中使用 DMA(图像)的缓冲区内容将图像数据发送到显示器。显示器写入和传输速度较慢,因此当旧图片未完全写入显示器时,会发生新图片准备就绪,并且图像的写入重叠。
我已阅读有关消费者生产者/缓冲区队列/循环缓冲区的信息,但不确定我是否了解如何实现它。
我无法实现缓冲区队列(带有头部和尾部)的问题之一是因为 DMA 将整个数据集写入数组,并不是每个像素在写入时都可以被监控。另一方面,图像(保存在数组中)是逐像素读取的。
这是一个代码示例:
void DMA_IRQ(void)
{
if (DMA_Full && DMA_Enabled)
{
DMA->CLEARFLAG = CLEAR; //Clear Interrupt Flag
//Now in the Background the variable
//dma_frame_buffer is filled with read data of the DMA
//DMA Indicator
dma_frame_read = 1;
}
}
在我的主要看起来像这样:
int main (void)
{
if(dma_frame_read == 1)
{
for(int pixel_counter=0; pixel_counter<253; pixel_counter++)
{
ILI9341_Color_Send(dma_frame_buffer[pixel_counter]);
dma_frame_read = 0;
}
}
解决方案
推荐阅读
- django - Django中两个表之间的条件关系?
- html - 我可以让链接自动下载电子邮件中的文件吗?
- haskell - Haskell:如何分别从列表中获取每个数字?
- javascript - 检查firestore文档中是否存在数据,否则推送到数组
- python - 模式计算器 Python
- emacs - 如何在 emacs 27 中为外部命令设置别名
- python - 无法使用有线 LAN 连接在 Ubuntu 16.04 上使用 pip 安装 python 包
- javascript - 未处理的拒绝:TypeError:无法读取未定义的属性“执行”
- python - windows10上的python问题。使用 GIT。但无法访问“runwindows.sh”:没有这样的文件或目录
- javascript - Crop and resize a group of images without losing quality