打印
[DemoCode下载]

ML51的PDMA内存到内存操作方式

[复制链接]
1187|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xuanhuanzi|  楼主 | 2024-7-26 11:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* SPDX-License-Identifier: Apache-2.0                                                                     */
/* Copyright(c) 2020 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

#include "ml51_sdcc.h"

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

__xdata __at 0x100 unsigned char RxDatabuffer[100];
__xdata __at 0x263 unsigned charfinalbuffer;
unsigned char i;
BIT pdmaflag ;

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

void main (void)
{

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

    for(i=0;i<100;i++)
    {
      RxDatabuffer[i]=i;
    }
/* Define PMDA function as memory to memory, and setting base address */   
    PDMA_Open(PDMA1,XRAM_XRAM,0x100,0x80);
/* Define destination memory address */   
    PDMA_MTM_DestinationAddress(PDMA1,0x200);
/* Define interrupt after full transfer */   
    PDMA_Interrupt_Enable(PDMA1,PDMAFULLINT);
    ENABLE_GLOBAL_INTERRUPT;
    PDMA_Run(PDMA1);

    while(!pdmaflag);

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

    while(1);
}





使用特权

评论回复
沙发
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传输已完成。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

173

主题

2211

帖子

3

粉丝