mirror of
https://github.com/rene-dev/stmbl.git
synced 2026-09-25 17:40:40 +08:00
dac_dma entfernt
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# put your *.o targets here, make should handle the rest!
|
||||
|
||||
SRCS = main.c stm32f4xx_it.c system_stm32f4xx.c printf.c scanf.c param.c stm32_ub_dac_dma.c setup.c stm32_ub_encoder_tim3.c pid.c
|
||||
SRCS = main.c stm32f4xx_it.c system_stm32f4xx.c printf.c scanf.c param.c setup.c stm32_ub_encoder_tim3.c pid.c
|
||||
#USB
|
||||
SRCS += ub_lib/stm32_ub_usb_cdc.c ub_lib/usb_cdc_lolevel/usb_core.c ub_lib/usb_cdc_lolevel/usb_dcd_int.c ub_lib/usb_cdc_lolevel/usbd_req.c ub_lib/usb_cdc_lolevel/usbd_cdc_core.c ub_lib/usb_cdc_lolevel/usbd_core.c ub_lib/usb_cdc_lolevel/usb_dcd.c ub_lib/usb_cdc_lolevel/usbd_cdc_vcp.c ub_lib/usb_cdc_lolevel/usbd_desc.c ub_lib/usb_cdc_lolevel/usbd_ioreq.c ub_lib/usb_cdc_lolevel/usb_bsp.c ub_lib/usb_cdc_lolevel/usbd_usr.c
|
||||
#SRCS = main.c system.c
|
||||
|
||||
@@ -1,390 +0,0 @@
|
||||
//--------------------------------------------------------------
|
||||
// File : stm32_ub_dac_dma.c
|
||||
// Datum : 25.03.2013
|
||||
// Version : 1.1
|
||||
// Autor : UB
|
||||
// EMail : mc-4u(@)t-online.de
|
||||
// Web : www.mikrocontroller-4u.de
|
||||
// CPU : STM32F4
|
||||
// IDE : CooCox CoIDE 1.7.0
|
||||
// Module : GPIO, DAC, TIM, DMA
|
||||
// Funktion : DA-Wandler (DAC1 und DAC2) per DMA1
|
||||
//
|
||||
// Hinweis : DAC1-Ausgang an PA4
|
||||
// DAC2-Ausgang an PA5
|
||||
//--------------------------------------------------------------
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Includes
|
||||
//--------------------------------------------------------------
|
||||
#include "stm32_ub_dac_dma.h"
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Globale Variable
|
||||
//--------------------------------------------------------------
|
||||
DAC_InitTypeDef DAC_InitStructure; // MUSS Global sein (BUGFIX)
|
||||
DAC_DMA_MODE_t akt_dac_dma_mode;
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// interne Funktionen
|
||||
//--------------------------------------------------------------
|
||||
void P_DAC_DMA_InitIO1(void);
|
||||
void P_DAC_DMA_InitTIM1(void);
|
||||
void P_DAC_DMA_InitDAC1(void);
|
||||
void P_DAC_DMA_InitIO2(void);
|
||||
void P_DAC_DMA_InitTIM2(void);
|
||||
void P_DAC_DMA_InitDAC2(void);
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// standard Kurvenform für DAC=AUS
|
||||
//--------------------------------------------------------------
|
||||
const uint16_t WaveOff[] = {0}; // Dauer Lo-Pegel
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Kurvenform die Ausgegeben werden soll als Array
|
||||
// von 12bit Werten (0 bis 4095)
|
||||
//--------------------------------------------------------------
|
||||
const uint16_t Wave1[] = { // Sinus
|
||||
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
|
||||
};
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Kurvenform die Ausgegeben werden soll als Array
|
||||
// von 12bit Werten (0 bis 4095)
|
||||
//--------------------------------------------------------------
|
||||
const uint16_t Wave2[] = { // Sägezahn
|
||||
0, 256, 512, 768, 1024, 1280, 1536, 1792,
|
||||
2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840,
|
||||
4095
|
||||
};
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Kurvenform die Ausgegeben werden soll als Array
|
||||
// von 12bit Werten (0 bis 4095)
|
||||
//--------------------------------------------------------------
|
||||
const uint16_t Wave3[] = { // Dreieck
|
||||
0, 256, 512, 768, 1024, 1280, 1536, 1792,
|
||||
2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840,
|
||||
4095, 3840, 3584, 3328, 3072, 2816, 2560, 2304,
|
||||
2048, 1792, 1536, 1280, 1024, 768, 512, 256
|
||||
};
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Kurvenform die Ausgegeben werden soll als Array
|
||||
// von 12bit Werten (0 bis 4095)
|
||||
//--------------------------------------------------------------
|
||||
const uint16_t Wave4[] = { // Rechteck
|
||||
0, 0, 4095, 4095
|
||||
};
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Definition aller Kurvenformen
|
||||
// Reihenfolge wie bei DAC_DMA_WAVE_NAME_t
|
||||
//--------------------------------------------------------------
|
||||
const DAC_WAVE_t DAC_WAVE[] = {
|
||||
// Name , Kurve , Länge
|
||||
{DAC_WAVE_OFF , WaveOff, 1},
|
||||
{DAC_WAVE1_SINUS , Wave1 , 32},
|
||||
{DAC_WAVE2_SAEGEZAHN, Wave2 , 17},
|
||||
{DAC_WAVE3_DREIECK , Wave3 , 32},
|
||||
{DAC_WAVE4_RECHTECK , Wave4 , 4},
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// init vom DA-Wandler im DMA-Mode
|
||||
// mode : [SINGLE_DAC1_DMA, SINGLE_DAC2_DMA, DUAL_DAC_DMA]
|
||||
//--------------------------------------------------------------
|
||||
void UB_DAC_DMA_Init(DAC_DMA_MODE_t mode)
|
||||
{
|
||||
// DAC-Mode speichern
|
||||
akt_dac_dma_mode=mode;
|
||||
|
||||
if((mode==SINGLE_DAC1_DMA) || (mode==DUAL_DAC_DMA)) {
|
||||
P_DAC_DMA_InitIO1();
|
||||
P_DAC_DMA_InitTIM1();
|
||||
P_DAC_DMA_InitDAC1();
|
||||
UB_DAC_DMA_SetWaveform1(DAC_WAVE_OFF);
|
||||
}
|
||||
if((mode==SINGLE_DAC2_DMA) || (mode==DUAL_DAC_DMA)) {
|
||||
P_DAC_DMA_InitIO2();
|
||||
P_DAC_DMA_InitTIM2();
|
||||
P_DAC_DMA_InitDAC2();
|
||||
UB_DAC_DMA_SetWaveform2(DAC_WAVE_OFF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// stellt eine Kurvenform für DAC1 ein
|
||||
//--------------------------------------------------------------
|
||||
void UB_DAC_DMA_SetWaveform1(DAC_DMA_WAVE_NAME_t wave)
|
||||
{
|
||||
DMA_InitTypeDef DMA_InitStructure;
|
||||
|
||||
if(akt_dac_dma_mode==SINGLE_DAC2_DMA) return; // wenn nicht erlaubt
|
||||
|
||||
// Clock Enable (DMA)
|
||||
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
|
||||
|
||||
// DMA init (DMA1, Channel7, Stream5)
|
||||
DMA_Cmd(DMA1_Stream5, DISABLE);
|
||||
DMA_DeInit(DMA1_Stream5);
|
||||
DMA_InitStructure.DMA_Channel = DMA_Channel_7;
|
||||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC1_DHR_12R1_ADDRESS;
|
||||
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DAC_WAVE[wave].ptr;
|
||||
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
||||
DMA_InitStructure.DMA_BufferSize = DAC_WAVE[wave].wave_len;
|
||||
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_High;
|
||||
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
||||
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
|
||||
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
||||
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
||||
DMA_Init(DMA1_Stream5, &DMA_InitStructure);
|
||||
|
||||
// DMA enable
|
||||
DMA_Cmd(DMA1_Stream5, ENABLE);
|
||||
// DMA-DAC enable
|
||||
DAC_DMACmd(DAC_Channel_1, ENABLE);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// stellt eine Kurvenform für DAC2 ein
|
||||
//--------------------------------------------------------------
|
||||
void UB_DAC_DMA_SetWaveform2(DAC_DMA_WAVE_NAME_t wave)
|
||||
{
|
||||
DMA_InitTypeDef DMA_InitStructure;
|
||||
|
||||
if(akt_dac_dma_mode==SINGLE_DAC1_DMA) return; // wenn nicht erlaubt
|
||||
|
||||
// Clock Enable (DMA)
|
||||
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
|
||||
|
||||
// DMA init (DMA1, Channel7, Stream6)
|
||||
DMA_Cmd(DMA1_Stream6, DISABLE);
|
||||
DMA_DeInit(DMA1_Stream6);
|
||||
DMA_InitStructure.DMA_Channel = DMA_Channel_7;
|
||||
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC2_DHR_12R2_ADDRESS;
|
||||
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DAC_WAVE[wave].ptr;
|
||||
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
|
||||
DMA_InitStructure.DMA_BufferSize = DAC_WAVE[wave].wave_len;
|
||||
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_High;
|
||||
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
|
||||
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
|
||||
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
|
||||
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
|
||||
DMA_Init(DMA1_Stream6, &DMA_InitStructure);
|
||||
|
||||
// DMA enable
|
||||
DMA_Cmd(DMA1_Stream6, ENABLE);
|
||||
// DMA-DAC enable
|
||||
DAC_DMACmd(DAC_Channel_2, ENABLE);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// stellt die Frequenz für DAC1 ein
|
||||
// Grundfrequenz = 2*APB1 (APB1=42MHz) => TIM_CLK=84MHz
|
||||
// vorteiler : 0 bis 0xFFFF
|
||||
// periode : 0 bis 0xFFFF
|
||||
//
|
||||
// Ausgangs-Frq = TIM_CLK/(vorteiler+1)/(periode+1)/wave_len
|
||||
//--------------------------------------------------------------
|
||||
void UB_DAC_DMA_SetFrq1(uint16_t vorteiler, uint16_t periode)
|
||||
{
|
||||
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
||||
|
||||
if(akt_dac_dma_mode==SINGLE_DAC2_DMA) return; // wenn nicht erlaubt
|
||||
|
||||
// Timer-Config
|
||||
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
|
||||
TIM_TimeBaseStructure.TIM_Period = periode;
|
||||
TIM_TimeBaseStructure.TIM_Prescaler = vorteiler;
|
||||
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
||||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||||
TIM_TimeBaseInit(DAC_TIM1_NAME, &TIM_TimeBaseStructure);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// stellt die Frequenz für DAC2 ein
|
||||
// Grundfrequenz = 2*APB1 (APB1=42MHz) => TIM_CLK=84MHz
|
||||
// vorteiler : 0 bis 0xFFFF
|
||||
// periode : 0 bis 0xFFFF
|
||||
//
|
||||
// Ausgangs-Frq = TIM_CLK/(vorteiler+1)/(periode+1)/wave_len
|
||||
//--------------------------------------------------------------
|
||||
void UB_DAC_DMA_SetFrq2(uint16_t vorteiler, uint16_t periode)
|
||||
{
|
||||
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
||||
|
||||
if(akt_dac_dma_mode==SINGLE_DAC1_DMA) return; // wenn nicht erlaubt
|
||||
|
||||
// Timer-Config
|
||||
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
|
||||
TIM_TimeBaseStructure.TIM_Period = periode;
|
||||
TIM_TimeBaseStructure.TIM_Prescaler = vorteiler;
|
||||
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
||||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||||
TIM_TimeBaseInit(DAC_TIM2_NAME, &TIM_TimeBaseStructure);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// interne Funktion
|
||||
// Init vom IO-Pin für DAC1
|
||||
//--------------------------------------------------------------
|
||||
void P_DAC_DMA_InitIO1(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
|
||||
// Clock Enable (GPIO)
|
||||
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
|
||||
|
||||
// Config des DAC-Pins als Analog-Ausgang
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
|
||||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
|
||||
GPIO_Init(GPIOA, &GPIO_InitStructure);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// interne Funktion
|
||||
// Init vom IO-Pin für DAC2
|
||||
//--------------------------------------------------------------
|
||||
void P_DAC_DMA_InitIO2(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
|
||||
// Clock Enable (GPIO)
|
||||
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
|
||||
|
||||
// Config des DAC-Pins als Analog-Ausgang
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
|
||||
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
|
||||
GPIO_Init(GPIOA, &GPIO_InitStructure);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// interne Funktion
|
||||
// Init vom Timer für DAC1
|
||||
//--------------------------------------------------------------
|
||||
void P_DAC_DMA_InitTIM1(void)
|
||||
{
|
||||
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
||||
|
||||
// Clock enable (Timer)
|
||||
RCC_APB1PeriphClockCmd(DAC_TIM1_CLK, ENABLE);
|
||||
|
||||
// Timer-Config
|
||||
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
|
||||
TIM_TimeBaseStructure.TIM_Period = DAC_DMA_DEF_PERIODE;
|
||||
TIM_TimeBaseStructure.TIM_Prescaler = DAC_DMA_DEF_PRESCALE;
|
||||
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
||||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||||
TIM_TimeBaseInit(DAC_TIM1_NAME, &TIM_TimeBaseStructure);
|
||||
|
||||
// Trigger
|
||||
TIM_SelectOutputTrigger(DAC_TIM1_NAME, TIM_TRGOSource_Update);
|
||||
|
||||
// Timer enable
|
||||
TIM_Cmd(DAC_TIM1_NAME, ENABLE);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// interne Funktion
|
||||
// Init vom Timer für DAC2
|
||||
//--------------------------------------------------------------
|
||||
void P_DAC_DMA_InitTIM2(void)
|
||||
{
|
||||
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
||||
|
||||
// Clock enable (Timer)
|
||||
RCC_APB1PeriphClockCmd(DAC_TIM2_CLK, ENABLE);
|
||||
|
||||
// Timer-Config
|
||||
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
|
||||
TIM_TimeBaseStructure.TIM_Period = DAC_DMA_DEF_PERIODE;
|
||||
TIM_TimeBaseStructure.TIM_Prescaler = DAC_DMA_DEF_PRESCALE;
|
||||
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
||||
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||||
TIM_TimeBaseInit(DAC_TIM2_NAME, &TIM_TimeBaseStructure);
|
||||
|
||||
// Trigger
|
||||
TIM_SelectOutputTrigger(DAC_TIM2_NAME, TIM_TRGOSource_Update);
|
||||
|
||||
// Timer enable
|
||||
TIM_Cmd(DAC_TIM2_NAME, ENABLE);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// interne Funktion
|
||||
// Init vom DAC1
|
||||
//--------------------------------------------------------------
|
||||
void P_DAC_DMA_InitDAC1(void)
|
||||
{
|
||||
// Clock Enable (DAC)
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
|
||||
|
||||
// DAC init
|
||||
DAC_InitStructure.DAC_Trigger = DAC_TIM1_TRG;
|
||||
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
|
||||
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
|
||||
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
|
||||
|
||||
// DAC enable
|
||||
DAC_Cmd(DAC_Channel_1, ENABLE);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// interne Funktion
|
||||
// Init vom DAC2
|
||||
//--------------------------------------------------------------
|
||||
void P_DAC_DMA_InitDAC2(void)
|
||||
{
|
||||
// Clock Enable (DAC)
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
|
||||
|
||||
// DAC init
|
||||
DAC_InitStructure.DAC_Trigger = DAC_TIM2_TRG;
|
||||
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
|
||||
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
|
||||
DAC_Init(DAC_Channel_2, &DAC_InitStructure);
|
||||
|
||||
// DAC enable
|
||||
DAC_Cmd(DAC_Channel_2, ENABLE);
|
||||
}
|
||||
@@ -1,169 +0,0 @@
|
||||
//--------------------------------------------------------------
|
||||
// File : stm32_ub_dac_dma.h
|
||||
//--------------------------------------------------------------
|
||||
|
||||
//--------------------------------------------------------------
|
||||
#ifndef __STM32F4_UB_DAC_DMA_H
|
||||
#define __STM32F4_UB_DAC_DMA_H
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Includes
|
||||
//--------------------------------------------------------------
|
||||
#include "stm32f4xx.h"
|
||||
#include "stm32f4xx_gpio.h"
|
||||
#include "stm32f4xx_rcc.h"
|
||||
#include "stm32f4xx_dac.h"
|
||||
#include "stm32f4xx_tim.h"
|
||||
#include "stm32f4xx_dma.h"
|
||||
|
||||
|
||||
|
||||
typedef enum {
|
||||
SINGLE_DAC1_DMA = 0, // nur DAC1 an PA4 benutzen
|
||||
SINGLE_DAC2_DMA, // nur DAC2 an PA5 benutzen
|
||||
DUAL_DAC_DMA // DAC1 (PA4) und DAC2 (PA5) benutzen
|
||||
}DAC_DMA_MODE_t;
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Liste aller DAC-Kurvenformen
|
||||
// (keine Nummer doppelt und von 0 beginnend)
|
||||
//--------------------------------------------------------------
|
||||
typedef enum {
|
||||
DAC_WAVE_OFF = 0, // Dauer Lo-Pegel [Len=1]
|
||||
DAC_WAVE1_SINUS = 1, // Waveform1 (Sinus) [Len=32]
|
||||
DAC_WAVE2_SAEGEZAHN = 2, // Waveform2 (Sägezahn) [Len=17]
|
||||
DAC_WAVE3_DREIECK = 3, // Waveform3 (Dreieck) [Len=32]
|
||||
DAC_WAVE4_RECHTECK = 4 // Waveform4 (Rechteck) [Len=4]
|
||||
}DAC_DMA_WAVE_NAME_t;
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Timer Grundeinstellungen
|
||||
//--------------------------------------------------------------
|
||||
#define DAC_DMA_DEF_PERIODE 255 // default periode
|
||||
#define DAC_DMA_DEF_PRESCALE 10 // default prescaler
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Struktur einer DAC-Kurvenform
|
||||
//--------------------------------------------------------------
|
||||
typedef struct {
|
||||
DAC_DMA_WAVE_NAME_t name;
|
||||
const uint16_t *ptr;
|
||||
uint16_t wave_len;
|
||||
}DAC_WAVE_t;
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Timer Einstellung
|
||||
// Moegliche Timer fuer den DAC1 Trigger :
|
||||
// Timer2, Timer4, Timer5, Timer6, Timer7
|
||||
// (Timer8 hängt an APB2)
|
||||
//--------------------------------------------------------------
|
||||
|
||||
// einen Timer auswählen
|
||||
//#define DAC_DMA_T1_TIM2 2
|
||||
//#define DAC_DMA_T1_TIM4 4
|
||||
//#define DAC_DMA_T1_TIM5 5
|
||||
#define DAC_DMA_T1_TIM6 6
|
||||
//#define DAC_DMA_T1_TIM7 7
|
||||
|
||||
|
||||
#ifdef DAC_DMA_T1_TIM2
|
||||
#define DAC_TIM1_TRG DAC_Trigger_T2_TRGO
|
||||
#define DAC_TIM1_CLK RCC_APB1Periph_TIM2
|
||||
#define DAC_TIM1_NAME TIM2
|
||||
#elif defined DAC_DMA_T1_TIM4
|
||||
#define DAC_TIM1_TRG DAC_Trigger_T4_TRGO
|
||||
#define DAC_TIM1_CLK RCC_APB1Periph_TIM4
|
||||
#define DAC_TIM1_NAME TIM4
|
||||
#elif defined DAC_DMA_T1_TIM5
|
||||
#define DAC_TIM1_TRG DAC_Trigger_T5_TRGO
|
||||
#define DAC_TIM1_CLK RCC_APB1Periph_TIM5
|
||||
#define DAC_TIM1_NAME TIM5
|
||||
#elif defined DAC_DMA_T1_TIM6
|
||||
#define DAC_TIM1_TRG DAC_Trigger_T6_TRGO
|
||||
#define DAC_TIM1_CLK RCC_APB1Periph_TIM6
|
||||
#define DAC_TIM1_NAME TIM6
|
||||
#elif defined DAC_DMA_T1_TIM7
|
||||
#define DAC_TIM1_TRG DAC_Trigger_T7_TRGO
|
||||
#define DAC_TIM1_CLK RCC_APB1Periph_TIM7
|
||||
#define DAC_TIM1_NAME TIM7
|
||||
#endif
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Timer Einstellung
|
||||
// Moegliche Timer fuer den DAC2 Trigger :
|
||||
// Timer2, Timer4, Timer5, Timer6, Timer7
|
||||
// (Timer8 hängt an APB2)
|
||||
//--------------------------------------------------------------
|
||||
|
||||
// einen Timer auswählen
|
||||
//#define DAC_DMA_T2_TIM2 2
|
||||
//#define DAC_DMA_T2_TIM4 4
|
||||
//#define DAC_DMA_T2_TIM5 5
|
||||
//#define DAC_DMA_T2_TIM6 6
|
||||
#define DAC_DMA_T2_TIM7 7
|
||||
|
||||
|
||||
#ifdef DAC_DMA_T2_TIM2
|
||||
#define DAC_TIM2_TRG DAC_Trigger_T2_TRGO
|
||||
#define DAC_TIM2_CLK RCC_APB1Periph_TIM2
|
||||
#define DAC_TIM2_NAME TIM2
|
||||
#elif defined DAC_DMA_T2_TIM4
|
||||
#define DAC_TIM2_TRG DAC_Trigger_T4_TRGO
|
||||
#define DAC_TIM2_CLK RCC_APB1Periph_TIM4
|
||||
#define DAC_TIM2_NAME TIM4
|
||||
#elif defined DAC_DMA_T2_TIM5
|
||||
#define DAC_TIM2_TRG DAC_Trigger_T5_TRGO
|
||||
#define DAC_TIM2_CLK RCC_APB1Periph_TIM5
|
||||
#define DAC_TIM2_NAME TIM5
|
||||
#elif defined DAC_DMA_T2_TIM6
|
||||
#define DAC_TIM2_TRG DAC_Trigger_T6_TRGO
|
||||
#define DAC_TIM2_CLK RCC_APB1Periph_TIM6
|
||||
#define DAC_TIM2_NAME TIM6
|
||||
#elif defined DAC_DMA_T2_TIM7
|
||||
#define DAC_TIM2_TRG DAC_Trigger_T7_TRGO
|
||||
#define DAC_TIM2_CLK RCC_APB1Periph_TIM7
|
||||
#define DAC_TIM2_NAME TIM7
|
||||
#endif
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Adressen der DACs
|
||||
// (siehe Seite 55 vom Referenz Manual)
|
||||
//--------------------------------------------------------------
|
||||
#define DAC_BASE_ADR ((uint32_t)0x40007400)
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Adressen der Register
|
||||
// (siehe Seite 325 vom Referenz Manual)
|
||||
//--------------------------------------------------------------
|
||||
#define DAC1_REG_DHR_12R1_OFFSET 0x08 // 12bit, rechtsbündig
|
||||
#define DAC2_REG_DHR_12R2_OFFSET 0x14 // 12bit, rechtsbündig
|
||||
|
||||
#define DAC1_DHR_12R1_ADDRESS (DAC_BASE_ADR | DAC1_REG_DHR_12R1_OFFSET)
|
||||
#define DAC2_DHR_12R2_ADDRESS (DAC_BASE_ADR | DAC2_REG_DHR_12R2_OFFSET)
|
||||
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
// Globale Funktionen
|
||||
//--------------------------------------------------------------
|
||||
void UB_DAC_DMA_Init(DAC_DMA_MODE_t mode);
|
||||
void UB_DAC_DMA_SetWaveform1(DAC_DMA_WAVE_NAME_t wave);
|
||||
void UB_DAC_DMA_SetWaveform2(DAC_DMA_WAVE_NAME_t wave);
|
||||
void UB_DAC_DMA_SetFrq1(uint16_t vorteiler, uint16_t periode);
|
||||
void UB_DAC_DMA_SetFrq2(uint16_t vorteiler, uint16_t periode);
|
||||
|
||||
|
||||
|
||||
|
||||
//--------------------------------------------------------------
|
||||
#endif // __STM32F4_UB_DAC_DMA_H
|
||||
Reference in New Issue
Block a user