mcpField
D
dma-baremetal

dma-baremetal

github.com/mohitmishra786開発269307 回インストール18 週間前に更新
リポジトリ

dma-baremetal について

ベアメタル組み込みエージェント向けのDMA設定ガイドです。転送設定、循環・ダブルバッファ、割り込み処理、Cortex-M7のキャッシュ整合性を扱います。

主な機能

  1. 01メモリとペリフェラル間のDMA転送設定
  2. 02循環モードとダブルバッファの設定
  3. 03割り込みと半転送イベントの処理
  4. 04Cortex-M7のキャッシュ整合性管理

活用シーン

  1. 01UART、SPI、ADC転送のDMAオフロード
  2. 02オーディオやストリーミング用のダブルバッファ構築
  3. 03DMAの未起動やデータ破損の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill dma-baremetal

インストール後、Claude Code で/dma-baremetalを入力して読み込まれたか確認します。

詳細

DMA(ベアメタル)

目的

メモリからペリフェラル、またはペリフェラルからメモリへの転送に向けてDMAコントローラーを設定します。チャネル/ストリームの設定、バーストサイズ、循環モード、半転送割り込み、Cortex-M7のキャッシュコヒーレンシーを扱います。

使用する場面

  • UART/SPI/ADCの大容量転送をCPUから切り離す場合
  • オーディオ/ストリーミングのダブルバッファーを使用する場合
  • DMAが起動しない、またはデータが破損する問題をデバッグする場合

ワークフロー

1. STM32 DMA2ストリーム(ペリフェラル→メモリ)
/* UART2 RX DMA — Stream5, Channel 4 (verify RM matrix) */
RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN;

DMA1_Stream5->PAR  = (uint32_t)&USART2->DR;
DMA1_Stream5->M0AR = (uint32_t)rx_buf;
DMA1_Stream5->NDTR = sizeof(rx_buf);
DMA1_Stream5->CR   = DMA_SxCR_MINC     /* mem increment */
                   | DMA_SxCR_TCIE    /* transfer complete IRQ */
                   | DMA_SxCR_CHSEL_2 /* channel 4 */
                   | DMA_SxCR_EN;

USART2->CR3 |= USART_CR3_DMAR;
2. 循環/ダブルバッファー
DMA1_Stream5->CR |= DMA_SxCR_CIRC;  /* auto-reload NDTR */
/* HTIF = first half, TCIF = second half — process in IRQ */
3. Cortex-M7のキャッシュ(H7)

DMAバッファーを非キャッシュ領域に配置するか、D-Cacheをクリーン/無効化します。

SCB_CleanDCache_by_Addr((void*)tx_buf, len);
/* after DMA TX */
SCB_InvalidateDCache_by_Addr((void*)rx_buf, len);
4. エージェントの使用
/dma-baremetal Configure UART RX DMA circular buffer on STM32F4

よくある問題

症状原因対処法
DMAが起動しないストリーム/チャネルの不一致RMのDMAリクエストマッピング表を確認
RXデータが破損するキャッシュコヒーレンシー(M7)RX完了後に無効化
NDTRが停止するペリフェラルのDMA有効化が不足USART_CR3 DMAR/DMAT
IRQが頻発するISRでフラグをクリアしていないDMA_LISR/HIFCR

関連スキル

  • skills/baremetal/uart-serial-baremetal — USART DMAの有効化
  • skills/baremetal/adc-dac-baremetal — ADC DMAモード
  • skills/low-level-programming/cpu-cache-opt — キャッシュラインの概念

コメント