From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../mi2/Termin3/Aufgabe/Termin3.pdf | Bin 0 -> 24689 bytes .../mi2/Termin3/Aufgabe/Termin3Aufgabe1.c | 12 +++ .../mi2/Termin3/Aufgabe/makefile1 | 14 +++ .../mi2/Termin3/Interface.pdf | Bin 0 -> 293979 bytes .../Mikroprozessorsysteme2/mi2/Termin3/Termin3.pdf | Bin 0 -> 7779 bytes .../mi2/Termin3/Termin3Aufgabe1.bak.c | 77 +++++++++++++++ .../mi2/Termin3/Termin3Aufgabe1.c | 77 +++++++++++++++ .../mi2/Termin3/Termin3Aufgabe1.out | Bin 0 -> 41177 bytes .../mi2/Termin3/Termin3Aufgabe2.c | 99 +++++++++++++++++++ .../mi2/Termin3/Termin3Aufgabe3.c | 109 +++++++++++++++++++++ .../mi2/Termin3/frank_micsys2_praktikum03.zip | Bin 0 -> 39309 bytes .../Mikroprozessorsysteme2/mi2/Termin3/makefile | 51 ++++++++++ .../Mikroprozessorsysteme2/mi2/Termin3/makefile1 | 14 +++ 13 files changed, 453 insertions(+) create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/Termin3.pdf create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/Termin3Aufgabe1.c create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/makefile1 create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Interface.pdf create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3.pdf create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.bak.c create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.c create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.out create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe2.c create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe3.c create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/frank_micsys2_praktikum03.zip create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/makefile create mode 100644 Bachelor/Mikroprozessorsysteme2/mi2/Termin3/makefile1 (limited to 'Bachelor/Mikroprozessorsysteme2/mi2/Termin3') diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/Termin3.pdf b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/Termin3.pdf new file mode 100644 index 0000000..a4be8fb Binary files /dev/null and b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/Termin3.pdf differ diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/Termin3Aufgabe1.c b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/Termin3Aufgabe1.c new file mode 100644 index 0000000..b222c22 --- /dev/null +++ b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/Termin3Aufgabe1.c @@ -0,0 +1,12 @@ +// Lösung zu Termin3 +// Aufgabe 1 +// Namen: __________; ___________ +// Matr.: __________; ___________ +// vom : __________ +// + +int main(void) +{ + + return 0; +} diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/makefile1 b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/makefile1 new file mode 100644 index 0000000..d10a7f9 --- /dev/null +++ b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Aufgabe/makefile1 @@ -0,0 +1,14 @@ +FILE = Termin3Aufgabe1 +Opti = 1 + +all: + arm-elf-gcc -c -g -O$(OPTI) ../boot/swi.S + arm-elf-gcc -c -g -O$(OPTI) ../boot/boot.s + arm-elf-gcc -g -c -O$(OPTI) $(FILE).c + arm-elf-gcc -S -O$(OPTI) $(FILE).c + arm-elf-ld -Ttext 0x2000000 swi.o boot.o $(FILE).o -o $(FILE).elf + +clean: + rm -f *.o + rm *.elf + diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Interface.pdf b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Interface.pdf new file mode 100644 index 0000000..00b5d6c Binary files /dev/null and b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Interface.pdf differ diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3.pdf b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3.pdf new file mode 100644 index 0000000..b34cd69 Binary files /dev/null and b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3.pdf differ diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.bak.c b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.bak.c new file mode 100644 index 0000000..8c19eac --- /dev/null +++ b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.bak.c @@ -0,0 +1,77 @@ +// Lösung zu Termin3 +// Aufgabe 1 +// von: +// vom: +// + +#include "../h/pmc.h" +#include "../h/tc.h" +#include "../h/pio.h" +#include "../h/aic.h" + +void taste_irq_handler (void) __attribute__ ((interrupt)); + +// Interruptserviceroutine für die Tasten SW1 und SW2 +void taste_irq_handler (void) +{ + StructPIO* piobaseB = PIOB_BASE; // Basisadresse PIO B + StructAIC* aicbase = AIC_BASE; //__ + +// ab hier entsprechend der Aufgabestellung ergänzen +//************************************************** + + + + aicbase->AIC_EOICR = piobaseB->PIO_ISR; //__ +} + +// Timer3 initialisieren +void Timer3_init( void ) +{ + StructTC* timerbase3 = TCB3_BASE; // Basisadressse TC Block 1 + StructPIO* piobaseA = PIOA_BASE; // Basisadresse PIO B + + timerbase3->TC_CCR = TC_CLKDIS; // Disable Clock + + // Initialize the mode of the timer 3 + timerbase3->TC_CMR = + TC_ACPC_CLEAR_OUTPUT | //ACPC : Register C clear TIOA + TC_ACPA_SET_OUTPUT | //ACPA : Register A set TIOA + TC_WAVE | //WAVE : Waveform mode + TC_CPCTRG | //CPCTRG : Register C compare trigger enable + TC_CLKS_MCK1024; //TCCLKS : MCKI / 1024 + + // Initialize the counter: + timerbase3->TC_RA = 300; //__ + timerbase3->TC_RC = 600; //__ + + // Start the timer : + timerbase3->TC_CCR = TC_CLKEN ; //__ + timerbase3->TC_CCR = TC_SWTRG ; //__ + piobaseA->PIO_PER = (1<PIO_OER = (1<PIO_CODR = (1<PMC_PCER = 0x4000; // Peripheral Clocks einschalten für PIOB, _____ + +// ab hier entsprechend der Aufgabestellung ergänzen +//************************************************** + + + + + while(1) + { + + } + + return 0; +} diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.c b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.c new file mode 100644 index 0000000..05c3406 --- /dev/null +++ b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.c @@ -0,0 +1,77 @@ +// Lösung zu Termin3 +// Aufgabe 1 +// von: +// vom: +// + +#include "../h/pmc.h" +#include "../h/tc.h" +#include "../h/pio.h" +#include "../h/aic.h" + +void taste_irq_handler (void) __attribute__ ((interrupt)); + +// Interruptserviceroutine für die Tasten SW1 und SW2 +void taste_irq_handler (void) +{ + StructPIO* piobaseB = PIOB_BASE; // Basisadresse PIO B + StructAIC* aicbase = AIC_BASE; //__ + +// ab hier entsprechend der Aufgabestellung ergänzen +// ************************************************* + + + + aicbase->AIC_EOICR = piobaseB->PIO_ISR; //__ +} + +// Timer3 initialisieren +void Timer3_init( void ) +{ + StructTC* timerbase3 = TCB3_BASE; // Basisadressse TC Block 1 + StructPIO* piobaseA = PIOA_BASE; // Basisadresse PIO B + + timerbase3->TC_CCR = TC_CLKDIS; // Disable Clock + + // Initialize the mode of the timer 3 + timerbase3->TC_CMR = + TC_ACPC_CLEAR_OUTPUT | //ACPC : Register C clear TIOA + TC_ACPA_SET_OUTPUT | //ACPA : Register A set TIOA + TC_WAVE | //WAVE : Waveform mode + TC_CPCTRG | //CPCTRG : Register C compare trigger enable + TC_CLKS_MCK1024; //TCCLKS : MCKI / 1024 + + // Initialize the counter: + timerbase3->TC_RA = 300; //__ + timerbase3->TC_RC = 600; //__ + + // Start the timer : + timerbase3->TC_CCR = TC_CLKEN ; //__ + timerbase3->TC_CCR = TC_SWTRG ; //__ + piobaseA->PIO_PER = (1<PIO_OER = (1<PIO_CODR = (1<PMC_PCER = 0x4000; // Peripheral Clocks einschalten für PIOB, _____ + +// ab hier entsprechend der Aufgabestellung ergänzen +//************************************************** + + + + + while(1) + { + + } + + return 0; +} diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.out b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.out new file mode 100644 index 0000000..e32599e Binary files /dev/null and b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe1.out differ diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe2.c b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe2.c new file mode 100644 index 0000000..9fe2783 --- /dev/null +++ b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe2.c @@ -0,0 +1,99 @@ +// Lösung zu Termin3 +// Aufgabe 1 + +// vom: 04.11.2003 +// + +#include "../h/pmc.h" +#include "../h/tc.h" +#include "../h/pio.h" +#include "../h/aic.h" + +void taste_irq_handler (void) __attribute__ ((interrupt)); + +// Interruptserviceroutine für die Tasten SW1 und SW2 +void taste_irq_handler (void) +{ + StructPIO* piobaseB = PIOB_BASE; // Basisadresse PIO B + StructPIO* piobaseA = PIOA_BASE; // Basisadresse PIO A + StructAIC* aicbase = AIC_BASE; // Basisadresse Advanced Interrupt Controller + +// ab hier entsprechend der Aufgabestellung ergänzen +//************************************************** + + if (!(piobaseB->PIO_PDSR & KEY1)) // falls Schalter 1 gedrückt + piobaseA->PIO_PDR = (1<PIO_PDSR & KEY2)) // falls Schalter 2 gedrückt + piobaseA->PIO_PER = (1<AIC_EOICR = piobaseB->PIO_ISR; // AIC End of Interrupt Command Register = PIOB Interrupt Status Register +} + +// Timer3 initialisieren +void Timer3_init( void ) +{ + StructTC* timerbase3 = TCB3_BASE; // Basisadressse TC Block 1 + StructPIO* piobaseA = PIOA_BASE; // Basisadresse PIO B + + timerbase3->TC_CCR = TC_CLKDIS; // Disable Clock + + // Initialize the mode of the timer 3 + timerbase3->TC_CMR = + TC_ACPC_CLEAR_OUTPUT | //ACPC : Register C clear TIOA + TC_ACPA_SET_OUTPUT | //ACPA : Register A set TIOA + TC_WAVE | //WAVE : Waveform mode + TC_CPCTRG | //CPCTRG : Register C compare trigger enable + TC_CLKS_MCK1024; //TCCLKS : MCKI / 1024 + + // Initialize the counter: + timerbase3->TC_RA = 2440; // Wert 300 in Register RA: wenn Wert erreicht Steigende Flanke + timerbase3->TC_RC = 4880; // Wert 600 in Register RC: wenn Wert erreicht Fallende Flanke + + // Start the timer : + timerbase3->TC_CCR = TC_CLKEN ; // Timer Clock enabled + timerbase3->TC_CCR = TC_SWTRG ; // Reset Counter + // Vermeiden, daß dauerhaftes High Signal (PIO herrscht über das BIT) + piobaseA->PIO_PER = (1<PIO_OER = (1<PIO_CODR = (1<PMC_PCER = 0x4000; // Peripheral Clocks einschalten für PIOB, + +// ab hier entsprechend der Aufgabestellung ergänzen +//************************************************** + + pmcbase->PMC_PCER = 0x6200; // Timer (0x200), PIOA (0x2000), PIOB (0x4000) einschalten + Timer3_init(); + piobaseB->PIO_PER = 0x38; // Schalter 1-3 enabeled + + + // Interrupt Initialisierung für PIOB (0x4000) + piobaseB->PIO_IER = 0x18; // Schalter 1+2 lösen Interrupts aus + StructAIC* aicbase = AIC_BASE; // Basisadresse Advanced Interrupt Controller + aicbase->AIC_IDCR = 0x4000; // Interrupt disabled + aicbase->AIC_ICCR = 0x4000; // Interrupt clear + aicbase->AIC_SMR[14] = 0x07; // An Stelle 14 Level Sensitive / Höchste Priorität + aicbase->AIC_SVR[14] = (unsigned int)taste_irq_handler; // Adresse der Interrupt Service Routine in Vektor-Tabelle + aicbase->AIC_IECR = 0x4000; + + + + while(piobaseB->PIO_PDSR & KEY3) + { + + } + + // Vermeiden, daß dauerhaftes High Signal (PIO herrscht über das BIT) + piobaseA->PIO_PER = (1<AIC_IDCR = 0x4000; // Interrupt Disable + + return 0; +} diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe3.c b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe3.c new file mode 100644 index 0000000..48a7955 --- /dev/null +++ b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/Termin3Aufgabe3.c @@ -0,0 +1,109 @@ +// Lösung zu Termin3 +// Aufgabe 3 + +// vom: 07.12.2005 +// Andreas Spirka, Sven Eisenhauer + +#include "../h/pmc.h" +#include "../h/tc.h" +#include "../h/pio.h" +#include "../h/aic.h" + +void taste_irq_handler (void) __attribute__ ((interrupt)); + +// Interruptserviceroutine für die Tasten SW1 und SW2 +void taste_irq_handler (void) +{ + StructPIO* piobaseB = PIOB_BASE; // Basisadresse PIO B + StructPIO* piobaseA = PIOA_BASE; // Basisadresse PIO A + StructAIC* aicbase = AIC_BASE; // Basisadresse Advanced Interrupt Controller + +// ab hier entsprechend der Aufgabestellung ergänzen +//************************************************** + + if (!(piobaseB->PIO_PDSR & KEY1)) // falls Schalter 1 gedrückt + piobaseA->PIO_PDR = (1<PIO_PDSR & KEY2)) // falls Schalter 2 gedrückt + piobaseA->PIO_PER = (1<AIC_EOICR = piobaseB->PIO_ISR; // AIC End of Interrupt Command Register = PIOB Interrupt Status Register +} + +// Timer3 initialisieren +void Timer3_init( void ) +{ + StructTC* timerbase3 = TCB3_BASE; // Basisadressse TC Block 1 + StructPIO* piobaseA = PIOA_BASE; // Basisadresse PIO B + + timerbase3->TC_CCR = TC_CLKDIS; // Disable Clock + + // Initialize the mode of the timer 3 + timerbase3->TC_CMR = + TC_ACPC_CLEAR_OUTPUT | //ACPC : Register C clear TIOA + TC_ACPA_SET_OUTPUT | //ACPA : Register A set TIOA + TC_WAVE | //WAVE : Waveform mode + TC_CPCTRG | //CPCTRG : Register C compare trigger enable + TC_CLKS_MCK1024; //TCCLKS : MCKI / 1024 + + // Initialize the counter: + timerbase3->TC_RA = 2440; // Wert 300 in Register RA: wenn Wert erreicht Steigende Flanke + timerbase3->TC_RC = 4880; // Wert 600 in Register RC: wenn Wert erreicht Fallende Flanke + + // Start the timer : + timerbase3->TC_CCR = TC_CLKEN ; // Timer Clock enabled + timerbase3->TC_CCR = TC_SWTRG ; // Reset Counter + // Vermeiden, daß dauerhaftes High Signal (PIO herrscht über das BIT) + piobaseA->PIO_PER = (1<PIO_OER = (1<PIO_CODR = (1<PIO_IDR = 0xFFFFFFFF; + piobaseB->PIO_PER = KEY1|KEY2|KEY3; // Schalter 1-3 enabeled + // Interrupt Initialisierung für PIOB (0x4000) + piobaseB->PIO_IER = KEY1|KEY2; // Schalter 1+2 lösen Interrupts aus +} + +int main(void) +{ + + StructPMC* pmcbase = PMC_BASE; // Basisadresse des PMC + StructPIO* piobaseA = PIOA_BASE; // Basisadresse PIO A + StructPIO* piobaseB = PIOB_BASE; // Basisadresse PIO B + + +// ab hier entsprechend der Aufgabestellung ergänzen +//************************************************** + + // Timer (0x200), PIOA (0x2000), PIOB (0x4000) einschalten + pmcbase->PMC_PCER = (1<AIC_IDCR = (1<AIC_ICCR = (1<AIC_SMR[PIOB_ID] = AIC_SRCTYPE_EXT_LOW_LEVEL|AIC_PRIOR; // An Stelle 14 Level Sensitive / Höchste Priorität + aicbase->AIC_SVR[PIOB_ID] = (unsigned int)taste_irq_handler; // Adresse der Interrupt Service Routine in Vektor-Tabelle + aicbase->AIC_IECR = (1<PIO_PDSR & KEY3) + { + + } + // Vermeiden, daß dauerhaftes High Signal (PIO herrscht über das BIT) + piobaseA->PIO_PER = (1<PIO_OER = (1<PIO_CODR = (1<AIC_IDCR = (1<PIO_IDR = 0xFFFFFFFF; + // Timer (0x200), PIOA (0x2000), PIOB (0x4000) ausschalten + pmcbase->PMC_PCDR = (1< Assume input file is in format +# -O --output-target Create an output file in format +# -S --strip-all Remove all symbol and relocation information +# -x --discard-all Remove all non-global symbols +# -N --strip-symbol Do not copy symbol +# -O --output-target Create an output file in format +# -g --strip-debug Remove all debugging symbols + arm-elf-objcopy -I elf32-littlearm -O binary -x -S -N -g $(FILE).out $(FILE).rom +# programm.rom nach /tftpboot/downlaod.bin kopieren +# Jumper E7 muß auf STD stecken +# Mit mit dem BDI2000 verbinden. +# mit flash-Bereich löschen +# mit Programm ins flash schreiben. +# +# +clean: + rm *.o + rm *.s + rm *.elf + rm *.rom \ No newline at end of file diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/makefile1 b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/makefile1 new file mode 100644 index 0000000..6308804 --- /dev/null +++ b/Bachelor/Mikroprozessorsysteme2/mi2/Termin3/makefile1 @@ -0,0 +1,14 @@ +FILE = Termin3Aufgabe3 +Opti = 1 + +all: + arm-elf-gcc -c -g -O1 ../boot/swi.S + arm-elf-gcc -c -g -O1 ../boot/boot.s + arm-elf-gcc -c -g -O1 $(FILE).c + arm-elf-gcc -S $(FILE).c + arm-elf-ld -Ttext 0x2000000 swi.o boot.o $(FILE).o -o $(FILE).elf + +clean: + rm -f *.o + rm *.elf + -- cgit v1.2.3