MCUXpresso_MIMXRT1021xxxxx/boards/evkmimxrt1020/driver_examples/edma/channel_link
Yilin Sun 763d32be90
Updated SDK to v2.15.000
Signed-off-by: Yilin Sun <imi415@imi.moe>
2024-03-15 22:23:36 +08:00
..
armgcc Updated SDK to v2.15.000 2024-03-15 22:23:36 +08:00
board.c Updated SDK to v2.15.000 2024-03-15 22:23:36 +08:00
board.h Updated SDK to v2.15.000 2024-03-15 22:23:36 +08:00
clock_config.c Updated to SDK v2.14.0 2023-08-31 23:30:31 +08:00
clock_config.h Updated to SDK v2.14.0 2023-08-31 23:30:31 +08:00
dcd.c Initial SDK v2.12.0 2022-08-23 23:00:33 +08:00
dcd.h Initial SDK v2.12.0 2022-08-23 23:00:33 +08:00
edma_channel_link_v3_14.xml Updated SDK to v2.15.000 2024-03-15 22:23:36 +08:00
edma_channel_link.c Initial SDK v2.12.0 2022-08-23 23:00:33 +08:00
evkmimxrt1020_sdram_init.jlinkscript Initial SDK v2.12.0 2022-08-23 23:00:33 +08:00
pin_mux.c Initial SDK v2.12.0 2022-08-23 23:00:33 +08:00
pin_mux.h Initial SDK v2.12.0 2022-08-23 23:00:33 +08:00
readme.md Updated SDK to v2.15.000 2024-03-15 22:23:36 +08:00

Overview

The EDMA channel link example is a simple demonstration program that uses the SDK software. It excuates channel link transfer using the SDK EDMA drivers. The purpose of this example is to show how to use the EDMA and to provide a simple example for debugging and further development, it demostrates how to use the minor loop link and major loop link: Since each transfer request can be divided into MAJOR_LOOPS_COUNTS * MINOR_LOOPS_BYTES, such as you want to request DMA transfer 8 bytes total, 4 bytes each request, then MAJOR_LOOPS_COUNTS = 2, MINOR_LOOPS_BYTES = 4. The minor loop channel linking occurs at the completion of the minor loop 4 byte transferred. The major loop channel linking is occurs at the major loop exhausted. The example demostrate the channel link transfer by the feature of edma:

  1. minor loop channel link +-----------------------------+ +----------------------+ | channel 1 transfer complete | -----------------------> | example complete | +-----------------------------+ +----------------------+ ^ | major loop finished | +-----------------------------+ +-------------------------------+ trigger channel 1 +-----------------------------+ major loop not finish +----------------------+ +-------------------------------+ | channel 0 minor loop | --> | channel 0 minor loop finished | -------------------> | channel 1 major loop | -----------------------> | channel 1 minor loop | --> | channel 1 minor loop finished | +-----------------------------+ +-------------------------------+ +-----------------------------+ +----------------------+ +-------------------------------+ ^ | | major loop not finish | | | +-----------------+ +-----------------------------+ trigger channel 0 | | channel 0 start | --> | channel 0 major loop | <--------------------------------------------------------------------------------------------------------------------------------------------------+ +-----------------+ +-----------------------------+ | | major loop finished v +-----------------------------+ | channel 0 transfer complete | +-----------------------------+

  2. major loop channel link

                      channel 1 minor loop finished
    

+---------------------------------------------------------+ | v +----------------------+ major loop not finish +-------------------------------+ major loop finished +-----------------------------+ +-------------------------------+ | channel 1 minor loop | <------------------------------- | channel 1 major loop | -----------------------> | channel 1 transfer complete | --> | example complete | +----------------------+ +-------------------------------+ +-----------------------------+ +-------------------------------+ ^ | trigger channel 1 | +-------------------------------+ +-----------------------------+ | channel 0 major loop finished | -----------------------> | channel 0 transfer complete | +-------------------------------+ +-----------------------------+ ^ | | +----------------------+ +-------------------------------+ major loop not finish +-----------------------------+ +-------------------------------+ | channel 0 start | -------------------------------> | channel 0 major loop | -----------------------> | channel 0 minor loop | --> | channel 0 minor loop finished | +----------------------+ +-------------------------------+ +-----------------------------+ +-------------------------------+ ^ | +----------------------------------------------------------------------------------------------+

Please reference user manual for the detail of the feature.

SDK version

  • Version: 2.15.000

Toolchain supported

  • IAR embedded Workbench 9.40.1
  • Keil MDK 5.38.1
  • GCC ARM Embedded 12.2
  • MCUXpresso 11.8.0

Hardware requirements

  • Mini/micro USB cable
  • EVK-MIMXRT1020 board
  • Personal Computer

Board settings

No special settings are required.

Prepare the Demo

  1. Connect a USB cable between the host PC and the OpenSDA USB port on the target board.
  2. Open a serial terminal with the following settings:
    • 115200 baud rate
    • 8 data bits
    • No parity
    • One stop bit
    • No flow control
  3. Download the program to the target board.
  4. Either press the reset button on your board or launch the debugger in your IDE to begin running the demo.

Running the demo

When the example runs successfully, you can see the similar information from the terminal as below.

edma minor loop link start

0	0	0	0	0	0	0	0	

edma minor loop link finished

1	2	3	4	5	6	7	8	

edma major loop link start

0	0	0	0	0	0	0	0	

edma major loop link finished

1	2	3	4	5	6	7	8	

Note: To debug in qspiflash, following steps are needed:

  1. Select the flash target and compile.
  2. Set the SW8: 1 off 2 off 3 on 4 off, then power on the board and connect USB cable to J23.
  3. Start debugging in IDE.
    • Keil: Click "Download (F8)" to program the image to qspiflash first then clicking "Start/Stop Debug Session (Ctrl+F5)" to start debugging.