在线时间10 小时
UID3154224
注册时间2015-8-3
NXP金币0
该用户从未签到
注册会员

- 积分
- 68
- 最后登录
- 2017-5-19
|

楼主 |
发表于 2017-5-3 17:17:03
|
显示全部楼层
- void spi_dma()
- {
- SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK;
- SIM_SCGC7 |= SIM_SCGC7_DMA_MASK; //打开DMA模块时钟
- DMA_CR = 0; //控制寄存器清零
- //发送DMA通道
- DMAMUX_CHCFG_REG(DMAMUX, 6) = DMAMUX_CHCFG_ENBL_MASK|DMAMUX_CHCFG_SOURCE(17);
- DMA_DADDR_REG(DMA0,6) = (unsigned long)&(SPI2->PUSHR); //DMA发送目的地址
- DMA_NBYTES_MLNO_REG(DMA0,6) = 4; //每次读取4字节
- DMA_ATTR_REG(DMA0,6) = DMA_ATTR_DSIZE(2) | DMA_ATTR_SSIZE(2); //32位传送,关闭模特性
- DMA_SOFF_REG(DMA0,6) = 4; //每次操作完源地址,源地址增加4
- DMA_DOFF_REG(DMA0,6) = 0; //每次操作完目标地址,目标地址不增加
- DMA_SLAST_REG(DMA0,6) = 0; //DMA完成一次输出之后即major_loop衰减完之后不更改源地址
- DMA_DLAST_SGA_REG(DMA0,6) = 0; //DMA完成一次输出之后即major_loop衰减完之后不更改目标地址
- DMA_CSR_REG(DMA0,6) = 0; //TCD控制状态寄存器清零
- //接收DMA通道
- DMAMUX_CHCFG_REG(DMAMUX, 7) = DMAMUX_CHCFG_ENBL_MASK|DMAMUX_CHCFG_SOURCE(17);
- DMA_SADDR_REG(DMA0,7) = (unsigned long)&(SPI2->POPR); //DMA发送目的地址
- DMA_NBYTES_MLNO_REG(DMA0,7) = 4; //每次读取4字节
- DMA_ATTR_REG(DMA0,7) = DMA_ATTR_DSIZE(2) | DMA_ATTR_SSIZE(2); //32位传送,关闭模特性
- DMA_SOFF_REG(DMA0,7) = 0; //每次操作完源地址,源地址不增加
- DMA_DOFF_REG(DMA0,7) = 4; //每次操作完目标地址,目标地址加1
- DMA_SLAST_REG(DMA0,7) = 0; //DMA完成一次输出之后即major_loop衰减完之后不更改源地址
- DMA_DLAST_SGA_REG(DMA0,7) = 0; //DMA完成一次输出之后即major_loop衰减完之后不更改目标地址
- DMA_CSR_REG(DMA0,7) = 0; //TCD控制状态寄存器清零
- // data[0] = DMA_DCHPRI7_REG(DMA0);
- // data[1] = DMA_DCHPRI6_REG(DMA0);
- }
复制代码
从示波器上看到DMA应当是能正常收发的,但是通过DMA接收的数据会重复,比如应当收1,2,3,4,那结果就只会收到1,1,2,2. |
|