#include "include.h"
#include "dac.h"
#include "globals.h"
ErrorStatus HSEStartUpStatus;
u32 Sine12bit[32] = { 2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056,
3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909,
599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647
};
u32 square[32]={ 0,8,16,24,32,41,49,57,
65,74,82,90,98,106,115,123,
131,139,148,156,164,172,180,189,
197,205,213,222,230,238,246,255
} ;
u32 DualSine12bit[32];
u8 Idx = 0;
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = 0x19;
TIM_TimeBaseStructure.TIM_Prescaler = 0x0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);
TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);
}
//DMA设置
void DMA_Config()
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
/* DMA2 channel3 configuration */
DMA_DeInit(DMA2_Channel3); //将dma的通道寄存器设为默认值
DMA_InitStructure.DMA_PeripheralBaseAddr = DAC1_DHR8R1_Address; //定义dma外设基地址
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)□
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; //外设作为数据传输的目的地
DMA_InitStructure.DMA_BufferSize =32; //dma缓存大小
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //内存地址寄存器 递增
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //外设数据宽度
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循环缓存模式,数据传输数目为0时,自动恢复配置初值
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //通道未被设置成内存到内存模式,与循环模式相对
DMA_Init(DMA2_Channel3, &DMA_InitStructure); //将DMA_InitStructure中指定的参数初始化dma的通道寄存器
/* Enable DMA2 Channel4 */
DMA_Cmd(DMA2_Channel3, ENABLE); //使能通道
/* Enable DAC Channel1 */
DMA_ITConfig(DMA2_Channel3,DMA_IT_TC,ENABLE);//使能中断 传完中断
/* Enable DMA for DAC Channel1 */
TIM_Cmd(TIM6, ENABLE);
}
//DAC设置
void DAC_Config()
{
DAC_InitTypeDef DAC_InitStructure;
TIM_Configuration();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
DAC_InitStructure.DAC_Trigger =DAC_Trigger_T6_TRGO; //DAC_Trigger_Software;//DAC_Trigger_None// TIM6 TRGO选为外部转换触发DAC通道 ;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; //DAC_Trigger_T6_TRGO时禁止
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
DAC_Cmd(DAC_Channel_1, ENABLE);
DMA_Config();
}
void DMA2_Channel3_IRQHandler(void)
{
if(DMA_GetITStatus(DMA2_IT_TC3))
{
DMA_ClearITPendingBit(DMA2_IT_TC3);
d=d*(-1);
if(d==1)
{
// DMA_Cmd(DMA2_Channel3, DISABLE); //使能通道
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)□
DMA_Init(DMA2_Channel3, &DMA_InitStructure); //将DMA_InitStructure中指定的参数初始化dma的通道寄存器
// DMA_Cmd(DMA2_Channel3, ENABLE); //使能通道
}
if(d==-1)
{
// DMA_Cmd(DMA2_Channel3, DISABLE); //使能通道
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&Sine12bit;
DMA_Init(DMA2_Channel3, &DMA_InitStructure); //将DMA_InitStructure中指定的参数初始化dma的通道寄存器
// DMA_Cmd(DMA2_Channel3, ENABLE); //使能通道
}
}
}
|