[DemoCode下载] ML51的PDMA内存到内存操作方式

[复制链接]
 楼主| xuanhuanzi 发表于 2024-7-26 11:06 | 显示全部楼层 |阅读模式
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* SPDX-License-Identifier: Apache-2.0                                                                     */
  4. /* Copyright(c) 2020 Nuvoton Technology Corp. All rights reserved.                                         */
  5. /*                                                                                                         */
  6. /*---------------------------------------------------------------------------------------------------------*/

  7. #include "ml51_sdcc.h"

  8. /**
  9. * [url=home.php?mod=space&uid=247401]@brief[/url]        I2C0 master demo.
  10. * @param       None
  11. * [url=home.php?mod=space&uid=266161]@return[/url]      None
  12. * [url=home.php?mod=space&uid=1543424]@Details[/url]     please confirm enable LXT and check work stable if use LXT as WKT clock source.
  13. */

  14. __xdata __at 0x100 unsigned char RxDatabuffer[100];
  15. __xdata __at 0x263 unsigned charfinalbuffer;
  16. unsigned char i;
  17. BIT pdmaflag ;

  18. void PDMA1_ISR (void) __interrupt (21)          // Vector [url=home.php?mod=space&uid=72445]@[/url]  0xAB
  19. {
  20.   PDMA_Close(PDMA1);
  21.   clr_DMA1TSR_FDONE;
  22.   clr_DMA1TSR_HDONE;
  23.   pdmaflag = 1;
  24. }

  25. void main (void)
  26. {

  27.   /* UART0 settting for printf function */
  28.     Enable_UART0_VCOM_printf();
  29.     printf ("\n Test start ...");

  30.     for(i=0;i<100;i++)
  31.     {
  32.       RxDatabuffer[i]=i;
  33.     }
  34. /* Define PMDA function as memory to memory, and setting base address */   
  35.     PDMA_Open(PDMA1,XRAM_XRAM,0x100,0x80);
  36. /* Define destination memory address */   
  37.     PDMA_MTM_DestinationAddress(PDMA1,0x200);
  38. /* Define interrupt after full transfer */   
  39.     PDMA_Interrupt_Enable(PDMA1,PDMAFULLINT);
  40.     ENABLE_GLOBAL_INTERRUPT;
  41.     PDMA_Run(PDMA1);

  42.     while(!pdmaflag);

  43.     printf (" \n PDMA Tranfer Finish! ");

  44.     while(1);
  45. }





 楼主| xuanhuanzi 发表于 2024-7-26 11:07 | 显示全部楼层
RxDatabuffer:一个100个无符号字符的数组,位于外部数据存储器地址0x100处。用于存储将通过PDMA传输的数据。
finalbuffer:一个无符号字符,位于外部数据存储器地址0x263处。假定它是PDMA传输的目标存储器。
 楼主| xuanhuanzi 发表于 2024-7-26 11:07 | 显示全部楼层
这是PDMA通道1(PDMA1)的中断服务函数(ISR),当PDMA传输完成时触发。
PDMA_Close(PDMA1):关闭PDMA通道。
clr_DMA1TSR_FDONE和clr_DMA1TSR_HDONE:清除PDMA通道1的完成状态位和半完成状态位。
将pdmaflag设置为1,表示PDMA传输已完成。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

183

主题

2307

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部

183

主题

2307

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部