Esempio n. 1
0
void SpiCC3000DMAInit(void)
{
  NVIC_InitTypeDef NVIC_RxInt_InitStructure; 

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

  DMA_DeInit(SPI_DMA_RX_CHANNEL);
  DMA_DeInit(SPI_DMA_TX_CHANNEL);

  /* Configure and enable SPI DMA TX Channel interrupt */
  NVIC_RxInt_InitStructure.NVIC_IRQChannel = DMA1_Channel3_IRQn;
  NVIC_RxInt_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_RxInt_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_RxInt_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_RxInt_InitStructure);

  /* Enable the DMA Channels Interrupts */
  DMA_ITConfig(SPI_DMA_TX_CHANNEL, DMA_IT_TC, ENABLE);    //传输完成中断打开
  DMA_ITConfig(SPI_DMA_RX_CHANNEL, DMA_IT_TC, ENABLE);   
  /* Configure DMA Peripheral but don't send data*/
  CC3000_DMA_Config(SPI_DMA_RX, (uint8_t*)wlan_rx_buffer,0);  
  CC3000_DMA_Config(SPI_DMA_TX, (uint8_t*)wlan_tx_buffer,0);

  /* Enable SPI DMA request */
  SPI_I2S_DMACmd(SPI_BASE,SPI_I2S_DMAReq_Rx, ENABLE);
  SPI_I2S_DMACmd(SPI_BASE,SPI_I2S_DMAReq_Tx, ENABLE);
  /* Enable DMA RX Channel */
  DMA_Cmd(SPI_DMA_RX_CHANNEL, ENABLE);  
  /* Enable DMA TX Channel */  
  DMA_Cmd(SPI_DMA_TX_CHANNEL, ENABLE); 

}
int SpiIO(eSPIOperation op, const uint8_t *ptrData, uint32_t ulDataSize, int waitOnCompletion)
{

        eCC3000States current = State();
	/* Disable DMA Channels */
	CC3000_SPI_DMA_Channels(DISABLE);


	if (op == eRead)
	{
		CC3000_DMA_Config(CC3000_DMA_RX, (uint8_t*) ptrData, ulDataSize);
		CC3000_DMA_Config(CC3000_DMA_TX, (uint8_t*) spi_readCommand, ulDataSize);
	}
	else
	{
		CC3000_DMA_Config(CC3000_DMA_RX, (uint8_t*) sSpiInformation.pRxPacket, ulDataSize);
		CC3000_DMA_Config(CC3000_DMA_TX, (uint8_t*) ptrData, ulDataSize);
	}

	/* Enable DMA SPI Interrupt */
	DMA_ITConfig(CC3000_SPI_TX_DMA_CHANNEL, DMA_IT_TC, ENABLE);

	/* Enable DMA Channels */
	CC3000_SPI_DMA_Channels(ENABLE);
	return waitOnCompletion ? Still(current) : 0;

}
Esempio n. 3
0
void SpiDMATXReconfig(unsigned char *tx_buffer,unsigned short NumData)
{
  DMA_DeInit(SPI_DMA_TX_CHANNEL);
  DMA_ITConfig(SPI_DMA_TX_CHANNEL, DMA_IT_TC, ENABLE);    //传输完成中断打开 
  CC3000_DMA_Config(SPI_DMA_TX, (uint8_t*)tx_buffer,NumData);
  DMA_Cmd(SPI_DMA_TX_CHANNEL, ENABLE); 
	
}