白姐透特今晚开什么码

打印

[技术问答]M487的PDMA使用问题

[复制链接]
249|7
跳转到指定楼层
楼主
PDMA基础模式
寄存器REQSEL选择PWM或UART
没有请求 还有别的什么寄存器需要配置吗

相关资料

沙发
|2019-12-20 10:18|只看该作者
这个看库函数有哪些是操作这个的。搞寄存器太难懂。
板凳
 楼主|2019-12-20 14:09|只看该作者
或者说 外设是怎么请求的 我读PDMA没有请求
地板
|2019-12-21 16:04|只看该作者
  1. /**************************************************************************//**
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
  4. * $Revision: 8 $
  5. * $Date: 15/09/02 10:04a $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    Use PDMA channel 2 to transfer data from memory to memory.
  7. * @note
  8. * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved.
  9. *
  10. ******************************************************************************/
  11. #include <stdio.h>
  12. #include "M451Series.h"

  13. /*---------------------------------------------------------------------------------------------------------*/
  14. /* Macro, type and constant definitions                                                                    */
  15. /*---------------------------------------------------------------------------------------------------------*/
  16. #define PLL_CLOCK       72000000


  17. /*---------------------------------------------------------------------------------------------------------*/
  18. /* Global variables                                                                                        */
  19. /*---------------------------------------------------------------------------------------------------------*/
  20. uint32_t PDMA_TEST_LENGTH = 64;
  21. uint8_t SrcArray[256];
  22. uint8_t DestArray[256];
  23. uint32_t volatile u32IsTestOver = 0;

  24. /**
  25. * @brief       DMA IRQ
  26. *
  27. * @param       None
  28. *
  29. * [url=home.php?mod=space&uid=266161]@return[/url]      None
  30. *
  31. * [url=home.php?mod=space&uid=1543424]@Details[/url]     The DMA default IRQ, declared in startup_nuc400series.s.
  32. */
  33. void PDMA_IRQHandler(void)
  34. {
  35.     uint32_t status = PDMA_GET_INT_STATUS();

  36.     if(status & 0x1)    /* abort */
  37.     {
  38.         if(PDMA_GET_ABORT_STS() & 0x4)
  39.             u32IsTestOver = 2;
  40.         PDMA_CLR_ABORT_FLAG(PDMA_ABTSTS_ABTIFn_Msk);
  41.     }
  42.     else if(status & 0x2)      /* done */
  43.     {
  44.         if(PDMA_GET_TD_STS() & 0x4)
  45.             u32IsTestOver = 1;
  46.         PDMA_CLR_TD_FLAG(PDMA_TDSTS_TDIFn_Msk);
  47.     }
  48.     else
  49.         printf("unknown interrupt !!\n");
  50. }

  51. void SYS_Init(void)
  52. {
  53.     /*---------------------------------------------------------------------------------------------------------*/
  54.     /* Init System Clock                                                                                       */
  55.     /*---------------------------------------------------------------------------------------------------------*/

  56.     /* Enable HIRC clock (Internal RC 22.1184MHz) */
  57.     CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk);

  58.     /* Waiting for HIRC clock ready */
  59.     CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk);

  60.     /* Select HCLK clock source as HIRC and and HCLK clock divider as 1 */
  61.     CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1));

  62.     /* Enable HXT clock (external XTAL 12MHz) */
  63.     CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);

  64.     /* Waiting for HXT clock ready */
  65.     CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);

  66.     /* Set core clock as PLL_CLOCK from PLL */
  67.     CLK_SetCoreClock(PLL_CLOCK);

  68.     /* Waiting for PLL clock ready */
  69.     CLK_WaitClockReady(CLK_STATUS_PLLSTB_Msk);

  70.     /* Enable UART module clock */
  71.     CLK_EnableModuleClock(UART0_MODULE);

  72.     /* Select UART module clock source as HXT and UART module clock divider as 1 */
  73.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HXT, CLK_CLKDIV0_UART(1));

  74.     /* Enable PDMA clock source */
  75.     CLK_EnableModuleClock(PDMA_MODULE);

  76.     /*---------------------------------------------------------------------------------------------------------*/
  77.     /* Init I/O Multi-function                                                                                 */
  78.     /*---------------------------------------------------------------------------------------------------------*/
  79.     /* Set PD multi-function pins for UART0 RXD and TXD */
  80.     SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD0MFP_Msk | SYS_GPD_MFPL_PD1MFP_Msk);
  81.     SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD0MFP_UART0_RXD | SYS_GPD_MFPL_PD1MFP_UART0_TXD);
  82. }

  83. void UART0_Init()
  84. {
  85.     /*---------------------------------------------------------------------------------------------------------*/
  86.     /* Init UART                                                                                               */
  87.     /*---------------------------------------------------------------------------------------------------------*/
  88.     /* Reset UART module */
  89.     SYS_ResetModule(UART0_RST);

  90.     /* Configure UART0 and set UART0 baud rate */
  91.     UART_Open(UART0, 115200);
  92. }


  93. /*---------------------------------------------------------------------------------------------------------*/
  94. /*  Main Function                                                                                          */
  95. /*---------------------------------------------------------------------------------------------------------*/
  96. int main(void)
  97. {
  98.     /* Unlock protected registers */
  99.     SYS_UnlockReg();

  100.     /* Init System, IP clock and multi-function I/O */
  101.     SYS_Init();

  102.     /* Lock protected registers */
  103.     /* If user want to write protected register, please issue SYS_UnlockReg() to unlock protected register. */
  104.     SYS_LockReg();

  105.     /* Init UART for printf */
  106.     UART0_Init();

  107.     printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %dHz\n", SystemCoreClock);

  108.     printf("+------------------------------------------------------+ \n");
  109.     printf("|    PDMA Memory to Memory Driver Sample Code          | \n");
  110.     printf("+------------------------------------------------------+ \n");

  111.     /* Reset PDMA module */
  112.     SYS_ResetModule(PDMA_RST);

  113.     /* Open Channel 2 */
  114.     PDMA_Open(0x4);
  115.     PDMA_SetTransferCnt(2, PDMA_WIDTH_32, PDMA_TEST_LENGTH);
  116.     /* transfer width is one word(32 bit) */
  117.     PDMA_SetTransferAddr(2, (uint32_t)SrcArray, PDMA_SAR_INC, (uint32_t)DestArray, PDMA_DAR_INC);

  118.     PDMA_SetTransferMode(2, PDMA_MEM, FALSE, 0);

  119.     //burst size is 4
  120.     PDMA_SetBurstType(2, PDMA_REQ_BURST, PDMA_BURST_4);

  121.     PDMA_EnableInt(2, PDMA_INT_TRANS_DONE);

  122.     NVIC_EnableIRQ(PDMA_IRQn);
  123.     u32IsTestOver = 0;

  124.     PDMA_Trigger(2);

  125.     while(u32IsTestOver == 0);

  126.     if(u32IsTestOver == 1)
  127.         printf("test done...\n");
  128.     else if(u32IsTestOver == 2)
  129.         printf("target abort...\n");

  130.     PDMA_Close();

  131.     while(1);
  132. }
复制代码
5
|2019-12-21 16:05|只看该作者
好像提供的有这种例子,直接设置好从哪儿发送到哪儿
6
|2019-12-22 20:41|只看该作者
配置好从哪儿传到哪儿啊
7
|2019-12-22 23:55|只看该作者
不知道,去相关头文件搜一下有没有这个关键词。
8
|2019-12-23 08:10|只看该作者
代碼跟文件,應該有都描述
扫描二维码,随时随地手机跟帖

本版积分规则

我要发帖投诉建议创建版块

快速回复

您需要登录后才可以回帖
登录 | 注册

论坛热帖

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