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****/