原子哥在音乐播放器试验中,DMA寄存器的配置中DMA1_Stream4的CR寄存器的PBURST位设为0为单次传输,
在SD卡试验中PBURST位设为外设突发4次传输,请问PBURST应如何设置?
[mw_shl_code=c,true]void SD_DMA_Config(u32*mbuf,u32 bufsize,u8 dir)
{
u32 tmpreg=0;//重新设置
while(DMA2_Stream3->CR&0X01); //等待DMA可配置
DMA2->LIFCR|=0X3D<<22; //清空之前该stream3上的所有中断标志
DMA2_Stream3-> AR=(u32)&SDIO->FIFO; //DMA2 外设地址
DMA2_Stream3->M0AR=(u32)mbuf; //DMA2,存储器0地址;
DMA2_Stream3->NDTR=0; //DMA2,传输数据量0,外设流控制
tmpreg|=dir<<6; //数据传输方向控制
tmpreg|=0<<8; //非循环模式(即使用普通模式)
tmpreg|=0<<9; //外设非增量模式
tmpreg|=1<<10; //存储器增量模式
tmpreg|=2<<11; //外设数据长度:32位
tmpreg|=2<<13; //存储器数据长度:32位
tmpreg|=3<<16; //最高优先级
tmpreg|=1<<21; //外设突发4次传输
tmpreg|=1<<23; //存储器突发4次传输
tmpreg|=(u32)4<<25; //通道选择
DMA2_Stream3->CR=tmpreg;
tmpreg=DMA2_Stream3->FCR;
tmpreg&=0XFFFFFFF8; //清除DMDIS和FTH
tmpreg|=1<<2; //FIFO使能
tmpreg|=3<<0; //全FIFO
DMA2_Stream3->FCR=tmpreg;
DMA2_Stream3->CR|=1<<5; //外设流控制
DMA2_Stream3->CR|=1<<0; //开启DMA传输
} [/mw_shl_code]
设置有什么注意事项么
[mw_shl_code=c,true]void I2S2_TX_DMA_Init(u8* buf0,u8 *buf1,u16 num)
{
RCC->AHB1ENR|=1<<21; //DMA1时钟使能
while(DMA1_Stream4->CR&0X01);//等待DMA1_Stream4可配置
DMA1->HIFCR|=0X3D<<6*0; //清空通道4上所有中断标志
DMA1_Stream4->FCR=0X0000021;//设置为默认值
DMA1_Stream4-> AR=(u32)&SPI2->DR; //外设地址为:SPI2->DR
DMA1_Stream4->M0AR=(u32)buf0;//内存1地址
DMA1_Stream4->M1AR=(u32)buf1;//内存2地址
DMA1_Stream4->NDTR=num; //暂时设置长度为1
DMA1_Stream4->CR=0; //先全部复位CR寄存器值
DMA1_Stream4->CR|=1<<6; //存储器到外设模式
DMA1_Stream4->CR|=1<<8; //循环模式
DMA1_Stream4->CR|=0<<9; //外设非增量模式
DMA1_Stream4->CR|=1<<10; //存储器增量模式
DMA1_Stream4->CR|=1<<11; //外设数据长度:16位
DMA1_Stream4->CR|=1<<13; //存储器数据长度:16位
DMA1_Stream4->CR|=2<<16; //高优先级
DMA1_Stream4->CR|=1<<18; //双缓冲模式
DMA1_Stream4->CR|=0<<21; //外设突发单次传输
DMA1_Stream4->CR|=0<<23; //存储器突发单次传输
DMA1_Stream4->CR|=0<<25; //选择通道0 SPI2_TX通道
DMA1_Stream4->FCR&=~(1<<2); //不使用FIFO模式
DMA1_Stream4->FCR&=~(3<<0); //无FIFO 设置
DMA1_Stream4->CR|=1<<4; //开启传输完成中断
MY_NVIC_Init(0,0,DMA1_Stream4_IRQn,2); //抢占1,子优先级0,组2
} [/mw_shl_code]
|