FLD_DMA_CHN_UART_RX
时间: 2024-05-20 09:09:09 浏览: 110
FLD_DMA_CHN_UART_RX 是一种基于DMA(Direct Memory Access,直接内存访问)的数据传输方式,它主要用于在芯片内部进行数据传输,常见于MCU(Micro Controller Unit,微控制器)的UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)接收数据过程中。通过使用 DMA 通道,可以将 UART 接收到的数据直接传输到指定的内存位置,从而避免了 CPU 消耗大量时间在数据传输上的问题。
相关问题
if (reg_uart_status1 & FLD_UART_TX_DONE) { Tr_SetUartTxDone(); uart_clr_tx_done(); } if (dma_chn_irq_status_get() & FLD_DMA_CHN_UART_RX) //读取DMA状态判断 { dma_chn_irq_status_clr(FLD_DMA_CHN_UART_RX);//清理中断位 u8* w = spp_rx_fifo.p + (spp_rx_fifo.wptr & (spp_rx_fifo.num - 1)) * spp_rx_fifo.size; if ((w[0] != 0)||(w[1] != 0)) { my_fifo_next(&spp_rx_fifo); u8* p = spp_rx_fifo.p + (spp_rx_fifo.wptr & (spp_rx_fifo.num - 1)) * spp_rx_fifo.size; reg_dma_uart_rx_addr = (u16) ((u32) p); //switch uart RX dma address } //while(1); }
这段代码是关于串口通信和DMA传输的。第一个if语句判断串口是否发送完成,如果发送完成则调用Tr_SetUartTxDone()函数并清除TX_DONE中断标志位。第二个if语句判断DMA传输是否完成,如果完成则清除中断标志位,并将接收到的数据存储到一个FIFO缓冲区中。如果FIFO缓冲区已满,则会覆盖最旧的数据。如果FIFO缓冲区未满,则将新数据存储到FIFO缓冲区的末尾,并切换DMA传输的接收地址。最后,这段代码的最后一行是一个注释,表示可以使用while(1)来阻塞程序。
td_s32 ret; ot_vpss_grp_attr grp_attr = { 0 }; ot_vpss_chn_attr chn_attr[OT_VPSS_MAX_PHYS_CHN_NUM] = { 0 }; td_bool chn_enable[OT_VPSS_MAX_PHYS_CHN_NUM] = { 0 }; if (vpss_chn >= OT_VPSS_MAX_PHYS_CHN_NUM) { sample_print("vpss_chn:%d invalid!\n", vpss_chn); return TD_FAILURE; } grp_attr.nr_en = TD_TRUE; grp_attr.ie_en = TD_TRUE; grp_attr.dci_en = TD_TRUE; grp_attr.nr_attr.compress_mode = OT_COMPRESS_MODE_FRAME; grp_attr.dei_mode = OT_VPSS_DEI_MODE_OFF; grp_attr.pixel_format = SAMPLE_PIXEL_FORMAT; grp_attr.frame_rate.src_frame_rate = -1; grp_attr.frame_rate.dst_frame_rate = -1; grp_attr.max_width = size->width; grp_attr.max_height = size->height; chn_enable[vpss_chn] = TD_TRUE; chn_attr[vpss_chn].chn_mode = OT_VPSS_CHN_MODE_AUTO; chn_attr[vpss_chn].width = size->width; chn_attr[vpss_chn].height = size->height; chn_attr[vpss_chn].pixel_format = OT_PIXEL_FORMAT_YVU_SEMIPLANAR_420; chn_attr[vpss_chn].frame_rate.src_frame_rate = -1; chn_attr[vpss_chn].frame_rate.dst_frame_rate = -1; chn_attr[vpss_chn].border_en = TD_TRUE; chn_attr[vpss_chn].border_attr.color = COLOR_RGB_BLUE; chn_attr[vpss_chn].border_attr.top_width = 2; /* 2 : border top width */ chn_attr[vpss_chn].border_attr.bottom_width = 2; /* 2 : border bottom width */ chn_attr[vpss_chn].border_attr.left_width = 2; /* 2 : border left width */ chn_attr[vpss_chn].border_attr.right_width = 2; /* 2 : border right width */ ret = sample_common_vpss_start(vpss_grp, chn_enable, &grp_attr, chn_attr, OT_VPSS_MAX_PHYS_CHN_NUM); if (ret != TD_SUCCESS) { sample_print("failed with %#x!\n", ret); return TD_FAILURE; } return TD_SUCCESS;
这段代码是关于视频处理的,主要是配置了一个 VPSS 组和一个 VPSS 通道。VPSS(Video Processing Subsystem)是专门用于视频处理的子系统,可以对视频进行降噪、锐化、缩放、颜色调整等操作。这里的代码中,首先判断了要配置的 VPSS 通道是否有效,然后设置了 VPSS 组和通道的属性,包括使能 NR(Noise Reduction)和 IE(Image Enhancement)等功能,压缩模式为帧压缩,DEI(Dynamic Edge Interpolation)模式为关闭,像素格式为 SAMPLE_PIXEL_FORMAT,帧率为 -1 不限制帧率,宽高为传入参数 size 的宽高,最后设置了边框的颜色和宽度,并启动了 VPSS 组和通道。
阅读全文