.global _main
/* main program */
_main:
/* user code */
/* nastavitev debug unit-a */
    ldr r2,=DBGU_BASE
    mov r0, #26
    str r0, [r2, #DBGU_BRGR]  /* vpis v CD(delilnik mck)              */
    mov r0, #0b1010000
    str r0, [r2, #DBGU_CR]    /* omogocimo oddajnik in sprejemnik    */
    mov r0, #(1 << 11)
    str r0, [r2, #DBGU_MR]    /* nacin prenosa brez paritetnega bita  */

zanka:
/* sproži sprejemanje preko DMA */
    ldr r0, =niz1
    ldr r1, =STRING_LENGTH
    bl RCV_DMA 
   
    ldr r0,=DBGU_BASE
   
/* pocakaj na zastavico ENDRX */
z1: ldr r1, [r0, #DBGU_SR]
    tst r1, #1 << 3
    beq z1
   
/* zamenjaj velikost crk */
    ldr r0, =niz1
    ldr r1, =niz2
    ldr r2, =STRING_LENGTH
    bl CHANGE 
 
/* sproži oddajanje preko DMA */
    ldr r0, =niz2
    ldr r1, =STRING_LENGTH
    bl SND_DMA   
 
    b zanka
   
_wait_for_ever:
    b _wait_for_ever
                 

RCV_DMA:
    stmed r13!, {r2-r3,r14}
    ldr r2,=DBGU_BASE
    add r0,r0,#0x200000
    str r0,[r2,#DBGU_RPR]    /* kazalec na niz1*/
    cmp r1, #1
    movlo r1, #1
    cmp r1, #80
    movhi r1, #80
    str r1,[r2,#DBGU_RCR]
    mov r3,#1                /* omogoci sprejemanje - RXTEN*/
    str r3,[r2,#DBGU_PTCR]

    ldmed r13!, {r2-r3,pc}
 
 
SND_DMA:
    stmed r13!, {r2-r3,r14}
    ldr r2,=DBGU_BASE
    add r0,r0,#0x200000
    str r0,[r2,#DBGU_TPR]    /* kazalec na niz1*/
    str r1,[r2,#DBGU_TCR]
    mov r3,#1<<8            /*omogoci oddajanje - TXTEN*/
    str r3,[r2,#DBGU_PTCR]
 
    ldmed r13!, {r2-r3,pc}
 
 
CHANGE: 
    stmed r13!, {r1-r4,r14}
 
ch_zanka:   
    ldrb r4, [r0], #1     

    bic r3, r4, #0b100000
   
    cmp r3, #'A'
    blo pisi
    cmp r3, #'Z'
    bhi pisi
    eor r4, r4, #0b100000    /*veliko crko spremeni v majhno*/

pisi:
    strb r4, [r1], #1  /* shranimo v niz2*/ 
     
    subs r2, r2, #1
    bne ch_zanka     
     
    ldmed r13!, {r1-r4,pc}
 

/* end user code */

/* variables here */
niz1: .space 80 
niz2: .space 80

/* end variables */
Zadnja sprememba: četrtek, 15. januar 2015, 11:49