void SPI1_DMA_Configuration( void )
{
NVIC_InitTypeDef NVIC_InitStructure;
RCC->AHBENR |= 1<<0 ; //DMA1时钟使能
DMA1_Channel2->CCR &= ~( 1<<14 ) ; //非存储器到存储器模式
DMA1_Channel2->CCR |= 2<<12 ; //通道优先级高
DMA1_Channel2->CCR &= ~( 3<<10 ) ; //存储器数据宽度8bit
DMA1_Channel2->CCR &= ~( 3<<8 ) ; //外设数据宽度8bit
DMA1_Channel2->CCR |= 1<<7 ; //存储器地址增量模式
DMA1_Channel2->CCR &= ~( 1<<6 ) ; //不执行外设地址增量模式
DMA1_Channel2->CCR &= ~( 1<<5 ) ; //执行循环操作
DMA1_Channel2->CCR &= ~( 1<<4 ) ; //从外设读
// DMA1_Channel2->CCR |= ( 1<<1 ) ; //开启dma接收中断
DMA1_Channel2->CNDTR &= 0x0000 ; //传输数量寄存器清零
DMA1_Channel2->CNDTR = buffersize ; //传输数量设置为buffersize个
DMA1_Channel2->CPAR = SPI1_DR_Addr ; //设置外设地址,注意PSIZE
DMA1_Channel2->CMAR = (u32)SPI1_RX_Buff ; //设置DMA存储器地址,注意MSIZE
DMA1_Channel3->CCR &= ~( 1<<14 ) ; //非存储器到存储器模式
DMA1_Channel3->CCR |= 0<<12 ; //通道优先级最低
DMA1_Channel3->CCR &= ~( 3<<10 ) ; //存储器数据宽度8bit
DMA1_Channel3->CCR &= ~( 3<<8 ) ; //外设数据宽度8bit
DMA1_Channel3->CCR |= 1<<7 ; //存储器地址增量模式
DMA1_Channel3->CCR &= ~( 1<<6 ) ; //不执行外设地址增量模式
DMA1_Channel3->CCR &= ~( 1<<5 ) ; //不执行循环操作
DMA1_Channel3->CCR |= 1<<4 ; //从存储器读
DMA1_Channel3->CNDTR &= 0x0000 ; //传输数量寄存器清零
DMA1_Channel3->CNDTR = buffersize ; //传输数量设置为buffersize个
DMA1_Channel3->CPAR = SPI1_DR_Addr ; //设置外设地址,注意PSIZE
DMA1_Channel3->CMAR = (u32)SPI1_TX_Buff ; //设置DMA存储器地址,注意MSIZE
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=4;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
DMA1_Channel2->CCR |= ( 1<<1 ) ; //开启dma接收中断
//DMA_ITConfig( DMA1_Channel2, DMA_IT_TC, ENABLE);
}
void DMA1_Channel2_IRQHandler(void)
{
if(DMA1->ISR & 1<<5) //通道2完成了传输
data=1;
DMA1->IFCR&=~(3<<4); //清除通道2完成标志
}
|