新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2018-3-30
- 在线时间
- 11 小时
|
10金钱
用的AD9220,用timer5的PWM给其提供时钟,然后可以通过读取GPIOC-IDR上的十六位数据得到转换来的数据,参考的an2548学习笔记。部分代码如下
extern __IO u16 AD_Value[512];
void AD_DMA_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE );
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
DMA_DeInit(DMA1_Channel6);
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(GPIOC->IDR);
DMA_InitStructure.DMA_MemoryBaseAddr =(u32)AD_Value;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize =512;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel6, &DMA_InitStructure);
DMA_Cmd(DMA1_Channel6,ENABLE);
/* TIM3 Configuration ------------------------------------------------------*/
/* TIM3CLK = 72 MHz, Prescaler = 0, TIM3 counter clock = 72 MHz */
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 256;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit( TIM3, &TIM_TimeBaseStructure );
/* Input Capture Mode configuration: Channel1 */
TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0;
TIM_ICInit( TIM3, &TIM_ICInitStructure );
/* Enable TIM3 DMA */
// TIM_DMACmd( TIM3, TIM_DMA_CC1, ENABLE );
TIM_DMACmd( TIM3, TIM_DMA_CC1 , ENABLE );
/* Enable TIM3 counter */
TIM_Cmd( TIM3, ENABLE );
}
这段代码验证得到的效果是timer3每接到一个信号,DMA传输一个数据,所以只能用while来不停传输,这样就使得传输的频率下降了
有没有什么办法能够捕获一次,使DMA传输512个数据?
|
|