25.02.2026

This commit is contained in:
Fabian Schieder 2026-02-25 12:19:42 +01:00
parent b566af0b39
commit 9481948086
4 changed files with 461 additions and 51 deletions

BIN
ARMV40_FRL.lib Normal file

Binary file not shown.

View File

@ -7,9 +7,10 @@
<Targets>
<Target>
<TargetName>Target 1</TargetName>
<TargetName>MDDS</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>6190000::V6.19::ARMCLANG</pCCUsed>
<uAC6>1</uAC6>
<TargetOption>
<TargetCommonOption>
@ -47,14 +48,14 @@
<NotGenerated>0</NotGenerated>
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\</OutputDirectory>
<OutputDirectory>.\Objects\</OutputDirectory>
<OutputName>DMA</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>0</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath>.\</ListingPath>
<ListingPath>.\Listings\</ListingPath>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
@ -125,47 +126,6 @@
<HexOffset>0</HexOffset>
<Oh166RecLen>16</Oh166RecLen>
</OPTHX>
<Simulator>
<UseSimulator>0</UseSimulator>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>1</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<LimitSpeedToRealTime>0</LimitSpeedToRealTime>
<RestoreSysVw>1</RestoreSysVw>
</Simulator>
<Target>
<UseTarget>1</UseTarget>
<LoadApplicationAtStartup>1</LoadApplicationAtStartup>
<RunToMain>1</RunToMain>
<RestoreBreakpoints>1</RestoreBreakpoints>
<RestoreWatchpoints>1</RestoreWatchpoints>
<RestoreMemoryDisplay>1</RestoreMemoryDisplay>
<RestoreFunctions>0</RestoreFunctions>
<RestoreToolbox>1</RestoreToolbox>
<RestoreTracepoints>1</RestoreTracepoints>
<RestoreSysVw>1</RestoreSysVw>
</Target>
<RunDebugAfterBuild>0</RunDebugAfterBuild>
<TargetSelection>0</TargetSelection>
<SimDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
</SimDlls>
<TargetDlls>
<CpuDll></CpuDll>
<CpuDllArguments></CpuDllArguments>
<PeripheralDll></PeripheralDll>
<PeripheralDllArguments></PeripheralDllArguments>
<InitializationFile></InitializationFile>
<Driver>BIN\UL2CM3.DLL</Driver>
</TargetDlls>
</DebugOption>
<Utilities>
<Flash1>
@ -173,7 +133,7 @@
<UseExternalTool>0</UseExternalTool>
<RunIndependent>0</RunIndependent>
<UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
<Capability>0</Capability>
<Capability>1</Capability>
<DriverSelection>-1</DriverSelection>
</Flash1>
<bUseTDR>1</bUseTDR>
@ -300,17 +260,17 @@
<Size>0x0</Size>
</XRAM>
<OCR_RVCT1>
<Type>0</Type>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT1>
<OCR_RVCT2>
<Type>0</Type>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT2>
<OCR_RVCT3>
<Type>0</Type>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT3>
@ -320,7 +280,7 @@
<Size>0x20000</Size>
</OCR_RVCT4>
<OCR_RVCT5>
<Type>0</Type>
<Type>1</Type>
<StartAddress>0x0</StartAddress>
<Size>0x0</Size>
</OCR_RVCT5>
@ -363,7 +323,7 @@
<PlainCh>0</PlainCh>
<Ropi>0</Ropi>
<Rwpi>0</Rwpi>
<wLevel>2</wLevel>
<wLevel>3</wLevel>
<uThumb>0</uThumb>
<uSurpInc>0</uSurpInc>
<uC99>1</uC99>
@ -422,10 +382,86 @@
</TargetOption>
<Groups>
<Group>
<GroupName>Source Group 1</GroupName>
<GroupName>src</GroupName>
<Files>
<File>
<FileName>DRM.c</FileName>
<FileType>1</FileType>
<FilePath>.\DRM.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>lib</GroupName>
<Files>
<File>
<FileName>ARMV40_FRL.lib</FileName>
<FileType>4</FileType>
<FilePath>.\ARMV40_FRL.lib</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
</Group>
<Group>
<GroupName>::Device</GroupName>
</Group>
</Groups>
</Target>
</Targets>
<RTE>
<apis/>
<components>
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.6.0" condition="ARMv6_7_8-M Device">
<package name="CMSIS" schemaVersion="1.7.7" url="http://www.keil.com/pack/" vendor="ARM" version="5.9.0"/>
<targetInfos>
<targetInfo name="MDDS"/>
</targetInfos>
</component>
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS">
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="https://www.keil.com/pack/" vendor="Keil" version="2.4.1"/>
<targetInfos>
<targetInfo name="MDDS"/>
</targetInfos>
</component>
</components>
<files>
<file attr="config" category="header" name="RTE_Driver\Config\RTE_Device.h" version="1.1.2">
<instance index="0">RTE\Device\STM32F103RB\RTE_Device.h</instance>
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="https://www.keil.com/pack/" vendor="Keil" version="2.4.1"/>
<targetInfos>
<targetInfo name="MDDS"/>
</targetInfos>
</file>
<file attr="config" category="source" condition="STM32F1xx MD ARMCC" name="Device\Source\ARM\startup_stm32f10x_md.s" version="1.0.1">
<instance index="0">RTE\Device\STM32F103RB\startup_stm32f10x_md.s</instance>
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="https://www.keil.com/pack/" vendor="Keil" version="2.4.1"/>
<targetInfos>
<targetInfo name="MDDS"/>
</targetInfos>
</file>
<file attr="config" category="source" name="Device\Source\system_stm32f10x.c" version="1.0.1">
<instance index="0">RTE\Device\STM32F103RB\system_stm32f10x.c</instance>
<component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="STM32F1xx CMSIS"/>
<package name="STM32F1xx_DFP" schemaVersion="1.7.2" url="https://www.keil.com/pack/" vendor="Keil" version="2.4.1"/>
<targetInfos>
<targetInfo name="MDDS"/>
</targetInfos>
</file>
</files>
</RTE>
<LayerInfo>
<Layers>
<Layer>
<LayName>DMA</LayName>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project>

71
DRM.c
View File

@ -0,0 +1,71 @@
/*
Name: Schieder Fabian
Datum: 11.02.2026
Datei: DMA.c
Hardware: MDDS
Funktionsbeschreibung:
*/
#include "stm32f10x.h"
#include "armv40_frl.h"
double ADC_Volt;
char buffer[24];
volatile uint16_t adc_values[2]; // adc_values[0] = PA0, adc_values[1] = PA1
void adc_dma_init()
{
ADC1->SMPR2 = 0x0000002D; // Sample time ADC1 für channel 1 und channel 2
RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; // Clock für ADC1
RCC->AHBENR |= RCC_AHBENR_DMA1EN; // Clock für DMA
/*------------------- DMA konfig -------------------*/
DMA1_Channel1->CPAR = (uint32_t)&ADC1->DR; // Peripheral Address
DMA1_Channel1->CMAR = (uint32_t)adc_values; // Memory Address
DMA1_Channel1->CNDTR = 2; // 2 Werte: Kanal0 und Kanal1
DMA1_Channel1->CCR =
DMA_CCR1_MINC // Memory increment
| DMA_CCR1_MSIZE_0 // Memory 16 bit
| DMA_CCR1_PSIZE_0 // Peripheral 16 bit
| DMA_CCR1_CIRC // Circular mode
| DMA_CCR1_PL_1 // Priority high
| DMA_CCR1_EN; // DMA Enable
/*------------------- ADC konfig -------------------*/
ADC1->CR1 = ADC_CR1_SCAN; // scan mode
ADC1->CR2 =
ADC_CR2_DMA
| ADC_CR2_CONT
| ADC_CR2_ADON;
ADC1->SQR1 |= 0x00100000; // 2 mal conversion item in regular sequence
ADC1->SQR2 |= 0x00000000;
ADC1->SQR3 |= 0x00000001; // Set channel 1 as 1st, channel 0 as 2nd
ADC1->CR2 |= ADC_CR2_ADON; // nochmal setzten startet die Wandlung des ADCs
}
int main(void)
{
uart3_init(9600);
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // Clock für GPIOA
GPIOA->CRL &= 0xFFFFFF00;
adc_dma_init();
while(1)
{
}
}

303
armv40_frl.h Normal file
View File

@ -0,0 +1,303 @@
/******************************************************************************/
/* (C) Copyright HTL - HOLLABRUNN 2009-2020 All rights reserved. AUSTRIA */
/* */
/* File Name: armv40_std.h */
/* Autor: Josef Reisinger/ Günter Frasl */
/* Version: V40.00 */
/* Date: 16/05/2023 */
/* Description: Standard Library für ARM Cortex M3 */
/******************************************************************************/
/* History: V1.00 creation */
/* V1.01 09.06.2010 REJ: */
/* Add Bit banding Adresses for LED/Switsches Board */
/* V2.0 19.02.2011 REJ: */
/* - dil_taster_init, dil_led_init hinzugefügt */
/* - lcd_setcursor auf 4 zelige anzeige erweiterst */
/* - Bitbanding Definitiones von Pointer (Adresse der */
/* Speicherzelle auf Inhalt der Speicherzelle umgestellt */
/* - Fehler bei Portmodi Settings in Init_led Switsches */
/* korrigiert */
/* V3.0 21.09.2020 */
/* - convert to MMDS Rev9 */
/* (Elimination DIL Schalter /DIL LEd's, adapt to */
/* LED/Switches to new port lines, Elimination LCD Display */
/* Elimination von ton Funktion */
/* V30.0 06.04.2021 */
/* - MDDS library adapt UART2 and UART3 */
/* V40.0 16.05.2023 */
/* - MDDS library adapt UART2 and UART3 */
/******************************************************************************/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __ARMV30_STD_H
#define __ARMV30_STD_H
/* ----------------------------Includes ---------------------------------------*/
#include <stm32f10x.h>
#include <stdio.h>
/*----------------------------- Define Pins for LED and Swistches--------------*/
/* ------------------------ Einzel-Portpins im Bitbandbereich festlegen */
#define GPIOA_IDR GPIOA_BASE + 2*sizeof(uint32_t) // Calc peripheral address GPIOA IDR
#define GPIOA_ODR GPIOA_BASE + 3*sizeof(uint32_t)
#define GPIOB_IDR GPIOB_BASE + 2*sizeof(uint32_t)
#define GPIOB_ODR GPIOB_BASE + 3*sizeof(uint32_t) // Calc peripheral address GPIOB ODR
#define GPIOC_IDR GPIOC_BASE + 2*sizeof(uint32_t)
#define GPIOC_ODR GPIOC_BASE + 3*sizeof(uint32_t)
// Calc Bit Band Adress from peripheral address: a = peripheral address b = Bit number
#define BITBAND_PERI(a,b) ((PERIPH_BB_BASE + (a-PERIPH_BASE)*32 + (b*4)))
#define SW0 *((volatile unsigned long *)(BITBAND_PERI(GPIOC_IDR,0))) // PC0
#define SW1 *((volatile unsigned long *)(BITBAND_PERI(GPIOC_IDR,1))) // PC1
#define SW2 *((volatile unsigned long *)(BITBAND_PERI(GPIOC_IDR,2))) // PC2
#define SW3 *((volatile unsigned long *)(BITBAND_PERI(GPIOC_IDR,3))) // PC3
#define SW4 *((volatile unsigned long *)(BITBAND_PERI(GPIOC_IDR,12))) // PC12
#define SW5 *((volatile unsigned long *)(BITBAND_PERI(GPIOC_IDR,13))) // PC13
#define SW6 *((volatile unsigned long *)(BITBAND_PERI(GPIOB_IDR,6))) // PB6
#define SW7 *((volatile unsigned long *)(BITBAND_PERI(GPIOB_IDR,7))) // PB7
#define PIEZO *((volatile unsigned long *)(BITBAND_PERI(GPIOA_ODR,4))) //Portleitung des Piezo-Summers (PA4)
#define LED0 *((volatile unsigned long *)(BITBAND_PERI(GPIOA_ODR,0))) // PA0
#define LED1 *((volatile unsigned long *)(BITBAND_PERI(GPIOA_ODR,1))) // PA1
#define LED2 *((volatile unsigned long *)(BITBAND_PERI(GPIOA_ODR,2))) // PA2
#define LED3 *((volatile unsigned long *)(BITBAND_PERI(GPIOA_ODR,3))) // PA3
#define LED4 *((volatile unsigned long *)(BITBAND_PERI(GPIOA_ODR,4))) // PA4
#define LED5 *((volatile unsigned long *)(BITBAND_PERI(GPIOA_ODR,5))) // PA5
#define LED6 *((volatile unsigned long *)(BITBAND_PERI(GPIOA_ODR,6))) // PA6
#define LED7 *((volatile unsigned long *)(BITBAND_PERI(GPIOA_ODR,7))) // PA7
#ifdef ARMV30_STD_MOD
#define EXPORT
#else
#define EXPORT extern
#endif
/* ----------------------------Exported functions ---------------------------- */
/* ------------------------- Reset and Clock Control -----------------------*/
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Set System Clock to 72MHz */
/* Input: none */
/* return: none */
/******************************************************************************/
EXPORT void set_clock_72MHz(void);
/* ------------------------- LED/ Switches Board Funktions -------------------*/
/******************************************************************************/
/* U N T E R P R O G R A M M: init_leds_switches */
/* */
/* Aufgabe: Initialisiert Portleitungen für LED / Schalterplatine */
/* Input: */
/* return: */
/******************************************************************************/
EXPORT void init_leds_switches(void);
/*******************************************************************************/
/* U N T E R P R O G R A M M: set_leds */
/* */
/* Aufgabe: gibt hexadezimalen Wert in auf 8 Leds aus */
/* (an Port 0 angeschlossen) */
/* Input: value = Wert auf den LEDS gesetzt werden sollen */
/* return: */
/******************************************************************************/
EXPORT void set_leds (char value);
/******************************************************************************/
/* U N T E R P R O G R A M M: get_switches */
/* */
/* Aufgabe: liest aktuelle Schalterstellung ein */
/* Input: */
/* return: aktuelle Schalterstellung */
/******************************************************************************/
EXPORT char get_switches(void);
/* ------------------------- Miscellaneous Funktions --------------------------*/
/******************************************************************************/
/* U N T E R P R O G R A M M: WAIT_MS */
/* */
/* Aufgabe: Wartet die angegebene Anzahl an Millisekunden */
/* Input: ms = Anzahl der zu wartenden Millisekunden */
/* return: */
/******************************************************************************/
EXPORT void wait_ms(int ms);
/******************************************************************************/
/* U N T E R P R O G R A M M: wait_10us */
/* */
/* Aufgabe: Wartet 10µs */
/* Input: */
/* return: */
/******************************************************************************/
EXPORT void wait_10us(void);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Function converts a Nibble(0-F) to an ASCII ('0'-'F') */
/* Input: nib: Nibble to convert */
/* Output: nib: Converted Nibble */
/* return: - */
/******************************************************************************/
EXPORT void nib2asc(char *nib);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Function converts an ASCII('0'-'F') to a Nibble(0-F) */
/* Input: asc: ASCII Code */
/* Output: asc: Hex Value */
/* return: - */
/******************************************************************************/
EXPORT void asc2nib(char *asc);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Function converts a Hex-Code (00-FF) to an BCD (0-255) */
/* Input: hex: Hex Value */
/* return: BCD Value */
/******************************************************************************/
EXPORT int hex2bcd(char hex);
/* ------------------------- UART Funktionen ----------------------------------*/
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Initialisiert UART2 */
/* Input: Baudrate */
/* return: */
/******************************************************************************/
EXPORT void uart2_init(unsigned long baudrate);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Initialisiert UART3 */
/* Input: Baudrate */
/* return: */
/******************************************************************************/
EXPORT void uart3_init(unsigned long baudrate);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: liest ein Zeichen von UART2 ein */
/* Input: */
/* return: eingelesens Zeichen */
/******************************************************************************/
EXPORT char uart2_get_char(void);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Ausgabe eines Zeichens auf UART2 */
/* Input: ch: Zeichen in ASCII Code */
/* return: */
/******************************************************************************/
EXPORT char uart3_get_char(void);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Ausgabe eines Zeichens auf UART3 */
/* Input: ch: Zeichen in ASCII Code */
/* return: */
/******************************************************************************/
EXPORT void uart2_put_char(char ch);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Ausgabe eines 8 Bit Hex Wertes als ASCII String auf UART2 */
/* Input: */
/* return: */
/******************************************************************************/
EXPORT void uart3_put_char(char ch);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Ausgabe eines 8 Bit Hex Wertes als ASCII String auf UART3 */
/* Input: */
/* return: */
/******************************************************************************/
EXPORT void uart2_put_hex(char c);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Ausgabe eines Strings auf UART2 */
/* Input: string: C- String der aud UART2 ausgegeben werden soll */
/* return: */
/******************************************************************************/
EXPORT void uart3_put_hex(char c);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Ausgabe eines Strings auf UART3 */
/* Input: string: C- String der aud UART3 ausgegeben werden soll */
/* return: */
/******************************************************************************/
EXPORT void uart2_put_string(char *string);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Ausgabe eines Strings auf UART2 */
/* Input: string: C- String der aud UART2 ausgegeben werden soll */
/* return: */
/******************************************************************************/
EXPORT void uart3_put_string(char *string);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: Ausgabe eines Strings auf UART3 */
/* Input: string: C- String der aud UART3 ausgegeben werden soll */
/* return: */
/******************************************************************************/
EXPORT void uart2_clear(void);
/******************************************************************************/
/* U N T E R P R O G R A M M: */
/* */
/* Aufgabe: sendet Positionierungsstring auf VT100 Terminal "ESC[y;xH" */
/* Input: */
/* return: */
/******************************************************************************/
EXPORT void uart2_setpos(char x,char y);
/* ------------------------- ADC Funktionen ----------------------------------*/
/******************************************************************************/
/* U N T E R P R O G R A M M: adc1_convert */
/* */
/* Aufgabe: liefert aktuellen Wert von ADC1 für Kanal channel */
/* */
/* Input: channel to convert */
/* return: converted value (12Bit right aligned) */
/******************************************************************************/
EXPORT unsigned short int adc1_convert(unsigned char channel);
#undef EXPORT
#endif /* __ARMV10_STD_H */
/******************* (C) HTL - HOLLABRUNN 2009-2010 *****END OF FILE****/