99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

MCU里除了Core和DMA還有其它數(shù)據(jù)搬移小能手嗎?

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是在i.MXRT1170上PXP對CM7 TCM進(jìn)行隨機(jī)地址短小數(shù)據(jù)寫入操作限制

在 MCU 里能夠?qū)ζ瑑?nèi)外映射的存儲器進(jìn)行讀寫操作的主設(shè)備(Master)除了常見的 Core 以及 DMA 外,其實(shí)還有一些面向高速數(shù)據(jù)傳輸(比如 USB、uSDHC、ENET 接口等)或其他特定功能(比如 GPU、LCD、Crypto 等)的外設(shè),但就用戶數(shù)據(jù)搬移處理而言,一般我們只借助 Core 和 DMA。

在 i.MXRT 四位數(shù)上,還有一個叫 PXP 的外設(shè),這本是一個面向像素?cái)?shù)據(jù)處理的模塊,但是它也能夠完成一般數(shù)據(jù)搬移處理任務(wù)。當(dāng)我們借助這個 PXP 來做數(shù)據(jù)搬移時,發(fā)現(xiàn)它在對 CM7 TCM 寫入時有一些使用限制。今天我們就來聊聊這個話題:

一、PXP功能簡介

先來看一下 PXP 模塊功能框圖,既然是面向圖像數(shù)據(jù)處理,那常見的圖像縮放、色彩空間轉(zhuǎn)換、圖像旋轉(zhuǎn)功能支持必不可少(即下圖藍(lán)框里的三個獨(dú)立引擎被整合在 PXP 里),這些操作實(shí)際上都涉及到 FrameBuffer 像素?cái)?shù)據(jù)處理(讀改寫) 。

再進(jìn)一步細(xì)讀 PXP 特性,我們發(fā)現(xiàn)除了像素處理之外,它還是個標(biāo)準(zhǔn)的 2D DMA(這里 2D 的意思是為搬移二維圖像數(shù)據(jù)而設(shè)計(jì)的),這就是我們所要的數(shù)據(jù)搬移特性。在用 PXP 做數(shù)據(jù)搬移操作時,當(dāng)源 FrameBuffer 和目的 FrameBuffer 大小相同,且搬移目標(biāo)尺寸就是 FrameBuffer 長度時,其就蛻變成了大家所熟悉的普通 DMA。

二、一個RT1170的Errata

在我們實(shí)測 PXP 數(shù)據(jù)搬移功能時,我們先來看一個 RT1160/1170 上獨(dú)有的 Errata,也正是因?yàn)檫@個 Errata 讓痞子衡關(guān)注到了 PXP 的 2D DMA 功能。

這個 Errata 提及到 RT1160/1170 里若干個具有存儲器讀寫能力的主設(shè)備在對 CM7 TCM 進(jìn)行 Sparse write(隨機(jī)地址短小數(shù)據(jù)寫入操作)時可能會導(dǎo)致數(shù)據(jù)出錯,PXP 就是其一,解決方案就是 CM7 TCM 不要作為目的 FrameBuffer。

Note:列出來的有限制的主設(shè)備大多是 RT1170 里新增的外設(shè)(CAAM, ENET_1G, ENET_QOS, GC355, LCDIFv2),除了 PXP 是 RT10xx 上也存在的,但是 RT10xx PXP 并沒有這個限制。

三、在PXP下實(shí)測數(shù)據(jù)搬移

要實(shí)測 PXP 數(shù)據(jù)搬移功能可以直接借助 \SDK_2_16_000_MIMXRT1170-EVKB\boards\evkbmimxrt1170\driver_examples\pxp\copy_pic\cm7 例程,其主要函數(shù) APP_CopyPicture() 摘錄如下,代碼清晰明了。我們要做不同的測試,只需要將 s_inputBuf、s_outputBuf 分別鏈接在不同存儲器空間里,并且設(shè)置不同的拷貝塊大小與坐標(biāo)位置即可。

Note:僅需調(diào)整 COPY_WIDTH、DEST_OFFSET_X 值來測試對一維數(shù)據(jù)搬移影響(數(shù)據(jù)長度、起始地址對齊因素)

#include "fsl_pxp.h"
// 源/目標(biāo) Buffer 長寬設(shè)置(為測試方便,可設(shè)置成一樣)
#define BUF_WIDTH   64
#define BUF_HEIGHT  64
// 拷貝塊長寬及在目標(biāo) Buffer 坐標(biāo)設(shè)置(從源 Buffer 坐標(biāo)固定為 [0,0])
#define COPY_WIDTH        8
#define COPY_HEIGHT       8
#define DEST_OFFSET_X     1
#define DEST_OFFSET_Y     1

uint16_t s_inputBuf[BUF_HEIGHT][BUF_WIDTH];
uint16_t s_outputBuf[BUF_HEIGHT][BUF_WIDTH];

static void APP_CopyPicture(void)
{
    pxp_pic_copy_config_t pxpCopyConfig;
    // 設(shè)置拷貝參數(shù)(將s_inputBuf里坐標(biāo)[0,0]開始的大小為8x8的數(shù)據(jù)拷貝到s_outputBuf里[1,1]位置處)
    // 源 Buffer 地址與拷貝塊坐標(biāo)設(shè)置
    pxpCopyConfig.srcPicBaseAddr  = (uint32_t)s_inputBuf;
    pxpCopyConfig.srcPitchBytes   = sizeof(uint16_t) * BUF_WIDTH;
    pxpCopyConfig.srcOffsetX      = 0;
    pxpCopyConfig.srcOffsetY      = 0;
    // 目的 Buffer 地址與拷貝塊坐標(biāo)設(shè)置
    pxpCopyConfig.destPicBaseAddr = (uint32_t)s_outputBuf;
    pxpCopyConfig.destPitchBytes  = sizeof(uint16_t) * BUF_WIDTH;
    pxpCopyConfig.destOffsetX     = DEST_OFFSET_X;
    pxpCopyConfig.destOffsetY     = DEST_OFFSET_Y;
    // 拷貝塊大小設(shè)置(像素點(diǎn)格式為 RGB565 即 2bytes)
    pxpCopyConfig.width           = COPY_WIDTH;
    pxpCopyConfig.height          = COPY_HEIGHT;
    pxpCopyConfig.pixelFormat     = kPXP_AsPixelFormatRGB565;
    // 啟動拷貝(將拷貝塊數(shù)據(jù)從源 Buffer 搬移到目的 Buffer)
    PXP_StartPictureCopy(PXP, &pxpCopyConfig);
    while (!(kPXP_CompleteFlag & PXP_GetStatusFlags(PXP)));
    PXP_ClearStatusFlags(PXP, kPXP_CompleteFlag);
}

經(jīng)測試當(dāng) s_outputBuf 放在 OCRAM 或者外部 RAM 空間里時,搬移結(jié)果完全如預(yù)期。而當(dāng) s_outputBuf 放在 CM7 ITCM 或者 DTCM 時,則會出現(xiàn)異常結(jié)果,在 ITCM/DTCM 異常表現(xiàn)是一致的。

設(shè)置不同的 COPY_WIDTH、DEST_OFFSET_X 值組合帶來的異常結(jié)果不盡相同,這里僅放出一個 COPY_WIDTH = 1、DEST_OFFSET_X = 3 的情況供參考,可以看到除了目標(biāo)地址數(shù)據(jù)之外,前后還會有一些額外數(shù)據(jù)被寫入,這樣的數(shù)據(jù)搬移操作顯然不可靠了。

當(dāng)然并不是 s_outputBuf 放在 CM7 TCM 就一定能引起異常,只要拷貝的一維數(shù)據(jù)長度是 16bytes 整數(shù)倍,且目的起始地址以 8 對齊時,此時并無出錯情況發(fā)生。不滿足這個條件的寫入我們即稱之為有風(fēng)險(xiǎn)的 Sparse write(隨機(jī)地址短小數(shù)據(jù)寫入)。

至此,在i.MXRT1170上PXP對CM7 TCM進(jìn)行隨機(jī)地址短小數(shù)據(jù)寫入操作限制痞子衡便介紹完畢了,掌聲在哪里~~~

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 3
關(guān)注 41
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 久久精品欧美一区二区三区不卡 | 欧美激情网站在线观看 | 亚洲中文字幕精品久久 | 一区二区三区观看视频 | 免费国产视频 | 亚洲网站三级 | 国产日韩一级片 | 99精品久久久久久久免费 | 欧美另类激情 | 伊人青青久久 | www.黄色网址.com| 久久精品免费 | 天天做天天爱天天爽综合网 | 欧美日韩精品一区二区三区高清视频 | 久久男人免费视频 | 国产wwwxx | 完全着衣の爆乳お姉さんが | 四虎国产精品永久在线国在线 | 欧美成人一区在线 | 日韩欧美成人一区二区三区 | 国产一片姪乱洗澡 | av线网 | 日本一本一道高清无 | 极品粉嫩嫩模大尺度无码视频 | 超碰福利久久 | 日本一道高清一区二区三区 | 91精品999| 国产字幕制服中文在线 | 国产色综合视频 | 黄色观看大全 | 麻豆福利影院 | 火影大胸美女被黄网站 | 国产不卡一级无码视频 | 高H猛烈失禁潮喷A片在线观看 | 欧美一级大黄大黄大色毛片小说 | 亚洲精品在线视频免费观看 | 国产免费久久精品99RE丫丫 | 欧美肥妇毛多水多bbxx水蜜桃 | 日本伦理在线视频 | 成人免费在线视频 | 国产第一页福利影院 |