summaryrefslogtreecommitdiffstats
path: root/Bachelor/Mikroprozessorsysteme2/mi2/Termin5/seriell.S
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Bachelor/Mikroprozessorsysteme2/mi2/Termin5/seriell.S
downloadStudium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz
Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Bachelor/Mikroprozessorsysteme2/mi2/Termin5/seriell.S')
-rw-r--r--Bachelor/Mikroprozessorsysteme2/mi2/Termin5/seriell.S73
1 files changed, 73 insertions, 0 deletions
diff --git a/Bachelor/Mikroprozessorsysteme2/mi2/Termin5/seriell.S b/Bachelor/Mikroprozessorsysteme2/mi2/Termin5/seriell.S
new file mode 100644
index 0000000..9560075
--- /dev/null
+++ b/Bachelor/Mikroprozessorsysteme2/mi2/Termin5/seriell.S
@@ -0,0 +1,73 @@
+@----------------------------------------------------------------------------
+@ File Name : seriell.S
+@ Object : Grundfunktionen der seriellen Schnittstelle
+@
+@ 1.0 27/10/02 GR : Creation
+@----------------------------------------------------------------------------
+
+ .file "seriell.S"
+
+#include "../h/pmc.inc"
+#include "../h/pio.inc"
+#include "../h/usart.inc"
+
+DEFAULT_BAUD = 38400
+CLOCK_SPEED = 25000000
+US_BAUD = 0x29 @ CLOCK_SPEED / (16*(DEFAULT_BAUD))
+
+@ Funktion
+ .text
+ .align 2
+ .global init_ser
+ .type init_ser,function
+init_ser:
+ stmfd sp!, {r0-r3, lr} @ Register retten
+ adr r0,L1
+ adr r1,L1_end
+init_ser_loop:
+ ldmia r0!, {r2-r3}
+ cmp r0, r1
+ str r3, [r2]
+ bne init_ser_loop
+ ldmfd sp!, {r0-r3, pc} @ Rücksprung
+L1:
+ .word PMC_BASE+PMC_PCER, 0x4
+ .word PIOA_BASE+PIO_PDR, 0x18000
+ .word USART0_BASE+US_CR, 0xa0
+ .word USART0_BASE+US_MR, 0x8c0
+ .word USART0_BASE+US_BRGR, US_BAUD
+ .word USART0_BASE+US_CR, 0x50
+L1_end:
+
+@ Funktion
+ .text
+ .align 2
+ .global putchar
+ .type putchar,function
+putchar:
+ stmfd sp!, {r0-r2, lr} @ Register retten
+ ldr r2, =USART0_BASE
+1:
+ ldr r1, [r2, #US_CSR]
+ tst r1, #US_TXRDY @ ist Transmitter frei
+ beq 1b
+ str r0, [r2,#US_THR]
+ ldmfd sp!, {r0-r2, pc} @ Rücksprung
+
+@ Funktion
+ .text
+ .align 2
+ .global getchar
+ .type getchar,function
+getchar:
+ stmfd sp!, {r1, r2, lr} @ Register retten
+ ldr r2, =USART0_BASE
+
+1:
+ ldr r1, [r2, #US_CSR]
+ ands r1, r1, #US_RXRDY
+ beq 1b
+ ldr r0, [r2, #US_RHR]
+ ldmfd sp!, {r1, r2, pc} @ Rücksprung
+
+.end