X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=calu.git;a=blobdiff_plain;f=3_test%2Fuartint.s;h=ed9df5776258c2cc11677adae29e800d20111f5b;hp=8afa8f23fa081bddfce80f9d4fd8f02e5c474166;hb=5615b8e50fe3adabbdf4da3078245c9e47700ffc;hpb=0e2fe48ee7fc6485bb43090779a506353710a167 diff --git a/3_test/uartint.s b/3_test/uartint.s index 8afa8f2..ed9df57 100644 --- a/3_test/uartint.s +++ b/3_test/uartint.s @@ -1,22 +1,66 @@ +.data +str: + .fill 0x41424344 + .fill 0x0a0d0000 .text + .define UART_BASE, 0x2000 + .define UART_STATUS, 0x0 + .define UART_RECV, 0xc + .define UART_TRANS, 0x8 + + .define UART_TRANS_EMPTY, 0x1 + .define UART_RECV_NEW, 0x2 start: br+ main ;br+ br+ main ret main: - ldi r0, 0x2000 ; status... - ldi r1, 0x200b ;ldi r1, 8203 - ldi r2, 0x200c ;ldi r2, 8204 - ; ldi r4, 0x2024 ;ldi r4, 8228 - ; ldi r5, 3 ; enable interrupts - ; stw r5, 0(r4) - ldw r5, 0(r0) - andx r5, 0x2 + ldi r10, UART_BASE@lo + ldih r10, UART_BASE@hi + ldw r5, UART_STATUS(r10) + andx r5, UART_RECV_NEW brzs+ main ; no new data? - ldw r7, 0(r2) ; load data + ldw r7, UART_RECV(r10) ; load data + + xor r1, r1, r1 + xor r2, r2, r2 + xor r3, r3, r3 + ; ldi r1, str + ; ldi r1, 0x58 + ; stb r1, str(r3) + ldw r1, str(r3) + ldi r2, 6 + ;call send_string + call send_byte + +main2: + ldw r5, UART_STATUS(r10) + andx r5, UART_RECV_NEW + brzs+ main2 ; no new data? + ldw r7, UART_RECV(r10) ; load data uartnrdy: ldw r5, 0(r0) - andx r5, 0x1 + andx r5, UART_TRANS_EMPTY brnz+ uartnrdy ; transmitter not ready yet? - stw r7, 0(r1) ; send zeh shit! - br main ; back to usual stuff + stw r7, UART_TRANS(r10) ; send zeh shit! + br main2 ; back to usual stuff + +send_string: + ; r1 = addr + ; r2 = len + addi r3, r1, 0 +send_string_int: + cmpi r2, 0 + reteq- + ldb r1, 0(r3) + call send_byte + addi r2, r2, 0-1 + addi r3, r3, 1 + br send_string_int + +send_byte: + ldw r9, UART_STATUS(r10) + andx r9, UART_TRANS_EMPTY + brnz+ send_byte ; branch if not zero + stw r1, UART_TRANS(r10) + ret