在线时间0 小时
UID171528
注册时间2010-2-17
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 256
- 最后登录
- 2021-1-15
|
简单的dma测试程序,但是与预想的结果不一样;
定义了两个数组
unsigned long dma_tx_buffer[260*10] = {0};
unsigned long dma_rx_buffer[260*10] = {0};
就是想正常的搬数;
void dma_init(void)
{
unsigned char i;
//打开DMA模块时钟
SIM_SCGC7 |= SIM_SCGC7_DMA_MASK;
SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK;
DMA_MUX0_CHCONFIG15 = 0x00;
DMA_MUX0_CHCONFIG14 = 0x00;
//DMA_MUX0_CHCONFIG13 = 0x00;
//DMA_MUX0_CHCONFIG12 = 0x00;
//EDMA_ERQL = 0x0000F000; // Enable DMA request 15,14,13,12
EDMA_ERQL = 0x00008000; // Enable DMA request 15,14
DMA_MUX0_CHCONFIG15 = 0x3A;
i = 15;
//源地址
EDMA_TCD_SADDR(i) = (unsigned long)dma_tx_buffer;
//源数据传输大小为32bit,目标数据传输大小为32bit
EDMA_TCD_ATTR(i) = EDMA_TCD_ATTR_SSIZE_32BIT | EDMA_TCD_ATTR_DSIZE_32BIT ;
//源地址偏移大小
EDMA_TCD_SOFF(i) = 0x04;
//字节传输数量
EDMA_TCD_NBYTES(i) = 4;
//调整源地址值
EDMA_TCD_SLAST(i) = 0x0;
//目标地址
//EDMA_TCD_DADDR(i) = (unsigned long)&SPI1_PUSHR;
EDMA_TCD_DADDR(i) = (unsigned long)dma_rx_buffer;
//当前主要循环计数
EDMA_TCD_CITER(i) = EDMA_TCD_CITER_CITER(10);
//目标地址偏移大小
EDMA_TCD_DOFF(i) = 0x04;
//调整目标地址值0-module-32-byte
EDMA_TCD_DLAST_SGA(i) = 0x0;
//重新加载CITER值
EDMA_TCD_BITER(i) = EDMA_TCD_BITER_BITER(10);
//
//EDMA_TCD_CSR(i) = DMA_CSR_DREQ_MASK | DMA_CSR_INTMAJOR_MASK;
EDMA_TCD_CSR(i) = DMA_CSR_INTMAJOR_MASK;
//DMA_MUX0_CHCONFIG15 |= 0x80;
}
只想让它搬运10个数;但是似乎搬了很多个数据,搞不太懂;
|
|