]> git.sur5r.net Git - freertos/blob - FreeRTOS/Source/portable/CodeWarrior/ColdFire_V2/portasm.S
Update version number in readiness for V10.3.0 release. Sync SVN with reviewed releas...
[freertos] / FreeRTOS / Source / portable / CodeWarrior / ColdFire_V2 / portasm.S
1 /*\r
2  * FreeRTOS Kernel V10.3.0\r
3  * Copyright (C) 2020 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.\r
14  *\r
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
21  *\r
22  * http://www.FreeRTOS.org\r
23  * http://aws.amazon.com/freertos\r
24  *\r
25  * 1 tab == 4 spaces!\r
26  */\r
27 \r
28 /*\r
29  * Purpose: Lowest level routines for all ColdFire processors.\r
30  *\r
31  * Notes:\r
32  * \r
33  * ulPortSetIPL() and mcf5xxx_wr_cacr() copied with permission from FreeScale\r
34  * supplied source files.\r
35  */\r
36 \r
37     .global ulPortSetIPL\r
38     .global _ulPortSetIPL\r
39     .global mcf5xxx_wr_cacrx\r
40     .global _mcf5xxx_wr_cacrx\r
41     .global vPortYieldISR\r
42     .global _vPortYieldISR\r
43     .global vPortStartFirstTask\r
44     .global _vPortStartFirstTask\r
45     .extern _pxCurrentTCB\r
46     .extern _vPortYieldHandler\r
47 \r
48     .text\r
49 \r
50 .macro portSAVE_CONTEXT\r
51 \r
52         lea.l           (-60, sp), sp\r
53         movem.l         d0-a6, (sp)\r
54         move.l          _pxCurrentTCB, a0\r
55         move.l          sp, (a0)\r
56 \r
57         .endm\r
58 \r
59 .macro portRESTORE_CONTEXT\r
60 \r
61         move.l          _pxCurrentTCB, a0\r
62         move.l          (a0), sp\r
63         movem.l         (sp), d0-a6\r
64         lea.l           (60, sp), sp\r
65         rte\r
66 \r
67         .endm\r
68 \r
69 /********************************************************************/\r
70 /*\r
71  * This routines changes the IPL to the value passed into the routine.\r
72  * It also returns the old IPL value back.\r
73  * Calling convention from C:\r
74  *   old_ipl = asm_set_ipl(new_ipl);\r
75  * For the Diab Data C compiler, it passes return value thru D0.\r
76  * Note that only the least significant three bits of the passed\r
77  * value are used.\r
78  */\r
79 \r
80 ulPortSetIPL:\r
81 _ulPortSetIPL:\r
82     link    A6,#-8\r
83     movem.l D6-D7,(SP)\r
84 \r
85     move.w  SR,D7       /* current sr    */\r
86 \r
87     move.l  D7,D0       /* prepare return value  */\r
88     andi.l  #0x0700,D0  /* mask out IPL  */\r
89     lsr.l   #8,D0       /* IPL   */\r
90 \r
91     move.l  8(A6),D6    /* get argument  */\r
92     andi.l  #0x07,D6    /* least significant three bits  */\r
93     lsl.l   #8,D6       /* move over to make mask    */\r
94 \r
95     andi.l  #0x0000F8FF,D7  /* zero out current IPL  */\r
96     or.l    D6,D7           /* place new IPL in sr   */\r
97     move.w  D7,SR\r
98 \r
99     movem.l (SP),D6-D7\r
100     lea     8(SP),SP\r
101     unlk    A6\r
102     rts\r
103 /********************************************************************/\r
104 \r
105 mcf5xxx_wr_cacrx:\r
106 _mcf5xxx_wr_cacrx:\r
107     move.l  4(sp),d0\r
108     .long   0x4e7b0002  /* movec d0,cacr   */\r
109     nop\r
110     rts\r
111 \r
112 /********************************************************************/\r
113 \r
114 /* Yield interrupt. */\r
115 _vPortYieldISR:\r
116 vPortYieldISR:\r
117         portSAVE_CONTEXT\r
118         jsr _vPortYieldHandler\r
119         portRESTORE_CONTEXT\r
120 \r
121 /********************************************************************/\r
122 \r
123 \r
124 vPortStartFirstTask:\r
125 _vPortStartFirstTask:\r
126         portRESTORE_CONTEXT\r
127 \r
128     .end\r
129 \r
130 \r