]> git.sur5r.net Git - freertos/blob - FreeRTOS/Source/portable/GCC/ColdFire_V2/portasm.S
Update to MIT licensed FreeRTOS V10.0.0 - see https://www.freertos.org/History.txt
[freertos] / FreeRTOS / Source / portable / GCC / ColdFire_V2 / portasm.S
1 /*\r
2  * FreeRTOS Kernel V10.0.0\r
3  * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
6  * this software and associated documentation files (the "Software"), to deal in\r
7  * the Software without restriction, including without limitation the rights to\r
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
9  * the Software, and to permit persons to whom the Software is furnished to do so,\r
10  * subject to the following conditions:\r
11  *\r
12  * The above copyright notice and this permission notice shall be included in all\r
13  * copies or substantial portions of the Software. If you wish to use our Amazon\r
14  * FreeRTOS name, please do so in a fair use way that does not cause confusion.\r
15  *\r
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
18  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
19  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
20  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
22  *\r
23  * http://www.FreeRTOS.org\r
24  * http://aws.amazon.com/freertos\r
25  *\r
26  * 1 tab == 4 spaces!\r
27  */\r
28 \r
29 /*\r
30  * Purpose: Lowest level routines for all ColdFire processors.\r
31  *\r
32  * Notes:\r
33  * \r
34  * ulPortSetIPL() and mcf5xxx_wr_cacr() copied with permission from FreeScale\r
35  * supplied source files.\r
36  */\r
37 \r
38     .global ulPortSetIPL\r
39     .global mcf5xxx_wr_cacr\r
40     .global __cs3_isr_interrupt_80\r
41     .global vPortStartFirstTask\r
42 \r
43     .text\r
44 \r
45 .macro portSAVE_CONTEXT\r
46 \r
47         lea.l           (-60, %sp), %sp\r
48         movem.l         %d0-%fp, (%sp)\r
49         move.l          pxCurrentTCB, %a0\r
50         move.l          %sp, (%a0)\r
51 \r
52         .endm\r
53 \r
54 .macro portRESTORE_CONTEXT\r
55 \r
56         move.l          pxCurrentTCB, %a0\r
57         move.l          (%a0), %sp\r
58         movem.l         (%sp), %d0-%fp\r
59         lea.l           %sp@(60), %sp\r
60         rte\r
61 \r
62         .endm\r
63 \r
64 /********************************************************************/\r
65 /*\r
66  * This routines changes the IPL to the value passed into the routine.\r
67  * It also returns the old IPL value back.\r
68  * Calling convention from C:\r
69  *   old_ipl = asm_set_ipl(new_ipl);\r
70  * For the Diab Data C compiler, it passes return value thru D0.\r
71  * Note that only the least significant three bits of the passed\r
72  * value are used.\r
73  */\r
74 \r
75 ulPortSetIPL:\r
76     link    A6,#-8\r
77     movem.l D6-D7,(SP)\r
78 \r
79     move.w  SR,D7       /* current sr    */\r
80 \r
81     move.l  D7,D0       /* prepare return value  */\r
82     andi.l  #0x0700,D0  /* mask out IPL  */\r
83     lsr.l   #8,D0       /* IPL   */\r
84 \r
85     move.l  8(A6),D6    /* get argument  */\r
86     andi.l  #0x07,D6    /* least significant three bits  */\r
87     lsl.l   #8,D6       /* move over to make mask    */\r
88 \r
89     andi.l  #0x0000F8FF,D7  /* zero out current IPL  */\r
90     or.l    D6,D7           /* place new IPL in sr   */\r
91     move.w  D7,SR\r
92 \r
93     movem.l (SP),D6-D7\r
94     lea     8(SP),SP\r
95     unlk    A6\r
96     rts\r
97 /********************************************************************/\r
98 \r
99 mcf5xxx_wr_cacr:\r
100     move.l  4(sp),d0\r
101     .long   0x4e7b0002  /* movec d0,cacr   */\r
102     nop\r
103     rts\r
104 \r
105 /********************************************************************/\r
106 \r
107 /* Yield interrupt. */\r
108 __cs3_isr_interrupt_80:\r
109         portSAVE_CONTEXT\r
110         jsr vPortYieldHandler\r
111         portRESTORE_CONTEXT\r
112 \r
113 /********************************************************************/\r
114 \r
115 \r
116 vPortStartFirstTask:\r
117         portRESTORE_CONTEXT\r
118 \r
119     .end\r
120 \r
121 \r