mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2025-12-06 17:22:34 +00:00
ChibiOS 2.6.8, until I can figure out where to get it from git.
This commit is contained in:
54
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/bam.s
Executable file
54
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/bam.s
Executable file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560BCxx/bam.s
|
||||
* @brief SPC560BCxx boot assistant record.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* BAM record.*/
|
||||
.section .bam, "ax"
|
||||
.long 0x015A0000
|
||||
.long _reset_address
|
||||
|
||||
.align 2
|
||||
.globl _reset_address
|
||||
.type _reset_address, @function
|
||||
_reset_address:
|
||||
bl _coreinit
|
||||
bl _ivinit
|
||||
|
||||
b _boot_address
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
221
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/core.s
Executable file
221
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/core.s
Executable file
@@ -0,0 +1,221 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560BCxx/core.s
|
||||
* @brief e200z0 core configuration.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @name BUCSR registers definitions
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_BPEN 0x00000001
|
||||
#define BUCSR_BALLOC_BFI 0x00000200
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name BUCSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_DEFAULT (BUCSR_BPEN | BUCSR_BALLOC_BFI)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR register definitions
|
||||
* @{
|
||||
*/
|
||||
#define MSR_WE 0x00040000
|
||||
#define MSR_CE 0x00020000
|
||||
#define MSR_EE 0x00008000
|
||||
#define MSR_PR 0x00004000
|
||||
#define MSR_ME 0x00001000
|
||||
#define MSR_DE 0x00000200
|
||||
#define MSR_IS 0x00000020
|
||||
#define MSR_DS 0x00000010
|
||||
#define MSR_RI 0x00000002
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define MSR_DEFAULT (MSR_WE | MSR_CE | MSR_ME)
|
||||
/** @} */
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
.section .coreinit, "ax"
|
||||
|
||||
.align 2
|
||||
.globl _coreinit
|
||||
.type _coreinit, @function
|
||||
_coreinit:
|
||||
/*
|
||||
* RAM clearing, this device requires a write to all RAM location in
|
||||
* order to initialize the ECC detection hardware, this is going to
|
||||
* slow down the startup but there is no way around.
|
||||
*/
|
||||
xor %r0, %r0, %r0
|
||||
xor %r1, %r1, %r1
|
||||
xor %r2, %r2, %r2
|
||||
xor %r3, %r3, %r3
|
||||
xor %r4, %r4, %r4
|
||||
xor %r5, %r5, %r5
|
||||
xor %r6, %r6, %r6
|
||||
xor %r7, %r7, %r7
|
||||
xor %r8, %r8, %r8
|
||||
xor %r9, %r9, %r9
|
||||
xor %r10, %r10, %r10
|
||||
xor %r11, %r11, %r11
|
||||
xor %r12, %r12, %r12
|
||||
xor %r13, %r13, %r13
|
||||
xor %r14, %r14, %r14
|
||||
xor %r15, %r15, %r15
|
||||
xor %r16, %r16, %r16
|
||||
xor %r17, %r17, %r17
|
||||
xor %r18, %r18, %r18
|
||||
xor %r19, %r19, %r19
|
||||
xor %r20, %r20, %r20
|
||||
xor %r21, %r21, %r21
|
||||
xor %r22, %r22, %r22
|
||||
xor %r23, %r23, %r23
|
||||
xor %r24, %r24, %r24
|
||||
xor %r25, %r25, %r25
|
||||
xor %r26, %r26, %r26
|
||||
xor %r27, %r27, %r27
|
||||
xor %r28, %r28, %r28
|
||||
xor %r29, %r29, %r29
|
||||
xor %r30, %r30, %r30
|
||||
xor %r31, %r31, %r31
|
||||
lis %r4, __ram_start__@h
|
||||
ori %r4, %r4, __ram_start__@l
|
||||
lis %r5, __ram_end__@h
|
||||
ori %r5, %r5, __ram_end__@l
|
||||
.cleareccloop:
|
||||
cmpl %cr0, %r4, %r5
|
||||
bge %cr0, .cleareccend
|
||||
stmw %r16, 0(%r4)
|
||||
addi %r4, %r4, 64
|
||||
b .cleareccloop
|
||||
.cleareccend:
|
||||
|
||||
/*
|
||||
* Branch prediction enabled.
|
||||
*/
|
||||
li %r3, BUCSR_DEFAULT
|
||||
mtspr 1013, %r3 /* BUCSR */
|
||||
|
||||
blr
|
||||
|
||||
/*
|
||||
* Exception vectors initialization.
|
||||
*/
|
||||
.global _ivinit
|
||||
.type _ivinit, @function
|
||||
_ivinit:
|
||||
/* MSR initialization.*/
|
||||
lis %r3, MSR_DEFAULT@h
|
||||
ori %r3, %r3, MSR_DEFAULT@l
|
||||
mtMSR %r3
|
||||
|
||||
/* IVPR initialization.*/
|
||||
lis %r3, __ivpr_base__@h
|
||||
ori %r3, %r3, __ivpr_base__@l
|
||||
mtIVPR %r3
|
||||
|
||||
blr
|
||||
|
||||
.section .ivors, "ax"
|
||||
|
||||
.globl IVORS
|
||||
IVORS:
|
||||
IVOR0: b IVOR0
|
||||
.align 4
|
||||
IVOR1: b _IVOR1
|
||||
.align 4
|
||||
IVOR2: b _IVOR2
|
||||
.align 4
|
||||
IVOR3: b _IVOR3
|
||||
.align 4
|
||||
IVOR4: b _IVOR4
|
||||
.align 4
|
||||
IVOR5: b _IVOR5
|
||||
.align 4
|
||||
IVOR6: b _IVOR6
|
||||
.align 4
|
||||
IVOR7: b _IVOR7
|
||||
.align 4
|
||||
IVOR8: b _IVOR8
|
||||
.align 4
|
||||
IVOR9: b _IVOR9
|
||||
.align 4
|
||||
IVOR10: b _IVOR10
|
||||
.align 4
|
||||
IVOR11: b _IVOR11
|
||||
.align 4
|
||||
IVOR12: b _IVOR12
|
||||
.align 4
|
||||
IVOR13: b _IVOR13
|
||||
.align 4
|
||||
IVOR14: b _IVOR14
|
||||
.align 4
|
||||
IVOR15: b _IVOR15
|
||||
|
||||
.section .handlers, "ax"
|
||||
|
||||
/*
|
||||
* Unhandled exceptions handler.
|
||||
*/
|
||||
.weak _IVOR0, _IVOR1, _IVOR2, _IVOR3, _IVOR4, _IVOR5
|
||||
.weak _IVOR6, _IVOR7, _IVOR8, _IVOR9, _IVOR10, _IVOR11
|
||||
.weak _IVOR12, _IVOR13, _IVOR14, _IVOR15
|
||||
.weak _unhandled_exception
|
||||
_IVOR0:
|
||||
_IVOR1:
|
||||
_IVOR2:
|
||||
_IVOR3:
|
||||
_IVOR5:
|
||||
_IVOR6:
|
||||
_IVOR7:
|
||||
_IVOR8:
|
||||
_IVOR9:
|
||||
_IVOR11:
|
||||
_IVOR12:
|
||||
_IVOR13:
|
||||
_IVOR14:
|
||||
_IVOR15:
|
||||
.type _unhandled_exception, @function
|
||||
_unhandled_exception:
|
||||
b _unhandled_exception
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
178
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/ld/SPC560B44.ld
Executable file
178
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/ld/SPC560B44.ld
Executable file
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC560B44 memory setup.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 384k
|
||||
dataflash : org = 0x00800000, len = 64k
|
||||
ram : org = 0x40000000, len = 28k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.handlers))
|
||||
KEEP(*(.crt0))
|
||||
. = ALIGN(0x00000800);
|
||||
KEEP(*(.vectors))
|
||||
/* Note, have to waste the first 4KB because the IVPR register
|
||||
requires an alignment of 4KB and the first 4KB cannot be used,
|
||||
IVOR0 would conflict with the BAM word. Applications could
|
||||
allocate code or data in the first 4KB by using special sections.*/
|
||||
. = ALIGN(0x00001000);
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.ivors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
178
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/ld/SPC560B50.ld
Executable file
178
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/ld/SPC560B50.ld
Executable file
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC560B50 memory setup.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 512k
|
||||
dataflash : org = 0x00800000, len = 64k
|
||||
ram : org = 0x40000000, len = 32k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.handlers))
|
||||
KEEP(*(.crt0))
|
||||
. = ALIGN(0x00000800);
|
||||
KEEP(*(.vectors))
|
||||
/* Note, have to waste the first 4KB because the IVPR register
|
||||
requires an alignment of 4KB and the first 4KB cannot be used,
|
||||
IVOR0 would conflict with the BAM word. Applications could
|
||||
allocate code or data in the first 4KB by using special sections.*/
|
||||
. = ALIGN(0x00001000);
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.ivors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
13
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/port.mk
Executable file
13
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/port.mk
Executable file
@@ -0,0 +1,13 @@
|
||||
# List of the ChibiOS/RT SPC560BCxx port files.
|
||||
PORTSRC = ${CHIBIOS}/os/ports/GCC/PPC/chcore.c
|
||||
|
||||
PORTASM = ${CHIBIOS}/os/ports/GCC/PPC/SPC560BCxx/bam.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560BCxx/core.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560BCxx/vectors.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/ivor.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/crt0.s
|
||||
|
||||
PORTINC = ${CHIBIOS}/os/ports/GCC/PPC \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560BCxx
|
||||
|
||||
PORTLD = ${CHIBIOS}/os/ports/GCC/PPC/SPC560BCxx/ld
|
||||
79
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/ppcparams.h
Executable file
79
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/ppcparams.h
Executable file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560BCxx/ppcparams.h
|
||||
* @brief PowerPC parameters for the SPC560B/Cxx.
|
||||
*
|
||||
* @defgroup PPC_SPC560BCxx SPC560BCxx Specific Parameters
|
||||
* @ingroup PPC_SPECIFIC
|
||||
* @details This file contains the PowerPC specific parameters for the
|
||||
* SPC560BCxx platform.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _PPCPARAMS_H_
|
||||
#define _PPCPARAMS_H_
|
||||
|
||||
/**
|
||||
* @brief PPC core model.
|
||||
*/
|
||||
#define PPC_VARIANT PPC_VARIANT_e200z0
|
||||
|
||||
/**
|
||||
* @brief Number of writable bits in IVPR register.
|
||||
*/
|
||||
#define PPC_IVPR_BITS 20
|
||||
|
||||
/**
|
||||
* @brief IVORx registers support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_IVORS FALSE
|
||||
|
||||
/**
|
||||
* @brief Book E instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_BOOKE FALSE
|
||||
|
||||
/**
|
||||
* @brief VLE instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports VLS Load/Store Multiple Volatile instructions.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE_MULTI TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports the decrementer timer.
|
||||
*/
|
||||
#define PPC_SUPPORTS_DECREMENTER FALSE
|
||||
|
||||
#endif /* _PPCPARAMS_H_ */
|
||||
|
||||
/** @} */
|
||||
86
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/vectors.h
Executable file
86
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/vectors.h
Executable file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560BCxx/vectors.h
|
||||
* @brief ISR vector module header.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _VECTORS_H_
|
||||
#define _VECTORS_H_
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Number of ISR vectors available.
|
||||
*/
|
||||
#define VECTORS_NUMBER 217
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(_FROM_ASM_)
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
extern uint32_t _vectors[VECTORS_NUMBER];
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void _unhandled_irq(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined(_FROM_ASM_) */
|
||||
|
||||
#endif /* _OSAL_H_ */
|
||||
|
||||
/** @} */
|
||||
386
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/vectors.s
Executable file
386
firmware/chibios/os/ports/GCC/PPC/SPC560BCxx/vectors.s
Executable file
@@ -0,0 +1,386 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560BCxx/vectors.s
|
||||
* @brief SPC560BCxx vectors table.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* Software vectors table. The vectors are accessed from the IVOR4
|
||||
handler only. In order to declare an interrupt handler just create
|
||||
a function withe the same name of a vector, the symbol will
|
||||
override the weak symbol declared here.*/
|
||||
.section .vectors, "ax"
|
||||
.align 4
|
||||
.globl _vectors
|
||||
_vectors:
|
||||
.long vector0, vector1, vector2, vector3
|
||||
.long vector4, vector5, vector6, vector7
|
||||
.long vector8, vector9, vector10, vector11
|
||||
.long vector12, vector13, vector14, vector15
|
||||
.long vector16, vector17, vector18, vector19
|
||||
.long vector20, vector21, vector22, vector23
|
||||
.long vector24, vector25, vector26, vector27
|
||||
.long vector28, vector29, vector30, vector31
|
||||
.long vector32, vector33, vector34, vector35
|
||||
.long vector36, vector37, vector38, vector39
|
||||
.long vector40, vector41, vector42, vector43
|
||||
.long vector44, vector45, vector46, vector47
|
||||
.long vector48, vector49, vector50, vector51
|
||||
.long vector52, vector53, vector54, vector55
|
||||
.long vector56, vector57, vector58, vector59
|
||||
.long vector60, vector61, vector62, vector63
|
||||
.long vector64, vector65, vector66, vector67
|
||||
.long vector68, vector69, vector70, vector71
|
||||
.long vector72, vector73, vector74, vector75
|
||||
.long vector76, vector77, vector78, vector79
|
||||
.long vector80, vector81, vector82, vector83
|
||||
.long vector84, vector85, vector86, vector87
|
||||
.long vector88, vector89, vector90, vector91
|
||||
.long vector92, vector93, vector94, vector95
|
||||
.long vector96, vector97, vector98, vector99
|
||||
.long vector100, vector101, vector102, vector103
|
||||
.long vector104, vector105, vector106, vector107
|
||||
.long vector108, vector109, vector110, vector111
|
||||
.long vector112, vector113, vector114, vector115
|
||||
.long vector116, vector117, vector118, vector119
|
||||
.long vector120, vector121, vector122, vector123
|
||||
.long vector124, vector125, vector126, vector127
|
||||
.long vector128, vector129, vector130, vector131
|
||||
.long vector132, vector133, vector134, vector135
|
||||
.long vector136, vector137, vector138, vector139
|
||||
.long vector140, vector141, vector142, vector143
|
||||
.long vector144, vector145, vector146, vector147
|
||||
.long vector148, vector149, vector150, vector151
|
||||
.long vector152, vector153, vector154, vector155
|
||||
.long vector156, vector157, vector158, vector159
|
||||
.long vector160, vector161, vector162, vector163
|
||||
.long vector164, vector165, vector166, vector167
|
||||
.long vector168, vector169, vector170, vector171
|
||||
.long vector172, vector173, vector174, vector175
|
||||
.long vector176, vector177, vector178, vector179
|
||||
.long vector180, vector181, vector182, vector183
|
||||
.long vector184, vector185, vector186, vector187
|
||||
.long vector188, vector189, vector190, vector191
|
||||
.long vector192, vector193, vector194, vector195
|
||||
.long vector196, vector197, vector198, vector199
|
||||
.long vector200, vector201, vector202, vector203
|
||||
.long vector204, vector205, vector206, vector207
|
||||
.long vector208, vector209, vector210, vector211
|
||||
.long vector212, vector213, vector214, vector215
|
||||
.long vector216
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.weak vector0, vector1, vector2, vector3
|
||||
.weak vector4, vector5, vector6, vector7
|
||||
.weak vector8, vector9, vector10, vector11
|
||||
.weak vector12, vector13, vector14, vector15
|
||||
.weak vector16, vector17, vector18, vector19
|
||||
.weak vector20, vector21, vector22, vector23
|
||||
.weak vector24, vector25, vector26, vector27
|
||||
.weak vector28, vector29, vector30, vector31
|
||||
.weak vector32, vector33, vector34, vector35
|
||||
.weak vector36, vector37, vector38, vector39
|
||||
.weak vector40, vector41, vector42, vector43
|
||||
.weak vector44, vector45, vector46, vector47
|
||||
.weak vector48, vector49, vector50, vector51
|
||||
.weak vector52, vector53, vector54, vector55
|
||||
.weak vector56, vector57, vector58, vector59
|
||||
.weak vector60, vector61, vector62, vector63
|
||||
.weak vector64, vector65, vector66, vector67
|
||||
.weak vector68, vector69, vector70, vector71
|
||||
.weak vector72, vector73, vector74, vector75
|
||||
.weak vector76, vector77, vector78, vector79
|
||||
.weak vector80, vector81, vector82, vector83
|
||||
.weak vector84, vector85, vector86, vector87
|
||||
.weak vector88, vector89, vector90, vector91
|
||||
.weak vector92, vector93, vector94, vector95
|
||||
.weak vector96, vector97, vector98, vector99
|
||||
.weak vector100, vector101, vector102, vector103
|
||||
.weak vector104, vector105, vector106, vector107
|
||||
.weak vector108, vector109, vector110, vector111
|
||||
.weak vector112, vector113, vector114, vector115
|
||||
.weak vector116, vector117, vector118, vector119
|
||||
.weak vector120, vector121, vector122, vector123
|
||||
.weak vector124, vector125, vector126, vector127
|
||||
.weak vector128, vector129, vector130, vector131
|
||||
.weak vector132, vector133, vector134, vector135
|
||||
.weak vector136, vector137, vector138, vector139
|
||||
.weak vector140, vector141, vector142, vector143
|
||||
.weak vector144, vector145, vector146, vector147
|
||||
.weak vector148, vector149, vector150, vector151
|
||||
.weak vector152, vector153, vector154, vector155
|
||||
.weak vector156, vector157, vector158, vector159
|
||||
.weak vector160, vector161, vector162, vector163
|
||||
.weak vector164, vector165, vector166, vector167
|
||||
.weak vector168, vector169, vector170, vector171
|
||||
.weak vector172, vector173, vector174, vector175
|
||||
.weak vector176, vector177, vector178, vector179
|
||||
.weak vector180, vector181, vector182, vector183
|
||||
.weak vector184, vector185, vector186, vector187
|
||||
.weak vector188, vector189, vector190, vector191
|
||||
.weak vector192, vector193, vector194, vector195
|
||||
.weak vector196, vector197, vector198, vector199
|
||||
.weak vector200, vector201, vector202, vector203
|
||||
.weak vector204, vector205, vector206, vector207
|
||||
.weak vector208, vector209, vector210, vector211
|
||||
.weak vector212, vector213, vector214, vector215
|
||||
.weak vector216
|
||||
|
||||
vector0:
|
||||
vector1:
|
||||
vector2:
|
||||
vector3:
|
||||
vector4:
|
||||
vector5:
|
||||
vector6:
|
||||
vector7:
|
||||
vector8:
|
||||
vector9:
|
||||
vector10:
|
||||
vector11:
|
||||
vector12:
|
||||
vector13:
|
||||
vector14:
|
||||
vector15:
|
||||
vector16:
|
||||
vector17:
|
||||
vector18:
|
||||
vector19:
|
||||
vector20:
|
||||
vector21:
|
||||
vector22:
|
||||
vector23:
|
||||
vector24:
|
||||
vector25:
|
||||
vector26:
|
||||
vector27:
|
||||
vector28:
|
||||
vector29:
|
||||
vector30:
|
||||
vector31:
|
||||
vector32:
|
||||
vector33:
|
||||
vector34:
|
||||
vector35:
|
||||
vector36:
|
||||
vector37:
|
||||
vector38:
|
||||
vector39:
|
||||
vector40:
|
||||
vector41:
|
||||
vector42:
|
||||
vector43:
|
||||
vector44:
|
||||
vector45:
|
||||
vector46:
|
||||
vector47:
|
||||
vector48:
|
||||
vector49:
|
||||
vector50:
|
||||
vector51:
|
||||
vector52:
|
||||
vector53:
|
||||
vector54:
|
||||
vector55:
|
||||
vector56:
|
||||
vector57:
|
||||
vector58:
|
||||
vector59:
|
||||
vector60:
|
||||
vector61:
|
||||
vector62:
|
||||
vector63:
|
||||
vector64:
|
||||
vector65:
|
||||
vector66:
|
||||
vector67:
|
||||
vector68:
|
||||
vector69:
|
||||
vector70:
|
||||
vector71:
|
||||
vector72:
|
||||
vector73:
|
||||
vector74:
|
||||
vector75:
|
||||
vector76:
|
||||
vector77:
|
||||
vector78:
|
||||
vector79:
|
||||
vector80:
|
||||
vector81:
|
||||
vector82:
|
||||
vector83:
|
||||
vector84:
|
||||
vector85:
|
||||
vector86:
|
||||
vector87:
|
||||
vector88:
|
||||
vector89:
|
||||
vector90:
|
||||
vector91:
|
||||
vector92:
|
||||
vector93:
|
||||
vector94:
|
||||
vector95:
|
||||
vector96:
|
||||
vector97:
|
||||
vector98:
|
||||
vector99:
|
||||
vector100:
|
||||
vector101:
|
||||
vector102:
|
||||
vector103:
|
||||
vector104:
|
||||
vector105:
|
||||
vector106:
|
||||
vector107:
|
||||
vector108:
|
||||
vector109:
|
||||
vector110:
|
||||
vector111:
|
||||
vector112:
|
||||
vector113:
|
||||
vector114:
|
||||
vector115:
|
||||
vector116:
|
||||
vector117:
|
||||
vector118:
|
||||
vector119:
|
||||
vector120:
|
||||
vector121:
|
||||
vector122:
|
||||
vector123:
|
||||
vector124:
|
||||
vector125:
|
||||
vector126:
|
||||
vector127:
|
||||
vector128:
|
||||
vector129:
|
||||
vector130:
|
||||
vector131:
|
||||
vector132:
|
||||
vector133:
|
||||
vector134:
|
||||
vector135:
|
||||
vector136:
|
||||
vector137:
|
||||
vector138:
|
||||
vector139:
|
||||
vector140:
|
||||
vector141:
|
||||
vector142:
|
||||
vector143:
|
||||
vector144:
|
||||
vector145:
|
||||
vector146:
|
||||
vector147:
|
||||
vector148:
|
||||
vector149:
|
||||
vector150:
|
||||
vector151:
|
||||
vector152:
|
||||
vector153:
|
||||
vector154:
|
||||
vector155:
|
||||
vector156:
|
||||
vector157:
|
||||
vector158:
|
||||
vector159:
|
||||
vector160:
|
||||
vector161:
|
||||
vector162:
|
||||
vector163:
|
||||
vector164:
|
||||
vector165:
|
||||
vector166:
|
||||
vector167:
|
||||
vector168:
|
||||
vector169:
|
||||
vector170:
|
||||
vector171:
|
||||
vector172:
|
||||
vector173:
|
||||
vector174:
|
||||
vector175:
|
||||
vector176:
|
||||
vector177:
|
||||
vector178:
|
||||
vector179:
|
||||
vector180:
|
||||
vector181:
|
||||
vector182:
|
||||
vector183:
|
||||
vector184:
|
||||
vector185:
|
||||
vector186:
|
||||
vector187:
|
||||
vector188:
|
||||
vector189:
|
||||
vector190:
|
||||
vector191:
|
||||
vector192:
|
||||
vector193:
|
||||
vector194:
|
||||
vector195:
|
||||
vector196:
|
||||
vector197:
|
||||
vector198:
|
||||
vector199:
|
||||
vector200:
|
||||
vector201:
|
||||
vector202:
|
||||
vector203:
|
||||
vector204:
|
||||
vector205:
|
||||
vector206:
|
||||
vector207:
|
||||
vector208:
|
||||
vector209:
|
||||
vector210:
|
||||
vector211:
|
||||
vector212:
|
||||
vector213:
|
||||
vector214:
|
||||
vector215:
|
||||
vector216:
|
||||
|
||||
.weak _unhandled_irq
|
||||
.type _unhandled_irq, @function
|
||||
_unhandled_irq:
|
||||
b _unhandled_irq
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
54
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/bam.s
Executable file
54
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/bam.s
Executable file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Bxx/bam.s
|
||||
* @brief SPC560Bxx boot assistant record.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* BAM record.*/
|
||||
.section .bam, "ax"
|
||||
.long 0x015A0000
|
||||
.long _reset_address
|
||||
|
||||
.align 2
|
||||
.globl _reset_address
|
||||
.type _reset_address, @function
|
||||
_reset_address:
|
||||
bl _coreinit
|
||||
bl _ivinit
|
||||
|
||||
b _boot_address
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
221
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/core.s
Executable file
221
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/core.s
Executable file
@@ -0,0 +1,221 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Bxx/core.s
|
||||
* @brief e200z0 core configuration.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @name BUCSR registers definitions
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_BPEN 0x00000001
|
||||
#define BUCSR_BALLOC_BFI 0x00000200
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name BUCSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_DEFAULT (BUCSR_BPEN | BUCSR_BALLOC_BFI)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR register definitions
|
||||
* @{
|
||||
*/
|
||||
#define MSR_WE 0x00040000
|
||||
#define MSR_CE 0x00020000
|
||||
#define MSR_EE 0x00008000
|
||||
#define MSR_PR 0x00004000
|
||||
#define MSR_ME 0x00001000
|
||||
#define MSR_DE 0x00000200
|
||||
#define MSR_IS 0x00000020
|
||||
#define MSR_DS 0x00000010
|
||||
#define MSR_RI 0x00000002
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define MSR_DEFAULT (MSR_WE | MSR_CE | MSR_ME)
|
||||
/** @} */
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
.section .coreinit, "ax"
|
||||
|
||||
.align 2
|
||||
.globl _coreinit
|
||||
.type _coreinit, @function
|
||||
_coreinit:
|
||||
/*
|
||||
* RAM clearing, this device requires a write to all RAM location in
|
||||
* order to initialize the ECC detection hardware, this is going to
|
||||
* slow down the startup but there is no way around.
|
||||
*/
|
||||
xor %r0, %r0, %r0
|
||||
xor %r1, %r1, %r1
|
||||
xor %r2, %r2, %r2
|
||||
xor %r3, %r3, %r3
|
||||
xor %r4, %r4, %r4
|
||||
xor %r5, %r5, %r5
|
||||
xor %r6, %r6, %r6
|
||||
xor %r7, %r7, %r7
|
||||
xor %r8, %r8, %r8
|
||||
xor %r9, %r9, %r9
|
||||
xor %r10, %r10, %r10
|
||||
xor %r11, %r11, %r11
|
||||
xor %r12, %r12, %r12
|
||||
xor %r13, %r13, %r13
|
||||
xor %r14, %r14, %r14
|
||||
xor %r15, %r15, %r15
|
||||
xor %r16, %r16, %r16
|
||||
xor %r17, %r17, %r17
|
||||
xor %r18, %r18, %r18
|
||||
xor %r19, %r19, %r19
|
||||
xor %r20, %r20, %r20
|
||||
xor %r21, %r21, %r21
|
||||
xor %r22, %r22, %r22
|
||||
xor %r23, %r23, %r23
|
||||
xor %r24, %r24, %r24
|
||||
xor %r25, %r25, %r25
|
||||
xor %r26, %r26, %r26
|
||||
xor %r27, %r27, %r27
|
||||
xor %r28, %r28, %r28
|
||||
xor %r29, %r29, %r29
|
||||
xor %r30, %r30, %r30
|
||||
xor %r31, %r31, %r31
|
||||
lis %r4, __ram_start__@h
|
||||
ori %r4, %r4, __ram_start__@l
|
||||
lis %r5, __ram_end__@h
|
||||
ori %r5, %r5, __ram_end__@l
|
||||
.cleareccloop:
|
||||
cmpl %cr0, %r4, %r5
|
||||
bge %cr0, .cleareccend
|
||||
stmw %r16, 0(%r4)
|
||||
addi %r4, %r4, 64
|
||||
b .cleareccloop
|
||||
.cleareccend:
|
||||
|
||||
/*
|
||||
* Branch prediction enabled.
|
||||
*/
|
||||
li %r3, BUCSR_DEFAULT
|
||||
mtspr 1013, %r3 /* BUCSR */
|
||||
|
||||
blr
|
||||
|
||||
/*
|
||||
* Exception vectors initialization.
|
||||
*/
|
||||
.global _ivinit
|
||||
.type _ivinit, @function
|
||||
_ivinit:
|
||||
/* MSR initialization.*/
|
||||
lis %r3, MSR_DEFAULT@h
|
||||
ori %r3, %r3, MSR_DEFAULT@l
|
||||
mtMSR %r3
|
||||
|
||||
/* IVPR initialization.*/
|
||||
lis %r3, __ivpr_base__@h
|
||||
ori %r3, %r3, __ivpr_base__@l
|
||||
mtIVPR %r3
|
||||
|
||||
blr
|
||||
|
||||
.section .ivors, "ax"
|
||||
|
||||
.globl IVORS
|
||||
IVORS:
|
||||
IVOR0: b IVOR0
|
||||
.align 4
|
||||
IVOR1: b _IVOR1
|
||||
.align 4
|
||||
IVOR2: b _IVOR2
|
||||
.align 4
|
||||
IVOR3: b _IVOR3
|
||||
.align 4
|
||||
IVOR4: b _IVOR4
|
||||
.align 4
|
||||
IVOR5: b _IVOR5
|
||||
.align 4
|
||||
IVOR6: b _IVOR6
|
||||
.align 4
|
||||
IVOR7: b _IVOR7
|
||||
.align 4
|
||||
IVOR8: b _IVOR8
|
||||
.align 4
|
||||
IVOR9: b _IVOR9
|
||||
.align 4
|
||||
IVOR10: b _IVOR10
|
||||
.align 4
|
||||
IVOR11: b _IVOR11
|
||||
.align 4
|
||||
IVOR12: b _IVOR12
|
||||
.align 4
|
||||
IVOR13: b _IVOR13
|
||||
.align 4
|
||||
IVOR14: b _IVOR14
|
||||
.align 4
|
||||
IVOR15: b _IVOR15
|
||||
|
||||
.section .handlers, "ax"
|
||||
|
||||
/*
|
||||
* Unhandled exceptions handler.
|
||||
*/
|
||||
.weak _IVOR0, _IVOR1, _IVOR2, _IVOR3, _IVOR4, _IVOR5
|
||||
.weak _IVOR6, _IVOR7, _IVOR8, _IVOR9, _IVOR10, _IVOR11
|
||||
.weak _IVOR12, _IVOR13, _IVOR14, _IVOR15
|
||||
.weak _unhandled_exception
|
||||
_IVOR0:
|
||||
_IVOR1:
|
||||
_IVOR2:
|
||||
_IVOR3:
|
||||
_IVOR5:
|
||||
_IVOR6:
|
||||
_IVOR7:
|
||||
_IVOR8:
|
||||
_IVOR9:
|
||||
_IVOR11:
|
||||
_IVOR12:
|
||||
_IVOR13:
|
||||
_IVOR14:
|
||||
_IVOR15:
|
||||
.type _unhandled_exception, @function
|
||||
_unhandled_exception:
|
||||
b _unhandled_exception
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
178
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/ld/SPC560B64.ld
Executable file
178
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/ld/SPC560B64.ld
Executable file
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC560B64 memory setup.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 1536k
|
||||
dataflash : org = 0x00800000, len = 64k
|
||||
ram : org = 0x40000000, len = 96k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.handlers))
|
||||
KEEP(*(.crt0))
|
||||
. = ALIGN(0x00000800);
|
||||
KEEP(*(.vectors))
|
||||
/* Note, have to waste the first 4KB because the IVPR register
|
||||
requires an alignment of 4KB and the first 4KB cannot be used,
|
||||
IVOR0 would conflict with the BAM word. Applications could
|
||||
allocate code or data in the first 4KB by using special sections.*/
|
||||
. = ALIGN(0x00001000);
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.ivors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
13
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/port.mk
Executable file
13
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/port.mk
Executable file
@@ -0,0 +1,13 @@
|
||||
# List of the ChibiOS/RT SPC560Bxx port files.
|
||||
PORTSRC = ${CHIBIOS}/os/ports/GCC/PPC/chcore.c
|
||||
|
||||
PORTASM = ${CHIBIOS}/os/ports/GCC/PPC/SPC560Bxx/bam.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560Bxx/core.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560Bxx/vectors.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/ivor.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/crt0.s
|
||||
|
||||
PORTINC = ${CHIBIOS}/os/ports/GCC/PPC \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560Bxx
|
||||
|
||||
PORTLD = ${CHIBIOS}/os/ports/GCC/PPC/SPC560Bxx/ld
|
||||
79
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/ppcparams.h
Executable file
79
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/ppcparams.h
Executable file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Bxx/ppcparams.h
|
||||
* @brief PowerPC parameters for the SPC560B/Cxx.
|
||||
*
|
||||
* @defgroup PPC_SPC560BCxx SPC560BCxx Specific Parameters
|
||||
* @ingroup PPC_SPECIFIC
|
||||
* @details This file contains the PowerPC specific parameters for the
|
||||
* SPC560BCxx platform.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _PPCPARAMS_H_
|
||||
#define _PPCPARAMS_H_
|
||||
|
||||
/**
|
||||
* @brief PPC core model.
|
||||
*/
|
||||
#define PPC_VARIANT PPC_VARIANT_e200z0
|
||||
|
||||
/**
|
||||
* @brief Number of writable bits in IVPR register.
|
||||
*/
|
||||
#define PPC_IVPR_BITS 20
|
||||
|
||||
/**
|
||||
* @brief IVORx registers support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_IVORS FALSE
|
||||
|
||||
/**
|
||||
* @brief Book E instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_BOOKE FALSE
|
||||
|
||||
/**
|
||||
* @brief VLE instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports VLS Load/Store Multiple Volatile instructions.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE_MULTI TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports the decrementer timer.
|
||||
*/
|
||||
#define PPC_SUPPORTS_DECREMENTER FALSE
|
||||
|
||||
#endif /* _PPCPARAMS_H_ */
|
||||
|
||||
/** @} */
|
||||
86
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/vectors.h
Executable file
86
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/vectors.h
Executable file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Bxx/vectors.h
|
||||
* @brief ISR vector module header.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _VECTORS_H_
|
||||
#define _VECTORS_H_
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Number of ISR vectors available.
|
||||
*/
|
||||
#define VECTORS_NUMBER 234
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(_FROM_ASM_)
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
extern uint32_t _vectors[VECTORS_NUMBER];
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void _unhandled_irq(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined(_FROM_ASM_) */
|
||||
|
||||
#endif /* _OSAL_H_ */
|
||||
|
||||
/** @} */
|
||||
411
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/vectors.s
Executable file
411
firmware/chibios/os/ports/GCC/PPC/SPC560Bxx/vectors.s
Executable file
@@ -0,0 +1,411 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Bxx/vectors.s
|
||||
* @brief SPC560Bxx vectors table.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* Software vectors table. The vectors are accessed from the IVOR4
|
||||
handler only. In order to declare an interrupt handler just create
|
||||
a function withe the same name of a vector, the symbol will
|
||||
override the weak symbol declared here.*/
|
||||
.section .vectors, "ax"
|
||||
.align 4
|
||||
.globl _vectors
|
||||
_vectors:
|
||||
.long vector0, vector1, vector2, vector3
|
||||
.long vector4, vector5, vector6, vector7
|
||||
.long vector8, vector9, vector10, vector11
|
||||
.long vector12, vector13, vector14, vector15
|
||||
.long vector16, vector17, vector18, vector19
|
||||
.long vector20, vector21, vector22, vector23
|
||||
.long vector24, vector25, vector26, vector27
|
||||
.long vector28, vector29, vector30, vector31
|
||||
.long vector32, vector33, vector34, vector35
|
||||
.long vector36, vector37, vector38, vector39
|
||||
.long vector40, vector41, vector42, vector43
|
||||
.long vector44, vector45, vector46, vector47
|
||||
.long vector48, vector49, vector50, vector51
|
||||
.long vector52, vector53, vector54, vector55
|
||||
.long vector56, vector57, vector58, vector59
|
||||
.long vector60, vector61, vector62, vector63
|
||||
.long vector64, vector65, vector66, vector67
|
||||
.long vector68, vector69, vector70, vector71
|
||||
.long vector72, vector73, vector74, vector75
|
||||
.long vector76, vector77, vector78, vector79
|
||||
.long vector80, vector81, vector82, vector83
|
||||
.long vector84, vector85, vector86, vector87
|
||||
.long vector88, vector89, vector90, vector91
|
||||
.long vector92, vector93, vector94, vector95
|
||||
.long vector96, vector97, vector98, vector99
|
||||
.long vector100, vector101, vector102, vector103
|
||||
.long vector104, vector105, vector106, vector107
|
||||
.long vector108, vector109, vector110, vector111
|
||||
.long vector112, vector113, vector114, vector115
|
||||
.long vector116, vector117, vector118, vector119
|
||||
.long vector120, vector121, vector122, vector123
|
||||
.long vector124, vector125, vector126, vector127
|
||||
.long vector128, vector129, vector130, vector131
|
||||
.long vector132, vector133, vector134, vector135
|
||||
.long vector136, vector137, vector138, vector139
|
||||
.long vector140, vector141, vector142, vector143
|
||||
.long vector144, vector145, vector146, vector147
|
||||
.long vector148, vector149, vector150, vector151
|
||||
.long vector152, vector153, vector154, vector155
|
||||
.long vector156, vector157, vector158, vector159
|
||||
.long vector160, vector161, vector162, vector163
|
||||
.long vector164, vector165, vector166, vector167
|
||||
.long vector168, vector169, vector170, vector171
|
||||
.long vector172, vector173, vector174, vector175
|
||||
.long vector176, vector177, vector178, vector179
|
||||
.long vector180, vector181, vector182, vector183
|
||||
.long vector184, vector185, vector186, vector187
|
||||
.long vector188, vector189, vector190, vector191
|
||||
.long vector192, vector193, vector194, vector195
|
||||
.long vector196, vector197, vector198, vector199
|
||||
.long vector200, vector201, vector202, vector203
|
||||
.long vector204, vector205, vector206, vector207
|
||||
.long vector208, vector209, vector210, vector211
|
||||
.long vector212, vector213, vector214, vector215
|
||||
.long vector216, vector217, vector218, vector219
|
||||
.long vector220, vector221, vector222, vector223
|
||||
.long vector224, vector225, vector226, vector227
|
||||
.long vector228, vector229, vector230, vector231
|
||||
.long vector232, vector233
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.weak vector0, vector1, vector2, vector3
|
||||
.weak vector4, vector5, vector6, vector7
|
||||
.weak vector8, vector9, vector10, vector11
|
||||
.weak vector12, vector13, vector14, vector15
|
||||
.weak vector16, vector17, vector18, vector19
|
||||
.weak vector20, vector21, vector22, vector23
|
||||
.weak vector24, vector25, vector26, vector27
|
||||
.weak vector28, vector29, vector30, vector31
|
||||
.weak vector32, vector33, vector34, vector35
|
||||
.weak vector36, vector37, vector38, vector39
|
||||
.weak vector40, vector41, vector42, vector43
|
||||
.weak vector44, vector45, vector46, vector47
|
||||
.weak vector48, vector49, vector50, vector51
|
||||
.weak vector52, vector53, vector54, vector55
|
||||
.weak vector56, vector57, vector58, vector59
|
||||
.weak vector60, vector61, vector62, vector63
|
||||
.weak vector64, vector65, vector66, vector67
|
||||
.weak vector68, vector69, vector70, vector71
|
||||
.weak vector72, vector73, vector74, vector75
|
||||
.weak vector76, vector77, vector78, vector79
|
||||
.weak vector80, vector81, vector82, vector83
|
||||
.weak vector84, vector85, vector86, vector87
|
||||
.weak vector88, vector89, vector90, vector91
|
||||
.weak vector92, vector93, vector94, vector95
|
||||
.weak vector96, vector97, vector98, vector99
|
||||
.weak vector100, vector101, vector102, vector103
|
||||
.weak vector104, vector105, vector106, vector107
|
||||
.weak vector108, vector109, vector110, vector111
|
||||
.weak vector112, vector113, vector114, vector115
|
||||
.weak vector116, vector117, vector118, vector119
|
||||
.weak vector120, vector121, vector122, vector123
|
||||
.weak vector124, vector125, vector126, vector127
|
||||
.weak vector128, vector129, vector130, vector131
|
||||
.weak vector132, vector133, vector134, vector135
|
||||
.weak vector136, vector137, vector138, vector139
|
||||
.weak vector140, vector141, vector142, vector143
|
||||
.weak vector144, vector145, vector146, vector147
|
||||
.weak vector148, vector149, vector150, vector151
|
||||
.weak vector152, vector153, vector154, vector155
|
||||
.weak vector156, vector157, vector158, vector159
|
||||
.weak vector160, vector161, vector162, vector163
|
||||
.weak vector164, vector165, vector166, vector167
|
||||
.weak vector168, vector169, vector170, vector171
|
||||
.weak vector172, vector173, vector174, vector175
|
||||
.weak vector176, vector177, vector178, vector179
|
||||
.weak vector180, vector181, vector182, vector183
|
||||
.weak vector184, vector185, vector186, vector187
|
||||
.weak vector188, vector189, vector190, vector191
|
||||
.weak vector192, vector193, vector194, vector195
|
||||
.weak vector196, vector197, vector198, vector199
|
||||
.weak vector200, vector201, vector202, vector203
|
||||
.weak vector204, vector205, vector206, vector207
|
||||
.weak vector208, vector209, vector210, vector211
|
||||
.weak vector212, vector213, vector214, vector215
|
||||
.weak vector216, vector217, vector218, vector219
|
||||
.weak vector220, vector221, vector222, vector223
|
||||
.weak vector224, vector225, vector226, vector227
|
||||
.weak vector228, vector229, vector230, vector231
|
||||
.weak vector232, vector233
|
||||
|
||||
vector0:
|
||||
vector1:
|
||||
vector2:
|
||||
vector3:
|
||||
vector4:
|
||||
vector5:
|
||||
vector6:
|
||||
vector7:
|
||||
vector8:
|
||||
vector9:
|
||||
vector10:
|
||||
vector11:
|
||||
vector12:
|
||||
vector13:
|
||||
vector14:
|
||||
vector15:
|
||||
vector16:
|
||||
vector17:
|
||||
vector18:
|
||||
vector19:
|
||||
vector20:
|
||||
vector21:
|
||||
vector22:
|
||||
vector23:
|
||||
vector24:
|
||||
vector25:
|
||||
vector26:
|
||||
vector27:
|
||||
vector28:
|
||||
vector29:
|
||||
vector30:
|
||||
vector31:
|
||||
vector32:
|
||||
vector33:
|
||||
vector34:
|
||||
vector35:
|
||||
vector36:
|
||||
vector37:
|
||||
vector38:
|
||||
vector39:
|
||||
vector40:
|
||||
vector41:
|
||||
vector42:
|
||||
vector43:
|
||||
vector44:
|
||||
vector45:
|
||||
vector46:
|
||||
vector47:
|
||||
vector48:
|
||||
vector49:
|
||||
vector50:
|
||||
vector51:
|
||||
vector52:
|
||||
vector53:
|
||||
vector54:
|
||||
vector55:
|
||||
vector56:
|
||||
vector57:
|
||||
vector58:
|
||||
vector59:
|
||||
vector60:
|
||||
vector61:
|
||||
vector62:
|
||||
vector63:
|
||||
vector64:
|
||||
vector65:
|
||||
vector66:
|
||||
vector67:
|
||||
vector68:
|
||||
vector69:
|
||||
vector70:
|
||||
vector71:
|
||||
vector72:
|
||||
vector73:
|
||||
vector74:
|
||||
vector75:
|
||||
vector76:
|
||||
vector77:
|
||||
vector78:
|
||||
vector79:
|
||||
vector80:
|
||||
vector81:
|
||||
vector82:
|
||||
vector83:
|
||||
vector84:
|
||||
vector85:
|
||||
vector86:
|
||||
vector87:
|
||||
vector88:
|
||||
vector89:
|
||||
vector90:
|
||||
vector91:
|
||||
vector92:
|
||||
vector93:
|
||||
vector94:
|
||||
vector95:
|
||||
vector96:
|
||||
vector97:
|
||||
vector98:
|
||||
vector99:
|
||||
vector100:
|
||||
vector101:
|
||||
vector102:
|
||||
vector103:
|
||||
vector104:
|
||||
vector105:
|
||||
vector106:
|
||||
vector107:
|
||||
vector108:
|
||||
vector109:
|
||||
vector110:
|
||||
vector111:
|
||||
vector112:
|
||||
vector113:
|
||||
vector114:
|
||||
vector115:
|
||||
vector116:
|
||||
vector117:
|
||||
vector118:
|
||||
vector119:
|
||||
vector120:
|
||||
vector121:
|
||||
vector122:
|
||||
vector123:
|
||||
vector124:
|
||||
vector125:
|
||||
vector126:
|
||||
vector127:
|
||||
vector128:
|
||||
vector129:
|
||||
vector130:
|
||||
vector131:
|
||||
vector132:
|
||||
vector133:
|
||||
vector134:
|
||||
vector135:
|
||||
vector136:
|
||||
vector137:
|
||||
vector138:
|
||||
vector139:
|
||||
vector140:
|
||||
vector141:
|
||||
vector142:
|
||||
vector143:
|
||||
vector144:
|
||||
vector145:
|
||||
vector146:
|
||||
vector147:
|
||||
vector148:
|
||||
vector149:
|
||||
vector150:
|
||||
vector151:
|
||||
vector152:
|
||||
vector153:
|
||||
vector154:
|
||||
vector155:
|
||||
vector156:
|
||||
vector157:
|
||||
vector158:
|
||||
vector159:
|
||||
vector160:
|
||||
vector161:
|
||||
vector162:
|
||||
vector163:
|
||||
vector164:
|
||||
vector165:
|
||||
vector166:
|
||||
vector167:
|
||||
vector168:
|
||||
vector169:
|
||||
vector170:
|
||||
vector171:
|
||||
vector172:
|
||||
vector173:
|
||||
vector174:
|
||||
vector175:
|
||||
vector176:
|
||||
vector177:
|
||||
vector178:
|
||||
vector179:
|
||||
vector180:
|
||||
vector181:
|
||||
vector182:
|
||||
vector183:
|
||||
vector184:
|
||||
vector185:
|
||||
vector186:
|
||||
vector187:
|
||||
vector188:
|
||||
vector189:
|
||||
vector190:
|
||||
vector191:
|
||||
vector192:
|
||||
vector193:
|
||||
vector194:
|
||||
vector195:
|
||||
vector196:
|
||||
vector197:
|
||||
vector198:
|
||||
vector199:
|
||||
vector200:
|
||||
vector201:
|
||||
vector202:
|
||||
vector203:
|
||||
vector204:
|
||||
vector205:
|
||||
vector206:
|
||||
vector207:
|
||||
vector208:
|
||||
vector209:
|
||||
vector210:
|
||||
vector211:
|
||||
vector212:
|
||||
vector213:
|
||||
vector214:
|
||||
vector215:
|
||||
vector216:
|
||||
vector217:
|
||||
vector218:
|
||||
vector219:
|
||||
vector220:
|
||||
vector221:
|
||||
vector222:
|
||||
vector223:
|
||||
vector224:
|
||||
vector225:
|
||||
vector226:
|
||||
vector227:
|
||||
vector228:
|
||||
vector229:
|
||||
vector230:
|
||||
vector231:
|
||||
vector232:
|
||||
vector233:
|
||||
|
||||
.weak _unhandled_irq
|
||||
.type _unhandled_irq, @function
|
||||
_unhandled_irq:
|
||||
b _unhandled_irq
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
54
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/bam.s
Executable file
54
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/bam.s
Executable file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Dxx/bam.s
|
||||
* @brief SPC560Dxx boot assistant record.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* BAM record.*/
|
||||
.section .bam, "ax"
|
||||
.long 0x015A0000
|
||||
.long _reset_address
|
||||
|
||||
.align 2
|
||||
.globl _reset_address
|
||||
.type _reset_address, @function
|
||||
_reset_address:
|
||||
bl _coreinit
|
||||
bl _ivinit
|
||||
|
||||
b _boot_address
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
221
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/core.s
Executable file
221
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/core.s
Executable file
@@ -0,0 +1,221 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Dxx/core.s
|
||||
* @brief e200z0 core configuration.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @name BUCSR registers definitions
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_BPEN 0x00000001
|
||||
#define BUCSR_BALLOC_BFI 0x00000200
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name BUCSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_DEFAULT (BUCSR_BPEN | BUCSR_BALLOC_BFI)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR register definitions
|
||||
* @{
|
||||
*/
|
||||
#define MSR_WE 0x00040000
|
||||
#define MSR_CE 0x00020000
|
||||
#define MSR_EE 0x00008000
|
||||
#define MSR_PR 0x00004000
|
||||
#define MSR_ME 0x00001000
|
||||
#define MSR_DE 0x00000200
|
||||
#define MSR_IS 0x00000020
|
||||
#define MSR_DS 0x00000010
|
||||
#define MSR_RI 0x00000002
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define MSR_DEFAULT (MSR_WE | MSR_CE | MSR_ME)
|
||||
/** @} */
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
.section .coreinit, "ax"
|
||||
|
||||
.align 2
|
||||
.globl _coreinit
|
||||
.type _coreinit, @function
|
||||
_coreinit:
|
||||
/*
|
||||
* RAM clearing, this device requires a write to all RAM location in
|
||||
* order to initialize the ECC detection hardware, this is going to
|
||||
* slow down the startup but there is no way around.
|
||||
*/
|
||||
xor %r0, %r0, %r0
|
||||
xor %r1, %r1, %r1
|
||||
xor %r2, %r2, %r2
|
||||
xor %r3, %r3, %r3
|
||||
xor %r4, %r4, %r4
|
||||
xor %r5, %r5, %r5
|
||||
xor %r6, %r6, %r6
|
||||
xor %r7, %r7, %r7
|
||||
xor %r8, %r8, %r8
|
||||
xor %r9, %r9, %r9
|
||||
xor %r10, %r10, %r10
|
||||
xor %r11, %r11, %r11
|
||||
xor %r12, %r12, %r12
|
||||
xor %r13, %r13, %r13
|
||||
xor %r14, %r14, %r14
|
||||
xor %r15, %r15, %r15
|
||||
xor %r16, %r16, %r16
|
||||
xor %r17, %r17, %r17
|
||||
xor %r18, %r18, %r18
|
||||
xor %r19, %r19, %r19
|
||||
xor %r20, %r20, %r20
|
||||
xor %r21, %r21, %r21
|
||||
xor %r22, %r22, %r22
|
||||
xor %r23, %r23, %r23
|
||||
xor %r24, %r24, %r24
|
||||
xor %r25, %r25, %r25
|
||||
xor %r26, %r26, %r26
|
||||
xor %r27, %r27, %r27
|
||||
xor %r28, %r28, %r28
|
||||
xor %r29, %r29, %r29
|
||||
xor %r30, %r30, %r30
|
||||
xor %r31, %r31, %r31
|
||||
lis %r4, __ram_start__@h
|
||||
ori %r4, %r4, __ram_start__@l
|
||||
lis %r5, __ram_end__@h
|
||||
ori %r5, %r5, __ram_end__@l
|
||||
.cleareccloop:
|
||||
cmpl %cr0, %r4, %r5
|
||||
bge %cr0, .cleareccend
|
||||
stmw %r16, 0(%r4)
|
||||
addi %r4, %r4, 64
|
||||
b .cleareccloop
|
||||
.cleareccend:
|
||||
|
||||
/*
|
||||
* Branch prediction enabled.
|
||||
*/
|
||||
li %r3, BUCSR_DEFAULT
|
||||
mtspr 1013, %r3 /* BUCSR */
|
||||
|
||||
blr
|
||||
|
||||
/*
|
||||
* Exception vectors initialization.
|
||||
*/
|
||||
.global _ivinit
|
||||
.type _ivinit, @function
|
||||
_ivinit:
|
||||
/* MSR initialization.*/
|
||||
lis %r3, MSR_DEFAULT@h
|
||||
ori %r3, %r3, MSR_DEFAULT@l
|
||||
mtMSR %r3
|
||||
|
||||
/* IVPR initialization.*/
|
||||
lis %r3, __ivpr_base__@h
|
||||
ori %r3, %r3, __ivpr_base__@l
|
||||
mtIVPR %r3
|
||||
|
||||
blr
|
||||
|
||||
.section .ivors, "ax"
|
||||
|
||||
.globl IVORS
|
||||
IVORS:
|
||||
IVOR0: b IVOR0
|
||||
.align 4
|
||||
IVOR1: b _IVOR1
|
||||
.align 4
|
||||
IVOR2: b _IVOR2
|
||||
.align 4
|
||||
IVOR3: b _IVOR3
|
||||
.align 4
|
||||
IVOR4: b _IVOR4
|
||||
.align 4
|
||||
IVOR5: b _IVOR5
|
||||
.align 4
|
||||
IVOR6: b _IVOR6
|
||||
.align 4
|
||||
IVOR7: b _IVOR7
|
||||
.align 4
|
||||
IVOR8: b _IVOR8
|
||||
.align 4
|
||||
IVOR9: b _IVOR9
|
||||
.align 4
|
||||
IVOR10: b _IVOR10
|
||||
.align 4
|
||||
IVOR11: b _IVOR11
|
||||
.align 4
|
||||
IVOR12: b _IVOR12
|
||||
.align 4
|
||||
IVOR13: b _IVOR13
|
||||
.align 4
|
||||
IVOR14: b _IVOR14
|
||||
.align 4
|
||||
IVOR15: b _IVOR15
|
||||
|
||||
.section .handlers, "ax"
|
||||
|
||||
/*
|
||||
* Unhandled exceptions handler.
|
||||
*/
|
||||
.weak _IVOR0, _IVOR1, _IVOR2, _IVOR3, _IVOR4, _IVOR5
|
||||
.weak _IVOR6, _IVOR7, _IVOR8, _IVOR9, _IVOR10, _IVOR11
|
||||
.weak _IVOR12, _IVOR13, _IVOR14, _IVOR15
|
||||
.weak _unhandled_exception
|
||||
_IVOR0:
|
||||
_IVOR1:
|
||||
_IVOR2:
|
||||
_IVOR3:
|
||||
_IVOR5:
|
||||
_IVOR6:
|
||||
_IVOR7:
|
||||
_IVOR8:
|
||||
_IVOR9:
|
||||
_IVOR11:
|
||||
_IVOR12:
|
||||
_IVOR13:
|
||||
_IVOR14:
|
||||
_IVOR15:
|
||||
.type _unhandled_exception, @function
|
||||
_unhandled_exception:
|
||||
b _unhandled_exception
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
178
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/ld/SPC560D30.ld
Executable file
178
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/ld/SPC560D30.ld
Executable file
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC560D30 memory setup.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 128k
|
||||
dataflash : org = 0x00800000, len = 64k
|
||||
ram : org = 0x40000000, len = 12k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.handlers))
|
||||
KEEP(*(.crt0))
|
||||
. = ALIGN(0x00000800);
|
||||
KEEP(*(.vectors))
|
||||
/* Note, have to waste the first 4KB because the IVPR register
|
||||
requires an alignment of 4KB and the first 4KB cannot be used,
|
||||
IVOR0 would conflict with the BAM word. Applications could
|
||||
allocate code or data in the first 4KB by using special sections.*/
|
||||
. = ALIGN(0x00001000);
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.ivors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
178
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/ld/SPC560D40.ld
Executable file
178
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/ld/SPC560D40.ld
Executable file
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC560D40 memory setup.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 256k
|
||||
dataflash : org = 0x00800000, len = 64k
|
||||
ram : org = 0x40000000, len = 16k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.handlers))
|
||||
KEEP(*(.crt0))
|
||||
. = ALIGN(0x00000800);
|
||||
KEEP(*(.vectors))
|
||||
/* Note, have to waste the first 4KB because the IVPR register
|
||||
requires an alignment of 4KB and the first 4KB cannot be used,
|
||||
IVOR0 would conflict with the BAM word. Applications could
|
||||
allocate code or data in the first 4KB by using special sections.*/
|
||||
. = ALIGN(0x00001000);
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.ivors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
13
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/port.mk
Executable file
13
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/port.mk
Executable file
@@ -0,0 +1,13 @@
|
||||
# List of the ChibiOS/RT SPC560Dxx port files.
|
||||
PORTSRC = ${CHIBIOS}/os/ports/GCC/PPC/chcore.c
|
||||
|
||||
PORTASM = ${CHIBIOS}/os/ports/GCC/PPC/SPC560Dxx/bam.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560Dxx/core.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560Dxx/vectors.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/ivor.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/crt0.s
|
||||
|
||||
PORTINC = ${CHIBIOS}/os/ports/GCC/PPC \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560Dxx
|
||||
|
||||
PORTLD = ${CHIBIOS}/os/ports/GCC/PPC/SPC560Dxx/ld
|
||||
79
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/ppcparams.h
Executable file
79
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/ppcparams.h
Executable file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Dxx/ppcparams.h
|
||||
* @brief PowerPC parameters for the SPC560B/Cxx.
|
||||
*
|
||||
* @defgroup PPC_SPC560BCxx SPC560BCxx Specific Parameters
|
||||
* @ingroup PPC_SPECIFIC
|
||||
* @details This file contains the PowerPC specific parameters for the
|
||||
* SPC560BCxx platform.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _PPCPARAMS_H_
|
||||
#define _PPCPARAMS_H_
|
||||
|
||||
/**
|
||||
* @brief PPC core model.
|
||||
*/
|
||||
#define PPC_VARIANT PPC_VARIANT_e200z0
|
||||
|
||||
/**
|
||||
* @brief Number of writable bits in IVPR register.
|
||||
*/
|
||||
#define PPC_IVPR_BITS 20
|
||||
|
||||
/**
|
||||
* @brief IVORx registers support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_IVORS FALSE
|
||||
|
||||
/**
|
||||
* @brief Book E instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_BOOKE FALSE
|
||||
|
||||
/**
|
||||
* @brief VLE instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports VLS Load/Store Multiple Volatile instructions.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE_MULTI TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports the decrementer timer.
|
||||
*/
|
||||
#define PPC_SUPPORTS_DECREMENTER FALSE
|
||||
|
||||
#endif /* _PPCPARAMS_H_ */
|
||||
|
||||
/** @} */
|
||||
86
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/vectors.h
Executable file
86
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/vectors.h
Executable file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Dxx/vectors.h
|
||||
* @brief ISR vector module header.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _VECTORS_H_
|
||||
#define _VECTORS_H_
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Number of ISR vectors available.
|
||||
*/
|
||||
#define VECTORS_NUMBER 155
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(_FROM_ASM_)
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
extern uint32_t _vectors[VECTORS_NUMBER];
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void _unhandled_irq(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined(_FROM_ASM_) */
|
||||
|
||||
#endif /* _OSAL_H_ */
|
||||
|
||||
/** @} */
|
||||
292
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/vectors.s
Executable file
292
firmware/chibios/os/ports/GCC/PPC/SPC560Dxx/vectors.s
Executable file
@@ -0,0 +1,292 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Dxx/vectors.s
|
||||
* @brief SPC560Dxx vectors table.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* Software vectors table. The vectors are accessed from the IVOR4
|
||||
handler only. In order to declare an interrupt handler just create
|
||||
a function withe the same name of a vector, the symbol will
|
||||
override the weak symbol declared here.*/
|
||||
.section .vectors, "ax"
|
||||
.align 4
|
||||
.globl _vectors
|
||||
_vectors:
|
||||
.long vector0, vector1, vector2, vector3
|
||||
.long vector4, vector5, vector6, vector7
|
||||
.long vector8, vector9, vector10, vector11
|
||||
.long vector12, vector13, vector14, vector15
|
||||
.long vector16, vector17, vector18, vector19
|
||||
.long vector20, vector21, vector22, vector23
|
||||
.long vector24, vector25, vector26, vector27
|
||||
.long vector28, vector29, vector30, vector31
|
||||
.long vector32, vector33, vector34, vector35
|
||||
.long vector36, vector37, vector38, vector39
|
||||
.long vector40, vector41, vector42, vector43
|
||||
.long vector44, vector45, vector46, vector47
|
||||
.long vector48, vector49, vector50, vector51
|
||||
.long vector52, vector53, vector54, vector55
|
||||
.long vector56, vector57, vector58, vector59
|
||||
.long vector60, vector61, vector62, vector63
|
||||
.long vector64, vector65, vector66, vector67
|
||||
.long vector68, vector69, vector70, vector71
|
||||
.long vector72, vector73, vector74, vector75
|
||||
.long vector76, vector77, vector78, vector79
|
||||
.long vector80, vector81, vector82, vector83
|
||||
.long vector84, vector85, vector86, vector87
|
||||
.long vector88, vector89, vector90, vector91
|
||||
.long vector92, vector93, vector94, vector95
|
||||
.long vector96, vector97, vector98, vector99
|
||||
.long vector100, vector101, vector102, vector103
|
||||
.long vector104, vector105, vector106, vector107
|
||||
.long vector108, vector109, vector110, vector111
|
||||
.long vector112, vector113, vector114, vector115
|
||||
.long vector116, vector117, vector118, vector119
|
||||
.long vector120, vector121, vector122, vector123
|
||||
.long vector124, vector125, vector126, vector127
|
||||
.long vector128, vector129, vector130, vector131
|
||||
.long vector132, vector133, vector134, vector135
|
||||
.long vector136, vector137, vector138, vector139
|
||||
.long vector140, vector141, vector142, vector143
|
||||
.long vector144, vector145, vector146, vector147
|
||||
.long vector148, vector149, vector150, vector151
|
||||
.long vector152, vector153, vector154
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.weak vector0, vector1, vector2, vector3
|
||||
.weak vector4, vector5, vector6, vector7
|
||||
.weak vector8, vector9, vector10, vector11
|
||||
.weak vector12, vector13, vector14, vector15
|
||||
.weak vector16, vector17, vector18, vector19
|
||||
.weak vector20, vector21, vector22, vector23
|
||||
.weak vector24, vector25, vector26, vector27
|
||||
.weak vector28, vector29, vector30, vector31
|
||||
.weak vector32, vector33, vector34, vector35
|
||||
.weak vector36, vector37, vector38, vector39
|
||||
.weak vector40, vector41, vector42, vector43
|
||||
.weak vector44, vector45, vector46, vector47
|
||||
.weak vector48, vector49, vector50, vector51
|
||||
.weak vector52, vector53, vector54, vector55
|
||||
.weak vector56, vector57, vector58, vector59
|
||||
.weak vector60, vector61, vector62, vector63
|
||||
.weak vector64, vector65, vector66, vector67
|
||||
.weak vector68, vector69, vector70, vector71
|
||||
.weak vector72, vector73, vector74, vector75
|
||||
.weak vector76, vector77, vector78, vector79
|
||||
.weak vector80, vector81, vector82, vector83
|
||||
.weak vector84, vector85, vector86, vector87
|
||||
.weak vector88, vector89, vector90, vector91
|
||||
.weak vector92, vector93, vector94, vector95
|
||||
.weak vector96, vector97, vector98, vector99
|
||||
.weak vector100, vector101, vector102, vector103
|
||||
.weak vector104, vector105, vector106, vector107
|
||||
.weak vector108, vector109, vector110, vector111
|
||||
.weak vector112, vector113, vector114, vector115
|
||||
.weak vector116, vector117, vector118, vector119
|
||||
.weak vector120, vector121, vector122, vector123
|
||||
.weak vector124, vector125, vector126, vector127
|
||||
.weak vector128, vector129, vector130, vector131
|
||||
.weak vector132, vector133, vector134, vector135
|
||||
.weak vector136, vector137, vector138, vector139
|
||||
.weak vector140, vector141, vector142, vector143
|
||||
.weak vector144, vector145, vector146, vector147
|
||||
.weak vector148, vector149, vector150, vector151
|
||||
.weak vector152, vector153, vector154
|
||||
|
||||
vector0:
|
||||
vector1:
|
||||
vector2:
|
||||
vector3:
|
||||
vector4:
|
||||
vector5:
|
||||
vector6:
|
||||
vector7:
|
||||
vector8:
|
||||
vector9:
|
||||
vector10:
|
||||
vector11:
|
||||
vector12:
|
||||
vector13:
|
||||
vector14:
|
||||
vector15:
|
||||
vector16:
|
||||
vector17:
|
||||
vector18:
|
||||
vector19:
|
||||
vector20:
|
||||
vector21:
|
||||
vector22:
|
||||
vector23:
|
||||
vector24:
|
||||
vector25:
|
||||
vector26:
|
||||
vector27:
|
||||
vector28:
|
||||
vector29:
|
||||
vector30:
|
||||
vector31:
|
||||
vector32:
|
||||
vector33:
|
||||
vector34:
|
||||
vector35:
|
||||
vector36:
|
||||
vector37:
|
||||
vector38:
|
||||
vector39:
|
||||
vector40:
|
||||
vector41:
|
||||
vector42:
|
||||
vector43:
|
||||
vector44:
|
||||
vector45:
|
||||
vector46:
|
||||
vector47:
|
||||
vector48:
|
||||
vector49:
|
||||
vector50:
|
||||
vector51:
|
||||
vector52:
|
||||
vector53:
|
||||
vector54:
|
||||
vector55:
|
||||
vector56:
|
||||
vector57:
|
||||
vector58:
|
||||
vector59:
|
||||
vector60:
|
||||
vector61:
|
||||
vector62:
|
||||
vector63:
|
||||
vector64:
|
||||
vector65:
|
||||
vector66:
|
||||
vector67:
|
||||
vector68:
|
||||
vector69:
|
||||
vector70:
|
||||
vector71:
|
||||
vector72:
|
||||
vector73:
|
||||
vector74:
|
||||
vector75:
|
||||
vector76:
|
||||
vector77:
|
||||
vector78:
|
||||
vector79:
|
||||
vector80:
|
||||
vector81:
|
||||
vector82:
|
||||
vector83:
|
||||
vector84:
|
||||
vector85:
|
||||
vector86:
|
||||
vector87:
|
||||
vector88:
|
||||
vector89:
|
||||
vector90:
|
||||
vector91:
|
||||
vector92:
|
||||
vector93:
|
||||
vector94:
|
||||
vector95:
|
||||
vector96:
|
||||
vector97:
|
||||
vector98:
|
||||
vector99:
|
||||
vector100:
|
||||
vector101:
|
||||
vector102:
|
||||
vector103:
|
||||
vector104:
|
||||
vector105:
|
||||
vector106:
|
||||
vector107:
|
||||
vector108:
|
||||
vector109:
|
||||
vector110:
|
||||
vector111:
|
||||
vector112:
|
||||
vector113:
|
||||
vector114:
|
||||
vector115:
|
||||
vector116:
|
||||
vector117:
|
||||
vector118:
|
||||
vector119:
|
||||
vector120:
|
||||
vector121:
|
||||
vector122:
|
||||
vector123:
|
||||
vector124:
|
||||
vector125:
|
||||
vector126:
|
||||
vector127:
|
||||
vector128:
|
||||
vector129:
|
||||
vector130:
|
||||
vector131:
|
||||
vector132:
|
||||
vector133:
|
||||
vector134:
|
||||
vector135:
|
||||
vector136:
|
||||
vector137:
|
||||
vector138:
|
||||
vector139:
|
||||
vector140:
|
||||
vector141:
|
||||
vector142:
|
||||
vector143:
|
||||
vector144:
|
||||
vector145:
|
||||
vector146:
|
||||
vector147:
|
||||
vector148:
|
||||
vector149:
|
||||
vector150:
|
||||
vector151:
|
||||
vector152:
|
||||
vector153:
|
||||
vector154:
|
||||
|
||||
.weak _unhandled_irq
|
||||
.type _unhandled_irq, @function
|
||||
_unhandled_irq:
|
||||
b _unhandled_irq
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
54
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/bam.s
Executable file
54
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/bam.s
Executable file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Pxx/bam.s
|
||||
* @brief SPC560Pxx boot assistant record.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* BAM record.*/
|
||||
.section .bam, "ax"
|
||||
.long 0x015A0000
|
||||
.long _reset_address
|
||||
|
||||
.align 2
|
||||
.globl _reset_address
|
||||
.type _reset_address, @function
|
||||
_reset_address:
|
||||
bl _coreinit
|
||||
bl _ivinit
|
||||
|
||||
b _boot_address
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
221
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/core.s
Executable file
221
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/core.s
Executable file
@@ -0,0 +1,221 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Pxx/core.s
|
||||
* @brief e200z0 core configuration.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @name BUCSR registers definitions
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_BPEN 0x00000001
|
||||
#define BUCSR_BALLOC_BFI 0x00000200
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name BUCSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_DEFAULT (BUCSR_BPEN | BUCSR_BALLOC_BFI)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR register definitions
|
||||
* @{
|
||||
*/
|
||||
#define MSR_WE 0x00040000
|
||||
#define MSR_CE 0x00020000
|
||||
#define MSR_EE 0x00008000
|
||||
#define MSR_PR 0x00004000
|
||||
#define MSR_ME 0x00001000
|
||||
#define MSR_DE 0x00000200
|
||||
#define MSR_IS 0x00000020
|
||||
#define MSR_DS 0x00000010
|
||||
#define MSR_RI 0x00000002
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define MSR_DEFAULT (MSR_WE | MSR_CE | MSR_ME)
|
||||
/** @} */
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
.section .coreinit, "ax"
|
||||
|
||||
.align 2
|
||||
.globl _coreinit
|
||||
.type _coreinit, @function
|
||||
_coreinit:
|
||||
/*
|
||||
* RAM clearing, this device requires a write to all RAM location in
|
||||
* order to initialize the ECC detection hardware, this is going to
|
||||
* slow down the startup but there is no way around.
|
||||
*/
|
||||
xor %r0, %r0, %r0
|
||||
xor %r1, %r1, %r1
|
||||
xor %r2, %r2, %r2
|
||||
xor %r3, %r3, %r3
|
||||
xor %r4, %r4, %r4
|
||||
xor %r5, %r5, %r5
|
||||
xor %r6, %r6, %r6
|
||||
xor %r7, %r7, %r7
|
||||
xor %r8, %r8, %r8
|
||||
xor %r9, %r9, %r9
|
||||
xor %r10, %r10, %r10
|
||||
xor %r11, %r11, %r11
|
||||
xor %r12, %r12, %r12
|
||||
xor %r13, %r13, %r13
|
||||
xor %r14, %r14, %r14
|
||||
xor %r15, %r15, %r15
|
||||
xor %r16, %r16, %r16
|
||||
xor %r17, %r17, %r17
|
||||
xor %r18, %r18, %r18
|
||||
xor %r19, %r19, %r19
|
||||
xor %r20, %r20, %r20
|
||||
xor %r21, %r21, %r21
|
||||
xor %r22, %r22, %r22
|
||||
xor %r23, %r23, %r23
|
||||
xor %r24, %r24, %r24
|
||||
xor %r25, %r25, %r25
|
||||
xor %r26, %r26, %r26
|
||||
xor %r27, %r27, %r27
|
||||
xor %r28, %r28, %r28
|
||||
xor %r29, %r29, %r29
|
||||
xor %r30, %r30, %r30
|
||||
xor %r31, %r31, %r31
|
||||
lis %r4, __ram_start__@h
|
||||
ori %r4, %r4, __ram_start__@l
|
||||
lis %r5, __ram_end__@h
|
||||
ori %r5, %r5, __ram_end__@l
|
||||
.cleareccloop:
|
||||
cmpl %cr0, %r4, %r5
|
||||
bge %cr0, .cleareccend
|
||||
stmw %r16, 0(%r4)
|
||||
addi %r4, %r4, 64
|
||||
b .cleareccloop
|
||||
.cleareccend:
|
||||
|
||||
/*
|
||||
* Branch prediction enabled.
|
||||
*/
|
||||
li %r3, BUCSR_DEFAULT
|
||||
mtspr 1013, %r3 /* BUCSR */
|
||||
|
||||
blr
|
||||
|
||||
/*
|
||||
* Exception vectors initialization.
|
||||
*/
|
||||
.global _ivinit
|
||||
.type _ivinit, @function
|
||||
_ivinit:
|
||||
/* MSR initialization.*/
|
||||
lis %r3, MSR_DEFAULT@h
|
||||
ori %r3, %r3, MSR_DEFAULT@l
|
||||
mtMSR %r3
|
||||
|
||||
/* IVPR initialization.*/
|
||||
lis %r3, __ivpr_base__@h
|
||||
ori %r3, %r3, __ivpr_base__@l
|
||||
mtIVPR %r3
|
||||
|
||||
blr
|
||||
|
||||
.section .ivors, "ax"
|
||||
|
||||
.globl IVORS
|
||||
IVORS:
|
||||
IVOR0: b IVOR0
|
||||
.align 4
|
||||
IVOR1: b _IVOR1
|
||||
.align 4
|
||||
IVOR2: b _IVOR2
|
||||
.align 4
|
||||
IVOR3: b _IVOR3
|
||||
.align 4
|
||||
IVOR4: b _IVOR4
|
||||
.align 4
|
||||
IVOR5: b _IVOR5
|
||||
.align 4
|
||||
IVOR6: b _IVOR6
|
||||
.align 4
|
||||
IVOR7: b _IVOR7
|
||||
.align 4
|
||||
IVOR8: b _IVOR8
|
||||
.align 4
|
||||
IVOR9: b _IVOR9
|
||||
.align 4
|
||||
IVOR10: b _IVOR10
|
||||
.align 4
|
||||
IVOR11: b _IVOR11
|
||||
.align 4
|
||||
IVOR12: b _IVOR12
|
||||
.align 4
|
||||
IVOR13: b _IVOR13
|
||||
.align 4
|
||||
IVOR14: b _IVOR14
|
||||
.align 4
|
||||
IVOR15: b _IVOR15
|
||||
|
||||
.section .handlers, "ax"
|
||||
|
||||
/*
|
||||
* Unhandled exceptions handler.
|
||||
*/
|
||||
.weak _IVOR0, _IVOR1, _IVOR2, _IVOR3, _IVOR4, _IVOR5
|
||||
.weak _IVOR6, _IVOR7, _IVOR8, _IVOR9, _IVOR10, _IVOR11
|
||||
.weak _IVOR12, _IVOR13, _IVOR14, _IVOR15
|
||||
.weak _unhandled_exception
|
||||
_IVOR0:
|
||||
_IVOR1:
|
||||
_IVOR2:
|
||||
_IVOR3:
|
||||
_IVOR5:
|
||||
_IVOR6:
|
||||
_IVOR7:
|
||||
_IVOR8:
|
||||
_IVOR9:
|
||||
_IVOR11:
|
||||
_IVOR12:
|
||||
_IVOR13:
|
||||
_IVOR14:
|
||||
_IVOR15:
|
||||
.type _unhandled_exception, @function
|
||||
_unhandled_exception:
|
||||
b _unhandled_exception
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
178
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/ld/SPC560P44.ld
Executable file
178
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/ld/SPC560P44.ld
Executable file
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC560P44 memory setup.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 384k
|
||||
dataflash : org = 0x00800000, len = 64k
|
||||
ram : org = 0x40000000, len = 36k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.handlers))
|
||||
KEEP(*(.crt0))
|
||||
. = ALIGN(0x00000800);
|
||||
KEEP(*(.vectors))
|
||||
/* Note, have to waste the first 64KB because the IVPR register
|
||||
requires an alignment of 64KB and the first 64KB cannot be used,
|
||||
IVOR0 would conflict with the BAM word. Applications could
|
||||
allocate code or data in the first 64KB by using special sections.*/
|
||||
. = ALIGN(0x00010000);
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.ivors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
178
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/ld/SPC560P50.ld
Executable file
178
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/ld/SPC560P50.ld
Executable file
@@ -0,0 +1,178 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC560P44 memory setup.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 512k
|
||||
dataflash : org = 0x00800000, len = 64k
|
||||
ram : org = 0x40000000, len = 40k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.handlers))
|
||||
KEEP(*(.crt0))
|
||||
. = ALIGN(0x00000800);
|
||||
KEEP(*(.vectors))
|
||||
/* Note, have to waste the first 64KB because the IVPR register
|
||||
requires an alignment of 64KB and the first 64KB cannot be used,
|
||||
IVOR0 would conflict with the BAM word. Applications could
|
||||
allocate code or data in the first 64KB by using special sections.*/
|
||||
. = ALIGN(0x00010000);
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.ivors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
13
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/port.mk
Executable file
13
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/port.mk
Executable file
@@ -0,0 +1,13 @@
|
||||
# List of the ChibiOS/RT SPC560Pxx port files.
|
||||
PORTSRC = ${CHIBIOS}/os/ports/GCC/PPC/chcore.c
|
||||
|
||||
PORTASM = ${CHIBIOS}/os/ports/GCC/PPC/SPC560Pxx/bam.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560Pxx/core.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560Pxx/vectors.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/ivor.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/crt0.s
|
||||
|
||||
PORTINC = ${CHIBIOS}/os/ports/GCC/PPC \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC560Pxx
|
||||
|
||||
PORTLD = ${CHIBIOS}/os/ports/GCC/PPC/SPC560Pxx/ld
|
||||
79
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/ppcparams.h
Executable file
79
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/ppcparams.h
Executable file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Pxx/ppcparams.h
|
||||
* @brief PowerPC parameters for the SPC560Pxx.
|
||||
*
|
||||
* @defgroup PPC_SPC560Pxx SPC560Pxx Specific Parameters
|
||||
* @ingroup PPC_SPECIFIC
|
||||
* @details This file contains the PowerPC specific parameters for the
|
||||
* SPC560Pxx platform.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _PPCPARAMS_H_
|
||||
#define _PPCPARAMS_H_
|
||||
|
||||
/**
|
||||
* @brief PPC core model.
|
||||
*/
|
||||
#define PPC_VARIANT PPC_VARIANT_e200z0
|
||||
|
||||
/**
|
||||
* @brief Number of writable bits in IVPR register.
|
||||
*/
|
||||
#define PPC_IVPR_BITS 16
|
||||
|
||||
/**
|
||||
* @brief IVORx registers support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_IVORS FALSE
|
||||
|
||||
/**
|
||||
* @brief Book E instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_BOOKE FALSE
|
||||
|
||||
/**
|
||||
* @brief VLE instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports VLS Load/Store Multiple Volatile instructions.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE_MULTI TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports the decrementer timer.
|
||||
*/
|
||||
#define PPC_SUPPORTS_DECREMENTER FALSE
|
||||
|
||||
#endif /* _PPCPARAMS_H_ */
|
||||
|
||||
/** @} */
|
||||
86
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/vectors.h
Executable file
86
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/vectors.h
Executable file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Pxx/vectors.h
|
||||
* @brief ISR vector module header.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _VECTORS_H_
|
||||
#define _VECTORS_H_
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Number of ISR vectors available.
|
||||
*/
|
||||
#define VECTORS_NUMBER 261
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(_FROM_ASM_)
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
extern uint32_t _vectors[VECTORS_NUMBER];
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void _unhandled_irq(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined(_FROM_ASM_) */
|
||||
|
||||
#endif /* _OSAL_H_ */
|
||||
|
||||
/** @} */
|
||||
452
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/vectors.s
Executable file
452
firmware/chibios/os/ports/GCC/PPC/SPC560Pxx/vectors.s
Executable file
@@ -0,0 +1,452 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560Pxx/vectors.s
|
||||
* @brief SPC560Pxx vectors table.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* Software vectors table. The vectors are accessed from the IVOR4
|
||||
handler only. In order to declare an interrupt handler just create
|
||||
a function withe the same name of a vector, the symbol will
|
||||
override the weak symbol declared here.*/
|
||||
.section .vectors, "ax"
|
||||
.align 4
|
||||
.globl _vectors
|
||||
_vectors:
|
||||
.long vector0, vector1, vector2, vector3
|
||||
.long vector4, vector5, vector6, vector7
|
||||
.long vector8, vector9, vector10, vector11
|
||||
.long vector12, vector13, vector14, vector15
|
||||
.long vector16, vector17, vector18, vector19
|
||||
.long vector20, vector21, vector22, vector23
|
||||
.long vector24, vector25, vector26, vector27
|
||||
.long vector28, vector29, vector30, vector31
|
||||
.long vector32, vector33, vector34, vector35
|
||||
.long vector36, vector37, vector38, vector39
|
||||
.long vector40, vector41, vector42, vector43
|
||||
.long vector44, vector45, vector46, vector47
|
||||
.long vector48, vector49, vector50, vector51
|
||||
.long vector52, vector53, vector54, vector55
|
||||
.long vector56, vector57, vector58, vector59
|
||||
.long vector60, vector61, vector62, vector63
|
||||
.long vector64, vector65, vector66, vector67
|
||||
.long vector68, vector69, vector70, vector71
|
||||
.long vector72, vector73, vector74, vector75
|
||||
.long vector76, vector77, vector78, vector79
|
||||
.long vector80, vector81, vector82, vector83
|
||||
.long vector84, vector85, vector86, vector87
|
||||
.long vector88, vector89, vector90, vector91
|
||||
.long vector92, vector93, vector94, vector95
|
||||
.long vector96, vector97, vector98, vector99
|
||||
.long vector100, vector101, vector102, vector103
|
||||
.long vector104, vector105, vector106, vector107
|
||||
.long vector108, vector109, vector110, vector111
|
||||
.long vector112, vector113, vector114, vector115
|
||||
.long vector116, vector117, vector118, vector119
|
||||
.long vector120, vector121, vector122, vector123
|
||||
.long vector124, vector125, vector126, vector127
|
||||
.long vector128, vector129, vector130, vector131
|
||||
.long vector132, vector133, vector134, vector135
|
||||
.long vector136, vector137, vector138, vector139
|
||||
.long vector140, vector141, vector142, vector143
|
||||
.long vector144, vector145, vector146, vector147
|
||||
.long vector148, vector149, vector150, vector151
|
||||
.long vector152, vector153, vector154, vector155
|
||||
.long vector156, vector157, vector158, vector159
|
||||
.long vector160, vector161, vector162, vector163
|
||||
.long vector164, vector165, vector166, vector167
|
||||
.long vector168, vector169, vector170, vector171
|
||||
.long vector172, vector173, vector174, vector175
|
||||
.long vector176, vector177, vector178, vector179
|
||||
.long vector180, vector181, vector182, vector183
|
||||
.long vector184, vector185, vector186, vector187
|
||||
.long vector188, vector189, vector190, vector191
|
||||
.long vector192, vector193, vector194, vector195
|
||||
.long vector196, vector197, vector198, vector199
|
||||
.long vector200, vector201, vector202, vector203
|
||||
.long vector204, vector205, vector206, vector207
|
||||
.long vector208, vector209, vector210, vector211
|
||||
.long vector212, vector213, vector214, vector215
|
||||
.long vector216, vector217, vector218, vector219
|
||||
.long vector220, vector221, vector222, vector223
|
||||
.long vector224, vector225, vector226, vector227
|
||||
.long vector228, vector229, vector230, vector231
|
||||
.long vector232, vector233, vector234, vector235
|
||||
.long vector236, vector237, vector238, vector239
|
||||
.long vector240, vector241, vector242, vector243
|
||||
.long vector244, vector245, vector246, vector247
|
||||
.long vector248, vector249, vector250, vector251
|
||||
.long vector252, vector253, vector254, vector255
|
||||
.long vector256, vector257, vector258, vector259
|
||||
.long vector260
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.weak vector0, vector1, vector2, vector3
|
||||
.weak vector4, vector5, vector6, vector7
|
||||
.weak vector8, vector9, vector10, vector11
|
||||
.weak vector12, vector13, vector14, vector15
|
||||
.weak vector16, vector17, vector18, vector19
|
||||
.weak vector20, vector21, vector22, vector23
|
||||
.weak vector24, vector25, vector26, vector27
|
||||
.weak vector28, vector29, vector30, vector31
|
||||
.weak vector32, vector33, vector34, vector35
|
||||
.weak vector36, vector37, vector38, vector39
|
||||
.weak vector40, vector41, vector42, vector43
|
||||
.weak vector44, vector45, vector46, vector47
|
||||
.weak vector48, vector49, vector50, vector51
|
||||
.weak vector52, vector53, vector54, vector55
|
||||
.weak vector56, vector57, vector58, vector59
|
||||
.weak vector60, vector61, vector62, vector63
|
||||
.weak vector64, vector65, vector66, vector67
|
||||
.weak vector68, vector69, vector70, vector71
|
||||
.weak vector72, vector73, vector74, vector75
|
||||
.weak vector76, vector77, vector78, vector79
|
||||
.weak vector80, vector81, vector82, vector83
|
||||
.weak vector84, vector85, vector86, vector87
|
||||
.weak vector88, vector89, vector90, vector91
|
||||
.weak vector92, vector93, vector94, vector95
|
||||
.weak vector96, vector97, vector98, vector99
|
||||
.weak vector100, vector101, vector102, vector103
|
||||
.weak vector104, vector105, vector106, vector107
|
||||
.weak vector108, vector109, vector110, vector111
|
||||
.weak vector112, vector113, vector114, vector115
|
||||
.weak vector116, vector117, vector118, vector119
|
||||
.weak vector120, vector121, vector122, vector123
|
||||
.weak vector124, vector125, vector126, vector127
|
||||
.weak vector128, vector129, vector130, vector131
|
||||
.weak vector132, vector133, vector134, vector135
|
||||
.weak vector136, vector137, vector138, vector139
|
||||
.weak vector140, vector141, vector142, vector143
|
||||
.weak vector144, vector145, vector146, vector147
|
||||
.weak vector148, vector149, vector150, vector151
|
||||
.weak vector152, vector153, vector154, vector155
|
||||
.weak vector156, vector157, vector158, vector159
|
||||
.weak vector160, vector161, vector162, vector163
|
||||
.weak vector164, vector165, vector166, vector167
|
||||
.weak vector168, vector169, vector170, vector171
|
||||
.weak vector172, vector173, vector174, vector175
|
||||
.weak vector176, vector177, vector178, vector179
|
||||
.weak vector180, vector181, vector182, vector183
|
||||
.weak vector184, vector185, vector186, vector187
|
||||
.weak vector188, vector189, vector190, vector191
|
||||
.weak vector192, vector193, vector194, vector195
|
||||
.weak vector196, vector197, vector198, vector199
|
||||
.weak vector200, vector201, vector202, vector203
|
||||
.weak vector204, vector205, vector206, vector207
|
||||
.weak vector208, vector209, vector210, vector211
|
||||
.weak vector212, vector213, vector214, vector215
|
||||
.weak vector216, vector217, vector218, vector219
|
||||
.weak vector220, vector221, vector222, vector223
|
||||
.weak vector224, vector225, vector226, vector227
|
||||
.weak vector228, vector229, vector230, vector231
|
||||
.weak vector232, vector233, vector234, vector235
|
||||
.weak vector236, vector237, vector238, vector239
|
||||
.weak vector240, vector241, vector242, vector243
|
||||
.weak vector244, vector245, vector246, vector247
|
||||
.weak vector248, vector249, vector250, vector251
|
||||
.weak vector252, vector253, vector254, vector255
|
||||
.weak vector256, vector257, vector258, vector259
|
||||
.weak vector260
|
||||
|
||||
vector0:
|
||||
vector1:
|
||||
vector2:
|
||||
vector3:
|
||||
vector4:
|
||||
vector5:
|
||||
vector6:
|
||||
vector7:
|
||||
vector8:
|
||||
vector9:
|
||||
vector10:
|
||||
vector11:
|
||||
vector12:
|
||||
vector13:
|
||||
vector14:
|
||||
vector15:
|
||||
vector16:
|
||||
vector17:
|
||||
vector18:
|
||||
vector19:
|
||||
vector20:
|
||||
vector21:
|
||||
vector22:
|
||||
vector23:
|
||||
vector24:
|
||||
vector25:
|
||||
vector26:
|
||||
vector27:
|
||||
vector28:
|
||||
vector29:
|
||||
vector30:
|
||||
vector31:
|
||||
vector32:
|
||||
vector33:
|
||||
vector34:
|
||||
vector35:
|
||||
vector36:
|
||||
vector37:
|
||||
vector38:
|
||||
vector39:
|
||||
vector40:
|
||||
vector41:
|
||||
vector42:
|
||||
vector43:
|
||||
vector44:
|
||||
vector45:
|
||||
vector46:
|
||||
vector47:
|
||||
vector48:
|
||||
vector49:
|
||||
vector50:
|
||||
vector51:
|
||||
vector52:
|
||||
vector53:
|
||||
vector54:
|
||||
vector55:
|
||||
vector56:
|
||||
vector57:
|
||||
vector58:
|
||||
vector59:
|
||||
vector60:
|
||||
vector61:
|
||||
vector62:
|
||||
vector63:
|
||||
vector64:
|
||||
vector65:
|
||||
vector66:
|
||||
vector67:
|
||||
vector68:
|
||||
vector69:
|
||||
vector70:
|
||||
vector71:
|
||||
vector72:
|
||||
vector73:
|
||||
vector74:
|
||||
vector75:
|
||||
vector76:
|
||||
vector77:
|
||||
vector78:
|
||||
vector79:
|
||||
vector80:
|
||||
vector81:
|
||||
vector82:
|
||||
vector83:
|
||||
vector84:
|
||||
vector85:
|
||||
vector86:
|
||||
vector87:
|
||||
vector88:
|
||||
vector89:
|
||||
vector90:
|
||||
vector91:
|
||||
vector92:
|
||||
vector93:
|
||||
vector94:
|
||||
vector95:
|
||||
vector96:
|
||||
vector97:
|
||||
vector98:
|
||||
vector99:
|
||||
vector100:
|
||||
vector101:
|
||||
vector102:
|
||||
vector103:
|
||||
vector104:
|
||||
vector105:
|
||||
vector106:
|
||||
vector107:
|
||||
vector108:
|
||||
vector109:
|
||||
vector110:
|
||||
vector111:
|
||||
vector112:
|
||||
vector113:
|
||||
vector114:
|
||||
vector115:
|
||||
vector116:
|
||||
vector117:
|
||||
vector118:
|
||||
vector119:
|
||||
vector120:
|
||||
vector121:
|
||||
vector122:
|
||||
vector123:
|
||||
vector124:
|
||||
vector125:
|
||||
vector126:
|
||||
vector127:
|
||||
vector128:
|
||||
vector129:
|
||||
vector130:
|
||||
vector131:
|
||||
vector132:
|
||||
vector133:
|
||||
vector134:
|
||||
vector135:
|
||||
vector136:
|
||||
vector137:
|
||||
vector138:
|
||||
vector139:
|
||||
vector140:
|
||||
vector141:
|
||||
vector142:
|
||||
vector143:
|
||||
vector144:
|
||||
vector145:
|
||||
vector146:
|
||||
vector147:
|
||||
vector148:
|
||||
vector149:
|
||||
vector150:
|
||||
vector151:
|
||||
vector152:
|
||||
vector153:
|
||||
vector154:
|
||||
vector155:
|
||||
vector156:
|
||||
vector157:
|
||||
vector158:
|
||||
vector159:
|
||||
vector160:
|
||||
vector161:
|
||||
vector162:
|
||||
vector163:
|
||||
vector164:
|
||||
vector165:
|
||||
vector166:
|
||||
vector167:
|
||||
vector168:
|
||||
vector169:
|
||||
vector170:
|
||||
vector171:
|
||||
vector172:
|
||||
vector173:
|
||||
vector174:
|
||||
vector175:
|
||||
vector176:
|
||||
vector177:
|
||||
vector178:
|
||||
vector179:
|
||||
vector180:
|
||||
vector181:
|
||||
vector182:
|
||||
vector183:
|
||||
vector184:
|
||||
vector185:
|
||||
vector186:
|
||||
vector187:
|
||||
vector188:
|
||||
vector189:
|
||||
vector190:
|
||||
vector191:
|
||||
vector192:
|
||||
vector193:
|
||||
vector194:
|
||||
vector195:
|
||||
vector196:
|
||||
vector197:
|
||||
vector198:
|
||||
vector199:
|
||||
vector200:
|
||||
vector201:
|
||||
vector202:
|
||||
vector203:
|
||||
vector204:
|
||||
vector205:
|
||||
vector206:
|
||||
vector207:
|
||||
vector208:
|
||||
vector209:
|
||||
vector210:
|
||||
vector211:
|
||||
vector212:
|
||||
vector213:
|
||||
vector214:
|
||||
vector215:
|
||||
vector216:
|
||||
vector217:
|
||||
vector218:
|
||||
vector219:
|
||||
vector220:
|
||||
vector221:
|
||||
vector222:
|
||||
vector223:
|
||||
vector224:
|
||||
vector225:
|
||||
vector226:
|
||||
vector227:
|
||||
vector228:
|
||||
vector229:
|
||||
vector230:
|
||||
vector231:
|
||||
vector232:
|
||||
vector233:
|
||||
vector234:
|
||||
vector235:
|
||||
vector236:
|
||||
vector237:
|
||||
vector238:
|
||||
vector239:
|
||||
vector240:
|
||||
vector241:
|
||||
vector242:
|
||||
vector243:
|
||||
vector244:
|
||||
vector245:
|
||||
vector246:
|
||||
vector247:
|
||||
vector248:
|
||||
vector249:
|
||||
vector250:
|
||||
vector251:
|
||||
vector252:
|
||||
vector253:
|
||||
vector254:
|
||||
vector255:
|
||||
vector256:
|
||||
vector257:
|
||||
vector258:
|
||||
vector259:
|
||||
vector260:
|
||||
|
||||
.weak _unhandled_irq
|
||||
.type _unhandled_irq, @function
|
||||
_unhandled_irq:
|
||||
b _unhandled_irq
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
58
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/bam.s
Executable file
58
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/bam.s
Executable file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC563Mxx/bam.s
|
||||
* @brief SPC563Mxx boot assistant record.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* BAM record.*/
|
||||
.section .bam, "ax"
|
||||
#if PPC_USE_VLE
|
||||
.long 0x015A0000
|
||||
#else
|
||||
.long 0x005A0000
|
||||
#endif
|
||||
.long _reset_address
|
||||
|
||||
.align 2
|
||||
.globl _reset_address
|
||||
.type _reset_address, @function
|
||||
_reset_address:
|
||||
bl _coreinit
|
||||
bl _ivinit
|
||||
|
||||
b _boot_address
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
198
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/core.s
Executable file
198
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/core.s
Executable file
@@ -0,0 +1,198 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC563Mxx/core.s
|
||||
* @brief e200z3 core configuration.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @name BUCSR registers definitions
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_BPEN 0x00000001
|
||||
#define BUCSR_BALLOC_BFI 0x00000200
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name BUCSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_DEFAULT (BUCSR_BPEN | BUCSR_BALLOC_BFI)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR register definitions
|
||||
* @{
|
||||
*/
|
||||
#define MSR_UCLE 0x04000000
|
||||
#define MSR_SPE 0x02000000
|
||||
#define MSR_WE 0x00040000
|
||||
#define MSR_CE 0x00020000
|
||||
#define MSR_EE 0x00008000
|
||||
#define MSR_PR 0x00004000
|
||||
#define MSR_FP 0x00002000
|
||||
#define MSR_ME 0x00001000
|
||||
#define MSR_FE0 0x00000800
|
||||
#define MSR_DE 0x00000200
|
||||
#define MSR_FE1 0x00000100
|
||||
#define MSR_IS 0x00000020
|
||||
#define MSR_DS 0x00000010
|
||||
#define MSR_RI 0x00000002
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define MSR_DEFAULT (MSR_SPE | MSR_WE | MSR_CE | MSR_ME)
|
||||
/** @} */
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
.section .coreinit, "ax"
|
||||
|
||||
.align 2
|
||||
.globl _coreinit
|
||||
.type _coreinit, @function
|
||||
_coreinit:
|
||||
|
||||
/*
|
||||
* RAM clearing, this device requires a write to all RAM location in
|
||||
* order to initialize the ECC detection hardware, this is going to
|
||||
* slow down the startup but there is no way around.
|
||||
*/
|
||||
xor %r0, %r0, %r0
|
||||
xor %r1, %r1, %r1
|
||||
xor %r2, %r2, %r2
|
||||
xor %r3, %r3, %r3
|
||||
xor %r4, %r4, %r4
|
||||
xor %r5, %r5, %r5
|
||||
xor %r6, %r6, %r6
|
||||
xor %r7, %r7, %r7
|
||||
xor %r8, %r8, %r8
|
||||
xor %r9, %r9, %r9
|
||||
xor %r10, %r10, %r10
|
||||
xor %r11, %r11, %r11
|
||||
xor %r12, %r12, %r12
|
||||
xor %r13, %r13, %r13
|
||||
xor %r14, %r14, %r14
|
||||
xor %r15, %r15, %r15
|
||||
xor %r16, %r16, %r16
|
||||
xor %r17, %r17, %r17
|
||||
xor %r18, %r18, %r18
|
||||
xor %r19, %r19, %r19
|
||||
xor %r20, %r20, %r20
|
||||
xor %r21, %r21, %r21
|
||||
xor %r22, %r22, %r22
|
||||
xor %r23, %r23, %r23
|
||||
xor %r24, %r24, %r24
|
||||
xor %r25, %r25, %r25
|
||||
xor %r26, %r26, %r26
|
||||
xor %r27, %r27, %r27
|
||||
xor %r28, %r28, %r28
|
||||
xor %r29, %r29, %r29
|
||||
xor %r30, %r30, %r30
|
||||
xor %r31, %r31, %r31
|
||||
lis %r4, __ram_start__@h
|
||||
ori %r4, %r4, __ram_start__@l
|
||||
lis %r5, __ram_end__@h
|
||||
ori %r5, %r5, __ram_end__@l
|
||||
.cleareccloop:
|
||||
cmpl %cr0, %r4, %r5
|
||||
bge %cr0, .cleareccend
|
||||
stmw %r16, 0(%r4)
|
||||
addi %r4, %r4, 64
|
||||
b .cleareccloop
|
||||
.cleareccend:
|
||||
|
||||
/*
|
||||
* Branch prediction enabled.
|
||||
*/
|
||||
li %r3, BUCSR_DEFAULT
|
||||
mtspr 1013, %r3 /* BUCSR */
|
||||
|
||||
blr
|
||||
|
||||
/*
|
||||
* Exception vectors initialization.
|
||||
*/
|
||||
.global _ivinit
|
||||
.type _ivinit, @function
|
||||
_ivinit:
|
||||
/* MSR initialization.*/
|
||||
lis %r3, MSR_DEFAULT@h
|
||||
ori %r3, %r3, MSR_DEFAULT@l
|
||||
mtMSR %r3
|
||||
|
||||
/* IVPR initialization.*/
|
||||
lis %r3, __ivpr_base__@h
|
||||
ori %r3, %r3, __ivpr_base__@l
|
||||
mtIVPR %r3
|
||||
|
||||
/* IVORs initialization.*/
|
||||
lis %r3, _unhandled_exception@h
|
||||
ori %r3, %r3, _unhandled_exception@l
|
||||
|
||||
mtspr 400, %r3 /* IVOR0-15 */
|
||||
mtspr 401, %r3
|
||||
mtspr 402, %r3
|
||||
mtspr 403, %r3
|
||||
mtspr 404, %r3
|
||||
mtspr 405, %r3
|
||||
mtspr 406, %r3
|
||||
mtspr 407, %r3
|
||||
mtspr 408, %r3
|
||||
mtspr 409, %r3
|
||||
mtspr 410, %r3
|
||||
mtspr 411, %r3
|
||||
mtspr 412, %r3
|
||||
mtspr 413, %r3
|
||||
mtspr 414, %r3
|
||||
mtspr 415, %r3
|
||||
mtspr 528, %r3 /* IVOR32-34 */
|
||||
mtspr 529, %r3
|
||||
mtspr 530, %r3
|
||||
|
||||
blr
|
||||
|
||||
.section .handlers, "ax"
|
||||
|
||||
/*
|
||||
* Unhandled exceptions handler.
|
||||
*/
|
||||
.weak _unhandled_exception
|
||||
.type _unhandled_exception, @function
|
||||
_unhandled_exception:
|
||||
b _unhandled_exception
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
171
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/ld/SPC563M64.ld
Executable file
171
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/ld/SPC563M64.ld
Executable file
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC563M64 memory setup.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 1536k
|
||||
ram : org = 0x40000000, len = 94k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.crt0))
|
||||
KEEP(*(.handlers))
|
||||
. = ALIGN(0x800);
|
||||
KEEP(*(.vectors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
13
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/port.mk
Executable file
13
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/port.mk
Executable file
@@ -0,0 +1,13 @@
|
||||
# List of the ChibiOS/RT SPC563Mxx port files.
|
||||
PORTSRC = ${CHIBIOS}/os/ports/GCC/PPC/chcore.c
|
||||
|
||||
PORTASM = ${CHIBIOS}/os/ports/GCC/PPC/SPC563Mxx/bam.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC563Mxx/core.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC563Mxx/vectors.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/ivor.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/crt0.s
|
||||
|
||||
PORTINC = ${CHIBIOS}/os/ports/GCC/PPC \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC563Mxx
|
||||
|
||||
PORTLD = ${CHIBIOS}/os/ports/GCC/PPC/SPC563Mxx/ld
|
||||
79
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/ppcparams.h
Executable file
79
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/ppcparams.h
Executable file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC563Mxx/ppcparams.h
|
||||
* @brief PowerPC parameters for the SPC563Mxx.
|
||||
*
|
||||
* @defgroup PPC_SPC563Mxx SPC563Mxx Specific Parameters
|
||||
* @ingroup PPC_SPECIFIC
|
||||
* @details This file contains the PowerPC specific parameters for the
|
||||
* SPC563Mxx platform.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _PPCPARAMS_H_
|
||||
#define _PPCPARAMS_H_
|
||||
|
||||
/**
|
||||
* @brief PPC core model.
|
||||
*/
|
||||
#define PPC_VARIANT PPC_VARIANT_e200z3
|
||||
|
||||
/**
|
||||
* @brief Number of writable bits in IVPR register.
|
||||
*/
|
||||
#define PPC_IVPR_BITS 16
|
||||
|
||||
/**
|
||||
* @brief IVORx registers support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_IVORS TRUE
|
||||
|
||||
/**
|
||||
* @brief Book E instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_BOOKE TRUE
|
||||
|
||||
/**
|
||||
* @brief VLE instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports VLS Load/Store Multiple Volatile instructions.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE_MULTI TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports the decrementer timer.
|
||||
*/
|
||||
#define PPC_SUPPORTS_DECREMENTER TRUE
|
||||
|
||||
#endif /* _PPCPARAMS_H_ */
|
||||
|
||||
/** @} */
|
||||
86
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/vectors.h
Executable file
86
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/vectors.h
Executable file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC563Mxx/vectors.h
|
||||
* @brief ISR vector module header.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _VECTORS_H_
|
||||
#define _VECTORS_H_
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Number of ISR vectors available.
|
||||
*/
|
||||
#define VECTORS_NUMBER 360
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(_FROM_ASM_)
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
extern uint32_t _vectors[VECTORS_NUMBER];
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void _unhandled_irq(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined(_FROM_ASM_) */
|
||||
|
||||
#endif /* _OSAL_H_ */
|
||||
|
||||
/** @} */
|
||||
599
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/vectors.s
Executable file
599
firmware/chibios/os/ports/GCC/PPC/SPC563Mxx/vectors.s
Executable file
@@ -0,0 +1,599 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC563Mxx/vectors.s
|
||||
* @brief SPC563Mxx vectors table.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* Software vectors table. The vectors are accessed from the IVOR4
|
||||
handler only. In order to declare an interrupt handler just create
|
||||
a function withe the same name of a vector, the symbol will
|
||||
override the weak symbol declared here.*/
|
||||
.section .vectors, "ax"
|
||||
.align 4
|
||||
.globl _vectors
|
||||
_vectors:
|
||||
.long vector0, vector1, vector2, vector3
|
||||
.long vector4, vector5, vector6, vector7
|
||||
.long vector8, vector9, vector10, vector11
|
||||
.long vector12, vector13, vector14, vector15
|
||||
.long vector16, vector17, vector18, vector19
|
||||
.long vector20, vector21, vector22, vector23
|
||||
.long vector24, vector25, vector26, vector27
|
||||
.long vector28, vector29, vector30, vector31
|
||||
.long vector32, vector33, vector34, vector35
|
||||
.long vector36, vector37, vector38, vector39
|
||||
.long vector40, vector41, vector42, vector43
|
||||
.long vector44, vector45, vector46, vector47
|
||||
.long vector48, vector49, vector50, vector51
|
||||
.long vector52, vector53, vector54, vector55
|
||||
.long vector56, vector57, vector58, vector59
|
||||
.long vector60, vector61, vector62, vector63
|
||||
.long vector64, vector65, vector66, vector67
|
||||
.long vector68, vector69, vector70, vector71
|
||||
.long vector72, vector73, vector74, vector75
|
||||
.long vector76, vector77, vector78, vector79
|
||||
.long vector80, vector81, vector82, vector83
|
||||
.long vector84, vector85, vector86, vector87
|
||||
.long vector88, vector89, vector90, vector91
|
||||
.long vector92, vector93, vector94, vector95
|
||||
.long vector96, vector97, vector98, vector99
|
||||
.long vector100, vector101, vector102, vector103
|
||||
.long vector104, vector105, vector106, vector107
|
||||
.long vector108, vector109, vector110, vector111
|
||||
.long vector112, vector113, vector114, vector115
|
||||
.long vector116, vector117, vector118, vector119
|
||||
.long vector120, vector121, vector122, vector123
|
||||
.long vector124, vector125, vector126, vector127
|
||||
.long vector128, vector129, vector130, vector131
|
||||
.long vector132, vector133, vector134, vector135
|
||||
.long vector136, vector137, vector138, vector139
|
||||
.long vector140, vector141, vector142, vector143
|
||||
.long vector144, vector145, vector146, vector147
|
||||
.long vector148, vector149, vector150, vector151
|
||||
.long vector152, vector153, vector154, vector155
|
||||
.long vector156, vector157, vector158, vector159
|
||||
.long vector160, vector161, vector162, vector163
|
||||
.long vector164, vector165, vector166, vector167
|
||||
.long vector168, vector169, vector170, vector171
|
||||
.long vector172, vector173, vector174, vector175
|
||||
.long vector176, vector177, vector178, vector179
|
||||
.long vector180, vector181, vector182, vector183
|
||||
.long vector184, vector185, vector186, vector187
|
||||
.long vector188, vector189, vector190, vector191
|
||||
.long vector192, vector193, vector194, vector195
|
||||
.long vector196, vector197, vector198, vector199
|
||||
.long vector200, vector201, vector202, vector203
|
||||
.long vector204, vector205, vector206, vector207
|
||||
.long vector208, vector209, vector210, vector211
|
||||
.long vector212, vector213, vector214, vector215
|
||||
.long vector216, vector217, vector218, vector219
|
||||
.long vector220, vector221, vector222, vector223
|
||||
.long vector224, vector225, vector226, vector227
|
||||
.long vector228, vector229, vector230, vector231
|
||||
.long vector232, vector233, vector234, vector235
|
||||
.long vector236, vector237, vector238, vector239
|
||||
.long vector240, vector241, vector242, vector243
|
||||
.long vector244, vector245, vector246, vector247
|
||||
.long vector248, vector249, vector250, vector251
|
||||
.long vector252, vector253, vector254, vector255
|
||||
.long vector256, vector257, vector258, vector259
|
||||
.long vector260, vector261, vector262, vector263
|
||||
.long vector264, vector265, vector266, vector267
|
||||
.long vector268, vector269, vector270, vector271
|
||||
.long vector272, vector273, vector274, vector275
|
||||
.long vector276, vector277, vector278, vector279
|
||||
.long vector280, vector281, vector282, vector283
|
||||
.long vector284, vector285, vector286, vector287
|
||||
.long vector288, vector289, vector290, vector291
|
||||
.long vector292, vector293, vector294, vector295
|
||||
.long vector296, vector297, vector298, vector299
|
||||
.long vector300, vector301, vector302, vector303
|
||||
.long vector304, vector305, vector306, vector307
|
||||
.long vector308, vector309, vector310, vector311
|
||||
.long vector312, vector313, vector314, vector315
|
||||
.long vector316, vector317, vector318, vector319
|
||||
.long vector320, vector321, vector322, vector323
|
||||
.long vector324, vector325, vector326, vector327
|
||||
.long vector328, vector329, vector330, vector331
|
||||
.long vector332, vector333, vector334, vector335
|
||||
.long vector336, vector337, vector338, vector339
|
||||
.long vector340, vector341, vector342, vector343
|
||||
.long vector344, vector345, vector346, vector347
|
||||
.long vector348, vector349, vector350, vector351
|
||||
.long vector352, vector353, vector354, vector355
|
||||
.long vector356, vector357, vector358, vector359
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.weak vector0, vector1, vector2, vector3
|
||||
.weak vector4, vector5, vector6, vector7
|
||||
.weak vector8, vector9, vector10, vector11
|
||||
.weak vector12, vector13, vector14, vector15
|
||||
.weak vector16, vector17, vector18, vector19
|
||||
.weak vector20, vector21, vector22, vector23
|
||||
.weak vector24, vector25, vector26, vector27
|
||||
.weak vector28, vector29, vector30, vector31
|
||||
.weak vector32, vector33, vector34, vector35
|
||||
.weak vector36, vector37, vector38, vector39
|
||||
.weak vector40, vector41, vector42, vector43
|
||||
.weak vector44, vector45, vector46, vector47
|
||||
.weak vector48, vector49, vector50, vector51
|
||||
.weak vector52, vector53, vector54, vector55
|
||||
.weak vector56, vector57, vector58, vector59
|
||||
.weak vector60, vector61, vector62, vector63
|
||||
.weak vector64, vector65, vector66, vector67
|
||||
.weak vector68, vector69, vector70, vector71
|
||||
.weak vector72, vector73, vector74, vector75
|
||||
.weak vector76, vector77, vector78, vector79
|
||||
.weak vector80, vector81, vector82, vector83
|
||||
.weak vector84, vector85, vector86, vector87
|
||||
.weak vector88, vector89, vector90, vector91
|
||||
.weak vector92, vector93, vector94, vector95
|
||||
.weak vector96, vector97, vector98, vector99
|
||||
.weak vector100, vector101, vector102, vector103
|
||||
.weak vector104, vector105, vector106, vector107
|
||||
.weak vector108, vector109, vector110, vector111
|
||||
.weak vector112, vector113, vector114, vector115
|
||||
.weak vector116, vector117, vector118, vector119
|
||||
.weak vector120, vector121, vector122, vector123
|
||||
.weak vector124, vector125, vector126, vector127
|
||||
.weak vector128, vector129, vector130, vector131
|
||||
.weak vector132, vector133, vector134, vector135
|
||||
.weak vector136, vector137, vector138, vector139
|
||||
.weak vector140, vector141, vector142, vector143
|
||||
.weak vector144, vector145, vector146, vector147
|
||||
.weak vector148, vector149, vector150, vector151
|
||||
.weak vector152, vector153, vector154, vector155
|
||||
.weak vector156, vector157, vector158, vector159
|
||||
.weak vector160, vector161, vector162, vector163
|
||||
.weak vector164, vector165, vector166, vector167
|
||||
.weak vector168, vector169, vector170, vector171
|
||||
.weak vector172, vector173, vector174, vector175
|
||||
.weak vector176, vector177, vector178, vector179
|
||||
.weak vector180, vector181, vector182, vector183
|
||||
.weak vector184, vector185, vector186, vector187
|
||||
.weak vector188, vector189, vector190, vector191
|
||||
.weak vector192, vector193, vector194, vector195
|
||||
.weak vector196, vector197, vector198, vector199
|
||||
.weak vector200, vector201, vector202, vector203
|
||||
.weak vector204, vector205, vector206, vector207
|
||||
.weak vector208, vector209, vector210, vector211
|
||||
.weak vector212, vector213, vector214, vector215
|
||||
.weak vector216, vector217, vector218, vector219
|
||||
.weak vector220, vector221, vector222, vector223
|
||||
.weak vector224, vector225, vector226, vector227
|
||||
.weak vector228, vector229, vector230, vector231
|
||||
.weak vector232, vector233, vector234, vector235
|
||||
.weak vector236, vector237, vector238, vector239
|
||||
.weak vector240, vector241, vector242, vector243
|
||||
.weak vector244, vector245, vector246, vector247
|
||||
.weak vector248, vector249, vector250, vector251
|
||||
.weak vector252, vector253, vector254, vector255
|
||||
.weak vector256, vector257, vector258, vector259
|
||||
.weak vector260, vector261, vector262, vector263
|
||||
.weak vector264, vector265, vector266, vector267
|
||||
.weak vector268, vector269, vector270, vector271
|
||||
.weak vector272, vector273, vector274, vector275
|
||||
.weak vector276, vector277, vector278, vector279
|
||||
.weak vector280, vector281, vector282, vector283
|
||||
.weak vector284, vector285, vector286, vector287
|
||||
.weak vector288, vector289, vector290, vector291
|
||||
.weak vector292, vector293, vector294, vector295
|
||||
.weak vector296, vector297, vector298, vector299
|
||||
.weak vector300, vector301, vector302, vector303
|
||||
.weak vector304, vector305, vector306, vector307
|
||||
.weak vector308, vector309, vector310, vector311
|
||||
.weak vector312, vector313, vector314, vector315
|
||||
.weak vector316, vector317, vector318, vector319
|
||||
.weak vector320, vector321, vector322, vector323
|
||||
.weak vector324, vector325, vector326, vector327
|
||||
.weak vector328, vector329, vector330, vector331
|
||||
.weak vector332, vector333, vector334, vector335
|
||||
.weak vector336, vector337, vector338, vector339
|
||||
.weak vector340, vector341, vector342, vector343
|
||||
.weak vector344, vector345, vector346, vector347
|
||||
.weak vector348, vector349, vector350, vector351
|
||||
.weak vector352, vector353, vector354, vector355
|
||||
.weak vector356, vector357, vector358, vector359
|
||||
|
||||
vector0:
|
||||
vector1:
|
||||
vector2:
|
||||
vector3:
|
||||
vector4:
|
||||
vector5:
|
||||
vector6:
|
||||
vector7:
|
||||
vector8:
|
||||
vector9:
|
||||
vector10:
|
||||
vector11:
|
||||
vector12:
|
||||
vector13:
|
||||
vector14:
|
||||
vector15:
|
||||
vector16:
|
||||
vector17:
|
||||
vector18:
|
||||
vector19:
|
||||
vector20:
|
||||
vector21:
|
||||
vector22:
|
||||
vector23:
|
||||
vector24:
|
||||
vector25:
|
||||
vector26:
|
||||
vector27:
|
||||
vector28:
|
||||
vector29:
|
||||
vector30:
|
||||
vector31:
|
||||
vector32:
|
||||
vector33:
|
||||
vector34:
|
||||
vector35:
|
||||
vector36:
|
||||
vector37:
|
||||
vector38:
|
||||
vector39:
|
||||
vector40:
|
||||
vector41:
|
||||
vector42:
|
||||
vector43:
|
||||
vector44:
|
||||
vector45:
|
||||
vector46:
|
||||
vector47:
|
||||
vector48:
|
||||
vector49:
|
||||
vector50:
|
||||
vector51:
|
||||
vector52:
|
||||
vector53:
|
||||
vector54:
|
||||
vector55:
|
||||
vector56:
|
||||
vector57:
|
||||
vector58:
|
||||
vector59:
|
||||
vector60:
|
||||
vector61:
|
||||
vector62:
|
||||
vector63:
|
||||
vector64:
|
||||
vector65:
|
||||
vector66:
|
||||
vector67:
|
||||
vector68:
|
||||
vector69:
|
||||
vector70:
|
||||
vector71:
|
||||
vector72:
|
||||
vector73:
|
||||
vector74:
|
||||
vector75:
|
||||
vector76:
|
||||
vector77:
|
||||
vector78:
|
||||
vector79:
|
||||
vector80:
|
||||
vector81:
|
||||
vector82:
|
||||
vector83:
|
||||
vector84:
|
||||
vector85:
|
||||
vector86:
|
||||
vector87:
|
||||
vector88:
|
||||
vector89:
|
||||
vector90:
|
||||
vector91:
|
||||
vector92:
|
||||
vector93:
|
||||
vector94:
|
||||
vector95:
|
||||
vector96:
|
||||
vector97:
|
||||
vector98:
|
||||
vector99:
|
||||
vector100:
|
||||
vector101:
|
||||
vector102:
|
||||
vector103:
|
||||
vector104:
|
||||
vector105:
|
||||
vector106:
|
||||
vector107:
|
||||
vector108:
|
||||
vector109:
|
||||
vector110:
|
||||
vector111:
|
||||
vector112:
|
||||
vector113:
|
||||
vector114:
|
||||
vector115:
|
||||
vector116:
|
||||
vector117:
|
||||
vector118:
|
||||
vector119:
|
||||
vector120:
|
||||
vector121:
|
||||
vector122:
|
||||
vector123:
|
||||
vector124:
|
||||
vector125:
|
||||
vector126:
|
||||
vector127:
|
||||
vector128:
|
||||
vector129:
|
||||
vector130:
|
||||
vector131:
|
||||
vector132:
|
||||
vector133:
|
||||
vector134:
|
||||
vector135:
|
||||
vector136:
|
||||
vector137:
|
||||
vector138:
|
||||
vector139:
|
||||
vector140:
|
||||
vector141:
|
||||
vector142:
|
||||
vector143:
|
||||
vector144:
|
||||
vector145:
|
||||
vector146:
|
||||
vector147:
|
||||
vector148:
|
||||
vector149:
|
||||
vector150:
|
||||
vector151:
|
||||
vector152:
|
||||
vector153:
|
||||
vector154:
|
||||
vector155:
|
||||
vector156:
|
||||
vector157:
|
||||
vector158:
|
||||
vector159:
|
||||
vector160:
|
||||
vector161:
|
||||
vector162:
|
||||
vector163:
|
||||
vector164:
|
||||
vector165:
|
||||
vector166:
|
||||
vector167:
|
||||
vector168:
|
||||
vector169:
|
||||
vector170:
|
||||
vector171:
|
||||
vector172:
|
||||
vector173:
|
||||
vector174:
|
||||
vector175:
|
||||
vector176:
|
||||
vector177:
|
||||
vector178:
|
||||
vector179:
|
||||
vector180:
|
||||
vector181:
|
||||
vector182:
|
||||
vector183:
|
||||
vector184:
|
||||
vector185:
|
||||
vector186:
|
||||
vector187:
|
||||
vector188:
|
||||
vector189:
|
||||
vector190:
|
||||
vector191:
|
||||
vector192:
|
||||
vector193:
|
||||
vector194:
|
||||
vector195:
|
||||
vector196:
|
||||
vector197:
|
||||
vector198:
|
||||
vector199:
|
||||
vector200:
|
||||
vector201:
|
||||
vector202:
|
||||
vector203:
|
||||
vector204:
|
||||
vector205:
|
||||
vector206:
|
||||
vector207:
|
||||
vector208:
|
||||
vector209:
|
||||
vector210:
|
||||
vector211:
|
||||
vector212:
|
||||
vector213:
|
||||
vector214:
|
||||
vector215:
|
||||
vector216:
|
||||
vector217:
|
||||
vector218:
|
||||
vector219:
|
||||
vector220:
|
||||
vector221:
|
||||
vector222:
|
||||
vector223:
|
||||
vector224:
|
||||
vector225:
|
||||
vector226:
|
||||
vector227:
|
||||
vector228:
|
||||
vector229:
|
||||
vector230:
|
||||
vector231:
|
||||
vector232:
|
||||
vector233:
|
||||
vector234:
|
||||
vector235:
|
||||
vector236:
|
||||
vector237:
|
||||
vector238:
|
||||
vector239:
|
||||
vector240:
|
||||
vector241:
|
||||
vector242:
|
||||
vector243:
|
||||
vector244:
|
||||
vector245:
|
||||
vector246:
|
||||
vector247:
|
||||
vector248:
|
||||
vector249:
|
||||
vector250:
|
||||
vector251:
|
||||
vector252:
|
||||
vector253:
|
||||
vector254:
|
||||
vector255:
|
||||
vector256:
|
||||
vector257:
|
||||
vector258:
|
||||
vector259:
|
||||
vector260:
|
||||
vector261:
|
||||
vector262:
|
||||
vector263:
|
||||
vector264:
|
||||
vector265:
|
||||
vector266:
|
||||
vector267:
|
||||
vector268:
|
||||
vector269:
|
||||
vector270:
|
||||
vector271:
|
||||
vector272:
|
||||
vector273:
|
||||
vector274:
|
||||
vector275:
|
||||
vector276:
|
||||
vector277:
|
||||
vector278:
|
||||
vector279:
|
||||
vector280:
|
||||
vector281:
|
||||
vector282:
|
||||
vector283:
|
||||
vector284:
|
||||
vector285:
|
||||
vector286:
|
||||
vector287:
|
||||
vector288:
|
||||
vector289:
|
||||
vector290:
|
||||
vector291:
|
||||
vector292:
|
||||
vector293:
|
||||
vector294:
|
||||
vector295:
|
||||
vector296:
|
||||
vector297:
|
||||
vector298:
|
||||
vector299:
|
||||
vector300:
|
||||
vector301:
|
||||
vector302:
|
||||
vector303:
|
||||
vector304:
|
||||
vector305:
|
||||
vector306:
|
||||
vector307:
|
||||
vector308:
|
||||
vector309:
|
||||
vector310:
|
||||
vector311:
|
||||
vector312:
|
||||
vector313:
|
||||
vector314:
|
||||
vector315:
|
||||
vector316:
|
||||
vector317:
|
||||
vector318:
|
||||
vector319:
|
||||
vector320:
|
||||
vector321:
|
||||
vector322:
|
||||
vector323:
|
||||
vector324:
|
||||
vector325:
|
||||
vector326:
|
||||
vector327:
|
||||
vector328:
|
||||
vector329:
|
||||
vector330:
|
||||
vector331:
|
||||
vector332:
|
||||
vector333:
|
||||
vector334:
|
||||
vector335:
|
||||
vector336:
|
||||
vector337:
|
||||
vector338:
|
||||
vector339:
|
||||
vector340:
|
||||
vector341:
|
||||
vector342:
|
||||
vector343:
|
||||
vector344:
|
||||
vector345:
|
||||
vector346:
|
||||
vector347:
|
||||
vector348:
|
||||
vector349:
|
||||
vector350:
|
||||
vector351:
|
||||
vector352:
|
||||
vector353:
|
||||
vector354:
|
||||
vector355:
|
||||
vector356:
|
||||
vector357:
|
||||
vector358:
|
||||
vector359:
|
||||
|
||||
.weak _unhandled_irq
|
||||
.type _unhandled_irq, @function
|
||||
_unhandled_irq:
|
||||
b _unhandled_irq
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
58
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/bam.s
Executable file
58
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/bam.s
Executable file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC564Axx/bam.s
|
||||
* @brief SPC564Axx boot assistant record.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* BAM record.*/
|
||||
.section .bam, "ax"
|
||||
#if PPC_USE_VLE
|
||||
.long 0x015A0000
|
||||
#else
|
||||
.long 0x005A0000
|
||||
#endif
|
||||
.long _reset_address
|
||||
|
||||
.align 2
|
||||
.globl _reset_address
|
||||
.type _reset_address, @function
|
||||
_reset_address:
|
||||
bl _coreinit
|
||||
bl _ivinit
|
||||
|
||||
b _boot_address
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
486
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/core.s
Executable file
486
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/core.s
Executable file
@@ -0,0 +1,486 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC564Axx/core.s
|
||||
* @brief e200z4 core configuration.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @name MASx registers definitions
|
||||
* @{
|
||||
*/
|
||||
#define MAS0_TBLMAS_TBL 0x10000000
|
||||
#define MAS0_ESEL_MASK 0x000F0000
|
||||
#define MAS0_ESEL(n) ((n) << 16)
|
||||
|
||||
#define MAS1_VALID 0x80000000
|
||||
#define MAS1_IPROT 0x40000000
|
||||
#define MAS1_TID_MASK 0x00FF0000
|
||||
#define MAS1_TS 0x00001000
|
||||
#define MAS1_TSISE_MASK 0x00000F80
|
||||
#define MAS1_TSISE_1K 0x00000000
|
||||
#define MAS1_TSISE_2K 0x00000080
|
||||
#define MAS1_TSISE_4K 0x00000100
|
||||
#define MAS1_TSISE_8K 0x00000180
|
||||
#define MAS1_TSISE_16K 0x00000200
|
||||
#define MAS1_TSISE_32K 0x00000280
|
||||
#define MAS1_TSISE_64K 0x00000300
|
||||
#define MAS1_TSISE_128K 0x00000380
|
||||
#define MAS1_TSISE_256K 0x00000400
|
||||
#define MAS1_TSISE_512K 0x00000480
|
||||
#define MAS1_TSISE_1M 0x00000500
|
||||
#define MAS1_TSISE_2M 0x00000580
|
||||
#define MAS1_TSISE_4M 0x00000600
|
||||
#define MAS1_TSISE_8M 0x00000680
|
||||
#define MAS1_TSISE_16M 0x00000700
|
||||
#define MAS1_TSISE_32M 0x00000780
|
||||
#define MAS1_TSISE_64M 0x00000800
|
||||
#define MAS1_TSISE_128M 0x00000880
|
||||
#define MAS1_TSISE_256M 0x00000900
|
||||
#define MAS1_TSISE_512M 0x00000980
|
||||
#define MAS1_TSISE_1G 0x00000A00
|
||||
#define MAS1_TSISE_2G 0x00000A80
|
||||
#define MAS1_TSISE_4G 0x00000B00
|
||||
|
||||
#define MAS2_EPN_MASK 0xFFFFFC00
|
||||
#define MAS2_EPN(n) ((n) & MAS2_EPN_MASK)
|
||||
#define MAS2_EBOOK 0x00000000
|
||||
#define MAS2_VLE 0x00000020
|
||||
#define MAS2_W 0x00000010
|
||||
#define MAS2_I 0x00000008
|
||||
#define MAS2_M 0x00000004
|
||||
#define MAS2_G 0x00000002
|
||||
#define MAS2_E 0x00000001
|
||||
|
||||
#define MAS3_RPN_MASK 0xFFFFFC00
|
||||
#define MAS3_RPN(n) ((n) & MAS3_RPN_MASK)
|
||||
#define MAS3_U0 0x00000200
|
||||
#define MAS3_U1 0x00000100
|
||||
#define MAS3_U2 0x00000080
|
||||
#define MAS3_U3 0x00000040
|
||||
#define MAS3_UX 0x00000020
|
||||
#define MAS3_SX 0x00000010
|
||||
#define MAS3_UW 0x00000008
|
||||
#define MAS3_SW 0x00000004
|
||||
#define MAS3_UR 0x00000002
|
||||
#define MAS3_SR 0x00000001
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name BUCSR registers definitions
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_BPEN 0x00000001
|
||||
#define BUCSR_BPRED_MASK 0x00000006
|
||||
#define BUCSR_BPRED_0 0x00000000
|
||||
#define BUCSR_BPRED_1 0x00000002
|
||||
#define BUCSR_BPRED_2 0x00000004
|
||||
#define BUCSR_BPRED_3 0x00000006
|
||||
#define BUCSR_BALLOC_MASK 0x00000030
|
||||
#define BUCSR_BALLOC_0 0x00000000
|
||||
#define BUCSR_BALLOC_1 0x00000010
|
||||
#define BUCSR_BALLOC_2 0x00000020
|
||||
#define BUCSR_BALLOC_3 0x00000030
|
||||
#define BUCSR_BALLOC_BFI 0x00000200
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name TLB default settings
|
||||
* @{
|
||||
*/
|
||||
#define TLB0_MAS0 (MAS0_TBLMAS_TBL | MAS0_ESEL(0))
|
||||
#define TLB0_MAS1 (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_256K)
|
||||
#define TLB0_MAS2 (MAS2_EPN(0x40000000) | MAS2_VLE)
|
||||
#define TLB0_MAS3 (MAS3_RPN(0x40000000) | \
|
||||
MAS3_UX | MAS3_SX | MAS3_UW | MAS3_SW | \
|
||||
MAS3_UR | MAS3_SR)
|
||||
|
||||
#define TLB1_MAS0 (MAS0_TBLMAS_TBL | MAS0_ESEL(1))
|
||||
#define TLB1_MAS1 (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_4M)
|
||||
#define TLB1_MAS2 (MAS2_EPN(0x00000000) | MAS2_VLE)
|
||||
#define TLB1_MAS3 (MAS3_RPN(0x00000000) | \
|
||||
MAS3_UX | MAS3_SX | MAS3_UW | MAS3_SW | \
|
||||
MAS3_UR | MAS3_SR)
|
||||
|
||||
#define TLB2_MAS0 (MAS0_TBLMAS_TBL | MAS0_ESEL(2))
|
||||
#define TLB2_MAS1 (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_1M)
|
||||
#define TLB2_MAS2 (MAS2_EPN(0xC3F00000) | MAS2_I)
|
||||
#define TLB2_MAS3 (MAS3_RPN(0xC3F00000) | \
|
||||
MAS3_UW | MAS3_SW | MAS3_UR | MAS3_SR)
|
||||
|
||||
#define TLB3_MAS0 (MAS0_TBLMAS_TBL | MAS0_ESEL(3))
|
||||
#define TLB3_MAS1 (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_1M)
|
||||
#define TLB3_MAS2 (MAS2_EPN(0xFFE00000) | MAS2_I)
|
||||
#define TLB3_MAS3 (MAS3_RPN(0xFFE00000) | \
|
||||
MAS3_UW | MAS3_SW | MAS3_UR | MAS3_SR)
|
||||
|
||||
#define TLB4_MAS0 (MAS0_TBLMAS_TBL | MAS0_ESEL(4))
|
||||
#define TLB4_MAS1 (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_1M)
|
||||
#define TLB4_MAS2 (MAS2_EPN(0xFFF00000) | MAS2_I)
|
||||
#define TLB4_MAS3 (MAS3_RPN(0xFFF00000) | \
|
||||
MAS3_UW | MAS3_SW | MAS3_UR | MAS3_SR)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name LICSR1 registers definitions
|
||||
* @{
|
||||
*/
|
||||
#define LICSR1_ICE 0x00000001
|
||||
#define LICSR1_ICINV 0x00000002
|
||||
#define LICSR1_ICORG 0x00000010
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name BUCSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_DEFAULT (BUCSR_BPEN | BUCSR_BPRED_0 | \
|
||||
BUCSR_BALLOC_0 | BUCSR_BALLOC_BFI)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name LICSR1 default settings
|
||||
* @{
|
||||
*/
|
||||
#define LICSR1_DEFAULT (LICSR1_ICE | LICSR1_ICORG)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR register definitions
|
||||
* @{
|
||||
*/
|
||||
#define MSR_UCLE 0x04000000
|
||||
#define MSR_SPE 0x02000000
|
||||
#define MSR_WE 0x00040000
|
||||
#define MSR_CE 0x00020000
|
||||
#define MSR_EE 0x00008000
|
||||
#define MSR_PR 0x00004000
|
||||
#define MSR_FP 0x00002000
|
||||
#define MSR_ME 0x00001000
|
||||
#define MSR_FE0 0x00000800
|
||||
#define MSR_DE 0x00000200
|
||||
#define MSR_FE1 0x00000100
|
||||
#define MSR_IS 0x00000020
|
||||
#define MSR_DS 0x00000010
|
||||
#define MSR_RI 0x00000002
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define MSR_DEFAULT (MSR_SPE | MSR_WE | MSR_CE | MSR_ME)
|
||||
/** @} */
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
.section .coreinit, "ax"
|
||||
|
||||
.align 2
|
||||
_ramcode:
|
||||
tlbwe
|
||||
isync
|
||||
blr
|
||||
|
||||
.align 2
|
||||
.globl _coreinit
|
||||
.type _coreinit, @function
|
||||
_coreinit:
|
||||
/*
|
||||
* Invalidating all TLBs except TLB1.
|
||||
*/
|
||||
lis %r3, 0
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(0))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(2))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(3))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(4))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(5))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(6))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(7))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(8))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(9))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(10))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(11))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(12))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(13))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(14))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(15))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
|
||||
/*
|
||||
* TLB0 allocated to internal RAM.
|
||||
*/
|
||||
lis %r3, TLB0_MAS0@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
lis %r3, TLB0_MAS1@h
|
||||
ori %r3, %r3, TLB0_MAS1@l
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
lis %r3, TLB0_MAS2@h
|
||||
ori %r3, %r3, TLB0_MAS2@l
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
lis %r3, TLB0_MAS3@h
|
||||
ori %r3, %r3, TLB0_MAS3@l
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
tlbwe
|
||||
|
||||
/*
|
||||
* TLB2 allocated to internal Peripherals Bridge A.
|
||||
*/
|
||||
lis %r3, TLB2_MAS0@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
lis %r3, TLB2_MAS1@h
|
||||
ori %r3, %r3, TLB2_MAS1@l
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
lis %r3, TLB2_MAS2@h
|
||||
ori %r3, %r3, TLB2_MAS2@l
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
lis %r3, TLB2_MAS3@h
|
||||
ori %r3, %r3, TLB2_MAS3@l
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
tlbwe
|
||||
|
||||
/*
|
||||
* TLB3 allocated to internal Peripherals Bridge B.
|
||||
*/
|
||||
lis %r3, TLB3_MAS0@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
lis %r3, TLB3_MAS1@h
|
||||
ori %r3, %r3, TLB3_MAS1@l
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
lis %r3, TLB3_MAS2@h
|
||||
ori %r3, %r3, TLB3_MAS2@l
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
lis %r3, TLB3_MAS3@h
|
||||
ori %r3, %r3, TLB3_MAS3@l
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
tlbwe
|
||||
|
||||
/*
|
||||
* TLB4 allocated to on-platform peripherals.
|
||||
*/
|
||||
lis %r3, TLB4_MAS0@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
lis %r3, TLB4_MAS1@h
|
||||
ori %r3, %r3, TLB4_MAS1@l
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
lis %r3, TLB4_MAS2@h
|
||||
ori %r3, %r3, TLB4_MAS2@l
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
lis %r3, TLB4_MAS3@h
|
||||
ori %r3, %r3, TLB4_MAS3@l
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
tlbwe
|
||||
|
||||
/*
|
||||
* RAM clearing, this device requires a write to all RAM location in
|
||||
* order to initialize the ECC detection hardware, this is going to
|
||||
* slow down the startup but there is no way around.
|
||||
*/
|
||||
xor %r0, %r0, %r0
|
||||
xor %r1, %r1, %r1
|
||||
xor %r2, %r2, %r2
|
||||
xor %r3, %r3, %r3
|
||||
xor %r4, %r4, %r4
|
||||
xor %r5, %r5, %r5
|
||||
xor %r6, %r6, %r6
|
||||
xor %r7, %r7, %r7
|
||||
xor %r8, %r8, %r8
|
||||
xor %r9, %r9, %r9
|
||||
xor %r10, %r10, %r10
|
||||
xor %r11, %r11, %r11
|
||||
xor %r12, %r12, %r12
|
||||
xor %r13, %r13, %r13
|
||||
xor %r14, %r14, %r14
|
||||
xor %r15, %r15, %r15
|
||||
xor %r16, %r16, %r16
|
||||
xor %r17, %r17, %r17
|
||||
xor %r18, %r18, %r18
|
||||
xor %r19, %r19, %r19
|
||||
xor %r20, %r20, %r20
|
||||
xor %r21, %r21, %r21
|
||||
xor %r22, %r22, %r22
|
||||
xor %r23, %r23, %r23
|
||||
xor %r24, %r24, %r24
|
||||
xor %r25, %r25, %r25
|
||||
xor %r26, %r26, %r26
|
||||
xor %r27, %r27, %r27
|
||||
xor %r28, %r28, %r28
|
||||
xor %r29, %r29, %r29
|
||||
xor %r30, %r30, %r30
|
||||
xor %r31, %r31, %r31
|
||||
lis %r4, __ram_start__@h
|
||||
ori %r4, %r4, __ram_start__@l
|
||||
lis %r5, __ram_end__@h
|
||||
ori %r5, %r5, __ram_end__@l
|
||||
.cleareccloop:
|
||||
cmpl %cr0, %r4, %r5
|
||||
bge %cr0, .cleareccend
|
||||
stmw %r16, 0(%r4)
|
||||
addi %r4, %r4, 64
|
||||
b .cleareccloop
|
||||
.cleareccend:
|
||||
|
||||
/*
|
||||
* *Finally* the TLB1 is re-allocated to flash, note, the final phase
|
||||
* is executed from RAM.
|
||||
*/
|
||||
lis %r3, TLB1_MAS0@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
lis %r3, TLB1_MAS1@h
|
||||
ori %r3, %r3, TLB1_MAS1@l
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
lis %r3, TLB1_MAS2@h
|
||||
ori %r3, %r3, TLB1_MAS2@l
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
lis %r3, TLB1_MAS3@h
|
||||
ori %r3, %r3, TLB1_MAS3@l
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
mflr %r4
|
||||
lis %r6, _ramcode@h
|
||||
ori %r6, %r6, _ramcode@l
|
||||
lis %r7, 0x40010000@h
|
||||
mtctr %r7
|
||||
lwz %r3, 0(%r6)
|
||||
stw %r3, 0(%r7)
|
||||
lwz %r3, 4(%r6)
|
||||
stw %r3, 4(%r7)
|
||||
lwz %r3, 8(%r6)
|
||||
stw %r3, 8(%r7)
|
||||
bctrl
|
||||
mtlr %r4
|
||||
|
||||
/*
|
||||
* Branch prediction enabled.
|
||||
*/
|
||||
li %r3, BUCSR_DEFAULT
|
||||
mtspr 1013, %r3 /* BUCSR */
|
||||
|
||||
/*
|
||||
* Cache invalidated and then enabled.
|
||||
*/
|
||||
li %r3, LICSR1_ICINV
|
||||
mtspr 1011, %r3 /* LICSR1 */
|
||||
.inv: mfspr %r3, 1011 /* LICSR1 */
|
||||
andi. %r3, %r3, LICSR1_ICINV
|
||||
bne .inv
|
||||
lis %r3, LICSR1_DEFAULT@h
|
||||
ori %r3, %r3, LICSR1_DEFAULT@l
|
||||
mtspr 1011, %r3 /* LICSR1 */
|
||||
|
||||
blr
|
||||
|
||||
/*
|
||||
* Exception vectors initialization.
|
||||
*/
|
||||
.global _ivinit
|
||||
.type _ivinit, @function
|
||||
_ivinit:
|
||||
/* MSR initialization.*/
|
||||
lis %r3, MSR_DEFAULT@h
|
||||
ori %r3, %r3, MSR_DEFAULT@l
|
||||
mtMSR %r3
|
||||
|
||||
/* IVPR initialization.*/
|
||||
lis %r3, __ivpr_base__@h
|
||||
ori %r3, %r3, __ivpr_base__@l
|
||||
mtIVPR %r3
|
||||
|
||||
/* IVORs initialization.*/
|
||||
lis %r3, _unhandled_exception@h
|
||||
ori %r3, %r3, _unhandled_exception@l
|
||||
|
||||
mtspr 400, %r3 /* IVOR0-15 */
|
||||
mtspr 401, %r3
|
||||
mtspr 402, %r3
|
||||
mtspr 403, %r3
|
||||
mtspr 404, %r3
|
||||
mtspr 405, %r3
|
||||
mtspr 406, %r3
|
||||
mtspr 407, %r3
|
||||
mtspr 408, %r3
|
||||
mtspr 409, %r3
|
||||
mtspr 410, %r3
|
||||
mtspr 411, %r3
|
||||
mtspr 412, %r3
|
||||
mtspr 413, %r3
|
||||
mtspr 414, %r3
|
||||
mtspr 415, %r3
|
||||
mtspr 528, %r3 /* IVOR32-34 */
|
||||
mtspr 529, %r3
|
||||
mtspr 530, %r3
|
||||
|
||||
blr
|
||||
|
||||
.section .handlers, "ax"
|
||||
|
||||
/*
|
||||
* Unhandled exceptions handler.
|
||||
*/
|
||||
.weak _unhandled_exception
|
||||
.type _unhandled_exception, @function
|
||||
_unhandled_exception:
|
||||
b _unhandled_exception
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
171
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/ld/SPC564A70.ld
Executable file
171
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/ld/SPC564A70.ld
Executable file
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC564A70 memory setup.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 2M
|
||||
ram : org = 0x40000000, len = 128k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.crt0))
|
||||
KEEP(*(.handlers))
|
||||
. = ALIGN(0x800);
|
||||
KEEP(*(.vectors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
171
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/ld/SPC564A80.ld
Executable file
171
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/ld/SPC564A80.ld
Executable file
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC564A80 memory setup.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 4M
|
||||
ram : org = 0x40000000, len = 192k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.crt0))
|
||||
KEEP(*(.handlers))
|
||||
. = ALIGN(0x800);
|
||||
KEEP(*(.vectors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
13
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/port.mk
Executable file
13
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/port.mk
Executable file
@@ -0,0 +1,13 @@
|
||||
# List of the ChibiOS/RT SPC564Axx port files.
|
||||
PORTSRC = ${CHIBIOS}/os/ports/GCC/PPC/chcore.c
|
||||
|
||||
PORTASM = ${CHIBIOS}/os/ports/GCC/PPC/SPC564Axx/bam.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC564Axx/core.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC564Axx/vectors.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/ivor.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/crt0.s
|
||||
|
||||
PORTINC = ${CHIBIOS}/os/ports/GCC/PPC \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC564Axx
|
||||
|
||||
PORTLD = ${CHIBIOS}/os/ports/GCC/PPC/SPC564Axx/ld
|
||||
74
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/ppcparams.h
Executable file
74
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/ppcparams.h
Executable file
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC564Axx/ppcparams.h
|
||||
* @brief PowerPC parameters for the SPC564Axx.
|
||||
*
|
||||
* @defgroup PPC_SPC564Axx SPC564Axx Specific Parameters
|
||||
* @ingroup PPC_SPECIFIC
|
||||
* @details This file contains the PowerPC specific parameters for the
|
||||
* SPC564Axx platform.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _PPCPARAMS_H_
|
||||
#define _PPCPARAMS_H_
|
||||
|
||||
/**
|
||||
* @brief PPC core model.
|
||||
*/
|
||||
#define PPC_VARIANT PPC_VARIANT_e200z4
|
||||
|
||||
/**
|
||||
* @brief IVORx registers support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_IVORS TRUE
|
||||
|
||||
/**
|
||||
* @brief Book E instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_BOOKE TRUE
|
||||
|
||||
/**
|
||||
* @brief VLE instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports VLS Load/Store Multiple Volatile instructions.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE_MULTI TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports the decrementer timer.
|
||||
*/
|
||||
#define PPC_SUPPORTS_DECREMENTER TRUE
|
||||
|
||||
#endif /* _PPCPARAMS_H_ */
|
||||
|
||||
/** @} */
|
||||
86
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/vectors.h
Executable file
86
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/vectors.h
Executable file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC564Axx/vectors.h
|
||||
* @brief ISR vector module header.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _VECTORS_H_
|
||||
#define _VECTORS_H_
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Number of ISR vectors available.
|
||||
*/
|
||||
#define VECTORS_NUMBER 486
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(_FROM_ASM_)
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
extern uint32_t _vectors[VECTORS_NUMBER];
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void _unhandled_irq(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined(_FROM_ASM_) */
|
||||
|
||||
#endif /* _OSAL_H_ */
|
||||
|
||||
/** @} */
|
||||
789
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/vectors.s
Executable file
789
firmware/chibios/os/ports/GCC/PPC/SPC564Axx/vectors.s
Executable file
@@ -0,0 +1,789 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC564Axx/vectors.s
|
||||
* @brief SPC564Axx vectors table.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* Software vectors table. The vectors are accessed from the IVOR4
|
||||
handler only. In order to declare an interrupt handler just create
|
||||
a function withe the same name of a vector, the symbol will
|
||||
override the weak symbol declared here.*/
|
||||
.section .vectors, "ax"
|
||||
.align 4
|
||||
.globl _vectors
|
||||
_vectors:
|
||||
.long vector0, vector1, vector2, vector3
|
||||
.long vector4, vector5, vector6, vector7
|
||||
.long vector8, vector9, vector10, vector11
|
||||
.long vector12, vector13, vector14, vector15
|
||||
.long vector16, vector17, vector18, vector19
|
||||
.long vector20, vector21, vector22, vector23
|
||||
.long vector24, vector25, vector26, vector27
|
||||
.long vector28, vector29, vector30, vector31
|
||||
.long vector32, vector33, vector34, vector35
|
||||
.long vector36, vector37, vector38, vector39
|
||||
.long vector40, vector41, vector42, vector43
|
||||
.long vector44, vector45, vector46, vector47
|
||||
.long vector48, vector49, vector50, vector51
|
||||
.long vector52, vector53, vector54, vector55
|
||||
.long vector56, vector57, vector58, vector59
|
||||
.long vector60, vector61, vector62, vector63
|
||||
.long vector64, vector65, vector66, vector67
|
||||
.long vector68, vector69, vector70, vector71
|
||||
.long vector72, vector73, vector74, vector75
|
||||
.long vector76, vector77, vector78, vector79
|
||||
.long vector80, vector81, vector82, vector83
|
||||
.long vector84, vector85, vector86, vector87
|
||||
.long vector88, vector89, vector90, vector91
|
||||
.long vector92, vector93, vector94, vector95
|
||||
.long vector96, vector97, vector98, vector99
|
||||
.long vector100, vector101, vector102, vector103
|
||||
.long vector104, vector105, vector106, vector107
|
||||
.long vector108, vector109, vector110, vector111
|
||||
.long vector112, vector113, vector114, vector115
|
||||
.long vector116, vector117, vector118, vector119
|
||||
.long vector120, vector121, vector122, vector123
|
||||
.long vector124, vector125, vector126, vector127
|
||||
.long vector128, vector129, vector130, vector131
|
||||
.long vector132, vector133, vector134, vector135
|
||||
.long vector136, vector137, vector138, vector139
|
||||
.long vector140, vector141, vector142, vector143
|
||||
.long vector144, vector145, vector146, vector147
|
||||
.long vector148, vector149, vector150, vector151
|
||||
.long vector152, vector153, vector154, vector155
|
||||
.long vector156, vector157, vector158, vector159
|
||||
.long vector160, vector161, vector162, vector163
|
||||
.long vector164, vector165, vector166, vector167
|
||||
.long vector168, vector169, vector170, vector171
|
||||
.long vector172, vector173, vector174, vector175
|
||||
.long vector176, vector177, vector178, vector179
|
||||
.long vector180, vector181, vector182, vector183
|
||||
.long vector184, vector185, vector186, vector187
|
||||
.long vector188, vector189, vector190, vector191
|
||||
.long vector192, vector193, vector194, vector195
|
||||
.long vector196, vector197, vector198, vector199
|
||||
.long vector200, vector201, vector202, vector203
|
||||
.long vector204, vector205, vector206, vector207
|
||||
.long vector208, vector209, vector210, vector211
|
||||
.long vector212, vector213, vector214, vector215
|
||||
.long vector216, vector217, vector218, vector219
|
||||
.long vector220, vector221, vector222, vector223
|
||||
.long vector224, vector225, vector226, vector227
|
||||
.long vector228, vector229, vector230, vector231
|
||||
.long vector232, vector233, vector234, vector235
|
||||
.long vector236, vector237, vector238, vector239
|
||||
.long vector240, vector241, vector242, vector243
|
||||
.long vector244, vector245, vector246, vector247
|
||||
.long vector248, vector249, vector250, vector251
|
||||
.long vector252, vector253, vector254, vector255
|
||||
.long vector256, vector257, vector258, vector259
|
||||
.long vector260, vector261, vector262, vector263
|
||||
.long vector264, vector265, vector266, vector267
|
||||
.long vector268, vector269, vector270, vector271
|
||||
.long vector272, vector273, vector274, vector275
|
||||
.long vector276, vector277, vector278, vector279
|
||||
.long vector280, vector281, vector282, vector283
|
||||
.long vector284, vector285, vector286, vector287
|
||||
.long vector288, vector289, vector290, vector291
|
||||
.long vector292, vector293, vector294, vector295
|
||||
.long vector296, vector297, vector298, vector299
|
||||
.long vector300, vector301, vector302, vector303
|
||||
.long vector304, vector305, vector306, vector307
|
||||
.long vector308, vector309, vector310, vector311
|
||||
.long vector312, vector313, vector314, vector315
|
||||
.long vector316, vector317, vector318, vector319
|
||||
.long vector320, vector321, vector322, vector323
|
||||
.long vector324, vector325, vector326, vector327
|
||||
.long vector328, vector329, vector330, vector331
|
||||
.long vector332, vector333, vector334, vector335
|
||||
.long vector336, vector337, vector338, vector339
|
||||
.long vector340, vector341, vector342, vector343
|
||||
.long vector344, vector345, vector346, vector347
|
||||
.long vector348, vector349, vector350, vector351
|
||||
.long vector352, vector353, vector354, vector355
|
||||
.long vector356, vector357, vector358, vector359
|
||||
.long vector360, vector361, vector362, vector363
|
||||
.long vector364, vector365, vector366, vector367
|
||||
.long vector368, vector369, vector370, vector371
|
||||
.long vector372, vector373, vector374, vector375
|
||||
.long vector376, vector377, vector378, vector379
|
||||
.long vector380, vector381, vector382, vector383
|
||||
.long vector384, vector385, vector386, vector387
|
||||
.long vector388, vector389, vector390, vector391
|
||||
.long vector392, vector393, vector394, vector395
|
||||
.long vector396, vector397, vector398, vector399
|
||||
.long vector400, vector401, vector402, vector403
|
||||
.long vector404, vector405, vector406, vector407
|
||||
.long vector408, vector409, vector410, vector411
|
||||
.long vector412, vector413, vector414, vector415
|
||||
.long vector416, vector417, vector418, vector419
|
||||
.long vector420, vector421, vector422, vector423
|
||||
.long vector424, vector425, vector426, vector427
|
||||
.long vector428, vector429, vector430, vector431
|
||||
.long vector432, vector433, vector434, vector435
|
||||
.long vector436, vector437, vector438, vector439
|
||||
.long vector440, vector441, vector442, vector443
|
||||
.long vector444, vector445, vector446, vector447
|
||||
.long vector448, vector449, vector450, vector451
|
||||
.long vector452, vector453, vector454, vector455
|
||||
.long vector456, vector457, vector458, vector459
|
||||
.long vector460, vector461, vector462, vector463
|
||||
.long vector464, vector465, vector466, vector467
|
||||
.long vector468, vector469, vector470, vector471
|
||||
.long vector472, vector473, vector474, vector475
|
||||
.long vector476, vector477, vector478, vector479
|
||||
.long vector480, vector481, vector482, vector483
|
||||
.long vector484, vector485
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.weak vector0, vector1, vector2, vector3
|
||||
.weak vector4, vector5, vector6, vector7
|
||||
.weak vector8, vector9, vector10, vector11
|
||||
.weak vector12, vector13, vector14, vector15
|
||||
.weak vector16, vector17, vector18, vector19
|
||||
.weak vector20, vector21, vector22, vector23
|
||||
.weak vector24, vector25, vector26, vector27
|
||||
.weak vector28, vector29, vector30, vector31
|
||||
.weak vector32, vector33, vector34, vector35
|
||||
.weak vector36, vector37, vector38, vector39
|
||||
.weak vector40, vector41, vector42, vector43
|
||||
.weak vector44, vector45, vector46, vector47
|
||||
.weak vector48, vector49, vector50, vector51
|
||||
.weak vector52, vector53, vector54, vector55
|
||||
.weak vector56, vector57, vector58, vector59
|
||||
.weak vector60, vector61, vector62, vector63
|
||||
.weak vector64, vector65, vector66, vector67
|
||||
.weak vector68, vector69, vector70, vector71
|
||||
.weak vector72, vector73, vector74, vector75
|
||||
.weak vector76, vector77, vector78, vector79
|
||||
.weak vector80, vector81, vector82, vector83
|
||||
.weak vector84, vector85, vector86, vector87
|
||||
.weak vector88, vector89, vector90, vector91
|
||||
.weak vector92, vector93, vector94, vector95
|
||||
.weak vector96, vector97, vector98, vector99
|
||||
.weak vector100, vector101, vector102, vector103
|
||||
.weak vector104, vector105, vector106, vector107
|
||||
.weak vector108, vector109, vector110, vector111
|
||||
.weak vector112, vector113, vector114, vector115
|
||||
.weak vector116, vector117, vector118, vector119
|
||||
.weak vector120, vector121, vector122, vector123
|
||||
.weak vector124, vector125, vector126, vector127
|
||||
.weak vector128, vector129, vector130, vector131
|
||||
.weak vector132, vector133, vector134, vector135
|
||||
.weak vector136, vector137, vector138, vector139
|
||||
.weak vector140, vector141, vector142, vector143
|
||||
.weak vector144, vector145, vector146, vector147
|
||||
.weak vector148, vector149, vector150, vector151
|
||||
.weak vector152, vector153, vector154, vector155
|
||||
.weak vector156, vector157, vector158, vector159
|
||||
.weak vector160, vector161, vector162, vector163
|
||||
.weak vector164, vector165, vector166, vector167
|
||||
.weak vector168, vector169, vector170, vector171
|
||||
.weak vector172, vector173, vector174, vector175
|
||||
.weak vector176, vector177, vector178, vector179
|
||||
.weak vector180, vector181, vector182, vector183
|
||||
.weak vector184, vector185, vector186, vector187
|
||||
.weak vector188, vector189, vector190, vector191
|
||||
.weak vector192, vector193, vector194, vector195
|
||||
.weak vector196, vector197, vector198, vector199
|
||||
.weak vector200, vector201, vector202, vector203
|
||||
.weak vector204, vector205, vector206, vector207
|
||||
.weak vector208, vector209, vector210, vector211
|
||||
.weak vector212, vector213, vector214, vector215
|
||||
.weak vector216, vector217, vector218, vector219
|
||||
.weak vector220, vector221, vector222, vector223
|
||||
.weak vector224, vector225, vector226, vector227
|
||||
.weak vector228, vector229, vector230, vector231
|
||||
.weak vector232, vector233, vector234, vector235
|
||||
.weak vector236, vector237, vector238, vector239
|
||||
.weak vector240, vector241, vector242, vector243
|
||||
.weak vector244, vector245, vector246, vector247
|
||||
.weak vector248, vector249, vector250, vector251
|
||||
.weak vector252, vector253, vector254, vector255
|
||||
.weak vector256, vector257, vector258, vector259
|
||||
.weak vector260, vector261, vector262, vector263
|
||||
.weak vector264, vector265, vector266, vector267
|
||||
.weak vector268, vector269, vector270, vector271
|
||||
.weak vector272, vector273, vector274, vector275
|
||||
.weak vector276, vector277, vector278, vector279
|
||||
.weak vector280, vector281, vector282, vector283
|
||||
.weak vector284, vector285, vector286, vector287
|
||||
.weak vector288, vector289, vector290, vector291
|
||||
.weak vector292, vector293, vector294, vector295
|
||||
.weak vector296, vector297, vector298, vector299
|
||||
.weak vector300, vector301, vector302, vector303
|
||||
.weak vector304, vector305, vector306, vector307
|
||||
.weak vector308, vector309, vector310, vector311
|
||||
.weak vector312, vector313, vector314, vector315
|
||||
.weak vector316, vector317, vector318, vector319
|
||||
.weak vector320, vector321, vector322, vector323
|
||||
.weak vector324, vector325, vector326, vector327
|
||||
.weak vector328, vector329, vector330, vector331
|
||||
.weak vector332, vector333, vector334, vector335
|
||||
.weak vector336, vector337, vector338, vector339
|
||||
.weak vector340, vector341, vector342, vector343
|
||||
.weak vector344, vector345, vector346, vector347
|
||||
.weak vector348, vector349, vector350, vector351
|
||||
.weak vector352, vector353, vector354, vector355
|
||||
.weak vector356, vector357, vector358, vector359
|
||||
.weak vector360, vector361, vector362, vector363
|
||||
.weak vector364, vector365, vector366, vector367
|
||||
.weak vector368, vector369, vector370, vector371
|
||||
.weak vector372, vector373, vector374, vector375
|
||||
.weak vector376, vector377, vector378, vector379
|
||||
.weak vector380, vector381, vector382, vector383
|
||||
.weak vector384, vector385, vector386, vector387
|
||||
.weak vector388, vector389, vector390, vector391
|
||||
.weak vector392, vector393, vector394, vector395
|
||||
.weak vector396, vector397, vector398, vector399
|
||||
.weak vector400, vector401, vector402, vector403
|
||||
.weak vector404, vector405, vector406, vector407
|
||||
.weak vector408, vector409, vector410, vector411
|
||||
.weak vector412, vector413, vector414, vector415
|
||||
.weak vector416, vector417, vector418, vector419
|
||||
.weak vector420, vector421, vector422, vector423
|
||||
.weak vector424, vector425, vector426, vector427
|
||||
.weak vector428, vector429, vector430, vector431
|
||||
.weak vector432, vector433, vector434, vector435
|
||||
.weak vector436, vector437, vector438, vector439
|
||||
.weak vector440, vector441, vector442, vector443
|
||||
.weak vector444, vector445, vector446, vector447
|
||||
.weak vector448, vector449, vector450, vector451
|
||||
.weak vector452, vector453, vector454, vector455
|
||||
.weak vector456, vector457, vector458, vector459
|
||||
.weak vector460, vector461, vector462, vector463
|
||||
.weak vector464, vector465, vector466, vector467
|
||||
.weak vector468, vector469, vector470, vector471
|
||||
.weak vector472, vector473, vector474, vector475
|
||||
.weak vector476, vector477, vector478, vector479
|
||||
.weak vector480, vector481, vector482, vector483
|
||||
.weak vector484, vector485
|
||||
|
||||
vector0:
|
||||
vector1:
|
||||
vector2:
|
||||
vector3:
|
||||
vector4:
|
||||
vector5:
|
||||
vector6:
|
||||
vector7:
|
||||
vector8:
|
||||
vector9:
|
||||
vector10:
|
||||
vector11:
|
||||
vector12:
|
||||
vector13:
|
||||
vector14:
|
||||
vector15:
|
||||
vector16:
|
||||
vector17:
|
||||
vector18:
|
||||
vector19:
|
||||
vector20:
|
||||
vector21:
|
||||
vector22:
|
||||
vector23:
|
||||
vector24:
|
||||
vector25:
|
||||
vector26:
|
||||
vector27:
|
||||
vector28:
|
||||
vector29:
|
||||
vector30:
|
||||
vector31:
|
||||
vector32:
|
||||
vector33:
|
||||
vector34:
|
||||
vector35:
|
||||
vector36:
|
||||
vector37:
|
||||
vector38:
|
||||
vector39:
|
||||
vector40:
|
||||
vector41:
|
||||
vector42:
|
||||
vector43:
|
||||
vector44:
|
||||
vector45:
|
||||
vector46:
|
||||
vector47:
|
||||
vector48:
|
||||
vector49:
|
||||
vector50:
|
||||
vector51:
|
||||
vector52:
|
||||
vector53:
|
||||
vector54:
|
||||
vector55:
|
||||
vector56:
|
||||
vector57:
|
||||
vector58:
|
||||
vector59:
|
||||
vector60:
|
||||
vector61:
|
||||
vector62:
|
||||
vector63:
|
||||
vector64:
|
||||
vector65:
|
||||
vector66:
|
||||
vector67:
|
||||
vector68:
|
||||
vector69:
|
||||
vector70:
|
||||
vector71:
|
||||
vector72:
|
||||
vector73:
|
||||
vector74:
|
||||
vector75:
|
||||
vector76:
|
||||
vector77:
|
||||
vector78:
|
||||
vector79:
|
||||
vector80:
|
||||
vector81:
|
||||
vector82:
|
||||
vector83:
|
||||
vector84:
|
||||
vector85:
|
||||
vector86:
|
||||
vector87:
|
||||
vector88:
|
||||
vector89:
|
||||
vector90:
|
||||
vector91:
|
||||
vector92:
|
||||
vector93:
|
||||
vector94:
|
||||
vector95:
|
||||
vector96:
|
||||
vector97:
|
||||
vector98:
|
||||
vector99:
|
||||
vector100:
|
||||
vector101:
|
||||
vector102:
|
||||
vector103:
|
||||
vector104:
|
||||
vector105:
|
||||
vector106:
|
||||
vector107:
|
||||
vector108:
|
||||
vector109:
|
||||
vector110:
|
||||
vector111:
|
||||
vector112:
|
||||
vector113:
|
||||
vector114:
|
||||
vector115:
|
||||
vector116:
|
||||
vector117:
|
||||
vector118:
|
||||
vector119:
|
||||
vector120:
|
||||
vector121:
|
||||
vector122:
|
||||
vector123:
|
||||
vector124:
|
||||
vector125:
|
||||
vector126:
|
||||
vector127:
|
||||
vector128:
|
||||
vector129:
|
||||
vector130:
|
||||
vector131:
|
||||
vector132:
|
||||
vector133:
|
||||
vector134:
|
||||
vector135:
|
||||
vector136:
|
||||
vector137:
|
||||
vector138:
|
||||
vector139:
|
||||
vector140:
|
||||
vector141:
|
||||
vector142:
|
||||
vector143:
|
||||
vector144:
|
||||
vector145:
|
||||
vector146:
|
||||
vector147:
|
||||
vector148:
|
||||
vector149:
|
||||
vector150:
|
||||
vector151:
|
||||
vector152:
|
||||
vector153:
|
||||
vector154:
|
||||
vector155:
|
||||
vector156:
|
||||
vector157:
|
||||
vector158:
|
||||
vector159:
|
||||
vector160:
|
||||
vector161:
|
||||
vector162:
|
||||
vector163:
|
||||
vector164:
|
||||
vector165:
|
||||
vector166:
|
||||
vector167:
|
||||
vector168:
|
||||
vector169:
|
||||
vector170:
|
||||
vector171:
|
||||
vector172:
|
||||
vector173:
|
||||
vector174:
|
||||
vector175:
|
||||
vector176:
|
||||
vector177:
|
||||
vector178:
|
||||
vector179:
|
||||
vector180:
|
||||
vector181:
|
||||
vector182:
|
||||
vector183:
|
||||
vector184:
|
||||
vector185:
|
||||
vector186:
|
||||
vector187:
|
||||
vector188:
|
||||
vector189:
|
||||
vector190:
|
||||
vector191:
|
||||
vector192:
|
||||
vector193:
|
||||
vector194:
|
||||
vector195:
|
||||
vector196:
|
||||
vector197:
|
||||
vector198:
|
||||
vector199:
|
||||
vector200:
|
||||
vector201:
|
||||
vector202:
|
||||
vector203:
|
||||
vector204:
|
||||
vector205:
|
||||
vector206:
|
||||
vector207:
|
||||
vector208:
|
||||
vector209:
|
||||
vector210:
|
||||
vector211:
|
||||
vector212:
|
||||
vector213:
|
||||
vector214:
|
||||
vector215:
|
||||
vector216:
|
||||
vector217:
|
||||
vector218:
|
||||
vector219:
|
||||
vector220:
|
||||
vector221:
|
||||
vector222:
|
||||
vector223:
|
||||
vector224:
|
||||
vector225:
|
||||
vector226:
|
||||
vector227:
|
||||
vector228:
|
||||
vector229:
|
||||
vector230:
|
||||
vector231:
|
||||
vector232:
|
||||
vector233:
|
||||
vector234:
|
||||
vector235:
|
||||
vector236:
|
||||
vector237:
|
||||
vector238:
|
||||
vector239:
|
||||
vector240:
|
||||
vector241:
|
||||
vector242:
|
||||
vector243:
|
||||
vector244:
|
||||
vector245:
|
||||
vector246:
|
||||
vector247:
|
||||
vector248:
|
||||
vector249:
|
||||
vector250:
|
||||
vector251:
|
||||
vector252:
|
||||
vector253:
|
||||
vector254:
|
||||
vector255:
|
||||
vector256:
|
||||
vector257:
|
||||
vector258:
|
||||
vector259:
|
||||
vector260:
|
||||
vector261:
|
||||
vector262:
|
||||
vector263:
|
||||
vector264:
|
||||
vector265:
|
||||
vector266:
|
||||
vector267:
|
||||
vector268:
|
||||
vector269:
|
||||
vector270:
|
||||
vector271:
|
||||
vector272:
|
||||
vector273:
|
||||
vector274:
|
||||
vector275:
|
||||
vector276:
|
||||
vector277:
|
||||
vector278:
|
||||
vector279:
|
||||
vector280:
|
||||
vector281:
|
||||
vector282:
|
||||
vector283:
|
||||
vector284:
|
||||
vector285:
|
||||
vector286:
|
||||
vector287:
|
||||
vector288:
|
||||
vector289:
|
||||
vector290:
|
||||
vector291:
|
||||
vector292:
|
||||
vector293:
|
||||
vector294:
|
||||
vector295:
|
||||
vector296:
|
||||
vector297:
|
||||
vector298:
|
||||
vector299:
|
||||
vector300:
|
||||
vector301:
|
||||
vector302:
|
||||
vector303:
|
||||
vector304:
|
||||
vector305:
|
||||
vector306:
|
||||
vector307:
|
||||
vector308:
|
||||
vector309:
|
||||
vector310:
|
||||
vector311:
|
||||
vector312:
|
||||
vector313:
|
||||
vector314:
|
||||
vector315:
|
||||
vector316:
|
||||
vector317:
|
||||
vector318:
|
||||
vector319:
|
||||
vector320:
|
||||
vector321:
|
||||
vector322:
|
||||
vector323:
|
||||
vector324:
|
||||
vector325:
|
||||
vector326:
|
||||
vector327:
|
||||
vector328:
|
||||
vector329:
|
||||
vector330:
|
||||
vector331:
|
||||
vector332:
|
||||
vector333:
|
||||
vector334:
|
||||
vector335:
|
||||
vector336:
|
||||
vector337:
|
||||
vector338:
|
||||
vector339:
|
||||
vector340:
|
||||
vector341:
|
||||
vector342:
|
||||
vector343:
|
||||
vector344:
|
||||
vector345:
|
||||
vector346:
|
||||
vector347:
|
||||
vector348:
|
||||
vector349:
|
||||
vector350:
|
||||
vector351:
|
||||
vector352:
|
||||
vector353:
|
||||
vector354:
|
||||
vector355:
|
||||
vector356:
|
||||
vector357:
|
||||
vector358:
|
||||
vector359:
|
||||
vector360:
|
||||
vector361:
|
||||
vector362:
|
||||
vector363:
|
||||
vector364:
|
||||
vector365:
|
||||
vector366:
|
||||
vector367:
|
||||
vector368:
|
||||
vector369:
|
||||
vector370:
|
||||
vector371:
|
||||
vector372:
|
||||
vector373:
|
||||
vector374:
|
||||
vector375:
|
||||
vector376:
|
||||
vector377:
|
||||
vector378:
|
||||
vector379:
|
||||
vector380:
|
||||
vector381:
|
||||
vector382:
|
||||
vector383:
|
||||
vector384:
|
||||
vector385:
|
||||
vector386:
|
||||
vector387:
|
||||
vector388:
|
||||
vector389:
|
||||
vector390:
|
||||
vector391:
|
||||
vector392:
|
||||
vector393:
|
||||
vector394:
|
||||
vector395:
|
||||
vector396:
|
||||
vector397:
|
||||
vector398:
|
||||
vector399:
|
||||
vector400:
|
||||
vector401:
|
||||
vector402:
|
||||
vector403:
|
||||
vector404:
|
||||
vector405:
|
||||
vector406:
|
||||
vector407:
|
||||
vector408:
|
||||
vector409:
|
||||
vector410:
|
||||
vector411:
|
||||
vector412:
|
||||
vector413:
|
||||
vector414:
|
||||
vector415:
|
||||
vector416:
|
||||
vector417:
|
||||
vector418:
|
||||
vector419:
|
||||
vector420:
|
||||
vector421:
|
||||
vector422:
|
||||
vector423:
|
||||
vector424:
|
||||
vector425:
|
||||
vector426:
|
||||
vector427:
|
||||
vector428:
|
||||
vector429:
|
||||
vector430:
|
||||
vector431:
|
||||
vector432:
|
||||
vector433:
|
||||
vector434:
|
||||
vector435:
|
||||
vector436:
|
||||
vector437:
|
||||
vector438:
|
||||
vector439:
|
||||
vector440:
|
||||
vector441:
|
||||
vector442:
|
||||
vector443:
|
||||
vector444:
|
||||
vector445:
|
||||
vector446:
|
||||
vector447:
|
||||
vector448:
|
||||
vector449:
|
||||
vector450:
|
||||
vector451:
|
||||
vector452:
|
||||
vector453:
|
||||
vector454:
|
||||
vector455:
|
||||
vector456:
|
||||
vector457:
|
||||
vector458:
|
||||
vector459:
|
||||
vector460:
|
||||
vector461:
|
||||
vector462:
|
||||
vector463:
|
||||
vector464:
|
||||
vector465:
|
||||
vector466:
|
||||
vector467:
|
||||
vector468:
|
||||
vector469:
|
||||
vector470:
|
||||
vector471:
|
||||
vector472:
|
||||
vector473:
|
||||
vector474:
|
||||
vector475:
|
||||
vector476:
|
||||
vector477:
|
||||
vector478:
|
||||
vector479:
|
||||
vector480:
|
||||
vector481:
|
||||
vector482:
|
||||
vector483:
|
||||
vector484:
|
||||
vector485:
|
||||
|
||||
.weak _unhandled_irq
|
||||
.type _unhandled_irq, @function
|
||||
_unhandled_irq:
|
||||
b _unhandled_irq
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
79
firmware/chibios/os/ports/GCC/PPC/SPC56ECxx/ppcparams.h
Executable file
79
firmware/chibios/os/ports/GCC/PPC/SPC56ECxx/ppcparams.h
Executable file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC56ECxx/ppcparams.h
|
||||
* @brief PowerPC parameters for the SPC56ECxx.
|
||||
*
|
||||
* @defgroup PPC_SPC564Bxx SPC56ECxx Specific Parameters
|
||||
* @ingroup PPC_SPECIFIC
|
||||
* @details This file contains the PowerPC specific parameters for the
|
||||
* SPC560ECxx platform.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _PPCPARAMS_H_
|
||||
#define _PPCPARAMS_H_
|
||||
|
||||
/**
|
||||
* @brief PPC core model.
|
||||
*/
|
||||
#define PPC_VARIANT PPC_VARIANT_e200z0
|
||||
|
||||
/**
|
||||
* @brief Number of writable bits in IVPR register.
|
||||
*/
|
||||
#define PPC_IVPR_BITS 16
|
||||
|
||||
/**
|
||||
* @brief IVORx registers support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_IVORS TRUE
|
||||
|
||||
/**
|
||||
* @brief Book E instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_BOOKE TRUE
|
||||
|
||||
/**
|
||||
* @brief VLE instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports VLS Load/Store Multiple Volatile instructions.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE_MULTI TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports the decrementer timer.
|
||||
*/
|
||||
#define PPC_SUPPORTS_DECREMENTER TRUE
|
||||
|
||||
#endif /* _PPCPARAMS_H_ */
|
||||
|
||||
/** @} */
|
||||
86
firmware/chibios/os/ports/GCC/PPC/SPC56ECxx/vectors.h
Executable file
86
firmware/chibios/os/ports/GCC/PPC/SPC56ECxx/vectors.h
Executable file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC56ECxx/vectors.h
|
||||
* @brief ISR vector module header.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _VECTORS_H_
|
||||
#define _VECTORS_H_
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Number of ISR vectors available.
|
||||
*/
|
||||
#define VECTORS_NUMBER 268
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(_FROM_ASM_)
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
extern uint32_t _vectors[VECTORS_NUMBER];
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void _unhandled_irq(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined(_FROM_ASM_) */
|
||||
|
||||
#endif /* _OSAL_H_ */
|
||||
|
||||
/** @} */
|
||||
461
firmware/chibios/os/ports/GCC/PPC/SPC56ECxx/vectors.s
Executable file
461
firmware/chibios/os/ports/GCC/PPC/SPC56ECxx/vectors.s
Executable file
@@ -0,0 +1,461 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC560BCxx/vectors.s
|
||||
* @brief SPC560BCxx vectors table.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* Software vectors table. The vectors are accessed from the IVOR4
|
||||
handler only. In order to declare an interrupt handler just create
|
||||
a function withe the same name of a vector, the symbol will
|
||||
override the weak symbol declared here.*/
|
||||
.section .vectors, "ax"
|
||||
.align 4
|
||||
.globl _vectors
|
||||
_vectors:
|
||||
.long vector0, vector1, vector2, vector3
|
||||
.long vector4, vector5, vector6, vector7
|
||||
.long vector8, vector9, vector10, vector11
|
||||
.long vector12, vector13, vector14, vector15
|
||||
.long vector16, vector17, vector18, vector19
|
||||
.long vector20, vector21, vector22, vector23
|
||||
.long vector24, vector25, vector26, vector27
|
||||
.long vector28, vector29, vector30, vector31
|
||||
.long vector32, vector33, vector34, vector35
|
||||
.long vector36, vector37, vector38, vector39
|
||||
.long vector40, vector41, vector42, vector43
|
||||
.long vector44, vector45, vector46, vector47
|
||||
.long vector48, vector49, vector50, vector51
|
||||
.long vector52, vector53, vector54, vector55
|
||||
.long vector56, vector57, vector58, vector59
|
||||
.long vector60, vector61, vector62, vector63
|
||||
.long vector64, vector65, vector66, vector67
|
||||
.long vector68, vector69, vector70, vector71
|
||||
.long vector72, vector73, vector74, vector75
|
||||
.long vector76, vector77, vector78, vector79
|
||||
.long vector80, vector81, vector82, vector83
|
||||
.long vector84, vector85, vector86, vector87
|
||||
.long vector88, vector89, vector90, vector91
|
||||
.long vector92, vector93, vector94, vector95
|
||||
.long vector96, vector97, vector98, vector99
|
||||
.long vector100, vector101, vector102, vector103
|
||||
.long vector104, vector105, vector106, vector107
|
||||
.long vector108, vector109, vector110, vector111
|
||||
.long vector112, vector113, vector114, vector115
|
||||
.long vector116, vector117, vector118, vector119
|
||||
.long vector120, vector121, vector122, vector123
|
||||
.long vector124, vector125, vector126, vector127
|
||||
.long vector128, vector129, vector130, vector131
|
||||
.long vector132, vector133, vector134, vector135
|
||||
.long vector136, vector137, vector138, vector139
|
||||
.long vector140, vector141, vector142, vector143
|
||||
.long vector144, vector145, vector146, vector147
|
||||
.long vector148, vector149, vector150, vector151
|
||||
.long vector152, vector153, vector154, vector155
|
||||
.long vector156, vector157, vector158, vector159
|
||||
.long vector160, vector161, vector162, vector163
|
||||
.long vector164, vector165, vector166, vector167
|
||||
.long vector168, vector169, vector170, vector171
|
||||
.long vector172, vector173, vector174, vector175
|
||||
.long vector176, vector177, vector178, vector179
|
||||
.long vector180, vector181, vector182, vector183
|
||||
.long vector184, vector185, vector186, vector187
|
||||
.long vector188, vector189, vector190, vector191
|
||||
.long vector192, vector193, vector194, vector195
|
||||
.long vector196, vector197, vector198, vector199
|
||||
.long vector200, vector201, vector202, vector203
|
||||
.long vector204, vector205, vector206, vector207
|
||||
.long vector208, vector209, vector210, vector211
|
||||
.long vector212, vector213, vector214, vector215
|
||||
.long vector216, vector217, vector218, vector219
|
||||
.long vector220, vector221, vector222, vector223
|
||||
.long vector224, vector225, vector226, vector227
|
||||
.long vector228, vector229, vector230, vector231
|
||||
.long vector232, vector233, vector234, vector235
|
||||
.long vector236, vector237, vector238, vector239
|
||||
.long vector240, vector241, vector242, vector243
|
||||
.long vector244, vector245, vector246, vector247
|
||||
.long vector248, vector249, vector250, vector251
|
||||
.long vector252, vector253, vector254, vector255
|
||||
.long vector256, vector257, vector258, vector259
|
||||
.long vector260, vector261, vector262, vector263
|
||||
.long vector264, vector265, vector266, vector267
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.weak vector0, vector1, vector2, vector3
|
||||
.weak vector4, vector5, vector6, vector7
|
||||
.weak vector8, vector9, vector10, vector11
|
||||
.weak vector12, vector13, vector14, vector15
|
||||
.weak vector16, vector17, vector18, vector19
|
||||
.weak vector20, vector21, vector22, vector23
|
||||
.weak vector24, vector25, vector26, vector27
|
||||
.weak vector28, vector29, vector30, vector31
|
||||
.weak vector32, vector33, vector34, vector35
|
||||
.weak vector36, vector37, vector38, vector39
|
||||
.weak vector40, vector41, vector42, vector43
|
||||
.weak vector44, vector45, vector46, vector47
|
||||
.weak vector48, vector49, vector50, vector51
|
||||
.weak vector52, vector53, vector54, vector55
|
||||
.weak vector56, vector57, vector58, vector59
|
||||
.weak vector60, vector61, vector62, vector63
|
||||
.weak vector64, vector65, vector66, vector67
|
||||
.weak vector68, vector69, vector70, vector71
|
||||
.weak vector72, vector73, vector74, vector75
|
||||
.weak vector76, vector77, vector78, vector79
|
||||
.weak vector80, vector81, vector82, vector83
|
||||
.weak vector84, vector85, vector86, vector87
|
||||
.weak vector88, vector89, vector90, vector91
|
||||
.weak vector92, vector93, vector94, vector95
|
||||
.weak vector96, vector97, vector98, vector99
|
||||
.weak vector100, vector101, vector102, vector103
|
||||
.weak vector104, vector105, vector106, vector107
|
||||
.weak vector108, vector109, vector110, vector111
|
||||
.weak vector112, vector113, vector114, vector115
|
||||
.weak vector116, vector117, vector118, vector119
|
||||
.weak vector120, vector121, vector122, vector123
|
||||
.weak vector124, vector125, vector126, vector127
|
||||
.weak vector128, vector129, vector130, vector131
|
||||
.weak vector132, vector133, vector134, vector135
|
||||
.weak vector136, vector137, vector138, vector139
|
||||
.weak vector140, vector141, vector142, vector143
|
||||
.weak vector144, vector145, vector146, vector147
|
||||
.weak vector148, vector149, vector150, vector151
|
||||
.weak vector152, vector153, vector154, vector155
|
||||
.weak vector156, vector157, vector158, vector159
|
||||
.weak vector160, vector161, vector162, vector163
|
||||
.weak vector164, vector165, vector166, vector167
|
||||
.weak vector168, vector169, vector170, vector171
|
||||
.weak vector172, vector173, vector174, vector175
|
||||
.weak vector176, vector177, vector178, vector179
|
||||
.weak vector180, vector181, vector182, vector183
|
||||
.weak vector184, vector185, vector186, vector187
|
||||
.weak vector188, vector189, vector190, vector191
|
||||
.weak vector192, vector193, vector194, vector195
|
||||
.weak vector196, vector197, vector198, vector199
|
||||
.weak vector200, vector201, vector202, vector203
|
||||
.weak vector204, vector205, vector206, vector207
|
||||
.weak vector208, vector209, vector210, vector211
|
||||
.weak vector212, vector213, vector214, vector215
|
||||
.weak vector216, vector217, vector218, vector219
|
||||
.weak vector220, vector221, vector222, vector223
|
||||
.weak vector224, vector225, vector226, vector227
|
||||
.weak vector228, vector229, vector230, vector231
|
||||
.weak vector232, vector233, vector234, vector235
|
||||
.weak vector236, vector237, vector238, vector239
|
||||
.weak vector240, vector241, vector242, vector243
|
||||
.weak vector244, vector245, vector246, vector247
|
||||
.weak vector248, vector249, vector250, vector251
|
||||
.weak vector252, vector253, vector254, vector255
|
||||
.weak vector256, vector257, vector258, vector259
|
||||
.weak vector260, vector261, vector262, vector263
|
||||
.weak vector264, vector265, vector266, vector267
|
||||
|
||||
vector0:
|
||||
vector1:
|
||||
vector2:
|
||||
vector3:
|
||||
vector4:
|
||||
vector5:
|
||||
vector6:
|
||||
vector7:
|
||||
vector8:
|
||||
vector9:
|
||||
vector10:
|
||||
vector11:
|
||||
vector12:
|
||||
vector13:
|
||||
vector14:
|
||||
vector15:
|
||||
vector16:
|
||||
vector17:
|
||||
vector18:
|
||||
vector19:
|
||||
vector20:
|
||||
vector21:
|
||||
vector22:
|
||||
vector23:
|
||||
vector24:
|
||||
vector25:
|
||||
vector26:
|
||||
vector27:
|
||||
vector28:
|
||||
vector29:
|
||||
vector30:
|
||||
vector31:
|
||||
vector32:
|
||||
vector33:
|
||||
vector34:
|
||||
vector35:
|
||||
vector36:
|
||||
vector37:
|
||||
vector38:
|
||||
vector39:
|
||||
vector40:
|
||||
vector41:
|
||||
vector42:
|
||||
vector43:
|
||||
vector44:
|
||||
vector45:
|
||||
vector46:
|
||||
vector47:
|
||||
vector48:
|
||||
vector49:
|
||||
vector50:
|
||||
vector51:
|
||||
vector52:
|
||||
vector53:
|
||||
vector54:
|
||||
vector55:
|
||||
vector56:
|
||||
vector57:
|
||||
vector58:
|
||||
vector59:
|
||||
vector60:
|
||||
vector61:
|
||||
vector62:
|
||||
vector63:
|
||||
vector64:
|
||||
vector65:
|
||||
vector66:
|
||||
vector67:
|
||||
vector68:
|
||||
vector69:
|
||||
vector70:
|
||||
vector71:
|
||||
vector72:
|
||||
vector73:
|
||||
vector74:
|
||||
vector75:
|
||||
vector76:
|
||||
vector77:
|
||||
vector78:
|
||||
vector79:
|
||||
vector80:
|
||||
vector81:
|
||||
vector82:
|
||||
vector83:
|
||||
vector84:
|
||||
vector85:
|
||||
vector86:
|
||||
vector87:
|
||||
vector88:
|
||||
vector89:
|
||||
vector90:
|
||||
vector91:
|
||||
vector92:
|
||||
vector93:
|
||||
vector94:
|
||||
vector95:
|
||||
vector96:
|
||||
vector97:
|
||||
vector98:
|
||||
vector99:
|
||||
vector100:
|
||||
vector101:
|
||||
vector102:
|
||||
vector103:
|
||||
vector104:
|
||||
vector105:
|
||||
vector106:
|
||||
vector107:
|
||||
vector108:
|
||||
vector109:
|
||||
vector110:
|
||||
vector111:
|
||||
vector112:
|
||||
vector113:
|
||||
vector114:
|
||||
vector115:
|
||||
vector116:
|
||||
vector117:
|
||||
vector118:
|
||||
vector119:
|
||||
vector120:
|
||||
vector121:
|
||||
vector122:
|
||||
vector123:
|
||||
vector124:
|
||||
vector125:
|
||||
vector126:
|
||||
vector127:
|
||||
vector128:
|
||||
vector129:
|
||||
vector130:
|
||||
vector131:
|
||||
vector132:
|
||||
vector133:
|
||||
vector134:
|
||||
vector135:
|
||||
vector136:
|
||||
vector137:
|
||||
vector138:
|
||||
vector139:
|
||||
vector140:
|
||||
vector141:
|
||||
vector142:
|
||||
vector143:
|
||||
vector144:
|
||||
vector145:
|
||||
vector146:
|
||||
vector147:
|
||||
vector148:
|
||||
vector149:
|
||||
vector150:
|
||||
vector151:
|
||||
vector152:
|
||||
vector153:
|
||||
vector154:
|
||||
vector155:
|
||||
vector156:
|
||||
vector157:
|
||||
vector158:
|
||||
vector159:
|
||||
vector160:
|
||||
vector161:
|
||||
vector162:
|
||||
vector163:
|
||||
vector164:
|
||||
vector165:
|
||||
vector166:
|
||||
vector167:
|
||||
vector168:
|
||||
vector169:
|
||||
vector170:
|
||||
vector171:
|
||||
vector172:
|
||||
vector173:
|
||||
vector174:
|
||||
vector175:
|
||||
vector176:
|
||||
vector177:
|
||||
vector178:
|
||||
vector179:
|
||||
vector180:
|
||||
vector181:
|
||||
vector182:
|
||||
vector183:
|
||||
vector184:
|
||||
vector185:
|
||||
vector186:
|
||||
vector187:
|
||||
vector188:
|
||||
vector189:
|
||||
vector190:
|
||||
vector191:
|
||||
vector192:
|
||||
vector193:
|
||||
vector194:
|
||||
vector195:
|
||||
vector196:
|
||||
vector197:
|
||||
vector198:
|
||||
vector199:
|
||||
vector200:
|
||||
vector201:
|
||||
vector202:
|
||||
vector203:
|
||||
vector204:
|
||||
vector205:
|
||||
vector206:
|
||||
vector207:
|
||||
vector208:
|
||||
vector209:
|
||||
vector210:
|
||||
vector211:
|
||||
vector212:
|
||||
vector213:
|
||||
vector214:
|
||||
vector215:
|
||||
vector216:
|
||||
vector217:
|
||||
vector218:
|
||||
vector219:
|
||||
vector220:
|
||||
vector221:
|
||||
vector222:
|
||||
vector223:
|
||||
vector224:
|
||||
vector225:
|
||||
vector226:
|
||||
vector227:
|
||||
vector228:
|
||||
vector229:
|
||||
vector230:
|
||||
vector231:
|
||||
vector232:
|
||||
vector233:
|
||||
vector234:
|
||||
vector235:
|
||||
vector236:
|
||||
vector237:
|
||||
vector238:
|
||||
vector239:
|
||||
vector240:
|
||||
vector241:
|
||||
vector242:
|
||||
vector243:
|
||||
vector244:
|
||||
vector245:
|
||||
vector246:
|
||||
vector247:
|
||||
vector248:
|
||||
vector249:
|
||||
vector250:
|
||||
vector251:
|
||||
vector252:
|
||||
vector253:
|
||||
vector254:
|
||||
vector255:
|
||||
vector256:
|
||||
vector257:
|
||||
vector258:
|
||||
vector259:
|
||||
vector260:
|
||||
vector261:
|
||||
vector262:
|
||||
vector263:
|
||||
vector264:
|
||||
vector265:
|
||||
vector266:
|
||||
vector267:
|
||||
|
||||
.weak _unhandled_irq
|
||||
.type _unhandled_irq, @function
|
||||
_unhandled_irq:
|
||||
b _unhandled_irq
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
58
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/bam.s
Executable file
58
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/bam.s
Executable file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC56ELxx/bam.s
|
||||
* @brief SPC56ELxx boot assistant record.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* BAM record.*/
|
||||
.section .bam, "ax"
|
||||
#if PPC_USE_VLE
|
||||
.long 0x015A0000
|
||||
#else
|
||||
.long 0x005A0000
|
||||
#endif
|
||||
.long _reset_address
|
||||
|
||||
.align 2
|
||||
.globl _reset_address
|
||||
.type _reset_address, @function
|
||||
_reset_address:
|
||||
bl _coreinit
|
||||
bl _ivinit
|
||||
|
||||
b _boot_address
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
542
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/core.s
Executable file
542
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/core.s
Executable file
@@ -0,0 +1,542 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC56ELxx/core.s
|
||||
* @brief e200z4 core configuration.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @name MASx registers definitions
|
||||
* @{
|
||||
*/
|
||||
#define MAS0_TBLMAS_TBL 0x10000000
|
||||
#define MAS0_ESEL_MASK 0x000F0000
|
||||
#define MAS0_ESEL(n) ((n) << 16)
|
||||
|
||||
#define MAS1_VALID 0x80000000
|
||||
#define MAS1_IPROT 0x40000000
|
||||
#define MAS1_TID_MASK 0x00FF0000
|
||||
#define MAS1_TS 0x00001000
|
||||
#define MAS1_TSISE_MASK 0x00000F80
|
||||
#define MAS1_TSISE_1K 0x00000000
|
||||
#define MAS1_TSISE_2K 0x00000080
|
||||
#define MAS1_TSISE_4K 0x00000100
|
||||
#define MAS1_TSISE_8K 0x00000180
|
||||
#define MAS1_TSISE_16K 0x00000200
|
||||
#define MAS1_TSISE_32K 0x00000280
|
||||
#define MAS1_TSISE_64K 0x00000300
|
||||
#define MAS1_TSISE_128K 0x00000380
|
||||
#define MAS1_TSISE_256K 0x00000400
|
||||
#define MAS1_TSISE_512K 0x00000480
|
||||
#define MAS1_TSISE_1M 0x00000500
|
||||
#define MAS1_TSISE_2M 0x00000580
|
||||
#define MAS1_TSISE_4M 0x00000600
|
||||
#define MAS1_TSISE_8M 0x00000680
|
||||
#define MAS1_TSISE_16M 0x00000700
|
||||
#define MAS1_TSISE_32M 0x00000780
|
||||
#define MAS1_TSISE_64M 0x00000800
|
||||
#define MAS1_TSISE_128M 0x00000880
|
||||
#define MAS1_TSISE_256M 0x00000900
|
||||
#define MAS1_TSISE_512M 0x00000980
|
||||
#define MAS1_TSISE_1G 0x00000A00
|
||||
#define MAS1_TSISE_2G 0x00000A80
|
||||
#define MAS1_TSISE_4G 0x00000B00
|
||||
|
||||
#define MAS2_EPN_MASK 0xFFFFFC00
|
||||
#define MAS2_EPN(n) ((n) & MAS2_EPN_MASK)
|
||||
#define MAS2_EBOOK 0x00000000
|
||||
#define MAS2_VLE 0x00000020
|
||||
#define MAS2_W 0x00000010
|
||||
#define MAS2_I 0x00000008
|
||||
#define MAS2_M 0x00000004
|
||||
#define MAS2_G 0x00000002
|
||||
#define MAS2_E 0x00000001
|
||||
|
||||
#define MAS3_RPN_MASK 0xFFFFFC00
|
||||
#define MAS3_RPN(n) ((n) & MAS3_RPN_MASK)
|
||||
#define MAS3_U0 0x00000200
|
||||
#define MAS3_U1 0x00000100
|
||||
#define MAS3_U2 0x00000080
|
||||
#define MAS3_U3 0x00000040
|
||||
#define MAS3_UX 0x00000020
|
||||
#define MAS3_SX 0x00000010
|
||||
#define MAS3_UW 0x00000008
|
||||
#define MAS3_SW 0x00000004
|
||||
#define MAS3_UR 0x00000002
|
||||
#define MAS3_SR 0x00000001
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name BUCSR registers definitions
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_BPEN 0x00000001
|
||||
#define BUCSR_BPRED_MASK 0x00000006
|
||||
#define BUCSR_BPRED_0 0x00000000
|
||||
#define BUCSR_BPRED_1 0x00000002
|
||||
#define BUCSR_BPRED_2 0x00000004
|
||||
#define BUCSR_BPRED_3 0x00000006
|
||||
#define BUCSR_BALLOC_MASK 0x00000030
|
||||
#define BUCSR_BALLOC_0 0x00000000
|
||||
#define BUCSR_BALLOC_1 0x00000010
|
||||
#define BUCSR_BALLOC_2 0x00000020
|
||||
#define BUCSR_BALLOC_3 0x00000030
|
||||
#define BUCSR_BALLOC_BFI 0x00000200
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name LICSR1 registers definitions
|
||||
* @{
|
||||
*/
|
||||
#define LICSR1_ICE 0x00000001
|
||||
#define LICSR1_ICINV 0x00000002
|
||||
#define LICSR1_ICORG 0x00000010
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name TLB default settings
|
||||
* @{
|
||||
*/
|
||||
#define TLB0_MAS0 (MAS0_TBLMAS_TBL | MAS0_ESEL(0))
|
||||
#define TLB0_MAS1 (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_2M)
|
||||
#define TLB0_MAS2 (MAS2_EPN(0x00000000) | MAS2_VLE)
|
||||
#define TLB0_MAS3 (MAS3_RPN(0x00000000) | \
|
||||
MAS3_UX | MAS3_SX | MAS3_UW | MAS3_SW | \
|
||||
MAS3_UR | MAS3_SR)
|
||||
|
||||
#define TLB1_MAS0 (MAS0_TBLMAS_TBL | MAS0_ESEL(1))
|
||||
#define TLB1_MAS1 (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_128K)
|
||||
#define TLB1_MAS2 (MAS2_EPN(0x40000000) | MAS2_VLE)
|
||||
#define TLB1_MAS3 (MAS3_RPN(0x40000000) | \
|
||||
MAS3_UX | MAS3_SX | MAS3_UW | MAS3_SW | \
|
||||
MAS3_UR | MAS3_SR)
|
||||
|
||||
#define TLB2_MAS0 (MAS0_TBLMAS_TBL | MAS0_ESEL(2))
|
||||
#define TLB2_MAS1 (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_1M)
|
||||
#define TLB2_MAS2 (MAS2_EPN(0xC3F00000) | MAS2_I)
|
||||
#define TLB2_MAS3 (MAS3_RPN(0xC3F00000) | \
|
||||
MAS3_UW | MAS3_SW | MAS3_UR | MAS3_SR)
|
||||
|
||||
#define TLB3_MAS0 (MAS0_TBLMAS_TBL | MAS0_ESEL(3))
|
||||
#define TLB3_MAS1 (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_1M)
|
||||
#define TLB3_MAS2 (MAS2_EPN(0xFFE00000) | MAS2_I)
|
||||
#define TLB3_MAS3 (MAS3_RPN(0xFFE00000) | \
|
||||
MAS3_UW | MAS3_SW | MAS3_UR | MAS3_SR)
|
||||
|
||||
#define TLB4_MAS0 (MAS0_TBLMAS_TBL | MAS0_ESEL(4))
|
||||
#define TLB4_MAS1 (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_1M)
|
||||
#define TLB4_MAS2 (MAS2_EPN(0x8FF00000) | MAS2_I)
|
||||
#define TLB4_MAS3 (MAS3_RPN(0x8FF00000) | \
|
||||
MAS3_UW | MAS3_SW | MAS3_UR | MAS3_SR)
|
||||
|
||||
#define TLB5_MAS0 (MAS0_TBLMAS_TBL | MAS0_ESEL(5))
|
||||
#define TLB5_MAS1 (MAS1_VALID | MAS1_IPROT | MAS1_TSISE_1M)
|
||||
#define TLB5_MAS2 (MAS2_EPN(0xFFF00000) | MAS2_I)
|
||||
#define TLB5_MAS3 (MAS3_RPN(0xFFF00000) | \
|
||||
MAS3_UW | MAS3_SW | MAS3_UR | MAS3_SR)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name BUCSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define BUCSR_DEFAULT (BUCSR_BPEN | BUCSR_BPRED_0 | \
|
||||
BUCSR_BALLOC_0 | BUCSR_BALLOC_BFI)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name LICSR1 default settings
|
||||
* @{
|
||||
*/
|
||||
#define LICSR1_DEFAULT (LICSR1_ICE | LICSR1_ICORG)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR register definitions
|
||||
* @{
|
||||
*/
|
||||
#define MSR_UCLE 0x04000000
|
||||
#define MSR_SPE 0x02000000
|
||||
#define MSR_WE 0x00040000
|
||||
#define MSR_CE 0x00020000
|
||||
#define MSR_EE 0x00008000
|
||||
#define MSR_PR 0x00004000
|
||||
#define MSR_FP 0x00002000
|
||||
#define MSR_ME 0x00001000
|
||||
#define MSR_FE0 0x00000800
|
||||
#define MSR_DE 0x00000200
|
||||
#define MSR_FE1 0x00000100
|
||||
#define MSR_IS 0x00000020
|
||||
#define MSR_DS 0x00000010
|
||||
#define MSR_RI 0x00000002
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name MSR default settings
|
||||
* @{
|
||||
*/
|
||||
#define MSR_DEFAULT (MSR_SPE | MSR_WE | MSR_CE | MSR_ME)
|
||||
/** @} */
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
.section .coreinit, "ax"
|
||||
|
||||
.align 2
|
||||
_ramcode:
|
||||
tlbwe
|
||||
isync
|
||||
blr
|
||||
|
||||
.align 2
|
||||
.globl _coreinit
|
||||
.type _coreinit, @function
|
||||
_coreinit:
|
||||
/*
|
||||
* Invalidating all TLBs except TLB0.
|
||||
*/
|
||||
lis %r3, 0
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(1))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(2))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(3))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(4))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(5))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(6))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(7))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(8))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(9))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(10))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(11))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(12))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(13))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(14))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
lis %r3, (MAS0_TBLMAS_TBL | MAS0_ESEL(15))@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
tlbwe
|
||||
|
||||
/*
|
||||
* TLB1 allocated to internal RAM.
|
||||
*/
|
||||
lis %r3, TLB1_MAS0@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
lis %r3, TLB1_MAS1@h
|
||||
ori %r3, %r3, TLB1_MAS1@l
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
lis %r3, TLB1_MAS2@h
|
||||
ori %r3, %r3, TLB1_MAS2@l
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
lis %r3, TLB1_MAS3@h
|
||||
ori %r3, %r3, TLB1_MAS3@l
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
tlbwe
|
||||
|
||||
/*
|
||||
* TLB2 allocated to internal Peripherals Bridge A.
|
||||
*/
|
||||
lis %r3, TLB2_MAS0@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
lis %r3, TLB2_MAS1@h
|
||||
ori %r3, %r3, TLB2_MAS1@l
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
lis %r3, TLB2_MAS2@h
|
||||
ori %r3, %r3, TLB2_MAS2@l
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
lis %r3, TLB2_MAS3@h
|
||||
ori %r3, %r3, TLB2_MAS3@l
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
tlbwe
|
||||
|
||||
/*
|
||||
* TLB3 allocated to internal Peripherals Bridge B.
|
||||
*/
|
||||
lis %r3, TLB3_MAS0@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
lis %r3, TLB3_MAS1@h
|
||||
ori %r3, %r3, TLB3_MAS1@l
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
lis %r3, TLB3_MAS2@h
|
||||
ori %r3, %r3, TLB3_MAS2@l
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
lis %r3, TLB3_MAS3@h
|
||||
ori %r3, %r3, TLB3_MAS3@l
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
tlbwe
|
||||
|
||||
/*
|
||||
* TLB4 allocated to on-platform peripherals.
|
||||
*/
|
||||
lis %r3, TLB4_MAS0@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
lis %r3, TLB4_MAS1@h
|
||||
ori %r3, %r3, TLB4_MAS1@l
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
lis %r3, TLB4_MAS2@h
|
||||
ori %r3, %r3, TLB4_MAS2@l
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
lis %r3, TLB4_MAS3@h
|
||||
ori %r3, %r3, TLB4_MAS3@l
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
tlbwe
|
||||
|
||||
/*
|
||||
* TLB5 allocated to on-platform peripherals.
|
||||
*/
|
||||
lis %r3, TLB5_MAS0@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
lis %r3, TLB5_MAS1@h
|
||||
ori %r3, %r3, TLB5_MAS1@l
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
lis %r3, TLB5_MAS2@h
|
||||
ori %r3, %r3, TLB5_MAS2@l
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
lis %r3, TLB5_MAS3@h
|
||||
ori %r3, %r3, TLB5_MAS3@l
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
tlbwe
|
||||
|
||||
/*
|
||||
* RAM clearing, this device requires a write to all RAM location in
|
||||
* order to initialize the ECC detection hardware, this is going to
|
||||
* slow down the startup but there is no way around.
|
||||
*/
|
||||
xor %r0, %r0, %r0
|
||||
xor %r1, %r1, %r1
|
||||
xor %r2, %r2, %r2
|
||||
xor %r3, %r3, %r3
|
||||
xor %r4, %r4, %r4
|
||||
xor %r5, %r5, %r5
|
||||
xor %r6, %r6, %r6
|
||||
xor %r7, %r7, %r7
|
||||
xor %r8, %r8, %r8
|
||||
xor %r9, %r9, %r9
|
||||
xor %r10, %r10, %r10
|
||||
xor %r11, %r11, %r11
|
||||
xor %r12, %r12, %r12
|
||||
xor %r13, %r13, %r13
|
||||
xor %r14, %r14, %r14
|
||||
xor %r15, %r15, %r15
|
||||
xor %r16, %r16, %r16
|
||||
xor %r17, %r17, %r17
|
||||
xor %r18, %r18, %r18
|
||||
xor %r19, %r19, %r19
|
||||
xor %r20, %r20, %r20
|
||||
xor %r21, %r21, %r21
|
||||
xor %r22, %r22, %r22
|
||||
xor %r23, %r23, %r23
|
||||
xor %r24, %r24, %r24
|
||||
xor %r25, %r25, %r25
|
||||
xor %r26, %r26, %r26
|
||||
xor %r27, %r27, %r27
|
||||
xor %r28, %r28, %r28
|
||||
xor %r29, %r29, %r29
|
||||
xor %r30, %r30, %r30
|
||||
xor %r31, %r31, %r31
|
||||
lis %r4, __ram_start__@h
|
||||
ori %r4, %r4, __ram_start__@l
|
||||
lis %r5, __ram_end__@h
|
||||
ori %r5, %r5, __ram_end__@l
|
||||
.cleareccloop:
|
||||
cmpl %cr0, %r4, %r5
|
||||
bge %cr0, .cleareccend
|
||||
stmw %r16, 0(%r4)
|
||||
addi %r4, %r4, 64
|
||||
b .cleareccloop
|
||||
.cleareccend:
|
||||
|
||||
/*
|
||||
* Special function registers clearing, required in order to avoid
|
||||
* possible problems with lockstep mode.
|
||||
*/
|
||||
mtcrf 0xFF, %r31
|
||||
mtspr 9, %r31 /* CTR */
|
||||
mtspr 22, %r31 /* DEC */
|
||||
mtspr 26, %r31 /* SRR0-1 */
|
||||
mtspr 27, %r31
|
||||
mtspr 54, %r31 /* DECAR */
|
||||
mtspr 58, %r31 /* CSRR0-1 */
|
||||
mtspr 59, %r31
|
||||
mtspr 61, %r31 /* DEAR */
|
||||
mtspr 256, %r31 /* USPRG0 */
|
||||
mtspr 272, %r31 /* SPRG1-7 */
|
||||
mtspr 273, %r31
|
||||
mtspr 274, %r31
|
||||
mtspr 275, %r31
|
||||
mtspr 276, %r31
|
||||
mtspr 277, %r31
|
||||
mtspr 278, %r31
|
||||
mtspr 279, %r31
|
||||
mtspr 285, %r31 /* TBU */
|
||||
mtspr 284, %r31 /* TBL */
|
||||
#if 0
|
||||
mtspr 318, %r31 /* DVC1-2 */
|
||||
mtspr 319, %r31
|
||||
#endif
|
||||
mtspr 562, %r31 /* DBCNT */
|
||||
mtspr 570, %r31 /* MCSRR0 */
|
||||
mtspr 571, %r31 /* MCSRR1 */
|
||||
mtspr 604, %r31 /* SPRG8-9 */
|
||||
mtspr 605, %r31
|
||||
|
||||
/*
|
||||
* *Finally* the TLB0 is re-allocated to flash, note, the final phase
|
||||
* is executed from RAM.
|
||||
*/
|
||||
lis %r3, TLB0_MAS0@h
|
||||
mtspr 624, %r3 /* MAS0 */
|
||||
lis %r3, TLB0_MAS1@h
|
||||
ori %r3, %r3, TLB0_MAS1@l
|
||||
mtspr 625, %r3 /* MAS1 */
|
||||
lis %r3, TLB0_MAS2@h
|
||||
ori %r3, %r3, TLB0_MAS2@l
|
||||
mtspr 626, %r3 /* MAS2 */
|
||||
lis %r3, TLB0_MAS3@h
|
||||
ori %r3, %r3, TLB0_MAS3@l
|
||||
mtspr 627, %r3 /* MAS3 */
|
||||
mflr %r4
|
||||
lis %r6, _ramcode@h
|
||||
ori %r6, %r6, _ramcode@l
|
||||
lis %r7, 0x40010000@h
|
||||
mtctr %r7
|
||||
lwz %r3, 0(%r6)
|
||||
stw %r3, 0(%r7)
|
||||
lwz %r3, 4(%r6)
|
||||
stw %r3, 4(%r7)
|
||||
lwz %r3, 8(%r6)
|
||||
stw %r3, 8(%r7)
|
||||
bctrl
|
||||
mtlr %r4
|
||||
|
||||
/*
|
||||
* Branch prediction enabled.
|
||||
*/
|
||||
li %r3, BUCSR_DEFAULT
|
||||
mtspr 1013, %r3 /* BUCSR */
|
||||
|
||||
/*
|
||||
* Cache invalidated and then enabled.
|
||||
*/
|
||||
li %r3, LICSR1_ICINV
|
||||
mtspr 1011, %r3 /* LICSR1 */
|
||||
.inv: mfspr %r3, 1011 /* LICSR1 */
|
||||
andi. %r3, %r3, LICSR1_ICINV
|
||||
bne .inv
|
||||
lis %r3, LICSR1_DEFAULT@h
|
||||
ori %r3, %r3, LICSR1_DEFAULT@l
|
||||
mtspr 1011, %r3 /* LICSR1 */
|
||||
|
||||
blr
|
||||
|
||||
/*
|
||||
* Exception vectors initialization.
|
||||
*/
|
||||
.global _ivinit
|
||||
.type _ivinit, @function
|
||||
_ivinit:
|
||||
/* MSR initialization.*/
|
||||
lis %r3, MSR_DEFAULT@h
|
||||
ori %r3, %r3, MSR_DEFAULT@l
|
||||
mtMSR %r3
|
||||
|
||||
/* IVPR initialization.*/
|
||||
lis %r3, __ivpr_base__@h
|
||||
ori %r3, %r3, __ivpr_base__@l
|
||||
mtIVPR %r3
|
||||
|
||||
/* IVORs initialization.*/
|
||||
lis %r3, _unhandled_exception@h
|
||||
ori %r3, %r3, _unhandled_exception@l
|
||||
|
||||
mtspr 400, %r3 /* IVOR0-15 */
|
||||
mtspr 401, %r3
|
||||
mtspr 402, %r3
|
||||
mtspr 403, %r3
|
||||
mtspr 404, %r3
|
||||
mtspr 405, %r3
|
||||
mtspr 406, %r3
|
||||
mtspr 407, %r3
|
||||
mtspr 408, %r3
|
||||
mtspr 409, %r3
|
||||
mtspr 410, %r3
|
||||
mtspr 411, %r3
|
||||
mtspr 412, %r3
|
||||
mtspr 413, %r3
|
||||
mtspr 414, %r3
|
||||
mtspr 415, %r3
|
||||
mtspr 528, %r3 /* IVOR32-34 */
|
||||
mtspr 529, %r3
|
||||
mtspr 530, %r3
|
||||
|
||||
blr
|
||||
|
||||
.section .handlers, "ax"
|
||||
|
||||
/*
|
||||
* Unhandled exceptions handler.
|
||||
*/
|
||||
.weak _unhandled_exception
|
||||
.type _unhandled_exception, @function
|
||||
_unhandled_exception:
|
||||
b _unhandled_exception
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
171
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/ld/SPC56EL54_LSM.ld
Executable file
171
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/ld/SPC56EL54_LSM.ld
Executable file
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC56EL54 memory setup in LSM mode.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 768k
|
||||
ram : org = 0x40000000, len = 128k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.handlers))
|
||||
KEEP(*(.crt0))
|
||||
. = ALIGN(0x800);
|
||||
KEEP(*(.vectors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
171
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/ld/SPC56EL60_LSM.ld
Executable file
171
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/ld/SPC56EL60_LSM.ld
Executable file
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC56EL60 memory setup in LSM mode.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 1M
|
||||
ram : org = 0x40000000, len = 128k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.handlers))
|
||||
KEEP(*(.crt0))
|
||||
. = ALIGN(0x800);
|
||||
KEEP(*(.vectors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
171
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/ld/SPC56EL70_LSM.ld
Executable file
171
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/ld/SPC56EL70_LSM.ld
Executable file
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006-2013 Giovanni Di Sirio
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* SPC56EL70 memory setup in LSM mode.
|
||||
*/
|
||||
__irq_stack_size__ = 0x0000; /* Not yet used.*/
|
||||
__process_stack_size__ = 0x0800;
|
||||
|
||||
MEMORY
|
||||
{
|
||||
flash : org = 0x00000000, len = 2M
|
||||
ram : org = 0x40000000, len = 192k
|
||||
}
|
||||
|
||||
ENTRY(_reset_address)
|
||||
|
||||
/*
|
||||
* Derived constants.
|
||||
*/
|
||||
__flash_size__ = LENGTH(flash);
|
||||
__flash_start__ = ORIGIN(flash);
|
||||
__flash_end__ = ORIGIN(flash) + LENGTH(flash);
|
||||
|
||||
__ram_size__ = LENGTH(ram);
|
||||
__ram_start__ = ORIGIN(ram);
|
||||
__ram_end__ = ORIGIN(ram) + LENGTH(ram);
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
. = ORIGIN(flash);
|
||||
.boot : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__ivpr_base__ = .;
|
||||
KEEP(*(.bam))
|
||||
KEEP(*(.coreinit))
|
||||
KEEP(*(.handlers))
|
||||
KEEP(*(.crt0))
|
||||
. = ALIGN(0x800);
|
||||
KEEP(*(.vectors))
|
||||
} > flash
|
||||
|
||||
constructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__init_array_start = .);
|
||||
KEEP(*(SORT(.init_array.*)))
|
||||
KEEP(*(.init_array))
|
||||
PROVIDE(__init_array_end = .);
|
||||
} > flash
|
||||
|
||||
destructors : ALIGN(4) SUBALIGN(4)
|
||||
{
|
||||
PROVIDE(__fini_array_start = .);
|
||||
KEEP(*(.fini_array))
|
||||
KEEP(*(SORT(.fini_array.*)))
|
||||
PROVIDE(__fini_array_end = .);
|
||||
} > flash
|
||||
|
||||
.text_vle : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text_vle)
|
||||
*(.text_vle.*)
|
||||
*(.gnu.linkonce.t_vle.*)
|
||||
} > flash
|
||||
|
||||
.text : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.text)
|
||||
*(.text.*)
|
||||
*(.gnu.linkonce.t.*)
|
||||
} > flash
|
||||
|
||||
.rodata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
*(.glue_7t)
|
||||
*(.glue_7)
|
||||
*(.gcc*)
|
||||
*(.rodata)
|
||||
*(.rodata.*)
|
||||
*(.rodata1)
|
||||
} > flash
|
||||
|
||||
.sdata2 : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__sdata2_start__ = . + 0x8000;
|
||||
*(.sdata2)
|
||||
*(.sdata2.*)
|
||||
*(.gnu.linkonce.s2.*)
|
||||
*(.sbss2)
|
||||
*(.sbss2.*)
|
||||
*(.gnu.linkonce.sb2.*)
|
||||
} > flash
|
||||
|
||||
.eh_frame_hdr :
|
||||
{
|
||||
*(.eh_frame_hdr)
|
||||
} > flash
|
||||
|
||||
.eh_frame : ONLY_IF_RO
|
||||
{
|
||||
*(.eh_frame)
|
||||
} > flash
|
||||
|
||||
.romdata : ALIGN(16) SUBALIGN(16)
|
||||
{
|
||||
__romdata_start__ = .;
|
||||
} > flash
|
||||
|
||||
.stacks :
|
||||
{
|
||||
. = ALIGN(8);
|
||||
__irq_stack_base__ = .;
|
||||
. += __irq_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__irq_stack_end__ = .;
|
||||
__process_stack_base__ = .;
|
||||
__main_thread_stack_base__ = .;
|
||||
. += __process_stack_size__;
|
||||
. = ALIGN(8);
|
||||
__process_stack_end__ = .;
|
||||
__main_thread_stack_end__ = .;
|
||||
} > ram
|
||||
|
||||
.data : AT(__romdata_start__)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
__data_start__ = .;
|
||||
*(.data)
|
||||
*(.data.*)
|
||||
*(.gnu.linkonce.d.*)
|
||||
__sdata_start__ = . + 0x8000;
|
||||
*(.sdata)
|
||||
*(.sdata.*)
|
||||
*(.gnu.linkonce.s.*)
|
||||
__data_end__ = .;
|
||||
} > ram
|
||||
|
||||
.sbss :
|
||||
{
|
||||
__bss_start__ = .;
|
||||
*(.sbss)
|
||||
*(.sbss.*)
|
||||
*(.gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
} > ram
|
||||
|
||||
.bss :
|
||||
{
|
||||
*(.bss)
|
||||
*(.bss.*)
|
||||
*(.gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
__bss_end__ = .;
|
||||
} > ram
|
||||
|
||||
__heap_base__ = __bss_end__;
|
||||
__heap_end__ = __ram_end__;
|
||||
}
|
||||
13
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/port.mk
Executable file
13
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/port.mk
Executable file
@@ -0,0 +1,13 @@
|
||||
# List of the ChibiOS/RT SPC56ELxx port files.
|
||||
PORTSRC = ${CHIBIOS}/os/ports/GCC/PPC/chcore.c
|
||||
|
||||
PORTASM = ${CHIBIOS}/os/ports/GCC/PPC/SPC56ELxx/bam.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC56ELxx/core.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC56ELxx/vectors.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/ivor.s \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/crt0.s
|
||||
|
||||
PORTINC = ${CHIBIOS}/os/ports/GCC/PPC \
|
||||
${CHIBIOS}/os/ports/GCC/PPC/SPC56ELxx
|
||||
|
||||
PORTLD = ${CHIBIOS}/os/ports/GCC/PPC/SPC56ELxx/ld
|
||||
79
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/ppcparams.h
Executable file
79
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/ppcparams.h
Executable file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC56ELxx/ppcparams.h
|
||||
* @brief PowerPC parameters for the SPC56ELxx.
|
||||
*
|
||||
* @defgroup PPC_SPC56ELxx SPC56ELxx Specific Parameters
|
||||
* @ingroup PPC_SPECIFIC
|
||||
* @details This file contains the PowerPC specific parameters for the
|
||||
* SPC56ELxx platform.
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _PPCPARAMS_H_
|
||||
#define _PPCPARAMS_H_
|
||||
|
||||
/**
|
||||
* @brief PPC core model.
|
||||
*/
|
||||
#define PPC_VARIANT PPC_VARIANT_e200z4
|
||||
|
||||
/**
|
||||
* @brief Number of writable bits in IVPR register.
|
||||
*/
|
||||
#define PPC_IVPR_BITS 16
|
||||
|
||||
/**
|
||||
* @brief IVORx registers support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_IVORS TRUE
|
||||
|
||||
/**
|
||||
* @brief Book E instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_BOOKE TRUE
|
||||
|
||||
/**
|
||||
* @brief VLE instruction set support.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports VLS Load/Store Multiple Volatile instructions.
|
||||
*/
|
||||
#define PPC_SUPPORTS_VLE_MULTI TRUE
|
||||
|
||||
/**
|
||||
* @brief Supports the decrementer timer.
|
||||
*/
|
||||
#define PPC_SUPPORTS_DECREMENTER TRUE
|
||||
|
||||
#endif /* _PPCPARAMS_H_ */
|
||||
|
||||
/** @} */
|
||||
86
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/vectors.h
Executable file
86
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/vectors.h
Executable file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC56ELxx/vectors.h
|
||||
* @brief ISR vector module header.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _VECTORS_H_
|
||||
#define _VECTORS_H_
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module constants. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Number of ISR vectors available.
|
||||
*/
|
||||
#define VECTORS_NUMBER 256
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module pre-compile time settings. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Derived constants and error checks. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module data structures and types. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Module macros. */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* External declarations. */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(_FROM_ASM_)
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
extern uint32_t _vectors[VECTORS_NUMBER];
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void _unhandled_irq(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* !defined(_FROM_ASM_) */
|
||||
|
||||
#endif /* _OSAL_H_ */
|
||||
|
||||
/** @} */
|
||||
443
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/vectors.s
Executable file
443
firmware/chibios/os/ports/GCC/PPC/SPC56ELxx/vectors.s
Executable file
@@ -0,0 +1,443 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file SPC56ELxx/vectors.s
|
||||
* @brief SPC56ELxx vectors table.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
/* Software vectors table. The vectors are accessed from the IVOR4
|
||||
handler only. In order to declare an interrupt handler just create
|
||||
a function withe the same name of a vector, the symbol will
|
||||
override the weak symbol declared here.*/
|
||||
.section .vectors, "ax"
|
||||
.align 4
|
||||
.globl _vectors
|
||||
_vectors:
|
||||
.long vector0, vector1, vector2, vector3
|
||||
.long vector4, vector5, vector6, vector7
|
||||
.long vector8, vector9, vector10, vector11
|
||||
.long vector12, vector13, vector14, vector15
|
||||
.long vector16, vector17, vector18, vector19
|
||||
.long vector20, vector21, vector22, vector23
|
||||
.long vector24, vector25, vector26, vector27
|
||||
.long vector28, vector29, vector30, vector31
|
||||
.long vector32, vector33, vector34, vector35
|
||||
.long vector36, vector37, vector38, vector39
|
||||
.long vector40, vector41, vector42, vector43
|
||||
.long vector44, vector45, vector46, vector47
|
||||
.long vector48, vector49, vector50, vector51
|
||||
.long vector52, vector53, vector54, vector55
|
||||
.long vector56, vector57, vector58, vector59
|
||||
.long vector60, vector61, vector62, vector63
|
||||
.long vector64, vector65, vector66, vector67
|
||||
.long vector68, vector69, vector70, vector71
|
||||
.long vector72, vector73, vector74, vector75
|
||||
.long vector76, vector77, vector78, vector79
|
||||
.long vector80, vector81, vector82, vector83
|
||||
.long vector84, vector85, vector86, vector87
|
||||
.long vector88, vector89, vector90, vector91
|
||||
.long vector92, vector93, vector94, vector95
|
||||
.long vector96, vector97, vector98, vector99
|
||||
.long vector100, vector101, vector102, vector103
|
||||
.long vector104, vector105, vector106, vector107
|
||||
.long vector108, vector109, vector110, vector111
|
||||
.long vector112, vector113, vector114, vector115
|
||||
.long vector116, vector117, vector118, vector119
|
||||
.long vector120, vector121, vector122, vector123
|
||||
.long vector124, vector125, vector126, vector127
|
||||
.long vector128, vector129, vector130, vector131
|
||||
.long vector132, vector133, vector134, vector135
|
||||
.long vector136, vector137, vector138, vector139
|
||||
.long vector140, vector141, vector142, vector143
|
||||
.long vector144, vector145, vector146, vector147
|
||||
.long vector148, vector149, vector150, vector151
|
||||
.long vector152, vector153, vector154, vector155
|
||||
.long vector156, vector157, vector158, vector159
|
||||
.long vector160, vector161, vector162, vector163
|
||||
.long vector164, vector165, vector166, vector167
|
||||
.long vector168, vector169, vector170, vector171
|
||||
.long vector172, vector173, vector174, vector175
|
||||
.long vector176, vector177, vector178, vector179
|
||||
.long vector180, vector181, vector182, vector183
|
||||
.long vector184, vector185, vector186, vector187
|
||||
.long vector188, vector189, vector190, vector191
|
||||
.long vector192, vector193, vector194, vector195
|
||||
.long vector196, vector197, vector198, vector199
|
||||
.long vector200, vector201, vector202, vector203
|
||||
.long vector204, vector205, vector206, vector207
|
||||
.long vector208, vector209, vector210, vector211
|
||||
.long vector212, vector213, vector214, vector215
|
||||
.long vector216, vector217, vector218, vector219
|
||||
.long vector220, vector221, vector222, vector223
|
||||
.long vector224, vector225, vector226, vector227
|
||||
.long vector228, vector229, vector230, vector231
|
||||
.long vector232, vector233, vector234, vector235
|
||||
.long vector236, vector237, vector238, vector239
|
||||
.long vector240, vector241, vector242, vector243
|
||||
.long vector244, vector245, vector246, vector247
|
||||
.long vector248, vector249, vector250, vector251
|
||||
.long vector252, vector253, vector254, vector255
|
||||
|
||||
.text
|
||||
.align 2
|
||||
|
||||
.weak vector0, vector1, vector2, vector3
|
||||
.weak vector4, vector5, vector6, vector7
|
||||
.weak vector8, vector9, vector10, vector11
|
||||
.weak vector12, vector13, vector14, vector15
|
||||
.weak vector16, vector17, vector18, vector19
|
||||
.weak vector20, vector21, vector22, vector23
|
||||
.weak vector24, vector25, vector26, vector27
|
||||
.weak vector28, vector29, vector30, vector31
|
||||
.weak vector32, vector33, vector34, vector35
|
||||
.weak vector36, vector37, vector38, vector39
|
||||
.weak vector40, vector41, vector42, vector43
|
||||
.weak vector44, vector45, vector46, vector47
|
||||
.weak vector48, vector49, vector50, vector51
|
||||
.weak vector52, vector53, vector54, vector55
|
||||
.weak vector56, vector57, vector58, vector59
|
||||
.weak vector60, vector61, vector62, vector63
|
||||
.weak vector64, vector65, vector66, vector67
|
||||
.weak vector68, vector69, vector70, vector71
|
||||
.weak vector72, vector73, vector74, vector75
|
||||
.weak vector76, vector77, vector78, vector79
|
||||
.weak vector80, vector81, vector82, vector83
|
||||
.weak vector84, vector85, vector86, vector87
|
||||
.weak vector88, vector89, vector90, vector91
|
||||
.weak vector92, vector93, vector94, vector95
|
||||
.weak vector96, vector97, vector98, vector99
|
||||
.weak vector100, vector101, vector102, vector103
|
||||
.weak vector104, vector105, vector106, vector107
|
||||
.weak vector108, vector109, vector110, vector111
|
||||
.weak vector112, vector113, vector114, vector115
|
||||
.weak vector116, vector117, vector118, vector119
|
||||
.weak vector120, vector121, vector122, vector123
|
||||
.weak vector124, vector125, vector126, vector127
|
||||
.weak vector128, vector129, vector130, vector131
|
||||
.weak vector132, vector133, vector134, vector135
|
||||
.weak vector136, vector137, vector138, vector139
|
||||
.weak vector140, vector141, vector142, vector143
|
||||
.weak vector144, vector145, vector146, vector147
|
||||
.weak vector148, vector149, vector150, vector151
|
||||
.weak vector152, vector153, vector154, vector155
|
||||
.weak vector156, vector157, vector158, vector159
|
||||
.weak vector160, vector161, vector162, vector163
|
||||
.weak vector164, vector165, vector166, vector167
|
||||
.weak vector168, vector169, vector170, vector171
|
||||
.weak vector172, vector173, vector174, vector175
|
||||
.weak vector176, vector177, vector178, vector179
|
||||
.weak vector180, vector181, vector182, vector183
|
||||
.weak vector184, vector185, vector186, vector187
|
||||
.weak vector188, vector189, vector190, vector191
|
||||
.weak vector192, vector193, vector194, vector195
|
||||
.weak vector196, vector197, vector198, vector199
|
||||
.weak vector200, vector201, vector202, vector203
|
||||
.weak vector204, vector205, vector206, vector207
|
||||
.weak vector208, vector209, vector210, vector211
|
||||
.weak vector212, vector213, vector214, vector215
|
||||
.weak vector216, vector217, vector218, vector219
|
||||
.weak vector220, vector221, vector222, vector223
|
||||
.weak vector224, vector225, vector226, vector227
|
||||
.weak vector228, vector229, vector230, vector231
|
||||
.weak vector232, vector233, vector234, vector235
|
||||
.weak vector236, vector237, vector238, vector239
|
||||
.weak vector240, vector241, vector242, vector243
|
||||
.weak vector244, vector245, vector246, vector247
|
||||
.weak vector248, vector249, vector250, vector251
|
||||
.weak vector252, vector253, vector254, vector255
|
||||
|
||||
vector0:
|
||||
vector1:
|
||||
vector2:
|
||||
vector3:
|
||||
vector4:
|
||||
vector5:
|
||||
vector6:
|
||||
vector7:
|
||||
vector8:
|
||||
vector9:
|
||||
vector10:
|
||||
vector11:
|
||||
vector12:
|
||||
vector13:
|
||||
vector14:
|
||||
vector15:
|
||||
vector16:
|
||||
vector17:
|
||||
vector18:
|
||||
vector19:
|
||||
vector20:
|
||||
vector21:
|
||||
vector22:
|
||||
vector23:
|
||||
vector24:
|
||||
vector25:
|
||||
vector26:
|
||||
vector27:
|
||||
vector28:
|
||||
vector29:
|
||||
vector30:
|
||||
vector31:
|
||||
vector32:
|
||||
vector33:
|
||||
vector34:
|
||||
vector35:
|
||||
vector36:
|
||||
vector37:
|
||||
vector38:
|
||||
vector39:
|
||||
vector40:
|
||||
vector41:
|
||||
vector42:
|
||||
vector43:
|
||||
vector44:
|
||||
vector45:
|
||||
vector46:
|
||||
vector47:
|
||||
vector48:
|
||||
vector49:
|
||||
vector50:
|
||||
vector51:
|
||||
vector52:
|
||||
vector53:
|
||||
vector54:
|
||||
vector55:
|
||||
vector56:
|
||||
vector57:
|
||||
vector58:
|
||||
vector59:
|
||||
vector60:
|
||||
vector61:
|
||||
vector62:
|
||||
vector63:
|
||||
vector64:
|
||||
vector65:
|
||||
vector66:
|
||||
vector67:
|
||||
vector68:
|
||||
vector69:
|
||||
vector70:
|
||||
vector71:
|
||||
vector72:
|
||||
vector73:
|
||||
vector74:
|
||||
vector75:
|
||||
vector76:
|
||||
vector77:
|
||||
vector78:
|
||||
vector79:
|
||||
vector80:
|
||||
vector81:
|
||||
vector82:
|
||||
vector83:
|
||||
vector84:
|
||||
vector85:
|
||||
vector86:
|
||||
vector87:
|
||||
vector88:
|
||||
vector89:
|
||||
vector90:
|
||||
vector91:
|
||||
vector92:
|
||||
vector93:
|
||||
vector94:
|
||||
vector95:
|
||||
vector96:
|
||||
vector97:
|
||||
vector98:
|
||||
vector99:
|
||||
vector100:
|
||||
vector101:
|
||||
vector102:
|
||||
vector103:
|
||||
vector104:
|
||||
vector105:
|
||||
vector106:
|
||||
vector107:
|
||||
vector108:
|
||||
vector109:
|
||||
vector110:
|
||||
vector111:
|
||||
vector112:
|
||||
vector113:
|
||||
vector114:
|
||||
vector115:
|
||||
vector116:
|
||||
vector117:
|
||||
vector118:
|
||||
vector119:
|
||||
vector120:
|
||||
vector121:
|
||||
vector122:
|
||||
vector123:
|
||||
vector124:
|
||||
vector125:
|
||||
vector126:
|
||||
vector127:
|
||||
vector128:
|
||||
vector129:
|
||||
vector130:
|
||||
vector131:
|
||||
vector132:
|
||||
vector133:
|
||||
vector134:
|
||||
vector135:
|
||||
vector136:
|
||||
vector137:
|
||||
vector138:
|
||||
vector139:
|
||||
vector140:
|
||||
vector141:
|
||||
vector142:
|
||||
vector143:
|
||||
vector144:
|
||||
vector145:
|
||||
vector146:
|
||||
vector147:
|
||||
vector148:
|
||||
vector149:
|
||||
vector150:
|
||||
vector151:
|
||||
vector152:
|
||||
vector153:
|
||||
vector154:
|
||||
vector155:
|
||||
vector156:
|
||||
vector157:
|
||||
vector158:
|
||||
vector159:
|
||||
vector160:
|
||||
vector161:
|
||||
vector162:
|
||||
vector163:
|
||||
vector164:
|
||||
vector165:
|
||||
vector166:
|
||||
vector167:
|
||||
vector168:
|
||||
vector169:
|
||||
vector170:
|
||||
vector171:
|
||||
vector172:
|
||||
vector173:
|
||||
vector174:
|
||||
vector175:
|
||||
vector176:
|
||||
vector177:
|
||||
vector178:
|
||||
vector179:
|
||||
vector180:
|
||||
vector181:
|
||||
vector182:
|
||||
vector183:
|
||||
vector184:
|
||||
vector185:
|
||||
vector186:
|
||||
vector187:
|
||||
vector188:
|
||||
vector189:
|
||||
vector190:
|
||||
vector191:
|
||||
vector192:
|
||||
vector193:
|
||||
vector194:
|
||||
vector195:
|
||||
vector196:
|
||||
vector197:
|
||||
vector198:
|
||||
vector199:
|
||||
vector200:
|
||||
vector201:
|
||||
vector202:
|
||||
vector203:
|
||||
vector204:
|
||||
vector205:
|
||||
vector206:
|
||||
vector207:
|
||||
vector208:
|
||||
vector209:
|
||||
vector210:
|
||||
vector211:
|
||||
vector212:
|
||||
vector213:
|
||||
vector214:
|
||||
vector215:
|
||||
vector216:
|
||||
vector217:
|
||||
vector218:
|
||||
vector219:
|
||||
vector220:
|
||||
vector221:
|
||||
vector222:
|
||||
vector223:
|
||||
vector224:
|
||||
vector225:
|
||||
vector226:
|
||||
vector227:
|
||||
vector228:
|
||||
vector229:
|
||||
vector230:
|
||||
vector231:
|
||||
vector232:
|
||||
vector233:
|
||||
vector234:
|
||||
vector235:
|
||||
vector236:
|
||||
vector237:
|
||||
vector238:
|
||||
vector239:
|
||||
vector240:
|
||||
vector241:
|
||||
vector242:
|
||||
vector243:
|
||||
vector244:
|
||||
vector245:
|
||||
vector246:
|
||||
vector247:
|
||||
vector248:
|
||||
vector249:
|
||||
vector250:
|
||||
vector251:
|
||||
vector252:
|
||||
vector253:
|
||||
vector254:
|
||||
vector255:
|
||||
|
||||
.weak _unhandled_irq
|
||||
.type _unhandled_irq, @function
|
||||
_unhandled_irq:
|
||||
b _unhandled_irq
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
119
firmware/chibios/os/ports/GCC/PPC/chcore.c
Executable file
119
firmware/chibios/os/ports/GCC/PPC/chcore.c
Executable file
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file PPC/chcore.c
|
||||
* @brief PowerPC architecture port code.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#include "ch.h"
|
||||
|
||||
/**
|
||||
* @brief Kernel port layer initialization.
|
||||
* @details IVOR4 and IVOR10 initialization.
|
||||
*/
|
||||
void port_init(void) {
|
||||
#if PPC_SUPPORTS_IVORS
|
||||
/* The CPU supports IVOR registers, the kernel requires IVOR4 and IVOR10
|
||||
and the initialization is performed here.*/
|
||||
asm volatile ("li %%r3, _IVOR4@l \t\n"
|
||||
"mtIVOR4 %%r3 \t\n"
|
||||
"li %%r3, _IVOR10@l \t\n"
|
||||
"mtIVOR10 %%r3" : : : "memory");
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Halts the system.
|
||||
* @details This function is invoked by the operating system when an
|
||||
* unrecoverable error is detected (for example because a programming
|
||||
* error in the application code that triggers an assertion while
|
||||
* in debug mode).
|
||||
*/
|
||||
void port_halt(void) {
|
||||
|
||||
port_disable();
|
||||
while (TRUE) {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Performs a context switch between two threads.
|
||||
* @details This is the most critical code in any port, this function
|
||||
* is responsible for the context switch between 2 threads.
|
||||
* @note The implementation of this code affects <b>directly</b> the context
|
||||
* switch performance so optimize here as much as you can.
|
||||
*/
|
||||
#if !defined(__DOXYGEN__)
|
||||
__attribute__((naked))
|
||||
#endif
|
||||
void port_dummy1(void) {
|
||||
|
||||
asm (".global _port_switch");
|
||||
asm ("_port_switch:");
|
||||
asm ("subi %sp, %sp, 80"); /* Size of the intctx structure. */
|
||||
asm ("mflr %r0");
|
||||
asm ("stw %r0, 84(%sp)"); /* LR into the caller frame. */
|
||||
asm ("mfcr %r0");
|
||||
asm ("stw %r0, 0(%sp)"); /* CR. */
|
||||
asm ("stmw %r14, 4(%sp)"); /* GPR14...GPR31. */
|
||||
|
||||
asm ("stw %sp, 12(%r4)"); /* Store swapped-out stack. */
|
||||
asm ("lwz %sp, 12(%r3)"); /* Load swapped-in stack. */
|
||||
|
||||
asm ("lmw %r14, 4(%sp)"); /* GPR14...GPR31. */
|
||||
asm ("lwz %r0, 0(%sp)"); /* CR. */
|
||||
asm ("mtcr %r0");
|
||||
asm ("lwz %r0, 84(%sp)"); /* LR from the caller frame. */
|
||||
asm ("mtlr %r0");
|
||||
asm ("addi %sp, %sp, 80"); /* Size of the intctx structure. */
|
||||
asm ("blr");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Start a thread by invoking its work function.
|
||||
* @details If the work function returns @p chThdExit() is automatically
|
||||
* invoked.
|
||||
*/
|
||||
#if !defined(__DOXYGEN__)
|
||||
__attribute__((naked))
|
||||
#endif
|
||||
void port_dummy2(void) {
|
||||
|
||||
asm (".global _port_thread_start");
|
||||
asm ("_port_thread_start:");
|
||||
chSysUnlock();
|
||||
asm ("mr %r3, %r31"); /* Thread parameter. */
|
||||
asm ("mtctr %r30");
|
||||
asm ("bctrl"); /* Invoke thread function. */
|
||||
asm ("bl chThdExit"); /* Thread termination on exit. */
|
||||
}
|
||||
|
||||
/** @} */
|
||||
411
firmware/chibios/os/ports/GCC/PPC/chcore.h
Executable file
411
firmware/chibios/os/ports/GCC/PPC/chcore.h
Executable file
@@ -0,0 +1,411 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file PPC/chcore.h
|
||||
* @brief PowerPC architecture port macros and structures.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _CHCORE_H_
|
||||
#define _CHCORE_H_
|
||||
|
||||
#if CH_DBG_ENABLE_STACK_CHECK
|
||||
#error "option CH_DBG_ENABLE_STACK_CHECK not supported by this port"
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Port constants (common). */
|
||||
/*===========================================================================*/
|
||||
|
||||
/* Added to make the header stand-alone when included from asm.*/
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif
|
||||
#ifndef TRUE
|
||||
#define TRUE (!FALSE)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @name Supported core variants
|
||||
* @{
|
||||
*/
|
||||
#define PPC_VARIANT_e200z0 200
|
||||
#define PPC_VARIANT_e200z3 203
|
||||
#define PPC_VARIANT_e200z4 204
|
||||
/** @} */
|
||||
|
||||
#include "vectors.h"
|
||||
#include "ppcparams.h"
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Port macros (common). */
|
||||
/*===========================================================================*/
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Port configurable parameters (common). */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Use VLE instruction set.
|
||||
* @note This parameter is usually set in the Makefile.
|
||||
*/
|
||||
#if !defined(PPC_USE_VLE)
|
||||
#define PPC_USE_VLE TRUE
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enables the use of the @p WFI instruction.
|
||||
*/
|
||||
#if !defined(PPC_ENABLE_WFI_IDLE)
|
||||
#define PPC_ENABLE_WFI_IDLE FALSE
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Port derived parameters (common). */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if PPC_USE_VLE && !PPC_SUPPORTS_VLE
|
||||
#error "the selected MCU does not support VLE instructions set"
|
||||
#endif
|
||||
|
||||
#if !PPC_USE_VLE && !PPC_SUPPORTS_BOOKE
|
||||
#error "the selected MCU does not support BookE instructions set"
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Port exported info (common). */
|
||||
/*===========================================================================*/
|
||||
|
||||
/**
|
||||
* @brief Unique macro for the implemented architecture.
|
||||
*/
|
||||
#define CH_ARCHITECTURE_PPC
|
||||
|
||||
/**
|
||||
* @brief Name of the implemented architecture.
|
||||
*/
|
||||
#define CH_ARCHITECTURE_NAME "Power Architecture"
|
||||
|
||||
/**
|
||||
* @brief Name of the architecture variant.
|
||||
*/
|
||||
#if (PPC_VARIANT == PPC_VARIANT_e200z0) || defined(__DOXYGEN__)
|
||||
#define CH_CORE_VARIANT_NAME "e200z0"
|
||||
#elif PPC_VARIANT == PPC_VARIANT_e200z3
|
||||
#define CH_CORE_VARIANT_NAME "e200z3"
|
||||
#elif PPC_VARIANT == PPC_VARIANT_e200z4
|
||||
#define CH_CORE_VARIANT_NAME "e200z4"
|
||||
#else
|
||||
#error "unknown or unsupported PowerPC variant specified"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Name of the compiler supported by this port.
|
||||
*/
|
||||
#define CH_COMPILER_NAME "GCC " __VERSION__
|
||||
|
||||
/**
|
||||
* @brief Port-specific information string.
|
||||
*/
|
||||
#if PPC_USE_VLE
|
||||
#define CH_PORT_INFO "VLE mode"
|
||||
#else
|
||||
#define CH_PORT_INFO "Book-E mode"
|
||||
#endif
|
||||
|
||||
/*===========================================================================*/
|
||||
/* Port implementation part (common). */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if !defined(_FROM_ASM_)
|
||||
|
||||
/**
|
||||
* @brief Base type for stack and memory alignment.
|
||||
*/
|
||||
typedef struct {
|
||||
uint8_t a[8];
|
||||
} stkalign_t __attribute__((aligned(8)));
|
||||
|
||||
/**
|
||||
* @brief Generic PPC register.
|
||||
*/
|
||||
typedef void *regppc_t;
|
||||
|
||||
/**
|
||||
* @brief Mandatory part of a stack frame.
|
||||
*/
|
||||
struct eabi_frame {
|
||||
regppc_t slink; /**< Stack back link. */
|
||||
regppc_t shole; /**< Stack hole for LR storage. */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Interrupt saved context.
|
||||
* @details This structure represents the stack frame saved during a
|
||||
* preemption-capable interrupt handler.
|
||||
* @note R2 and R13 are not saved because those are assumed to be immutable
|
||||
* during the system life cycle.
|
||||
*/
|
||||
struct extctx {
|
||||
struct eabi_frame frame;
|
||||
/* Start of the e_stmvsrrw frame (offset 8).*/
|
||||
regppc_t pc;
|
||||
regppc_t msr;
|
||||
/* Start of the e_stmvsprw frame (offset 16).*/
|
||||
regppc_t cr;
|
||||
regppc_t lr;
|
||||
regppc_t ctr;
|
||||
regppc_t xer;
|
||||
/* Start of the e_stmvgprw frame (offset 32).*/
|
||||
regppc_t r0;
|
||||
regppc_t r3;
|
||||
regppc_t r4;
|
||||
regppc_t r5;
|
||||
regppc_t r6;
|
||||
regppc_t r7;
|
||||
regppc_t r8;
|
||||
regppc_t r9;
|
||||
regppc_t r10;
|
||||
regppc_t r11;
|
||||
regppc_t r12;
|
||||
regppc_t padding;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief System saved context.
|
||||
* @details This structure represents the inner stack frame during a context
|
||||
* switching.
|
||||
* @note R2 and R13 are not saved because those are assumed to be immutable
|
||||
* during the system life cycle.
|
||||
* @note LR is stored in the caller contex so it is not present in this
|
||||
* structure.
|
||||
*/
|
||||
struct intctx {
|
||||
regppc_t cr; /* Part of it is not volatile... */
|
||||
regppc_t r14;
|
||||
regppc_t r15;
|
||||
regppc_t r16;
|
||||
regppc_t r17;
|
||||
regppc_t r18;
|
||||
regppc_t r19;
|
||||
regppc_t r20;
|
||||
regppc_t r21;
|
||||
regppc_t r22;
|
||||
regppc_t r23;
|
||||
regppc_t r24;
|
||||
regppc_t r25;
|
||||
regppc_t r26;
|
||||
regppc_t r27;
|
||||
regppc_t r28;
|
||||
regppc_t r29;
|
||||
regppc_t r30;
|
||||
regppc_t r31;
|
||||
regppc_t padding;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Platform dependent part of the @p Thread structure.
|
||||
* @details This structure usually contains just the saved stack pointer
|
||||
* defined as a pointer to a @p intctx structure.
|
||||
*/
|
||||
struct context {
|
||||
struct intctx *sp;
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Platform dependent part of the @p chThdCreateI() API.
|
||||
* @details This code usually setup the context switching frame represented
|
||||
* by an @p intctx structure.
|
||||
*/
|
||||
#define SETUP_CONTEXT(workspace, wsize, pf, arg) { \
|
||||
uint8_t *sp = (uint8_t *)workspace + wsize - sizeof(struct eabi_frame); \
|
||||
((struct eabi_frame *)sp)->slink = 0; \
|
||||
((struct eabi_frame *)sp)->shole = _port_thread_start; \
|
||||
tp->p_ctx.sp = (struct intctx *)(sp - sizeof(struct intctx)); \
|
||||
tp->p_ctx.sp->r31 = arg; \
|
||||
tp->p_ctx.sp->r30 = pf; \
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Stack size for the system idle thread.
|
||||
* @details This size depends on the idle thread implementation, usually
|
||||
* the idle thread should take no more space than those reserved
|
||||
* by @p PORT_INT_REQUIRED_STACK.
|
||||
*/
|
||||
#ifndef PORT_IDLE_THREAD_STACK_SIZE
|
||||
#define PORT_IDLE_THREAD_STACK_SIZE 32
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Per-thread stack overhead for interrupts servicing.
|
||||
* @details This constant is used in the calculation of the correct working
|
||||
* area size.
|
||||
*/
|
||||
#ifndef PORT_INT_REQUIRED_STACK
|
||||
#define PORT_INT_REQUIRED_STACK 256
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Enforces a correct alignment for a stack area size value.
|
||||
*/
|
||||
#define STACK_ALIGN(n) ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1)
|
||||
|
||||
/**
|
||||
* @brief Computes the thread working area global size.
|
||||
*/
|
||||
#define THD_WA_SIZE(n) STACK_ALIGN(sizeof(Thread) + \
|
||||
sizeof(struct intctx) + \
|
||||
sizeof(struct extctx) + \
|
||||
(n) + (PORT_INT_REQUIRED_STACK))
|
||||
|
||||
/**
|
||||
* @brief Static working area allocation.
|
||||
* @details This macro is used to allocate a static thread working area
|
||||
* aligned as both position and size.
|
||||
*/
|
||||
#define WORKING_AREA(s, n) stkalign_t s[THD_WA_SIZE(n) / sizeof(stkalign_t)]
|
||||
|
||||
/**
|
||||
* @brief IRQ prologue code.
|
||||
* @details This macro must be inserted at the start of all IRQ handlers
|
||||
* enabled to invoke system APIs.
|
||||
*/
|
||||
#define PORT_IRQ_PROLOGUE()
|
||||
|
||||
/**
|
||||
* @brief IRQ epilogue code.
|
||||
* @details This macro must be inserted at the end of all IRQ handlers
|
||||
* enabled to invoke system APIs.
|
||||
*/
|
||||
#define PORT_IRQ_EPILOGUE()
|
||||
|
||||
/**
|
||||
* @brief IRQ handler function declaration.
|
||||
* @note @p id can be a function name or a vector number depending on the
|
||||
* port implementation.
|
||||
*/
|
||||
#define PORT_IRQ_HANDLER(id) void id(void)
|
||||
|
||||
/**
|
||||
* @details Implemented as global interrupt disable.
|
||||
*/
|
||||
#define port_lock() asm volatile ("wrteei 0" : : : "memory")
|
||||
|
||||
/**
|
||||
* @details Implemented as global interrupt enable.
|
||||
*/
|
||||
#define port_unlock() asm volatile("wrteei 1" : : : "memory")
|
||||
|
||||
/**
|
||||
* @details Implemented as global interrupt disable.
|
||||
*/
|
||||
#define port_lock_from_isr() /*asm ("wrteei 0")*/
|
||||
|
||||
/**
|
||||
* @details Implemented as global interrupt enable.
|
||||
*/
|
||||
#define port_unlock_from_isr() /*asm ("wrteei 1")*/
|
||||
|
||||
/**
|
||||
* @details Implemented as global interrupt disable.
|
||||
*/
|
||||
#define port_disable() asm volatile ("wrteei 0" : : : "memory")
|
||||
|
||||
/**
|
||||
* @details Same as @p port_disable() in this port, there is no difference
|
||||
* between the two states.
|
||||
*/
|
||||
#define port_suspend() asm volatile ("wrteei 0" : : : "memory")
|
||||
|
||||
/**
|
||||
* @details Implemented as global interrupt enable.
|
||||
*/
|
||||
#define port_enable() asm volatile ("wrteei 1" : : : "memory")
|
||||
|
||||
/**
|
||||
* @brief Performs a context switch between two threads.
|
||||
* @details This is the most critical code in any port, this function
|
||||
* is responsible for the context switch between 2 threads.
|
||||
* @note The implementation of this code affects <b>directly</b> the context
|
||||
* switch performance so optimize here as much as you can.
|
||||
*
|
||||
* @param[in] ntp the thread to be switched in
|
||||
* @param[in] otp the thread to be switched out
|
||||
*/
|
||||
#if !CH_DBG_ENABLE_STACK_CHECK || defined(__DOXYGEN__)
|
||||
#define port_switch(ntp, otp) _port_switch(ntp, otp)
|
||||
#else
|
||||
#define port_switch(ntp, otp) { \
|
||||
register struct intctx *sp asm ("%r1"); \
|
||||
if ((stkalign_t *)(sp - 1) < otp->p_stklimit) \
|
||||
chDbgPanic("stack overflow"); \
|
||||
_port_switch(ntp, otp); \
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Writes to a special register.
|
||||
*
|
||||
* @param[in] spr special register number
|
||||
* @param[in] val value to be written
|
||||
*/
|
||||
#define port_mtspr(spr, val) \
|
||||
asm volatile ("mtspr %0,%1" : : "n" (spr), "r" (val))
|
||||
|
||||
/**
|
||||
* @details This port function is implemented as inlined code for performance
|
||||
* reasons.
|
||||
*/
|
||||
#if PPC_ENABLE_WFI_IDLE
|
||||
#if !defined(port_wait_for_interrupt)
|
||||
#define port_wait_for_interrupt() { \
|
||||
asm volatile ("wait" : : : "memory"); \
|
||||
}
|
||||
#endif
|
||||
#else
|
||||
#define port_wait_for_interrupt()
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void port_init(void);
|
||||
void port_halt(void);
|
||||
void _port_switch(Thread *ntp, Thread *otp);
|
||||
void _port_thread_start(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _FROM_ASM_ */
|
||||
|
||||
#endif /* _CHCORE_H_ */
|
||||
|
||||
/** @} */
|
||||
100
firmware/chibios/os/ports/GCC/PPC/chtypes.h
Executable file
100
firmware/chibios/os/ports/GCC/PPC/chtypes.h
Executable file
@@ -0,0 +1,100 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file PPC/chtypes.h
|
||||
* @brief PowerPC architecture port system types.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#ifndef _CHTYPES_H_
|
||||
#define _CHTYPES_H_
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/*
|
||||
* Derived generic types.
|
||||
*/
|
||||
typedef volatile int8_t vint8_t; /**< Volatile signed 8 bits. */
|
||||
typedef volatile uint8_t vuint8_t; /**< Volatile unsigned 8 bits. */
|
||||
typedef volatile int16_t vint16_t; /**< Volatile signed 16 bits. */
|
||||
typedef volatile uint16_t vuint16_t; /**< Volatile unsigned 16 bits. */
|
||||
typedef volatile int32_t vint32_t; /**< Volatile signed 32 bits. */
|
||||
typedef volatile uint32_t vuint32_t; /**< Volatile unsigned 32 bits. */
|
||||
|
||||
/*
|
||||
* Kernel types.
|
||||
*/
|
||||
typedef bool bool_t; /**< Fast boolean type. */
|
||||
typedef uint8_t tmode_t; /**< Thread flags. */
|
||||
typedef uint8_t tstate_t; /**< Thread state. */
|
||||
typedef uint8_t trefs_t; /**< Thread references counter. */
|
||||
typedef uint8_t tslices_t; /**< Thread time slices counter.*/
|
||||
typedef uint32_t tprio_t; /**< Thread priority. */
|
||||
typedef int32_t msg_t; /**< Inter-thread message. */
|
||||
typedef int32_t eventid_t; /**< Event Id. */
|
||||
typedef uint32_t eventmask_t; /**< Event mask. */
|
||||
typedef uint32_t flagsmask_t; /**< Event flags. */
|
||||
typedef uint32_t systime_t; /**< System time. */
|
||||
typedef int32_t cnt_t; /**< Resources counter. */
|
||||
|
||||
/**
|
||||
* @brief Inline function modifier.
|
||||
*/
|
||||
#define INLINE inline
|
||||
|
||||
/**
|
||||
* @brief ROM constant modifier.
|
||||
* @note It is set to use the "const" keyword in this port.
|
||||
*/
|
||||
#define ROMCONST const
|
||||
|
||||
/**
|
||||
* @brief Packed structure modifier (within).
|
||||
* @note It uses the "packed" GCC attribute.
|
||||
*/
|
||||
#define PACK_STRUCT_STRUCT __attribute__((packed))
|
||||
|
||||
/**
|
||||
* @brief Packed structure modifier (before).
|
||||
* @note Empty in this port.
|
||||
*/
|
||||
#define PACK_STRUCT_BEGIN
|
||||
|
||||
/**
|
||||
* @brief Packed structure modifier (after).
|
||||
* @note Empty in this port.
|
||||
*/
|
||||
#define PACK_STRUCT_END
|
||||
|
||||
#endif /* _CHTYPES_H_ */
|
||||
|
||||
/** @} */
|
||||
133
firmware/chibios/os/ports/GCC/PPC/crt0.s
Executable file
133
firmware/chibios/os/ports/GCC/PPC/crt0.s
Executable file
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file PPC/crt0.s
|
||||
* @brief Generic PowerPC startup file for ChibiOS/RT.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
|
||||
.section .crt0, "ax"
|
||||
.align 2
|
||||
.globl _boot_address
|
||||
.type _boot_address, @function
|
||||
_boot_address:
|
||||
/*
|
||||
* Stack setup.
|
||||
*/
|
||||
lis %r1, __process_stack_end__@h
|
||||
ori %r1, %r1, __process_stack_end__@l
|
||||
li %r0, 0
|
||||
stwu %r0, -8(%r1)
|
||||
/*
|
||||
* Small sections registers initialization.
|
||||
*/
|
||||
lis %r2, __sdata2_start__@h
|
||||
ori %r2, %r2, __sdata2_start__@l
|
||||
lis %r13, __sdata_start__@h
|
||||
ori %r13, %r13, __sdata_start__@l
|
||||
/*
|
||||
* Early initialization.
|
||||
*/
|
||||
bl __early_init
|
||||
/*
|
||||
* BSS clearing.
|
||||
*/
|
||||
lis %r4, __bss_start__@h
|
||||
ori %r4, %r4, __bss_start__@l
|
||||
lis %r5, __bss_end__@h
|
||||
ori %r5, %r5, __bss_end__@l
|
||||
li %r7, 0
|
||||
.bssloop:
|
||||
cmpl cr0, %r4, %r5
|
||||
bge cr0, .bssend
|
||||
stw %r7, 0(%r4)
|
||||
addi %r4, %r4, 4
|
||||
b .bssloop
|
||||
.bssend:
|
||||
/*
|
||||
* DATA initialization.
|
||||
*/
|
||||
lis %r4, __romdata_start__@h
|
||||
ori %r4, %r4, __romdata_start__@l
|
||||
lis %r5, __data_start__@h
|
||||
ori %r5, %r5, __data_start__@l
|
||||
lis %r6, __data_end__@h
|
||||
ori %r6, %r6, __data_end__@l
|
||||
.dataloop:
|
||||
cmpl cr0, %r5, %r6
|
||||
bge cr0, .dataend
|
||||
lwz %r7, 0(%r4)
|
||||
addi %r4, %r4, 4
|
||||
stw %r7, 0(%r5)
|
||||
addi %r5, %r5, 4
|
||||
b .dataloop
|
||||
.dataend:
|
||||
/*
|
||||
* Late initialization.
|
||||
*/
|
||||
bl __late_init
|
||||
/*
|
||||
* Main program invocation.
|
||||
*/
|
||||
bl main
|
||||
b _main_exit_handler
|
||||
|
||||
/*
|
||||
* Default main exit code, infinite loop.
|
||||
*/
|
||||
.weak _main_exit_handler
|
||||
.globl _main_exit_handler
|
||||
.type _main_exit_handler, @function
|
||||
_main_exit_handler:
|
||||
b _main_exit_handler
|
||||
|
||||
/*
|
||||
* Default early initialization code, none.
|
||||
*/
|
||||
.weak __early_init
|
||||
.globl __early_init
|
||||
.type __early_init, @function
|
||||
__early_init:
|
||||
blr
|
||||
|
||||
/*
|
||||
* Default late initialization code, none.
|
||||
*/
|
||||
.weak __late_init
|
||||
.globl __late_init
|
||||
.type __late_init, @function
|
||||
__late_init:
|
||||
blr
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
231
firmware/chibios/os/ports/GCC/PPC/ivor.s
Executable file
231
firmware/chibios/os/ports/GCC/PPC/ivor.s
Executable file
@@ -0,0 +1,231 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file PPC/ivor.s
|
||||
* @brief Kernel ISRs.
|
||||
*
|
||||
* @addtogroup PPC_CORE
|
||||
* @{
|
||||
*/
|
||||
|
||||
/*
|
||||
* Imports the PPC configuration headers.
|
||||
*/
|
||||
#define _FROM_ASM_
|
||||
#include "chconf.h"
|
||||
#include "chcore.h"
|
||||
|
||||
#if !defined(__DOXYGEN__)
|
||||
/*
|
||||
* INTC registers address.
|
||||
*/
|
||||
.equ INTC_IACKR, 0xfff48010
|
||||
.equ INTC_EOIR, 0xfff48018
|
||||
|
||||
.section .handlers, "ax"
|
||||
|
||||
#if PPC_SUPPORTS_DECREMENTER
|
||||
/*
|
||||
* _IVOR10 handler (Book-E decrementer).
|
||||
*/
|
||||
.align 4
|
||||
.globl _IVOR10
|
||||
.type _IVOR10, @function
|
||||
_IVOR10:
|
||||
/* Creation of the external stack frame (extctx structure).*/
|
||||
stwu %sp, -80(%sp) /* Size of the extctx structure.*/
|
||||
#if PPC_USE_VLE && PPC_SUPPORTS_VLE_MULTI
|
||||
e_stmvsrrw 8(%sp) /* Saves PC, MSR. */
|
||||
e_stmvsprw 16(%sp) /* Saves CR, LR, CTR, XER. */
|
||||
e_stmvgprw 32(%sp) /* Saves GPR0, GPR3...GPR12. */
|
||||
#else /* !(PPC_USE_VLE && PPC_SUPPORTS_VLE_MULTI) */
|
||||
stw %r0, 32(%sp) /* Saves GPR0. */
|
||||
mfSRR0 %r0
|
||||
stw %r0, 8(%sp) /* Saves PC. */
|
||||
mfSRR1 %r0
|
||||
stw %r0, 12(%sp) /* Saves MSR. */
|
||||
mfCR %r0
|
||||
stw %r0, 16(%sp) /* Saves CR. */
|
||||
mfLR %r0
|
||||
stw %r0, 20(%sp) /* Saves LR. */
|
||||
mfCTR %r0
|
||||
stw %r0, 24(%sp) /* Saves CTR. */
|
||||
mfXER %r0
|
||||
stw %r0, 28(%sp) /* Saves XER. */
|
||||
stw %r3, 36(%sp) /* Saves GPR3...GPR12. */
|
||||
stw %r4, 40(%sp)
|
||||
stw %r5, 44(%sp)
|
||||
stw %r6, 48(%sp)
|
||||
stw %r7, 52(%sp)
|
||||
stw %r8, 56(%sp)
|
||||
stw %r9, 60(%sp)
|
||||
stw %r10, 64(%sp)
|
||||
stw %r11, 68(%sp)
|
||||
stw %r12, 72(%sp)
|
||||
#endif /* !(PPC_USE_VLE && PPC_SUPPORTS_VLE_MULTI) */
|
||||
|
||||
/* Reset DIE bit in TSR register.*/
|
||||
lis %r3, 0x0800 /* DIS bit mask. */
|
||||
mtspr 336, %r3 /* TSR register. */
|
||||
|
||||
#if CH_DBG_SYSTEM_STATE_CHECK
|
||||
bl dbg_check_enter_isr
|
||||
bl dbg_check_lock_from_isr
|
||||
#endif
|
||||
bl chSysTimerHandlerI
|
||||
#if CH_DBG_SYSTEM_STATE_CHECK
|
||||
bl dbg_check_unlock_from_isr
|
||||
bl dbg_check_leave_isr
|
||||
#endif
|
||||
|
||||
/* System tick handler invocation.*/
|
||||
#if CH_DBG_SYSTEM_STATE_CHECK
|
||||
bl dbg_check_lock
|
||||
#endif
|
||||
bl chSchIsPreemptionRequired
|
||||
cmpli cr0, %r3, 0
|
||||
beq cr0, _ivor_exit
|
||||
bl chSchDoReschedule
|
||||
b _ivor_exit
|
||||
#endif /* PPC_SUPPORTS_DECREMENTER */
|
||||
|
||||
/*
|
||||
* _IVOR4 handler (Book-E external interrupt).
|
||||
*/
|
||||
.align 4
|
||||
.globl _IVOR4
|
||||
.type _IVOR4, @function
|
||||
_IVOR4:
|
||||
/* Creation of the external stack frame (extctx structure).*/
|
||||
stwu %sp, -80(%sp) /* Size of the extctx structure.*/
|
||||
#if PPC_USE_VLE && PPC_SUPPORTS_VLE_MULTI
|
||||
e_stmvsrrw 8(%sp) /* Saves PC, MSR. */
|
||||
e_stmvsprw 16(%sp) /* Saves CR, LR, CTR, XER. */
|
||||
e_stmvgprw 32(%sp) /* Saves GPR0, GPR3...GPR12. */
|
||||
#else /* !(PPC_USE_VLE && PPC_SUPPORTS_VLE_MULTI) */
|
||||
stw %r0, 32(%sp) /* Saves GPR0. */
|
||||
mfSRR0 %r0
|
||||
stw %r0, 8(%sp) /* Saves PC. */
|
||||
mfSRR1 %r0
|
||||
stw %r0, 12(%sp) /* Saves MSR. */
|
||||
mfCR %r0
|
||||
stw %r0, 16(%sp) /* Saves CR. */
|
||||
mfLR %r0
|
||||
stw %r0, 20(%sp) /* Saves LR. */
|
||||
mfCTR %r0
|
||||
stw %r0, 24(%sp) /* Saves CTR. */
|
||||
mfXER %r0
|
||||
stw %r0, 28(%sp) /* Saves XER. */
|
||||
stw %r3, 36(%sp) /* Saves GPR3...GPR12. */
|
||||
stw %r4, 40(%sp)
|
||||
stw %r5, 44(%sp)
|
||||
stw %r6, 48(%sp)
|
||||
stw %r7, 52(%sp)
|
||||
stw %r8, 56(%sp)
|
||||
stw %r9, 60(%sp)
|
||||
stw %r10, 64(%sp)
|
||||
stw %r11, 68(%sp)
|
||||
stw %r12, 72(%sp)
|
||||
#endif /* !(PPC_USE_VLE && PPC_SUPPORTS_VLE_MULTI) */
|
||||
|
||||
/* Software vector address from the INTC register.*/
|
||||
lis %r3, INTC_IACKR@h
|
||||
ori %r3, %r3, INTC_IACKR@l /* IACKR register address. */
|
||||
lwz %r3, 0(%r3) /* IACKR register value. */
|
||||
lwz %r3, 0(%r3)
|
||||
mtCTR %r3 /* Software handler address. */
|
||||
|
||||
#if PPC_USE_IRQ_PREEMPTION
|
||||
/* Allows preemption while executing the software handler.*/
|
||||
wrteei 1
|
||||
#endif
|
||||
|
||||
/* Exectes the software handler.*/
|
||||
bctrl
|
||||
|
||||
#if PPC_USE_IRQ_PREEMPTION
|
||||
/* Prevents preemption again.*/
|
||||
wrteei 0
|
||||
#endif
|
||||
|
||||
/* Informs the INTC that the interrupt has been served.*/
|
||||
mbar 0
|
||||
lis %r3, INTC_EOIR@h
|
||||
ori %r3, %r3, INTC_EOIR@l
|
||||
stw %r3, 0(%r3) /* Writing any value should do. */
|
||||
|
||||
/* Verifies if a reschedule is required.*/
|
||||
#if CH_DBG_SYSTEM_STATE_CHECK
|
||||
bl dbg_check_lock
|
||||
#endif
|
||||
bl chSchIsPreemptionRequired
|
||||
cmpli cr0, %r3, 0
|
||||
beq cr0, _ivor_exit
|
||||
bl chSchDoReschedule
|
||||
|
||||
/* Context restore.*/
|
||||
.globl _ivor_exit
|
||||
_ivor_exit:
|
||||
#if CH_DBG_SYSTEM_STATE_CHECK
|
||||
bl dbg_check_unlock
|
||||
#endif
|
||||
#if PPC_USE_VLE && PPC_SUPPORTS_VLE_MULTI
|
||||
e_lmvgprw 32(%sp) /* Restores GPR0, GPR3...GPR12. */
|
||||
e_lmvsprw 16(%sp) /* Restores CR, LR, CTR, XER. */
|
||||
e_lmvsrrw 8(%sp) /* Restores PC, MSR. */
|
||||
#else /*!(PPC_USE_VLE && PPC_SUPPORTS_VLE_MULTI) */
|
||||
lwz %r3, 36(%sp) /* Restores GPR3...GPR12. */
|
||||
lwz %r4, 40(%sp)
|
||||
lwz %r5, 44(%sp)
|
||||
lwz %r6, 48(%sp)
|
||||
lwz %r7, 52(%sp)
|
||||
lwz %r8, 56(%sp)
|
||||
lwz %r9, 60(%sp)
|
||||
lwz %r10, 64(%sp)
|
||||
lwz %r11, 68(%sp)
|
||||
lwz %r12, 72(%sp)
|
||||
lwz %r0, 8(%sp)
|
||||
mtSRR0 %r0 /* Restores PC. */
|
||||
lwz %r0, 12(%sp)
|
||||
mtSRR1 %r0 /* Restores MSR. */
|
||||
lwz %r0, 16(%sp)
|
||||
mtCR %r0 /* Restores CR. */
|
||||
lwz %r0, 20(%sp)
|
||||
mtLR %r0 /* Restores LR. */
|
||||
lwz %r0, 24(%sp)
|
||||
mtCTR %r0 /* Restores CTR. */
|
||||
lwz %r0, 28(%sp)
|
||||
mtXER %r0 /* Restores XER. */
|
||||
lwz %r0, 32(%sp) /* Restores GPR0. */
|
||||
#endif /* !(PPC_USE_VLE && PPC_SUPPORTS_VLE_MULTI) */
|
||||
addi %sp, %sp, 80 /* Back to the previous frame. */
|
||||
rfi
|
||||
|
||||
#endif /* !defined(__DOXYGEN__) */
|
||||
|
||||
/** @} */
|
||||
146
firmware/chibios/os/ports/GCC/PPC/port.dox
Executable file
146
firmware/chibios/os/ports/GCC/PPC/port.dox
Executable file
@@ -0,0 +1,146 @@
|
||||
/*
|
||||
ChibiOS/RT - Copyright (C) 2006,2007,2008,2009,2010,
|
||||
2011,2012,2013 Giovanni Di Sirio.
|
||||
|
||||
This file is part of ChibiOS/RT.
|
||||
|
||||
ChibiOS/RT is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
ChibiOS/RT is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
---
|
||||
|
||||
A special exception to the GPL can be applied should you wish to distribute
|
||||
a combined work that includes ChibiOS/RT, without being obliged to provide
|
||||
the source code for any proprietary components. See the file exception.txt
|
||||
for full details of how and when the exception can be applied.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup PPC Power Architecture
|
||||
* @details Power Architecture port for the GCC compiler.
|
||||
*
|
||||
* @section PPC_INTRO Introduction
|
||||
* This port supports cores implementing a 32 bits Power Architecture.
|
||||
*
|
||||
* @section PPC_STATES Mapping of the System States in the Power Architecture port
|
||||
* The ChibiOS/RT logical @ref system_states are mapped as follow in the
|
||||
* PowerPC port:
|
||||
* - <b>Init</b>. This state is represented by the startup code and the
|
||||
* initialization code before @p chSysInit() is executed. It has not a
|
||||
* special hardware state associated.
|
||||
* - <b>Normal</b>. This is the state the system has after executing
|
||||
* @p chSysInit(). Interrupts are enabled.
|
||||
* - <b>Suspended</b>. Interrupts are disabled.
|
||||
* - <b>Disabled</b>. Interrupts are disabled. This state is equivalent to the
|
||||
* Suspended state because there are no fast interrupts in this architecture.
|
||||
* - <b>Sleep</b>. This state is entered with the execution of the specific
|
||||
* instruction @p <b>wait</b>.
|
||||
* - <b>S-Locked</b>. Interrupts are disabled.
|
||||
* - <b>I-Locked</b>. This state is equivalent to the SRI state, the
|
||||
* @p chSysLockI() and @p chSysUnlockI() APIs do nothing (still use them in
|
||||
* order to formally change state because this may change).
|
||||
* - <b>Serving Regular Interrupt</b>. Normal interrupt service code.
|
||||
* - <b>Serving Fast Interrupt</b>. Not present in this architecture.
|
||||
* - <b>Serving Non-Maskable Interrupt</b>. The PowerPC has several non
|
||||
* maskable interrupt sources that can be associated to this state.
|
||||
* - <b>Halted</b>. Implemented as an infinite loop with interrupts disabled.
|
||||
* .
|
||||
* @section PPC_NOTES The PowerPC port notes
|
||||
* The PowerPC port is organized as follow:
|
||||
* - The @p main() function is invoked in privileged mode.
|
||||
* - Each thread has a private stack with extra storage for interrupts
|
||||
* servicing.
|
||||
* - The Book-E Decrementer Timer, mapped on IVOR10, is used for system tick.
|
||||
* - Interrupt nesting is not currently supported.
|
||||
* .
|
||||
* @ingroup gcc
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup PPC_CONF Configuration Options
|
||||
* @details PowerPC Configuration Options. The PowerPC port allows some
|
||||
* architecture-specific configurations settings that can be overridden by
|
||||
* redefining them in @p chconf.h. Usually there is no need to change the
|
||||
* default values.
|
||||
* - @p INT_REQUIRED_STACK, this value represent the amount of stack space used
|
||||
* by an interrupt handler between the @p extctx and @p intctx
|
||||
* structures.
|
||||
* The default for this value is @p 128 bytes, this space is allocated for
|
||||
* each thread so be careful in order to not waste precious RAM space.
|
||||
* - @p IDLE_THREAD_STACK_SIZE, stack area size to be assigned to the IDLE
|
||||
* thread. Usually there is no need to change this value unless inserting
|
||||
* code in the IDLE thread hook macro.
|
||||
* - @p ENABLE_WFI_IDLE, if set to @p TRUE enables the use of the @p <b>wait</b>
|
||||
* instruction from within the idle loop. This is defaulted to 0 because
|
||||
* it can create problems with some debuggers. Setting this option to 1
|
||||
* reduces the system power requirements.
|
||||
* .
|
||||
* @ingroup PPC
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup PPC_CORE Core Port Implementation
|
||||
* @brief PowerPC specific port code, structures and macros.
|
||||
*
|
||||
* @ingroup PPC
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup PPC_STARTUP Startup Support
|
||||
* @brief
|
||||
* @details PPC startup code support. ChibiOS/RT provides its own generic
|
||||
* startup file for the PowerPC port.
|
||||
* Of course it is not mandatory to use it but care should be taken about the
|
||||
* startup phase details.
|
||||
*
|
||||
* @section PPC_STARTUP_1 Startup Process
|
||||
* The startup process, as implemented, is the following:
|
||||
* -# The stacks pointer is initialized into the area defined in the linker
|
||||
* script.
|
||||
* -# The IVPR register is setup according to the linker script.
|
||||
* -# The R2 and R13 registers are set to pointer to the SDA areas according
|
||||
* to the EABI specification.
|
||||
* -# An early initialization routine @p hwinit0 is invoked, if the symbol is
|
||||
* not defined then an empty default routine is executed (weak symbol).
|
||||
* -# DATA and BSS segments are initialized.
|
||||
* -# A late initialization routine @p hwinit1 is invoked, if the symbol not
|
||||
* defined then an empty default routine is executed (weak symbol).<br>
|
||||
* This late initialization function is also the proper place for a
|
||||
* @a bootloader, if your application requires one.
|
||||
* -# The @p main() function is invoked with the parameters @p argc and @p argv
|
||||
* set to zero.
|
||||
* -# Should the @p main() function return a branch is performed to the weak
|
||||
* symbol @p _main_exit_handler. The default code is an endless empty loop.
|
||||
* .
|
||||
* @section PPC_STARTUP_2 Expected linker symbols
|
||||
* The startup code starts at the symbol @p _boot_address and expects the
|
||||
* following symbols to be defined in the linker script:
|
||||
* - @p __ram_end__ RAM end location +1.
|
||||
* - @p __sdata2_start__ small constants data area
|
||||
* - @p __sdata_start__ small variables data area
|
||||
* - @p __romdata_start__ address of the data segment source read only data.
|
||||
* - @p __data_start__ data segment start location.
|
||||
* - @p __data_end__ data segment end location +1.
|
||||
* - @p __bss_start__ BSS start location.
|
||||
* - @p __bss_end__ BSS end location +1.
|
||||
* - @p __ivpr_base__ IVPR register initialization address.
|
||||
* .
|
||||
* @ingroup PPC
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup PPC_SPECIFIC Specific Implementations
|
||||
* @details Platform-specific port code.
|
||||
*
|
||||
* @ingroup PPC
|
||||
*/
|
||||
183
firmware/chibios/os/ports/GCC/PPC/rules.mk
Executable file
183
firmware/chibios/os/ports/GCC/PPC/rules.mk
Executable file
@@ -0,0 +1,183 @@
|
||||
# PPC makefile scripts and rules.
|
||||
|
||||
# Output directory and files
|
||||
ifeq ($(BUILDDIR),)
|
||||
BUILDDIR = build
|
||||
endif
|
||||
ifeq ($(BUILDDIR),.)
|
||||
BUILDDIR = build
|
||||
endif
|
||||
OUTFILES = $(BUILDDIR)/$(PROJECT).elf $(BUILDDIR)/$(PROJECT).hex \
|
||||
$(BUILDDIR)/$(PROJECT).bin $(BUILDDIR)/$(PROJECT).dmp
|
||||
|
||||
# Automatic compiler options
|
||||
OPT = $(USE_OPT)
|
||||
COPT = $(USE_COPT)
|
||||
CPPOPT = $(USE_CPPOPT)
|
||||
ifeq ($(USE_LINK_GC),yes)
|
||||
OPT += -ffunction-sections -fdata-sections
|
||||
endif
|
||||
|
||||
# VLE option handling.
|
||||
ifeq ($(USE_VLE),yes)
|
||||
DDEFS += -DPPC_USE_VLE=1
|
||||
DADEFS += -DPPC_USE_VLE=1
|
||||
MCU += -mvle
|
||||
else
|
||||
DDEFS += -DPPC_USE_VLE=0
|
||||
DADEFS += -DPPC_USE_VLE=0
|
||||
endif
|
||||
|
||||
# Source files groups and paths
|
||||
SRC = $(CSRC)$(CPPSRC)
|
||||
SRCPATHS = $(sort $(dir $(ASMXSRC)) $(dir $(ASMSRC)) $(dir $(SRC)))
|
||||
|
||||
# Various directories
|
||||
OBJDIR = $(BUILDDIR)/obj
|
||||
LSTDIR = $(BUILDDIR)/lst
|
||||
|
||||
# Object files groups
|
||||
COBJS = $(addprefix $(OBJDIR)/, $(notdir $(CSRC:.c=.o)))
|
||||
CPPOBJS = $(addprefix $(OBJDIR)/, $(notdir $(CPPSRC:.cpp=.o)))
|
||||
ASMOBJS = $(addprefix $(OBJDIR)/, $(notdir $(ASMSRC:.s=.o)))
|
||||
ASMXOBJS = $(addprefix $(OBJDIR)/, $(notdir $(ASMXSRC:.S=.o)))
|
||||
OBJS = $(ASMXOBJS) $(ASMOBJS) $(COBJS) $(CPPOBJS)
|
||||
|
||||
# Paths
|
||||
IINCDIR = $(patsubst %,-I%,$(INCDIR) $(DINCDIR) $(UINCDIR))
|
||||
LLIBDIR = $(patsubst %,-L%,$(DLIBDIR) $(ULIBDIR))
|
||||
|
||||
# Macros
|
||||
DEFS = $(DDEFS) $(UDEFS)
|
||||
ADEFS = $(DADEFS) $(UADEFS)
|
||||
|
||||
# Libs
|
||||
LIBS = $(DLIBS) $(ULIBS)
|
||||
|
||||
# Various settings
|
||||
MCFLAGS = -mcpu=$(MCU)
|
||||
ODFLAGS = -x --syms
|
||||
ASFLAGS = $(MCFLAGS) -Wa,-amhls=$(LSTDIR)/$(notdir $(<:.s=.lst)) $(ADEFS)
|
||||
ASXFLAGS = $(MCFLAGS) -Wa,-amhls=$(LSTDIR)/$(notdir $(<:.S=.lst)) $(ADEFS)
|
||||
CFLAGS = $(MCFLAGS) $(OPT) $(COPT) $(CWARN) -Wa,-alms=$(LSTDIR)/$(notdir $(<:.c=.lst)) $(DEFS)
|
||||
CPPFLAGS = $(MCFLAGS) $(OPT) $(CPPOPT) $(CPPWARN) -Wa,-alms=$(LSTDIR)/$(notdir $(<:.cpp=.lst)) $(DEFS)
|
||||
ifeq ($(USE_LINK_GC),yes)
|
||||
GCLDFLAGS = ,--gc-sections
|
||||
else
|
||||
GCLDFLAGS =
|
||||
endif
|
||||
ifneq ($(USE_LDOPT),)
|
||||
XLDFLAGS =,$(USE_LDOPT)
|
||||
else
|
||||
XLDFLAGS =
|
||||
endif
|
||||
LDFLAGS = $(MCFLAGS) -nostartfiles -T$(LDSCRIPT) -Wl,-Map=$(BUILDDIR)/$(PROJECT).map,--cref,--no-warn-mismatch$(GCLDFLAGS)$(XLDFLAGS) $(LLIBDIR)
|
||||
|
||||
# Generate dependency information
|
||||
ASFLAGS += -MD -MP -MF .dep/$(@F).d
|
||||
CFLAGS += -MD -MP -MF .dep/$(@F).d
|
||||
CPPFLAGS += -MD -MP -MF .dep/$(@F).d
|
||||
|
||||
# Paths where to search for sources
|
||||
VPATH = $(SRCPATHS)
|
||||
|
||||
#
|
||||
# Makefile rules
|
||||
#
|
||||
|
||||
all: $(OBJS) $(OUTFILES) MAKE_ALL_RULE_HOOK
|
||||
|
||||
MAKE_ALL_RULE_HOOK:
|
||||
|
||||
$(OBJS): | $(BUILDDIR)
|
||||
|
||||
$(BUILDDIR) $(OBJDIR) $(LSTDIR):
|
||||
ifneq ($(USE_VERBOSE_COMPILE),yes)
|
||||
@echo Compiler Options
|
||||
@echo $(CC) -c $(CFLAGS) -I. $(IINCDIR) main.c -o main.o
|
||||
@echo
|
||||
endif
|
||||
mkdir -p $(OBJDIR)
|
||||
mkdir -p $(LSTDIR)
|
||||
|
||||
$(CPPOBJS) : $(OBJDIR)/%.o : %.cpp Makefile
|
||||
ifeq ($(USE_VERBOSE_COMPILE),yes)
|
||||
@echo
|
||||
$(CPPC) -c $(CPPFLAGS) -I. $(IINCDIR) $< -o $@
|
||||
else
|
||||
@echo Compiling $(<F)
|
||||
@$(CPPC) -c $(CPPFLAGS) -I. $(IINCDIR) $< -o $@
|
||||
endif
|
||||
|
||||
$(COBJS) : $(OBJDIR)/%.o : %.c Makefile
|
||||
ifeq ($(USE_VERBOSE_COMPILE),yes)
|
||||
@echo
|
||||
$(CC) -c $(CFLAGS) -I. $(IINCDIR) $< -o $@
|
||||
else
|
||||
@echo Compiling $(<F)
|
||||
@$(CC) -c $(CFLAGS) -I. $(IINCDIR) $< -o $@
|
||||
endif
|
||||
|
||||
$(ASMOBJS) : $(OBJDIR)/%.o : %.s Makefile
|
||||
ifeq ($(USE_VERBOSE_COMPILE),yes)
|
||||
@echo
|
||||
$(AS) -c $(ASFLAGS) -I. $(IINCDIR) $< -o $@
|
||||
else
|
||||
@echo Compiling $(<F)
|
||||
@$(AS) -c $(ASFLAGS) -I. $(IINCDIR) $< -o $@
|
||||
endif
|
||||
|
||||
$(ASMXOBJS) : $(OBJDIR)/%.o : %.S Makefile
|
||||
ifeq ($(USE_VERBOSE_COMPILE),yes)
|
||||
@echo
|
||||
$(CC) -c $(ASXFLAGS) -I. $(IINCDIR) $< -o $@
|
||||
else
|
||||
@echo Compiling $(<F)
|
||||
@$(CC) -c $(ASXFLAGS) -I. $(IINCDIR) $< -o $@
|
||||
endif
|
||||
|
||||
%.elf: $(OBJS) $(LDSCRIPT)
|
||||
ifeq ($(USE_VERBOSE_COMPILE),yes)
|
||||
@echo
|
||||
$(LD) $(OBJS) $(LDFLAGS) $(LIBS) -o $@
|
||||
else
|
||||
@echo Linking $@
|
||||
@$(LD) $(OBJS) $(LDFLAGS) $(LIBS) -o $@
|
||||
endif
|
||||
|
||||
%.hex: %.elf $(LDSCRIPT)
|
||||
ifeq ($(USE_VERBOSE_COMPILE),yes)
|
||||
$(HEX) $< $@
|
||||
else
|
||||
@echo Creating $@
|
||||
@$(HEX) $< $@
|
||||
endif
|
||||
|
||||
%.bin: %.elf $(LDSCRIPT)
|
||||
ifeq ($(USE_VERBOSE_COMPILE),yes)
|
||||
$(BIN) $< $@
|
||||
else
|
||||
@echo Creating $@
|
||||
@$(BIN) $< $@
|
||||
endif
|
||||
|
||||
%.dmp: %.elf $(LDSCRIPT)
|
||||
ifeq ($(USE_VERBOSE_COMPILE),yes)
|
||||
$(OD) $(ODFLAGS) $< > $@
|
||||
else
|
||||
@echo Creating $@
|
||||
@$(OD) $(ODFLAGS) $< > $@
|
||||
@echo Done
|
||||
endif
|
||||
|
||||
clean:
|
||||
@echo Cleaning
|
||||
-rm -fR .dep $(BUILDDIR)
|
||||
@echo Done
|
||||
|
||||
#
|
||||
# Include the dependency files, should be the last of the makefile
|
||||
#
|
||||
-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
|
||||
|
||||
# *** EOF ***
|
||||
Reference in New Issue
Block a user