查看: 545|回复: 1

[求助] 关于LPC4370单片机HSADC和DMA结合,无法正确配置DMA的传输大小

[复制链接]

该用户从未签到

8

主题

14

帖子

0

注册会员

Rank: 2

积分
135
最后登录
2025-3-21
发表于 2025-2-21 17:33:27 | 显示全部楼层 |阅读模式
最近在使用LPC4370单片机的HSADC和DMA模块,在配置DMA的传输大小时,无论怎么设置,最终输出的数据量都是4095,不知道是什么原因,下面是我的初始化代码,各位大佬看一下是那里有问题吗:
        ///////////////////////////////////////////////////// //// DMA设置///////////////////////////////////////////// ///////////////////////
        NVIC_DisableIRQ(DMA_IRQn);
        Chip_GPDMA_Init(LPC_GPDMA);

        LPC_GPDMA-> CH [7] .CONFIG &=~(0x01<<0); //启用位,1启用,0禁用
        /* Clear all DMA interrupt and error flag */
        LPC_GPDMA->INTTCCLEAR |= ((1UL <<7 ) & 0xFF);//clears the corresponding channel terminal count interrupt.清除相应的通道终端计数中断。
        LPC_GPDMA->INTERRCLR |= ((1UL <<7 ) & 0xFF);//clears the corresponding channel error interrupt.清除相应的通道错误中断。

        LPC_GPDMA-> CONFIG = 0x01;// DMA Controller enable.DMA控制器启用。
        while(!(LPC_GPDMA-> CONFIG&0x01)); //使能

        /* 描述符寄存器的值仅能通过DMA通道7传递 */
        LPC_GPDMA-> CH[7].SRCADDR =(uint32_t)&LPC_ADCHS-> FIFO_OUTPUT [0];//DMA源地址
        //LPC_GPDMA-> CH[7].SRCADDR = (uint32_t)&LPC_ADCHS->LAST_SAMPLE[0];
        LPC_GPDMA-> CH[7].DESTADDR =((uint32_t)&sample);//DMA目标地址

        LPC_GPDMA-> CH[7].CONTROL =(32)//传输大小
        | (0x0 << 12)// src突发大小
        | (0x0 << 15)// dst突发大小
        | (0x2 << 18)// src传输宽度,0x2表示以字的形式传输
        | (0x2 << 21)// dst传输宽度,0x2表示以字的形式传输
        | (0x1 << 24)// src AHB主选择
        | (0x0 << 25)// dst AHB主选择
        | (0x0 << 26)// src增量:0,每次传输后src地址不递增
        | (0x1 << 27)// dst增量:1,每次传输后的dst地址增量
        | (0x1 << 31); //终端计数中断使能位:1,使能

        LPC_GPDMA->CH[7].CONFIG = (0x1 << 0)
        | (8 << 1)// src外设:设置为8-HSADC
        | (0x0 << 6)// dst外设:无设置-内存
        | (0x6 << 11)//流控制:外设-存储器(外设控制)
        | (0x1 << 14); // IE-中断错误掩码
        //| (0x1 << 15);
        // ITC-终端计数中断屏蔽
        //| (0x1 << 0);// enable bit: 1 enable, 0 disable
        //| (0x0 << 16)//锁定:置位时,此位启用锁定传输
        //| (0x1 << 18); //进一步忽略src DMA req
        config =LPC_GPDMA-> CH [7] .CONFIG;

        LPC_GPDMA-> CH [7] .LLI = 0;

        LPC_CREG->DMAMUX=3<<16; //select HSADC read for DMAMUXPER8. Select DMA to peripheral connection for DMA peripheral 8.
//        LPC_GPDMA-> CH [7] .LLI = 0;
//        NVIC_EnableIRQ(DMA_IRQn);
//        config =LPC_GPDMA-> CH [7] .CONFIG;
//        LPC_GPDMA-> CH [7].CONFIG |= (0x1 << 0);//启用位,1启用,0禁用
        Chip_HSADC_SWTrigger(LPC_ADCHS);//启动ADCHS软件触发

         //不配置就无法读取到数据,但会覆盖之前的配置
        NVIC_SetPriority(DMA_IRQn,0x00);//优先级
        NVIC_ClearPendingIRQ(DMA_IRQn);//清中断
        NVIC_EnableIRQ(DMA_IRQn);//使能中断


我在数据手册查看了相关寄存器的描述,说配置传输大小需要在通道使能前,测试后依然没有效果。
我知道答案 目前已有1人回答
回复

使用道具 举报

该用户从未签到

3

主题

6

帖子

0

注册会员

Rank: 2

积分
88
最后登录
2025-6-24
发表于 2025-6-12 22:14:22 | 显示全部楼层
请问解决了吗,我也是HSADC DMA的问题
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-31 02:51 , Processed in 0.084253 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表