Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 2.85 KB | None | 0 0
  1.     b reset            ; RESET 0x00000000, Reset
  2.     b hang             ; UNDEF 0x00000004, Undefined Instruction
  3.     b hang             ; SWI   0x00000008, Software Interrupt
  4.     b hang             ; PABT  0x0000000C, Prefetch Abort
  5.  
  6.     b hang             ; DABT  0x00000010, Data Abort
  7.     b hang             ; RSV   0x00000014, Reserved
  8.     ldr pc, [irq_isr]  ; IRQ   0x00000018, Interrupt Request
  9.     b hang             ; FIQ   0x0000001C, Fast Interrupt Request
  10.  
  11.     b hang
  12.     b hang
  13.     b hang
  14.     b hang
  15.  
  16.     b hang
  17.     b hang
  18.     b hang
  19.     b hang
  20.    
  21.     TIMER_CVR    EQU 0x04 ; Current Value Register, TimerXValue
  22.     TIMER_CR     EQU 0x08 ; Control Register, TimerXControl
  23.     TIMER_INTCLR EQU 0x0C ; Interrupt Clear Register, TimerXIntClr
  24.     TIMER_BGLOAD EQU 0x18 ; Background Load Register
  25.  
  26.     irq_isr: dd irq_isr_addr
  27. ;*********************************
  28. ;* IRQ Interrupt Service Routine *
  29. ;*********************************    
  30.     irq_isr_addr:
  31.     ;push {r0-r12, r14}
  32.     ;pop {r0-r12, r14}
  33.     subs pc, r14, #4
  34.  
  35. reset:
  36.     mov sp, #0x20000
  37. ;****************************************
  38. ;*         Enable Timer0 and IRQs       *
  39. ;****************************************
  40.     mrs r0, cpsr
  41.     bic r0, r0, #0x80 ; Clear IRQ Disable
  42.     msr cpsr_c, r0
  43.  
  44.     ldr r1, [TIMER_BASE]
  45.     add r1, TIMER_CR
  46.     mov r0, #0
  47.     str r0, [r1]
  48.  
  49.     ldr r0, [TIMER_COUNT]
  50.     ldr r1, [TIMER_BASE]
  51.     ldr r2, [TIMER_BGLOAD]
  52.     str r0, [r1]
  53.     str r0, [r2]
  54.    
  55.     ldr r1, [TIMER_BASE]
  56.     add r1, TIMER_INTCLR
  57.     mov r2, #0
  58.     str r2, [r1]
  59.  
  60.     mov r0, #0xE2 ; Timer Enable, Periodic Mode, IRQ ON, Prescale = 0, 32 bit, Wrapping Mode
  61.     ldr r1, [TIMER_BASE]
  62.     add r1, TIMER_CR
  63.     str r0, [r1]
  64.  
  65.     mov r0, #0x10
  66.     ldr r1, [VIC_INTENABLE]
  67.     str r0, [r1]
  68.                
  69.     b  mainloop
  70.     TIMER_BASE: dd 0x101E2000
  71.     TIMER_COUNT: dd 1000000
  72.     VIC_BASE: dd 0x10140000
  73.     VIC_IRQSTATUS: dd (0x10140000 + 0x00)
  74.     VIC_FIGSTATUS: dd (0x10140000 + 0x04)
  75.     VIC_RAWINTR:   dd (0x10140000 + 0x08)
  76.     VIC_INTSELECT: dd (0x10140000 + 0x0C)
  77.     VIC_INTENABLE: dd (0x10140000 + 0x10)
  78.     VIC_INTCLEAR:  dd (0x10140000 + 0x14)
  79.     VIC_SOFTINT:   dd (0x10140000 + 0x18)
  80.  
  81. hang:
  82.     b hang
  83. ;****************************************
  84. ;*            Kernel Mainloop           *
  85. ;****************************************
  86. mainloop:
  87. ;    ldr r1, [pc, 4]
  88. ;    bl uart_put32
  89. ;    b mainloop
  90. ;    dd 0x50505050
  91.  
  92.      ldr r0, [TIMER_BASE]
  93.      add r0, TIMER_CVR
  94.      ldr r1, [r0]
  95.      bl uart_put32
  96.      b mainloop
  97. ;****************************************
  98. ;* UART Write 32 Bit Value              *
  99. ;* Input: R1 Value to be written        *
  100. ;* Output: None                         *
  101. ;****************************************
  102. uart_put32:
  103.     ldr r0, [pc, 4]   ; PC + 16
  104.     str r1, [r0]
  105.     bx lr
  106.     dd 0x101f1000
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement