Advertisement
Guest User

template.s

a guest
Dec 3rd, 2018
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 13.11 KB | None | 0 0
  1. ;            Computer Architectures - 02LSEOV 02LSEOQ            ;
  2. ; author:       Paolo BERNARDI - Politecnico di Torino           ;
  3. ; creation:     11 November 2018                                 ;
  4. ; last update:  13 November 2018                                 ;
  5. ; functionalities:                                               ;
  6. ;       nothing but bringing to the reset handler                ;
  7.  
  8. ; *------- <<< Use Configuration Wizard in Context Menu >>> ------------------
  9.  
  10. ; <h> Stack Configuration
  11. ;   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
  12. ; </h>
  13.  
  14. Stack_Size      EQU     0x00000200
  15.  
  16.                 AREA    STACK, NOINIT, READWRITE, ALIGN=3
  17. Stack_Mem       SPACE   Stack_Size
  18. __initial_sp
  19.  
  20.  
  21. ; <h> Heap Configuration
  22. ;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
  23. ; </h>
  24.  
  25. Heap_Size       EQU     0x00000200
  26.  
  27.                 AREA    HEAP, NOINIT, READWRITE, ALIGN=3
  28. __heap_base
  29. Heap_Mem        SPACE   Heap_Size
  30. __heap_limit
  31.  
  32.                 AREA    DATA, NOINIT, READWRITE, ALIGN=3
  33. __List__        SPACE   256
  34.  
  35.                 PRESERVE8
  36.                 THUMB
  37.  
  38.  
  39. ; Vector Table Mapped to Address 0 at Reset
  40.  
  41.                 AREA    RESET, DATA, READONLY
  42.                 EXPORT  __Vectors
  43.  
  44. __Vectors       DCD     __initial_sp              ; Top of Stack
  45.                 DCD     Reset_Handler             ; Reset Handler
  46.                 DCD     NMI_Handler               ; NMI Handler
  47.                 DCD     HardFault_Handler         ; Hard Fault Handler
  48.                 DCD     MemManage_Handler         ; MPU Fault Handler
  49.                 DCD     BusFault_Handler          ; Bus Fault Handler
  50.                 DCD     UsageFault_Handler        ; Usage Fault Handler
  51.                 DCD     0                         ; Reserved
  52.                 DCD     0                         ; Reserved
  53.                 DCD     0                         ; Reserved
  54.                 DCD     0                         ; Reserved
  55.                 DCD     SVC_Handler               ; SVCall Handler
  56.                 DCD     DebugMon_Handler          ; Debug Monitor Handler
  57.                 DCD     0                         ; Reserved
  58.                 DCD     PendSV_Handler            ; PendSV Handler
  59.                 DCD     SysTick_Handler           ; SysTick Handler
  60.  
  61.                 ; External Interrupts
  62.                 DCD     WDT_IRQHandler            ; 16: Watchdog Timer
  63.                 DCD     TIMER0_IRQHandler         ; 17: Timer0
  64.                 DCD     TIMER1_IRQHandler         ; 18: Timer1
  65.                 DCD     TIMER2_IRQHandler         ; 19: Timer2
  66.                 DCD     TIMER3_IRQHandler         ; 20: Timer3
  67.                 DCD     UART0_IRQHandler          ; 21: UART0
  68.                 DCD     UART1_IRQHandler          ; 22: UART1
  69.                 DCD     UART2_IRQHandler          ; 23: UART2
  70.                 DCD     UART3_IRQHandler          ; 24: UART3
  71.                 DCD     PWM1_IRQHandler           ; 25: PWM1
  72.                 DCD     I2C0_IRQHandler           ; 26: I2C0
  73.                 DCD     I2C1_IRQHandler           ; 27: I2C1
  74.                 DCD     I2C2_IRQHandler           ; 28: I2C2
  75.                 DCD     SPI_IRQHandler            ; 29: SPI
  76.                 DCD     SSP0_IRQHandler           ; 30: SSP0
  77.                 DCD     SSP1_IRQHandler           ; 31: SSP1
  78.                 DCD     PLL0_IRQHandler           ; 32: PLL0 Lock (Main PLL)
  79.                 DCD     RTC_IRQHandler            ; 33: Real Time Clock
  80.                 DCD     EINT0_IRQHandler          ; 34: External Interrupt 0
  81.                 DCD     EINT1_IRQHandler          ; 35: External Interrupt 1
  82.                 DCD     EINT2_IRQHandler          ; 36: External Interrupt 2
  83.                 DCD     EINT3_IRQHandler          ; 37: External Interrupt 3
  84.                 DCD     ADC_IRQHandler            ; 38: A/D Converter
  85.                 DCD     BOD_IRQHandler            ; 39: Brown-Out Detect
  86.                 DCD     USB_IRQHandler            ; 40: USB
  87.                 DCD     CAN_IRQHandler            ; 41: CAN
  88.                 DCD     DMA_IRQHandler            ; 42: General Purpose DMA
  89.                 DCD     I2S_IRQHandler            ; 43: I2S
  90.                 DCD     ENET_IRQHandler           ; 44: Ethernet
  91.                 DCD     RIT_IRQHandler            ; 45: Repetitive Interrupt Timer
  92.                 DCD     MCPWM_IRQHandler          ; 46: Motor Control PWM
  93.                 DCD     QEI_IRQHandler            ; 47: Quadrature Encoder Interface
  94.                 DCD     PLL1_IRQHandler           ; 48: PLL1 Lock (USB PLL)
  95.                 DCD     USBActivity_IRQHandler    ; 49: USB Activity interrupt to wakeup
  96.                 DCD     CANActivity_IRQHandler    ; 50: CAN Activity interrupt to wakeup
  97.  
  98.  
  99.                 IF      :LNOT::DEF:NO_CRP
  100.                 AREA    |.ARM.__at_0x02FC|, CODE, READONLY
  101. CRP_Key         DCD     0xFFFFFFFF
  102.                 ENDIF
  103.  
  104.  
  105.                 AREA    |.text|, CODE, READONLY
  106.  
  107.  
  108. ; Reset Handler
  109.  
  110. Reset_Handler   PROC
  111.                 EXPORT  Reset_Handler             [WEAK]                                            
  112.                 LDR     R0, =Reset_Handler
  113.                
  114.                 ; your code here
  115.                 LDR     R0, =__List__
  116.                 LDR     R1, =Price_list
  117.                 LDR     R2, =0
  118. _memcpy_loop    LDR     R3, [R1, R2, LSL #2]
  119.                 STR     R3, [R0, R2, LSL #2]
  120.                 ADD     R2, R2, #1
  121.                 CMP     R2, #56
  122.                 BNE     _memcpy_loop
  123.                
  124.                 LDR     R1, =0                  ; R1 = i
  125. _i_loop         LDR     R2, =0                  ; R2 = j
  126.                 LDR     R3, =28                 ; R3 = n
  127.                
  128. _j_loop         LDR     R4, [R0, R2, LSL #3]    ; R4 = list[j]
  129.                 ADD     R5, R2, #1
  130.                 LDR     R6, [R0, R5, LSL #3]    ; R5 = list[j+1]
  131.                
  132.                 CMP     R6, R4
  133.                 BLO     _Swap_
  134. _Pin_           ADD     R2, R2, #1
  135.                 SUB     R12, R3, R1
  136.                 SUB     R12, R12, #1            ; R12 <- n-i-1
  137.                 CMP     R2, R12
  138.                 BLO     _j_loop
  139.                 ADD     R1, R1, #1
  140.                 SUB     R7, R3, #1
  141.                 CMP     R1, R7
  142.                 BLO     _i_loop
  143.                 B       _Sorted_
  144.                
  145. _Swap_          ADD     R7, R4, #0              ; R7 = tmp = list[j]
  146.                 LSL     R8, R2, #3
  147.                 ADD     R8, R8, #4
  148.                 LDR     R9, [R0, R8]            ; R9 = list[j] -> data
  149.                 LSL     R11, R5, #3
  150.                 ADD     R11, R11, #4
  151.                 LDR     R10, [R0, R11]          ; R10 = list[j+1] -> data
  152.                
  153.                 STR     R6, [R0, R2, LSL #3]    ; list[j] <- list[j+1]
  154.                 STR     R10, [R0, R8]
  155.  
  156.                 STR     R7, [R0, R5, LSL #3]    ; list[j+1] <- list[j]
  157.                 STR     R9, [R0, R11]
  158.                 B       _Pin_
  159.                
  160.                 ; copy and paste
  161. _Sorted_        LDR     R10, =0                     ; R10 = 0
  162.                 LDR     R0, =__List__               ; R0 <-- address of __List__
  163.                 LDR     R1, =Item_list              ; R1 <-- address of Item_list
  164.                 LDR     R2, =4                      ; R2 = 4
  165.  
  166. __Loop          LDR     R3, [R1]                    ; R3 = [Item_List] = key
  167.  
  168. __BinarySearch  LDR     R4, =0                      ; R4 = first = 0
  169.                 LDR     R5, =27                     ; R5 = last = 27
  170.                
  171. __BS_Loop       ADD     R6, R4, R5
  172.                 LSR     R6, R6, #1                  ; R6 = middle = (first + last) / 2
  173.  
  174.                 LDR     R7, [R0, R6, LSL #3]        ; R7 = table[middle]
  175.                 CMP     R3, R7
  176.                 BEQ     __Index_Found
  177.                
  178.                 SUBLO   R5, R6, #1                  ; if (table[middle] < key) last = middle - 1
  179.                 ADDHS   R4, R6, #1                  ; if (table[middle] >= key) first = middle + 1
  180.                
  181.                 CMP     R4, R5
  182.                 BLS     __BS_Loop              
  183.                
  184. __Index_Found   LDR     R12, [R0, R6, LSL #3]       ; R12 = table[index]
  185.                 CMP     R12, R3
  186.                 MOVNE   R10, #0
  187.                 BNE     InfLoop
  188.                 LSL     R6, R6, #3                  ; index *= 8
  189.                 ADD     R6, R6, #4                  ; index += 4
  190.                 LDR     R8, [R0, R6]                ; R8 = price
  191.                 ADD     R1, R1, #4
  192.                 LDR     R9, [R1]                    ; R9 = amount
  193.                 MUL     R11, R8, R9
  194.                 ADD     R10, R10, R11               ; R10 += price*amount
  195.                 ADD     R1, R1, #4
  196.                 SUB     R2, R2, #1
  197.                 CMP     R2, #0
  198.                 BNE     __Loop
  199.            
  200. InfLoop         B       InfLoop
  201.                 ENDP
  202.  
  203. ; --- Sorted price_list ---
  204.  
  205. S_Price_list    DCD 0x004, 120,  0x006, 315,  0x007, 1210, 0x00A, 245          
  206.                 DCD 0x010, 228,  0x012, 7,    0x016, 722,  0x017, 1217
  207.                 DCD 0x018, 138,  0x01A, 2222, 0x01B, 34,   0x01E, 11
  208.                 DCD 0x022, 223,  0x023, 1249, 0x025, 240,  0x027, 112
  209.                 DCD 0x02C, 2245, 0x02D, 410,  0x031, 840,  0x033, 945
  210.                 DCD 0x036, 3211, 0x039, 112,  0x03C, 719,  0x03E, 661
  211.                 DCD 0x042, 230,  0x045, 1112, 0x047, 2627, 0x04A, 265
  212.  
  213. Price_list      DCD 0x006, 315,  0x004, 120,  0x007, 1210, 0x03E, 661          
  214.                 DCD 0x010, 228,  0x012, 7,    0x016, 722,  0x017, 1217
  215.                 DCD 0x018, 138,  0x01A, 2222, 0x01B, 34,   0x01E, 11
  216.                 DCD 0x023, 1249, 0x022, 223,  0x025, 240,  0x027, 112
  217.                 DCD 0x02C, 2245, 0x02D, 410,  0x031, 840,  0x033, 945
  218.                 DCD 0x036, 3211, 0x039, 112,  0x03C, 719,  0x00A, 245
  219.                 DCD 0x042, 230,  0x045, 1112, 0x047, 2627, 0x04A, 265
  220.                    
  221. Item_list       DCD 0x022, 14, 0x006, 431, 0x03E, 1210, 0x017, 56342
  222. Item_num        DCB 4
  223.  
  224.  
  225. ; Dummy Exception Handlers (infinite loops which can be modified)
  226.  
  227. NMI_Handler     PROC
  228.                 EXPORT  NMI_Handler               [WEAK]
  229.                 B       .
  230.                 ENDP
  231. HardFault_Handler\
  232.                 PROC
  233.                 EXPORT  HardFault_Handler         [WEAK]
  234.                 B       .
  235.                 ENDP
  236. MemManage_Handler\
  237.                 PROC
  238.                 EXPORT  MemManage_Handler         [WEAK]
  239.                 B       .
  240.                 ENDP
  241. BusFault_Handler\
  242.                 PROC
  243.                 EXPORT  BusFault_Handler          [WEAK]
  244.                 B       .
  245.                 ENDP
  246. UsageFault_Handler\
  247.                 PROC
  248.                 EXPORT  UsageFault_Handler        [WEAK]
  249.                 B       .
  250.                 ENDP
  251. SVC_Handler     PROC
  252.                 EXPORT  SVC_Handler               [WEAK]
  253.                 B       .
  254.                 ENDP
  255. DebugMon_Handler\
  256.                 PROC
  257.                 EXPORT  DebugMon_Handler          [WEAK]
  258.                 B       .
  259.                 ENDP
  260. PendSV_Handler  PROC
  261.                 EXPORT  PendSV_Handler            [WEAK]
  262.                 B       .
  263.                 ENDP
  264. SysTick_Handler PROC
  265.                 EXPORT  SysTick_Handler           [WEAK]
  266.                 B       .
  267.                 ENDP
  268.  
  269. Default_Handler PROC
  270.  
  271.                 EXPORT  WDT_IRQHandler            [WEAK]
  272.                 EXPORT  TIMER0_IRQHandler         [WEAK]
  273.                 EXPORT  TIMER1_IRQHandler         [WEAK]
  274.                 EXPORT  TIMER2_IRQHandler         [WEAK]
  275.                 EXPORT  TIMER3_IRQHandler         [WEAK]
  276.                 EXPORT  UART0_IRQHandler          [WEAK]
  277.                 EXPORT  UART1_IRQHandler          [WEAK]
  278.                 EXPORT  UART2_IRQHandler          [WEAK]
  279.                 EXPORT  UART3_IRQHandler          [WEAK]
  280.                 EXPORT  PWM1_IRQHandler           [WEAK]
  281.                 EXPORT  I2C0_IRQHandler           [WEAK]
  282.                 EXPORT  I2C1_IRQHandler           [WEAK]
  283.                 EXPORT  I2C2_IRQHandler           [WEAK]
  284.                 EXPORT  SPI_IRQHandler            [WEAK]
  285.                 EXPORT  SSP0_IRQHandler           [WEAK]
  286.                 EXPORT  SSP1_IRQHandler           [WEAK]
  287.                 EXPORT  PLL0_IRQHandler           [WEAK]
  288.                 EXPORT  RTC_IRQHandler            [WEAK]
  289.                 EXPORT  EINT0_IRQHandler          [WEAK]
  290.                 EXPORT  EINT1_IRQHandler          [WEAK]
  291.                 EXPORT  EINT2_IRQHandler          [WEAK]
  292.                 EXPORT  EINT3_IRQHandler          [WEAK]
  293.                 EXPORT  ADC_IRQHandler            [WEAK]
  294.                 EXPORT  BOD_IRQHandler            [WEAK]
  295.                 EXPORT  USB_IRQHandler            [WEAK]
  296.                 EXPORT  CAN_IRQHandler            [WEAK]
  297.                 EXPORT  DMA_IRQHandler            [WEAK]
  298.                 EXPORT  I2S_IRQHandler            [WEAK]
  299.                 EXPORT  ENET_IRQHandler           [WEAK]
  300.                 EXPORT  RIT_IRQHandler            [WEAK]
  301.                 EXPORT  MCPWM_IRQHandler          [WEAK]
  302.                 EXPORT  QEI_IRQHandler            [WEAK]
  303.                 EXPORT  PLL1_IRQHandler           [WEAK]
  304.                 EXPORT  USBActivity_IRQHandler    [WEAK]
  305.                 EXPORT  CANActivity_IRQHandler    [WEAK]
  306.  
  307. WDT_IRQHandler
  308. TIMER0_IRQHandler
  309. TIMER1_IRQHandler
  310. TIMER2_IRQHandler
  311. TIMER3_IRQHandler
  312. UART0_IRQHandler
  313. UART1_IRQHandler
  314. UART2_IRQHandler
  315. UART3_IRQHandler
  316. PWM1_IRQHandler
  317. I2C0_IRQHandler
  318. I2C1_IRQHandler
  319. I2C2_IRQHandler
  320. SPI_IRQHandler
  321. SSP0_IRQHandler
  322. SSP1_IRQHandler
  323. PLL0_IRQHandler
  324. RTC_IRQHandler
  325. EINT0_IRQHandler
  326. EINT1_IRQHandler
  327. EINT2_IRQHandler
  328. EINT3_IRQHandler
  329. ADC_IRQHandler
  330. BOD_IRQHandler
  331. USB_IRQHandler
  332. CAN_IRQHandler
  333. DMA_IRQHandler
  334. I2S_IRQHandler
  335. ENET_IRQHandler
  336. RIT_IRQHandler
  337. MCPWM_IRQHandler
  338. QEI_IRQHandler
  339. PLL1_IRQHandler
  340. USBActivity_IRQHandler
  341. CANActivity_IRQHandler
  342.  
  343.                 B       .
  344.  
  345.                 ENDP
  346.  
  347.  
  348.                 ALIGN
  349.  
  350.  
  351. ; User Initial Stack & Heap
  352.  
  353.                 EXPORT  __initial_sp
  354.                 EXPORT  __heap_base
  355.                 EXPORT  __heap_limit                
  356.  
  357.                 END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement