0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

AN-1561:ADuCM4050的DMA編程

星星科技指導(dǎo)員 ? 來(lái)源:ADI ? 作者:ADI ? 2023-06-16 16:24 ? 次閱讀

直接存儲(chǔ)器訪(fǎng)問(wèn)(DMA控制器執(zhí)行數(shù)據(jù)傳輸任務(wù),并從ADuCM4050微控制器單元(MCU)卸載這些任務(wù)。DMA 在外設(shè)和存儲(chǔ)器之間提供高速數(shù)據(jù)傳輸。DMA 無(wú)需任何 CPU 操作即可快速移動(dòng)數(shù)據(jù),從而使 CPU 資源可用于其他操作。

本應(yīng)用筆記介紹如何使用ADuCM4050微控制器的DMA功能。本應(yīng)用筆記還提供了對(duì)DMA控制器進(jìn)行編程所需的編程步驟、DMA圖和DMA代碼片段。

DMA 控制器特性

DMA 控制器支持以下功能:

27 個(gè)獨(dú)立的 DMA 通道

每個(gè) DMA 通道的兩個(gè)可編程優(yōu)先級(jí)

每個(gè)優(yōu)先級(jí)都使用由 DMA 通道號(hào)確定的固定優(yōu)先級(jí)進(jìn)行仲裁

每個(gè) DMA 通道都可以訪(fǎng)問(wèn)主通道和/或備用通道控制數(shù)據(jù)結(jié)構(gòu)

支持以下傳輸類(lèi)型:

內(nèi)存到內(nèi)存

內(nèi)存到外設(shè)

內(nèi)存外設(shè)

支持以下 DMA 循環(huán)類(lèi)型:

基本

自動(dòng)請(qǐng)求

乒乓球

分散聚集

支持多種 DMA 傳輸數(shù)據(jù)寬度(8 位、16 位和 32 位)

每個(gè) DMA 通道都可以具有獨(dú)立的源和目標(biāo)遞增和遞減控制

DMA

DMA 通道

DMA 有 27 個(gè)通道,每個(gè)通道專(zhuān)用于管理來(lái)自外設(shè)的內(nèi)存訪(fǎng)問(wèn)請(qǐng)求。

表 1 顯示了 DMA 通道分配。

通道節(jié)點(diǎn) 外設(shè)
0 SPI2 傳輸
1 SPI2 接收
2 運(yùn)動(dòng)0A
3 運(yùn)動(dòng)0B
4 SPI0 傳輸
5 SPI0 接收
6 SPI1 傳輸
7 SPI1 接收
8 UART0 傳輸
9 UART0 接收
10 我2C 從機(jī)傳輸
11 我2C 從接收
12 我2C 主控
13 密碼學(xué)
14 密碼學(xué)輸出
15 閃光
16 到 23 軟件 DMA
24 模數(shù)轉(zhuǎn)換器ADC) 接收
25 UART1 傳輸
26 UART1 接收

DMA系統(tǒng)框圖

圖 1 顯示了 DMA 系統(tǒng)框圖。

wKgaomSMJLmABN89AAApttHJ7TY765.png

圖1.DMA 系統(tǒng)框圖

DMA 如何工作?

DMA 根據(jù) DMA 控制器中提供的信息在內(nèi)存和外設(shè)之間傳輸數(shù)據(jù)。當(dāng)生成 DMA 請(qǐng)求(通過(guò)軟件 DMA 請(qǐng)求或外設(shè) DMA 請(qǐng)求)時(shí),DMA 控制器從相應(yīng)的通道控制數(shù)據(jù)結(jié)構(gòu)中收集信息并執(zhí)行所需的傳輸。

DMA 控制器

DMA 控制器是執(zhí)行傳輸?shù)?DMA 塊的主要部分??刂破鲝耐ǖ揽刂茢?shù)據(jù)結(jié)構(gòu)中獲取傳輸信息,并在收到DMA傳輸請(qǐng)求后執(zhí)行事務(wù)。

通道控制數(shù)據(jù)結(jié)構(gòu)

每個(gè)通道都有兩個(gè)控制數(shù)據(jù)結(jié)構(gòu):主通道和備用通道。必須聲明一個(gè)與存儲(chǔ)器分開(kāi)的空間,其中包含每個(gè)通道的主數(shù)據(jù)和備用數(shù)據(jù)結(jié)構(gòu),具體取決于應(yīng)用復(fù)雜性。此內(nèi)存空間是 DMA 控制器獲取有關(guān)傳輸?shù)男畔⒌奈恢谩?/p>

主數(shù)據(jù)結(jié)構(gòu)和備用數(shù)據(jù)結(jié)構(gòu)以及數(shù)據(jù)庫(kù)指針

主數(shù)據(jù)結(jié)構(gòu)和備用數(shù)據(jù)結(jié)構(gòu)包含所有 DMA 通道的 DMA 描述符。這些數(shù)據(jù)結(jié)構(gòu)在 RAM 區(qū)域中聲明,每個(gè)通道描述符有 16 個(gè)字節(jié)。數(shù)據(jù)庫(kù)指針包含這些描述符的起始地址,這是 DMA 控制器了解特定通道的描述符信息拾取位置的方式。收到傳輸請(qǐng)求時(shí),DMA 控制器讀取基指針,遍歷到通道的指定描述符,并按照描述符指定的方式執(zhí)行傳輸。如果描述符信息在另一個(gè)內(nèi)存空間中定義,請(qǐng)?jiān)趩⒂?DMA 控制器之前將描述符信息移動(dòng)到通道數(shù)據(jù)結(jié)構(gòu)內(nèi)存空間。備用數(shù)據(jù)結(jié)構(gòu)基指針是一個(gè)只讀寄存器,當(dāng)主描述符基指針更改時(shí),其值會(huì)自動(dòng)調(diào)整。

16 字節(jié) DMA 描述符由所有 DMA 事務(wù)信息組成。在啟用 DMA 控制器之前,必須將描述符復(fù)制到特定的通道控制數(shù)據(jù)結(jié)構(gòu),因?yàn)?DMA 從通道控制數(shù)據(jù)結(jié)構(gòu)中獲取有關(guān)傳輸?shù)男畔?。?2 顯示了 DMA 描述符通道的元素。

名字 描述 大?。ㄗ止?jié))
SRC_END_PTR 源數(shù)據(jù)的結(jié)束地址 4
DST_END_PTR 目標(biāo)數(shù)據(jù)的結(jié)束地址 4
CHL_CFG 提供 DMA 傳輸?shù)目刂菩畔?/strong> 4
保留 保留 4

DMA 編程模型

DMA 設(shè)置的一般編程順序如下:

設(shè)置用于數(shù)據(jù)傳輸?shù)?DMA 描述符。

設(shè)置 DMA 基指針。

啟用所需的 DMA 通道。

在 DMA 配置寄存器 (DMA_CFG) 中啟用 DMA 控制器。

在 DMA 通道軟件請(qǐng)求寄存器 (DMA_SWREQ) 中生成軟件 DMA 請(qǐng)求,或啟用生成 DMA 控制器中斷的外設(shè)。

有關(guān)每種模式的 DMA 設(shè)置的特定信息,請(qǐng)參閱 DMA 模式部分。

數(shù)字對(duì)象模式

自動(dòng)請(qǐng)求 (ARQ) 模式和基本模式

ARQ 和基本模式是所有模式中最基本的,由單個(gè)描述符傳輸組成。ARQ 模式用于內(nèi)存到內(nèi)存的傳輸,基本模式用于內(nèi)存到外設(shè)或外設(shè)到內(nèi)存的傳輸。

在這兩種模式下,DMA描述符可以先構(gòu)建,然后移動(dòng)到通道數(shù)據(jù)結(jié)構(gòu)中,也可以直接寫(xiě)入通道數(shù)據(jù)結(jié)構(gòu)。

這些模式的編程順序如下:

填充 DMA 描述符并將其移動(dòng)到通道數(shù)據(jù)結(jié)構(gòu)或直接寫(xiě)入通道數(shù)據(jù)結(jié)構(gòu)。

將主控制數(shù)據(jù)庫(kù) (PCD) 指針指向通道控制數(shù)據(jù)結(jié)構(gòu)的基。

清除特定 DMA 通道的通道請(qǐng)求掩碼。

啟用 DMA 的請(qǐng)求源中斷和 DMA 完成中斷(可選)。

啟用相應(yīng)的 DMA 通道。

通過(guò)將DMA_CFG寄存器設(shè)置為 1 來(lái)啟用 DMA 控制器。

生成軟件 DMA 請(qǐng)求 (ARQ DMA) 或等待生成外圍 DMA 請(qǐng)求(基本 DMA)。

ARQ 和基本模式一次最多允許 1024 次傳輸,并且每次傳輸后必須重新啟用 DMA 控制器。

基本模式的時(shí)序圖如圖 2 所示,除步驟 7 外,與 ARQ 模式相同。

wKgZomSMJMyAO_XvAACqmRNbhrY703.png

圖2.基本模式序列圖

示例代碼:RAM 的兩個(gè)數(shù)據(jù)塊內(nèi)的內(nèi)存到內(nèi)存 ARQ 傳輸

此示例演示如何在內(nèi)存塊之間執(zhí)行 DMA ARQ 傳輸。此示例使用通道 16 DMA(軟件 DMA)描述符,并將數(shù)據(jù)從 srcPtr[] 復(fù)制到 destPtr[]。

/* Build the channel descriptor */
ChannelDesc[16].srcEndPtr =(unsigned int) &srcPtr[61];
ChannelDesc[16].destEndPtr =(unsigned int) &destPtr[61];
ChannelDesc[16].ctrlCfg.src_inc = 0;
ChannelDesc[16].ctrlCfg.dst_inc = 0;
ChannelDesc[16].ctrlCfg.src_size = 0;
ChannelDesc[16].ctrlCfg.n_minus_1 = 61u;
ChannelDesc[16].ctrlCfg.r_power = 0;
ChannelDesc[16].ctrlCfg.cycle_ctrl = 2u;

/* give the address of the built channel descriptor to the DMA controller */
*pREG_DMA0_PDBPTR = (unsigned int) &ChannelDesc[0];

/* Enable the DMA channel 16 */
*pREG_DMA0_EN_SET = (1u << 16u);

/* Enable the peripherals to create DMA requests on channel 16 */
*pREG_DMA0_RMSK_CLR = (1u << 16u);

/* enable the DMA controller */
*pREG_DMA0_CFG = 1u;

/* Generate a software DMA request on channel 16 */
*pREG_DMA0_SWREQ = (1u << 16u);

示例代碼:使用 UART 進(jìn)行內(nèi)存到外設(shè)基本模式數(shù)據(jù)傳輸

此示例演示如何在內(nèi)存塊和外設(shè)緩沖區(qū)寄存器之間執(zhí)行基本硬件請(qǐng)求傳輸。該示例使用通道 8 DMA(UART0 發(fā)送),并將數(shù)據(jù)從 srcPts[] 發(fā)送到通用異步接收器發(fā)射器 (UART) 終端。

/* Build the channel descriptor */
ChannelDesc[8].srcEndPtr =(unsigned int) &srcPtr[61];
ChannelDesc[8].destEndPtr =(unsigned int)pREG_UART0_TX;
ChannelDesc[8].ctrlCfg.src_inc = 0;
ChannelDesc[8].ctrlCfg.dst_inc = 3;
ChannelDesc[8].ctrlCfg.src_size = 0;
ChannelDesc[8].ctrlCfg.n_minus_1 = 61u;
ChannelDesc[8].ctrlCfg.r_power = 0;
ChannelDesc[8].ctrlCfg.cycle_ctrl = 1u;

/* enable the DMA controller */
*pREG_DMA0_CFG = 1u;

/* give the address of the built channel descriptor to the DMA controller */
*pREG_DMA0_PDBPTR = (unsigned int) &ChannelDesc[0];

/* Enable the peripherals to create DMA requests on channel 8 */
*pREG_DMA0_RMSK_CLR = (1u << 8u);

/* Enable the DMA channel 8 */
*pREG_DMA0_EN_SET = (1u << 8u);

/* Configure DMA Channel 8 to use primary data structure */
*pREG_DMA0_ALT_CLR = (1u << 8u);

/* pin mux for UART 0 */
*((volatile uint32_t *)REG_GPIO0_CFG) |= UART0_TX_PORTP0_MUX | UART0_RX_PORTP0_MUX ;

/* UART 0 configuration */
/* baud rate = 9600*/
*pREG_UART0_DIV = 0x1C;
*pREG_UART0_FBR = (0x1<

*pREG_UART0_LCR2 = (0x3<

/* parity , stop */
*pREG_UART0_LCR = (0x3<

/* Enable DMA request from UART0 to DMA controller */
*pREG_UART0_IEN |=(1u << 4u);

內(nèi)存分散收集和外設(shè)分散收集模式

內(nèi)存分散收集模式是重復(fù) ARQ 模式,外設(shè)分散收集模式是重復(fù)的基本模式,其中兩種分散收集模式都設(shè)置并同時(shí)觸發(fā)多個(gè) DMA 描述符。當(dāng)同時(shí)執(zhí)行大型傳輸時(shí),此模式很有用。

此模式涉及設(shè)置所有描述符,并將描述符逐個(gè)移動(dòng)到發(fā)生 DMA 事務(wù)的備用通道數(shù)據(jù)結(jié)構(gòu)中。描述符從內(nèi)存到備用通道描述符 (ACD) 的這種移動(dòng)由主 DMA 執(zhí)行。因此,特定 DMA 通道的主描述符填充了以下信息:源端是聲明的描述符的結(jié)尾,目標(biāo)是備用通道描述符、字大小和仲裁大小,增量設(shè)置為 4。由于仲裁設(shè)置為 4,因此 DMA 控制器執(zhí)行主描述符字大小的四次傳輸(即一個(gè)描述符移動(dòng)到備用描述符),然后轉(zhuǎn)移到備用描述符,在那里執(zhí)行實(shí)際數(shù)據(jù)傳輸,然后移回主控制器。循環(huán)一直持續(xù)到循環(huán)達(dá)到基本模式 DMA 描述符。DMA 完成中斷在描述符的每次傳輸完成后生成。

散點(diǎn)收集模式的編程順序如下:

使用有關(guān)在基本模式下使用最后一個(gè) DMA 描述符執(zhí)行的傳輸?shù)男畔⒍x DMA 描述符(如果需要 DMA 事務(wù)終止)。

使用將聲明的 DMA 描述符移動(dòng)到仲裁為 4 的備用通道數(shù)據(jù)結(jié)構(gòu)的詳細(xì)信息填充主通道數(shù)據(jù)結(jié)構(gòu)。

將 PCD 指針指向通道描述符的基座。

清除特定 DMA 通道的通道請(qǐng)求掩碼。

啟用 DMA 的請(qǐng)求源中斷和 DMA 完成中斷(可選)。

啟用相應(yīng)的 DMA 通道。

通過(guò)將DMA_CFG寄存器設(shè)置為 1 來(lái)啟用 DMA 控制器。

生成軟件 DMA 請(qǐng)求(內(nèi)存散射收集 DMA 模式)或等待生成外設(shè) DMA 請(qǐng)求(外設(shè)散射收集 DMA 模式)。

散點(diǎn)收集的序列圖如圖 3 所示。

wKgZomSMJN2AZDS2AADmRDeUfAg088.png

圖3.散點(diǎn)收集模式序列圖

示例代碼:內(nèi)存到內(nèi)存分散收集軟件請(qǐng)求 RAM 的兩個(gè)數(shù)據(jù)塊內(nèi)的數(shù)據(jù)傳輸

此示例演示如何在內(nèi)存塊之間執(zhí)行 DMA 分散收集傳輸。此示例使用 DMA 通道 16(軟件 DMA)描述符,將數(shù)據(jù)從 srcPtr1[] 復(fù)制到 destPtr1[],將 srcPtr2[] 復(fù)制到 destPtr2[],將 srcPtr3[] 復(fù)制到 destPtr3[]。

/* Build the scatter gather descriptor 1 to copy srcPtr1[] to destPtr1[]*/ ScatterGatherDesc[0].srcEndPtr =(unsigned int) &srcPtr1[9];
ScatterGatherDesc[0].destEndPtr =(unsigned int)&destPtr1[9];
ScatterGatherDesc[0].ctrlCfg.src_inc = 0;
ScatterGatherDesc[0].ctrlCfg.dst_inc = 0;
ScatterGatherDesc[0].ctrlCfg.src_size = 0;
ScatterGatherDesc[0].ctrlCfg.n_minus_1 = 9u;
ScatterGatherDesc[0].ctrlCfg.r_power = 0;
ScatterGatherDesc[0].ctrlCfg.cycle_ctrl = 5u;
/* alternate memory to memory scatter gather */

/* Build the scatter gather descriptor 2 to copy srcPtr2[] to destPtr2[]*/
ScatterGatherDesc[1].srcEndPtr =(unsigned int) &srcPtr2[9];
ScatterGatherDesc[1].destEndPtr =(unsigned int)&destPtr2[9];
ScatterGatherDesc[1].ctrlCfg.src_inc = 0;
ScatterGatherDesc[1].ctrlCfg.dst_inc = 0;
ScatterGatherDesc[1].ctrlCfg.src_size = 0;
ScatterGatherDesc[1].ctrlCfg.n_minus_1 = 9u;
ScatterGatherDesc[1].ctrlCfg.r_power = 0;
ScatterGatherDesc[1].ctrlCfg.cycle_ctrl = 5u;
/* alternate memory to memory scatter gather */

/* Build the scatter gather descriptor 3 to copy srcPtr3[] to destPtr3[]*/
ScatterGatherDesc[2].srcEndPtr =(unsigned int) &srcPtr3[9];
ScatterGatherDesc[2].destEndPtr =(unsigned int)&destPtr3[9];
ScatterGatherDesc[2].ctrlCfg.src_inc = 0;
ScatterGatherDesc[2].ctrlCfg.dst_inc = 0;
ScatterGatherDesc[2].ctrlCfg.src_size = 0;
ScatterGatherDesc[2].ctrlCfg.n_minus_1 = 9u;
ScatterGatherDesc[2].ctrlCfg.r_power = 0;
ScatterGatherDesc[2].ctrlCfg.cycle_ctrl = 2u;
/* the last descriptor has to be ARQ to stop the DMA */

/* enable the DMA controller */
*pREG_DMA0_CFG = 1u;

/* Enable the DMA channel 16 */
*pREG_DMA0_EN_SET = (1u << 16u);

/* Enable the peripherals to create DMA requests on channel 16 */
*pREG_DMA0_RMSK_CLR = (1u << 16u);

/* give the address of the built channel descriptor to the DMA controller */
*pREG_DMA0_PDBPTR = (unsigned int) &ChannelDesc[0];

/* Locate the Alternate channel descriptor for channel 16 in memory */
pChannelDescAlternate =(ADI_DMA_DESC*)((*pREG_DMA0_ADBPTR) + (16 * 16));

uint8_t* ptypIntScatterGatherDesc =(uint8_t*)pScatterGatherDesc;
uint8_t* ptypIntChannelDescAlternate =(uint8_t*)pChannelDescAlternate;

/* Build the primary channel descriptor to move ScatterGatherDesc to ChannelDescAlternate*/
ChannelDesc[16].srcEndPtr =(unsigned int)((ptypIntScatterGatherDesc + 11*4)+3);
ChannelDesc[16].destEndPtr =(unsigned int)((ptypIntChannelDescAlternate + 3*4)+3);
ChannelDesc[16].ctrlCfg.src_inc = 2;
ChannelDesc[16].ctrlCfg.dst_inc = 2;
ChannelDesc[16].ctrlCfg.src_size = 2;
ChannelDesc[16].ctrlCfg.n_minus_1 = 11u;
ChannelDesc[16].ctrlCfg.r_power = 2;
ChannelDesc[16].ctrlCfg.cycle_ctrl = 4u;

/* Generate a software DMA request on channel 16 */
*pREG_DMA0_SWREQ = (1u << 16u);

乒乓球模式

乒乓模式對(duì)于連續(xù)傳輸數(shù)據(jù)非常有用,在傳輸過(guò)程中沒(méi)有任何中斷。在此模式下,DMA 控制器在主描述符和備用描述符之間切換,直到控制器命中基本模式描述符。

最初,主數(shù)據(jù)結(jié)構(gòu)和備用數(shù)據(jù)結(jié)構(gòu)都填充了 DMA 描述符信息。傳輸從主數(shù)據(jù)結(jié)構(gòu)開(kāi)始。傳輸完成后,DMA 控制器會(huì)立即選取備用數(shù)據(jù)結(jié)構(gòu)并開(kāi)始下一個(gè)事務(wù),而不會(huì)延遲切換。備用傳輸完成后,傳輸將返回到主數(shù)據(jù)結(jié)構(gòu),并且循環(huán)繼續(xù),直到遇到基本模式描述符。

確保當(dāng)主數(shù)據(jù)結(jié)構(gòu)完成且備用數(shù)據(jù)結(jié)構(gòu)正在傳輸時(shí),在備用數(shù)據(jù)結(jié)構(gòu)完成傳輸之前重置主數(shù)據(jù)結(jié)構(gòu),反之亦然,重置備用數(shù)據(jù)結(jié)構(gòu)。

如前所述,當(dāng)數(shù)據(jù)結(jié)構(gòu)完成事務(wù)時(shí),除非更新源字段和目標(biāo)字段,否則只有 N ? 1 字段和循環(huán)控制字段會(huì)重置。

乒乓球模式的編程順序如下:

使用有關(guān)在基本模式下使用最后一個(gè) DMA 描述符執(zhí)行的傳輸?shù)男畔⒍x所有 DMA 描述符(如果需要 DMA 事務(wù)終止)。

將填充的主描述符和備用描述符復(fù)制到主數(shù)據(jù)結(jié)構(gòu)和備用數(shù)據(jù)結(jié)構(gòu)。

將 PCD 指針指向主通道描述符的基座。

清除特定通道的通道請(qǐng)求掩碼。

啟用 DMA 的請(qǐng)求源中斷和 DMA 完成中斷。

啟用相應(yīng)的 DMA 通道。

通過(guò)將DMA_CFG寄存器設(shè)置為 1 來(lái)啟用 DMA 控制器。

生成軟件 DMA 請(qǐng)求(如果是軟件乒乓 DMA 請(qǐng)求)或等待外圍 DMA 請(qǐng)求生成。

在DMA_DONE中斷例程中,創(chuàng)建一個(gè)標(biāo)志,指示哪個(gè)主傳輸或備用傳輸已完成。因此,在特定傳輸完成后,重置通道的主描述符或備用描述符中的相應(yīng)字段。

乒乓球模式的時(shí)序圖如圖 4 所示。

wKgaomSMHE-AIBcfAAJMnl01gvM902.jpg

圖4.乒乓球模式時(shí)序圖

示例代碼:使用UART進(jìn)行內(nèi)存乒乓球數(shù)據(jù)傳輸?shù)膬?nèi)存外圍設(shè)備

此示例演示如何執(zhí)行從內(nèi)存塊到外設(shè)緩沖區(qū)寄存器的乒乓硬件請(qǐng)求傳輸。該示例使用通道 9 DMA (UART0 Rx),ping 和 pong 交替將從 UART 接收的數(shù)據(jù)分別存儲(chǔ)到 srcPtr[] 和 destPtr[] 中。當(dāng)從 UART 收到五個(gè)字符時(shí),ping 將切換到 pong,反之亦然。然后,收到的五個(gè)字符通過(guò)UART發(fā)送出去。

/* Build the primary channel descriptor */
ChannelDesc[9].srcEndPtr =(unsigned int) pREG_UART0_RX;
ChannelDesc[9].destEndPtr =(unsigned int)&srcPtr[4];
ChannelDesc[9].ctrlCfg.src_inc = 3;
ChannelDesc[9].ctrlCfg.dst_inc = 0;
ChannelDesc[9].ctrlCfg.src_size = 0;
ChannelDesc[9].ctrlCfg.n_minus_1 = 4u;
ChannelDesc[9].ctrlCfg.r_power = 0;
ChannelDesc[9].ctrlCfg.cycle_ctrl = 3u;

/* enable the DMA controller */
*pREG_DMA0_CFG = 1u;

/* Enable the DMA channel 9 */
*pREG_DMA0_EN_SET = (1u << 9u);

/* Enable the peripherals to create DMA requests on channel 9 */
*pREG_DMA0_RMSK_CLR = (1u << 9u);

/* give the address of the built channel descriptor to the DMA controller */
*pREG_DMA0_PDBPTR = (unsigned int) &ChannelDesc[0];

/* Locate the Alternate channel descriptor for channel 9 in memory */
ChannelDescAlternate =(ADI_DMA_DESC*)((*pREG_DMA0_ADBPTR) + (16 * 9));

/* Build the Alternate channel descriptor */
ChannelDescAlternate->srcEndPtr =(unsigned int)pREG_UART0_RX;
ChannelDescAlternate->destEndPtr =(unsigned int)&destPtr[4];
ChannelDescAlternate->ctrlCfg.src_inc = 3;
ChannelDescAlternate->ctrlCfg.dst_inc = 0;
ChannelDescAlternate->ctrlCfg.src_size = 0;
ChannelDescAlternate->ctrlCfg.n_minus_1 = 4u;
ChannelDescAlternate->ctrlCfg.r_power = 0;
ChannelDescAlternate->ctrlCfg.cycle_ctrl = 3u;

/* Enable the DMA channel 9 interrupt in NVIC */
NVIC_EnableIRQ(DMA0_CH9_DONE_IRQn);

/* pin mux for UART 0 */
*((volatile uint32_t *)REG_GPIO0_CFG) |= UART0_TX_PORTP0_MUX | UART0_RX_PORTP0_MUX ;

/* UART 0 configuration */
/* baud rate = 9600*/
*pREG_UART0_DIV = 0x1C;
*pREG_UART0_FBR = (0x1<

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    15885

    瀏覽量

    175379
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7366

    瀏覽量

    163094
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209378
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    aducm4050如何在keil上創(chuàng)建工程?啟動(dòng)文件那些在哪下載,.c在哪下載?

    aducm4050如何在keil上創(chuàng)建工程,啟動(dòng)文件那些在哪下載,.c在哪下載
    發(fā)表于 01-11 06:43

    ADUCM4050 集成電源管理的超低功耗ARM Cortex-M4F MCU

    電子發(fā)燒友網(wǎng)為你提供ADI(ti)ADUCM4050相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有ADUCM4050的引腳圖、接線(xiàn)圖、封裝手冊(cè)、中文資料、英文資料,ADUCM4050真值表,ADUCM4050
    發(fā)表于 02-22 15:03
    <b class='flag-5'>ADUCM4050</b> 集成電源管理的超低功耗ARM Cortex-M4F MCU

    ADuCM4050 EZ-Kit開(kāi)發(fā)平臺(tái)實(shí)現(xiàn)快速物聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)

    了解ADuCM4050 EZ-Kit開(kāi)發(fā)平臺(tái)以及可實(shí)現(xiàn)快速物聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)的支持附件。
    的頭像 發(fā)表于 06-21 06:12 ?2288次閱讀

    ADuCM4050 EZ-KIT<sup>?</sup> Board Design Database

    ADuCM4050 EZ-KIT? Board Design Database
    發(fā)表于 02-20 13:38 ?2次下載
    <b class='flag-5'>ADuCM4050</b> EZ-KIT<sup>?</sup> Board Design Database

    ADuCM4050單片機(jī)的UG-1163:ADZS-U4050LF-EZKIT

    ADuCM4050單片機(jī)的UG-1163:ADZS-U4050LF-EZKIT
    發(fā)表于 04-27 14:53 ?1次下載
    <b class='flag-5'>ADuCM4050</b>單片機(jī)的UG-1163:ADZS-U<b class='flag-5'>4050</b>LF-EZKIT

    ADuCM4050微控制器的UG-1165:ADZS-U4050WL-EZKIT

    ADuCM4050微控制器的UG-1165:ADZS-U4050WL-EZKIT
    發(fā)表于 04-27 16:05 ?1次下載
    <b class='flag-5'>ADuCM4050</b>微控制器的UG-1165:ADZS-U<b class='flag-5'>4050</b>WL-EZKIT

    UG-1160:如何設(shè)置和使用ADuCM4050

    UG-1160:如何設(shè)置和使用ADuCM4050
    發(fā)表于 04-27 18:10 ?4次下載
    UG-1160:如何設(shè)置和使用<b class='flag-5'>ADuCM4050</b>

    UG-1161:ADuCM4050參考手冊(cè)

    UG-1161:ADuCM4050參考手冊(cè)
    發(fā)表于 04-27 18:31 ?0次下載
    UG-1161:<b class='flag-5'>ADuCM4050</b>參考手冊(cè)

    AN-1479:ADuCM4050 SPI流量控制模式

    AN-1479:ADuCM4050 SPI流量控制模式
    發(fā)表于 05-08 16:14 ?6次下載
    AN-1479:<b class='flag-5'>ADuCM4050</b> SPI流量控制模式

    ADuCM4050超低功耗微控制器

    ADuCM4050超低功耗微控制器
    發(fā)表于 05-13 13:36 ?4次下載
    <b class='flag-5'>ADuCM4050</b>超低功耗微控制器

    ADuCM4050 EZ-KIT?手冊(cè)

    ADuCM4050 EZ-KIT?手冊(cè)
    發(fā)表于 05-19 14:56 ?11次下載
    <b class='flag-5'>ADuCM4050</b> EZ-KIT?手冊(cè)

    ADuCM4050 EZKIT<sup>?</sup>原理圖

    ADuCM4050 EZKIT?原理圖
    發(fā)表于 05-19 15:01 ?5次下載
    <b class='flag-5'>ADuCM4050</b> EZKIT<sup>?</sup>原理圖

    ADuCM4050 EZ-KIT<sup>?</sup>物料清單

    ADuCM4050 EZ-KIT?物料清單
    發(fā)表于 05-19 18:02 ?1次下載
    <b class='flag-5'>ADuCM4050</b> EZ-KIT<sup>?</sup>物料清單

    ADZS-U4050WLEZ ADuCM4050WL EZ-KIT? 是ADI公司針對(duì)ADuCM4050處理器的評(píng)估系統(tǒng)。

    ADuCM4050 EZ-KIT?是ADI公司針對(duì)ADuCM4050處理器的評(píng)估系統(tǒng)。ADuCM4050處理器是一款超低功耗集成式混合信號(hào)微控制器系統(tǒng),可用于處理、控制和連接。MCU系統(tǒng)基于A(yíng)RM
    發(fā)表于 05-28 19:13 ?2次下載
    ADZS-U<b class='flag-5'>4050</b>WLEZ  <b class='flag-5'>ADuCM4050</b>WL EZ-KIT? 是ADI公司針對(duì)<b class='flag-5'>ADuCM4050</b>處理器的評(píng)估系統(tǒng)。

    ADuCM4050 EZ-KIT?板設(shè)計(jì)數(shù)據(jù)庫(kù)

    ADuCM4050 EZ-KIT?板設(shè)計(jì)數(shù)據(jù)庫(kù)
    發(fā)表于 06-02 15:46 ?3次下載
    <b class='flag-5'>ADuCM4050</b> EZ-KIT?板設(shè)計(jì)數(shù)據(jù)庫(kù)