int main()
{
AD9833_GPIO_Init();
AD9833_reset();
AD9833_Init(100000); // AD9833输出设置
Debug_USART_Config();
IO_GPIO_Init();
IO_Enalbel();
SPIx_Init(); //SPI初始化
GPIO_SetBits(AD_CS_GPIO_PORT,AD_CS_PIN); //CS置位
Rheostat_DMA_Mode_Config(); //DMA初始化
MyDMA_Enable(RHEOSTAT_ADC_DMA_STREAM,numlength); //使能DMA
SPI_I2S_DMACmd (AD_SPI,SPI_I2S_DMAReq_Rx,ENABLE); //SPI_DMA功能使能
while (1)
{
GPIO_ResetBits(AD_CS_GPIO_PORT,AD_CS_PIN); //CS置0
Delay(10); //
SPI_Cmd(AD_SPI, ENABLE); // spi使能
data=SPIx_ReadWriteByte(); // spi发送数据到主控
// while(DMA_GetFlagStatus(DMA1_Stream0,DMA_FLAG_TCIF0)==RESET ){};
SPI_Cmd(AD_SPI, DISABLE); // spi使能
// Delay(10);
SPI_Cmd(AD_SPI, ENABLE); //spi使能
data=SPIx_ReadWriteByte(); // spi发送数据到主控
// while(DMA_GetFlagStatus(DMA1_Stream0,DMA_FLAG_TCIF0)==RESET ){};
SPI_Cmd(AD_SPI, DISABLE); //spi失能
Delay(120); //延时,保证时序正确
GPIO_SetBits(AD_CS_GPIO_PORT,AD_CS_PIN); //cs置1
i--;
Delay(5);
}
/**************打印DMA传输的数据,双通道数据输出***************/
for (j=numlength;j>1;j=j-2)
{
printf("%d,%d\n",ADC_ConvertedValue[j],ADC_ConvertedValue[j-1]);
Delay(10);
}
}
/////////////////////////////////////////////////////////////spi的配置//////////////////////////////////////////////////////////////
#include "dsp_spi.h"
//SPI3
void SPIx_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(AD_SPI_SCK_GPIO_CLK|AD_SPI_MISO_GPIO_CLK|AD_SPI_MOSI_GPIO_CLK|AD_CS_GPIO_CLK, ENABLE);
AD_SPI_CLK_INIT(AD_SPI_CLK,ENABLE);
GPIO_PinAFConfig(AD_SPI_SCK_GPIO_PORT,AD_SPI_SCK_PINSOURCE,AD_SPI_SCK_AF); //PC10¸′óÃSPI3μÄSCLK
GPIO_PinAFConfig(AD_SPI_MISO_GPIO_PORT,AD_SPI_MISO_PINSOURCE,AD_SPI_MISO_AF); //PC11¸′óÃSPI3μÄMISO
// GPIO_PinAFConfig(AD_SPI_MOSI_GPIO_PORT,AD_SPI_MOSI_PINSOURCE,AD_SPI_MOSI_AF); //PC12¸′óÃSPI3μÄMOSI
// GPIO_PinAFConfig(GPIOA,AD_CS_PIN,GPIO_AF_SPI3); //PA4 ¸′óÃSPI3μÄCS
GPIO_InitStructure.GPIO_Pin = AD_SPI_SCK_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
// GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(AD_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = AD_SPI_MISO_PIN;
GPIO_Init(AD_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = AD_CS_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT ;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Fast_Speed;
GPIO_Init(AD_CS_GPIO_PORT, &GPIO_InitStructure);
GPIO_SetBits(AD_CS_GPIO_PORT,AD_CS_PIN);
//
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly; //只接受模式
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //主模式
SPI3->CR1|=1<<10;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b; //每次传输16位
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; //sck空闲时保持高电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //奇数边沿采样
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSSóéó2¼t»1êÇèí¼t¿ØÖÆ
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16; //SPI分频系数,和scK时钟频率设置
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(AD_SPI, &SPI_InitStructure);
}
u16 SPIx_ReadWriteByte(void)
{
u8 retry=0;
while (SPI_I2S_GetFlagStatus(AD_SPI, SPI_I2S_FLAG_RXNE) == RESET)
{
retry++;
if(retry>200)
return 0;
}
return SPI_I2S_ReceiveData(AD_SPI);
}
|