OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Source/] [portable/] [GCC/] [OpenRISC/] [portasm.S] - Blame information for rev 621

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 572 jeremybenn
#include "port_spr_defs.h"
2
 
3
        .file           "portasm.S"
4
        .section        .text
5
 
6
.text
7
.global vPortDisableInterrupts
8
.type   vPortDisableInterrupts, %function
9
vPortDisableInterrupts:
10
        l.mfspr r3, r0, SPR_SR          # get current SR
11
        l.addi  r4, r0, SPR_SR_TEE
12
        l.xori  r4, r4, 0xffffffff
13
        l.and   r3, r3, r4                      # disable Tick Timer Interrupt
14
        l.addi  r4, r0, SPR_SR_IEE
15
        l.xori  r4, r4, 0xffffffff
16
        l.and   r3, r3, r4                      # disable External Interrupt
17
        l.mtspr r0, r3, SPR_SR          # update SR
18
        l.jr    r9
19
.size   vPortDisableInterrupts, .-vPortDisableInterrupts
20
 
21
 
22
.text
23
.global vPortEnableInterrupts
24
.type   vPortEnableInterrupts, %function
25
vPortEnableInterrupts:
26
        l.mfspr r3, r0, SPR_SR          # get current SR
27
        l.ori   r3, r3, SPR_SR_TEE      # enable Tick Timer Interrup
28
        l.ori   r3, r3, SPR_SR_IEE      # enable External Interrupt
29
        l.mtspr r0, r3, SPR_SR          # update SR
30
        l.jr    r9
31
.size   vPortEnableInterrupts, .-vPortEnableInterrupts
32
 
33 621 filepang
 
34
.macro portSAVE_REGISTER
35
        l.addi  r1, r1, -116
36
        l.sw    0x00(r1), r3
37
        l.sw    0x04(r1), r4
38
        l.sw    0x08(r1), r5
39
        l.sw    0x0c(r1), r6
40
        l.sw    0x10(r1), r7
41
        l.sw    0x14(r1), r8
42
        l.sw    0x18(r1), r9
43
        l.sw    0x1c(r1), r10
44
        l.sw    0x20(r1), r11
45
        l.sw    0x24(r1), r12
46
        l.sw    0x28(r1), r13
47
        l.sw    0x2c(r1), r14
48
        l.sw    0x30(r1), r15
49
        l.sw    0x34(r1), r16
50
        l.sw    0x38(r1), r17
51
        l.sw    0x3c(r1), r18
52
        l.sw    0x40(r1), r19
53
        l.sw    0x44(r1), r20
54
        l.sw    0x48(r1), r21
55
        l.sw    0x4c(r1), r22
56
        l.sw    0x50(r1), r23
57
        l.sw    0x54(r1), r24
58
        l.sw    0x58(r1), r25
59
        l.sw    0x5c(r1), r26
60
        l.sw    0x60(r1), r27
61
        l.sw    0x64(r1), r28
62
        l.sw    0x68(r1), r29
63
        l.sw    0x6c(r1), r30
64
        l.sw    0x70(r1), r31
65
.endm
66
 
67
 
68
.macro portRESTORE_REGISTER
69
        l.lwz   r3 , 0x00(r1)
70
        l.lwz   r4 , 0x04(r1)
71
        l.lwz   r5 , 0x08(r1)
72
        l.lwz   r6 , 0x0c(r1)
73
        l.lwz   r7 , 0x10(r1)
74
        l.lwz   r8 , 0x14(r1)
75
        l.lwz   r9 , 0x18(r1)
76
        l.lwz   r10, 0x1c(r1)
77
        l.lwz   r11, 0x20(r1)
78
        l.lwz   r12, 0x24(r1)
79
        l.lwz   r13, 0x28(r1)
80
        l.lwz   r14, 0x2c(r1)
81
        l.lwz   r15, 0x30(r1)
82
        l.lwz   r16, 0x34(r1)
83
        l.lwz   r17, 0x38(r1)
84
        l.lwz   r18, 0x3c(r1)
85
        l.lwz   r19, 0x40(r1)
86
        l.lwz   r20, 0x44(r1)
87
        l.lwz   r21, 0x48(r1)
88
        l.lwz   r22, 0x4c(r1)
89
        l.lwz   r23, 0x50(r1)
90
        l.lwz   r24, 0x54(r1)
91
        l.lwz   r25, 0x58(r1)
92
        l.lwz   r26, 0x5c(r1)
93
        l.lwz   r27, 0x60(r1)
94
        l.lwz   r28, 0x64(r1)
95
        l.lwz   r29, 0x68(r1)
96
        l.lwz   r30, 0x6c(r1)
97
        l.lwz   r31, 0x70(r1)
98
        l.addi  r1, r1, 116
99
.endm
100
 
101
 
102
.macro portSAVE_CONTEXT
103 572 jeremybenn
        .global pxCurrentTCB
104
        # make rooms in stack
105
        l.addi  r1, r1, -128
106
        # early save r3-r5, these are clobber register
107
        l.sw    0x08(r1), r3
108
        l.sw    0x0C(r1), r4
109
        l.sw    0x10(r1), r5
110
        # save SPR_ESR_BASE(0), SPR_EPCR_BASE(0)
111 621 filepang
        l.mfspr r3, r0, SPR_ESR_BASE
112
        l.mfspr r4, r0, SPR_EPCR_BASE
113 572 jeremybenn
        l.sw    0x78(r1), r3
114
        l.sw    0x7C(r1), r4
115
        l.sw    0x00(r1), r9
116
        # Save Context
117
        l.sw    0x04(r1), r2
118
        l.sw    0x14(r1), r6
119
        l.sw    0x18(r1), r7
120
        l.sw    0x1C(r1), r8
121
        l.sw    0x20(r1), r10
122
        l.sw    0x24(r1), r11
123
        l.sw    0x28(r1), r12
124
        l.sw    0x2C(r1), r13
125
        l.sw    0x30(r1), r14
126
        l.sw    0x34(r1), r15
127
        l.sw    0x38(r1), r16
128
        l.sw    0x3C(r1), r17
129
        l.sw    0x40(r1), r18
130
        l.sw    0x44(r1), r19
131
        l.sw    0x48(r1), r20
132
        l.sw    0x4C(r1), r21
133
        l.sw    0x50(r1), r22
134
        l.sw    0x54(r1), r23
135
        l.sw    0x58(r1), r24
136
        l.sw    0x5C(r1), r25
137
        l.sw    0x60(r1), r26
138
        l.sw    0x64(r1), r27
139
        l.sw    0x68(r1), r28
140
        l.sw    0x6C(r1), r29
141
        l.sw    0x70(r1), r30
142
        l.sw    0x74(r1), r31
143
        # Save the top of stack in TCB
144
        l.movhi r3, hi(pxCurrentTCB)
145
        l.ori   r3, r3, lo(pxCurrentTCB)
146
        l.lwz   r3, 0x0(r3)
147
        l.sw    0x0(r3), r1
148
        # restore clobber register
149
        l.lwz   r3, 0x08(r1)
150
        l.lwz   r4, 0x0C(r1)
151
        l.lwz   r5, 0x10(r1)
152 621 filepang
.endm
153 572 jeremybenn
 
154 621 filepang
 
155
.macro portRESTORE_CONTEXT
156 572 jeremybenn
        l.movhi r3, hi(pxCurrentTCB)
157
        l.ori   r3, r3, lo(pxCurrentTCB)
158
        l.lwz   r3, 0x0(r3)
159
        l.lwz   r1, 0x0(r3)
160
        # restore context
161
        l.lwz   r9, 0x00(r1)
162
        l.lwz   r2, 0x04(r1)
163
        l.lwz   r6, 0x14(r1)
164
        l.lwz   r7, 0x18(r1)
165
        l.lwz   r8, 0x1C(r1)
166
        l.lwz   r10, 0x20(r1)
167
        l.lwz   r11, 0x24(r1)
168
        l.lwz   r12, 0x28(r1)
169
        l.lwz   r13, 0x2C(r1)
170
        l.lwz   r14, 0x30(r1)
171
        l.lwz   r15, 0x34(r1)
172
        l.lwz   r16, 0x38(r1)
173
        l.lwz   r17, 0x3C(r1)
174
        l.lwz   r18, 0x40(r1)
175
        l.lwz   r19, 0x44(r1)
176
        l.lwz   r20, 0x48(r1)
177
        l.lwz   r21, 0x4C(r1)
178
        l.lwz   r22, 0x50(r1)
179
        l.lwz   r23, 0x54(r1)
180
        l.lwz   r24, 0x58(r1)
181
        l.lwz   r25, 0x5C(r1)
182
        l.lwz   r26, 0x60(r1)
183
        l.lwz   r27, 0x64(r1)
184
        l.lwz   r28, 0x68(r1)
185
        l.lwz   r29, 0x6C(r1)
186
        l.lwz   r30, 0x70(r1)
187
        l.lwz   r31, 0x74(r1)
188
        # restore SPR_ESR_BASE(0), SPR_EPCR_BASE(0)
189
        l.lwz   r3, 0x78(r1)
190
        l.lwz   r4, 0x7C(r1)
191 621 filepang
        l.mtspr r0, r3, SPR_ESR_BASE
192
        l.mtspr r0, r4, SPR_EPCR_BASE
193 572 jeremybenn
        # restore clobber register
194
        l.lwz   r3, 0x08(r1)
195
        l.lwz   r4, 0x0C(r1)
196
        l.lwz   r5, 0x10(r1)
197
        l.addi  r1, r1, 128
198
        l.rfe
199
        l.nop
200 621 filepang
.endm
201 572 jeremybenn
 
202
 
203 621 filepang
.text
204
.global vPortTickHandler
205
.type   vPortTickHandler, %function
206
vPortTickHandler:
207
        portSAVE_CONTEXT
208
 
209
        l.mfspr r3, r0, SPR_TTMR
210
        l.movhi r4, hi(SPR_TTMR_IP)
211
        l.ori   r4, r4, lo(SPR_TTMR_IP)
212
        l.xori  r4, r4, 0xffffffff
213
        l.and   r3, r3, r4                              # clear tick timer interrupt
214
        l.mtspr r0, r3, SPR_TTMR
215 572 jeremybenn
 
216 621 filepang
        l.jal   vTaskIncrementTick
217
        l.nop
218
.if configUSE_PREEMPTION == 0
219
        # do nothing
220
.else
221
        l.jal   vTaskSwitchContext
222
        l.nop
223
.endif
224
 
225
        portRESTORE_CONTEXT
226
.size   vPortTickHandler, .-vPortTickHandler
227
 
228
 
229 572 jeremybenn
.text
230 621 filepang
.global vPortSystemCall
231
.type   vPortSystemCall, %function
232
vPortSystemCall:
233
        l.sfeqi r11, 0xFCC
234
        l.bf    1f
235
        l.nop
236
 
237
        l.sw    -120(r1), r11
238
        l.lwz   r11, -4(r1)
239
        portSAVE_REGISTER
240 572 jeremybenn
 
241 621 filepang
        l.jal   syscall_except
242
        l.lwz   r3, -4(r1)
243
 
244
        portRESTORE_REGISTER
245
        l.rfe
246 572 jeremybenn
        l.nop
247 621 filepang
 
248
1:
249
        l.sw    -132(r1), r11
250
        l.lwz   r11, -4(r1)
251
        portSAVE_CONTEXT
252
 
253
        l.jal   syscall_except
254
        l.lwz   r3, -4(r1)
255
 
256
        portRESTORE_CONTEXT
257
.size   vPortSystemCall, .-vPortSystemCall
258
 
259
 
260
.text
261
.global vPortExtIntHandler
262
.type   vPortExtIntHandler, %function
263
vPortExtIntHandler:
264
        portSAVE_CONTEXT
265
 
266
    l.jal       int_main
267
        l.nop
268
 
269
.if configUSE_PREEMPTION == 0
270
        # do nothing
271
.else
272 572 jeremybenn
        l.jal   vTaskSwitchContext
273
        l.nop
274 621 filepang
.endif
275 572 jeremybenn
 
276 621 filepang
        portRESTORE_CONTEXT
277
.size   vPortExtIntHandler, .-vPortExtIntHandler
278 572 jeremybenn
 
279 621 filepang
 
280
.text
281
.global vPortMiscIntHandler
282
.type   vPortMiscIntHandler, %function
283
vPortMiscIntHandler:
284
        portSAVE_CONTEXT
285
 
286
    l.jal       misc_int_handler
287
        l.lwz   r3, -4(r1)
288
 
289
.if configUSE_PREEMPTION == 0
290
        # do nothing
291
.else
292
        l.jal   vTaskSwitchContext
293
        l.nop
294
.endif
295
 
296
        portRESTORE_CONTEXT
297
.size   vPortMiscIntHandler, .-vPortMiscIntHandler

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.