diff --git a/ARMV40_FRL.lib b/ARMV40_FRL.lib
new file mode 100644
index 0000000..0783348
Binary files /dev/null and b/ARMV40_FRL.lib differ
diff --git a/DMA.uvprojx b/DMA.uvprojx
index ff2dd2a..410d300 100644
--- a/DMA.uvprojx
+++ b/DMA.uvprojx
@@ -7,9 +7,10 @@
- Target 1
+ MDDS
0x4
ARM-ADS
+ 6190000::V6.19::ARMCLANG
1
@@ -47,14 +48,14 @@
0
1
- .\
+ .\Objects\
DMA
1
0
0
1
1
- .\
+ .\Listings\
1
0
0
@@ -125,47 +126,6 @@
0
16
-
- 0
- 1
- 1
- 1
- 1
- 1
- 1
- 1
- 0
- 1
-
-
- 1
- 1
- 1
- 1
- 1
- 1
- 0
- 1
- 1
- 1
-
- 0
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
- BIN\UL2CM3.DLL
-
@@ -173,7 +133,7 @@
0
0
1
- 0
+ 1
-1
1
@@ -300,17 +260,17 @@
0x0
- 0
+ 1
0x0
0x0
- 0
+ 1
0x0
0x0
- 0
+ 1
0x0
0x0
@@ -320,7 +280,7 @@
0x20000
- 0
+ 1
0x0
0x0
@@ -363,7 +323,7 @@
0
0
0
- 2
+ 3
0
0
1
@@ -422,10 +382,86 @@
- Source Group 1
+ src
+
+
+ DRM.c
+ 1
+ .\DRM.c
+
+
+
+
+ lib
+
+
+ ARMV40_FRL.lib
+ 4
+ .\ARMV40_FRL.lib
+
+
+
+
+ ::CMSIS
+
+
+ ::Device
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ RTE\Device\STM32F103RB\RTE_Device.h
+
+
+
+
+
+
+
+ RTE\Device\STM32F103RB\startup_stm32f10x_md.s
+
+
+
+
+
+
+
+ RTE\Device\STM32F103RB\system_stm32f10x.c
+
+
+
+
+
+
+
+
+
+
+
+
+ DMA
+ 1
+
+
+
+
diff --git a/DRM.c b/DRM.c
index e69de29..248ba7c 100644
--- a/DRM.c
+++ b/DRM.c
@@ -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)
+ {
+
+ }
+}
diff --git a/armv40_frl.h b/armv40_frl.h
new file mode 100644
index 0000000..c064f44
--- /dev/null
+++ b/armv40_frl.h
@@ -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
+#include
+
+/*----------------------------- 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****/