6

開始メモリ アドレスとワード カウントが与えられると、CPU が他のプロセスで動作している間に DMA コントローラがデータを転送します。入出力プロセッサも、開始アドレスとワード数が指定された I/O プロセスを処理します.. (間違っている場合は訂正してください)

では、IOP と DMA コントローラの機能の違いは何ですか?

4

2 に答える 2

1

DMA は、CPU の処理時間を消費することなく、ペリフェラルとメモリ (UART、SPI、DAC、ADC) または 2 つの異なるメモリ アドレス間でデータを転送できるハードウェア モジュールです。一般に、DMA モジュールの構成には、メモリ宛先アドレスとソース アドレスの設定が含まれます。また、ユーザーは、バッファ データ サイズ、自動アドレス インクリメント、循環バッファなどのオプションを構成することもできます。さらに、これらの種類のモジュールは、データ転送の最後に IRQ 信号を送信します。

マイクロコントローラ STM32F373 の DMA 構成例を以下に示します。この例は、シグマデルタ ADC とメモリ バッファ間の DMA 構成を示しています。

DMA_InitTypeDef  DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
DMA_DeInit(DMA2_Channel3);

/* DISABLE the DMA SDADC1 channel */
DMA_Cmd(DMA2_Channel3, DISABLE);
/* DMA channel SDADC1 Configuration */
DMA_InitStructure.DMA_BufferSize = bufferSize;

DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&SDADC1->JDATAR;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)memoryAddress;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc;
DMA_InitStructure.DMA_MemoryDataSize =  DMA_MemoryDataSize_HalfWord;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

DMA_Init(DMA2_Channel3, &DMA_InitStructure);

/* Avoid interrupt on DMA ENABLE */
DMA_ClearITPendingBit(DMA2_FLAG_TC3);

// Enable DMA2 Channel Transfer Complete interrupt
DMA_ITConfig(DMA2_Channel3, DMA_IT_TC, ENABLE);

/* Enable the DMA channel */
DMA_Cmd(DMA2_Channel3, ENABLE);

I/O プロセッサについては、何を言っているのかよくわかりませんでした。しかし、GPIO ハードウェア モジュールは一般的なデジタル入力/出力をメモリ アドレスにマップできると言えます。つまり、I/OI/O にはメモリ アドレスがありますが、実際には読み取りおよび書き込み操作はペリフェラル レジスタで行われます。

于 2015-03-23T13:50:25.050 に答える