在线时间13 小时
UID4072698
注册时间2024-12-13
NXP金币267
该用户从未签到
注册会员

- 积分
- 135
- 最后登录
- 2025-3-21
|
最近在使用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);//使能中断
我在数据手册查看了相关寄存器的描述,说配置传输大小需要在通道使能前,测试后依然没有效果。
|
|