import at91lib from at91lib_20100901_softpack_1_9_v_1_0_svn_v15011
it's sad to see that atmel doesn't publish their svn repo or has a centralized location or even puts proper version/release info into the library itself
This commit is contained in:
commit
044ad7c398
|
@ -0,0 +1,59 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \dir
|
||||
/// !!!Purpose
|
||||
///
|
||||
/// This directory provides a library of highly re-usable code to build
|
||||
/// applications on Atmel AT91 microcontrollers.
|
||||
///
|
||||
/// !!!Contents
|
||||
/// AT91LIB can basically be divided into two sections:
|
||||
/// - Board-dependant definitions and routines
|
||||
/// - Re-usable & portable software modules
|
||||
///
|
||||
/// Board-specific code is entirely located in the #board# subdirectory. The
|
||||
/// second group is then split into several sub-directories, depending on
|
||||
/// the nature of the software module. Currently, the following directories
|
||||
/// are defined:
|
||||
/// - components
|
||||
/// - drivers
|
||||
/// - memories
|
||||
/// - peripherals
|
||||
/// - usb
|
||||
/// - utility
|
||||
///
|
||||
/// For more information about what a particular group contains, please refer to
|
||||
/// its documentation page.
|
||||
///
|
||||
/// \note Depending on the project, not all the subdirectories will be
|
||||
/// available (i.e. the #usb# directory will not be in non-USB projects).
|
||||
//------------------------------------------------------------------------------
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,108 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition of AT91CAP7 characteristics and features
|
||||
///
|
||||
/// !Usage
|
||||
/// -# For ARM core feature, see "AT91CAP7 - ARM core features".
|
||||
/// -# For IP features, see "AT91CAP7 - IP features".
|
||||
/// -# For misc, see "AT91CAP7 - Misc".
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef CHIP_H
|
||||
#define CHIP_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7 - ARM core features"
|
||||
/// This page lists several characteristics related to the ARM core
|
||||
///
|
||||
|
||||
//ARM core features
|
||||
|
||||
/// ARM core definition.
|
||||
#define arm7tdmi
|
||||
|
||||
/// family definition.
|
||||
//#define at91cap7 (already defined)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7 - IP features"
|
||||
/// This page lists several characteristics related to the embedded IP
|
||||
///
|
||||
|
||||
//IP FEATURES
|
||||
|
||||
/// Indicates chip has an UDP Full Speed.
|
||||
#define CHIP_USB_UDP
|
||||
|
||||
/// Indicates chip has an internal pull-up set by matrix.
|
||||
#define CHIP_USB_PULLUP_MATRIX
|
||||
|
||||
/// Number of USB endpoints
|
||||
#define CHIP_USB_NUMENDPOINTS 6
|
||||
|
||||
/// Endpoints max paxcket size
|
||||
#define CHIP_USB_ENDPOINTS_MAXPACKETSIZE(i) \
|
||||
((i == 0) ? 8 : \
|
||||
((i == 1) ? 64 : \
|
||||
((i == 2) ? 64 : \
|
||||
((i == 3) ? 64 : \
|
||||
((i == 4) ? 256 : \
|
||||
((i == 5) ? 256 : 0 ))))))
|
||||
|
||||
/// Endpoints Number of Bank
|
||||
#define CHIP_USB_ENDPOINTS_BANKS(i) \
|
||||
((i == 0) ? 1 : \
|
||||
((i == 1) ? 2 : \
|
||||
((i == 2) ? 2 : \
|
||||
((i == 3) ? 1 : \
|
||||
((i == 4) ? 2 : \
|
||||
((i == 5) ? 2 : 0 ))))))
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7 - Misc "
|
||||
/// This page lists misc features
|
||||
///
|
||||
|
||||
//Misc
|
||||
|
||||
#endif //#ifndef CHIP_H
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
# ----------------------------------------------------------------------------
|
||||
# ATMEL Microcontroller Software Support
|
||||
# ----------------------------------------------------------------------------
|
||||
# Copyright (c) 2008, Atmel Corporation
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the disclaimer below.
|
||||
#
|
||||
# Atmel's name may not be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# Defines which are the specific available IP for the chip AT91CAP7
|
||||
CHIP_CORE = arm7tdmi
|
||||
CHIP_IP_UDP = USB_UDP
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
|
||||
/*-Memory Regions-*/
|
||||
|
||||
define symbol __ICFEDIT_region_SDRAM_start__ = 0x20000000;
|
||||
define symbol __ICFEDIT_region_SDRAM_end__ = 0x23FFFFFF;
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x1f0000;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x217fff;
|
||||
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_startup__ = 0x100;
|
||||
define symbol __ICFEDIT_size_vectors__ = 0x100;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x2000;
|
||||
define symbol __ICFEDIT_size_svcstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_irqstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x0;
|
||||
|
||||
/*-Exports-*/
|
||||
export symbol __ICFEDIT_region_SDRAM_start__;
|
||||
export symbol __ICFEDIT_region_SDRAM_end__;
|
||||
export symbol __ICFEDIT_region_RAM_start__;
|
||||
export symbol __ICFEDIT_region_RAM_end__;
|
||||
export symbol __ICFEDIT_size_vectors__;
|
||||
export symbol __ICFEDIT_size_cstack__;
|
||||
export symbol __ICFEDIT_size_svcstack__;
|
||||
export symbol __ICFEDIT_size_irqstack__;
|
||||
export symbol __ICFEDIT_size_heap__;
|
||||
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
|
||||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
|
||||
define region STA_region = mem:[from __ICFEDIT_region_SDRAM_start__ size __ICFEDIT_size_startup__];
|
||||
define region SDRAM_region = mem:[from __ICFEDIT_region_SDRAM_start__+__ICFEDIT_size_startup__ to __ICFEDIT_region_SDRAM_end__];
|
||||
|
||||
define block CSTACK with alignment = 4, size = __ICFEDIT_size_cstack__ { };
|
||||
define block SVC_STACK with alignment = 4, size = __ICFEDIT_size_svcstack__ { };
|
||||
define block IRQ_STACK with alignment = 4, size = __ICFEDIT_size_irqstack__ { };
|
||||
define block HEAP with alignment = 4, size = __ICFEDIT_size_heap__ { };
|
||||
|
||||
initialize by copy { section .vectors };
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place in STA_region { section .cstartup };
|
||||
place in VEC_region { section .vectors };
|
||||
place in SDRAM_region { readonly, readwrite, block IRQ_STACK, block SVC_STACK, block CSTACK, block HEAP };
|
|
@ -0,0 +1,89 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support - ROUSSET -
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2007, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaiimer below.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the disclaimer below in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in external SDRAM on the AT91CAP7
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x1f0000, LENGTH = 0x28000
|
||||
sdram (W!RX) : ORIGIN = 0x20000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sdram
|
||||
|
||||
.relocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_srelocate = .;
|
||||
*(.vectors);
|
||||
*(.ramfunc)
|
||||
*(.data)
|
||||
. = ALIGN(4);
|
||||
_erelocate = .;
|
||||
} >sram
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
.zero (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
_ezero = .;
|
||||
} >sdram
|
||||
|
||||
_sstack = 0x24000000;
|
||||
}
|
||||
end = .;
|
||||
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in external SDRAM on the AT91CAP7
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x1f0000, LENGTH = 0x28000
|
||||
sdram (W!RX) : ORIGIN = 0x20000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.data)
|
||||
*(.CP15_*)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sdram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
*(.vectors);
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
} >sram
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sdram
|
||||
|
||||
_sstack = 0x218000;
|
||||
}
|
||||
end = .;
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
|
||||
|
||||
/*-Memory Regions-*/
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x001f0000;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x00217fff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_vectors__ = 0x100;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x2000;
|
||||
define symbol __ICFEDIT_size_svcstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_irqstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x0;
|
||||
|
||||
/*-Exports-*/
|
||||
export symbol __ICFEDIT_region_RAM_start__;
|
||||
export symbol __ICFEDIT_region_RAM_end__;
|
||||
export symbol __ICFEDIT_size_vectors__;
|
||||
export symbol __ICFEDIT_size_cstack__;
|
||||
export symbol __ICFEDIT_size_svcstack__;
|
||||
export symbol __ICFEDIT_size_irqstack__;
|
||||
export symbol __ICFEDIT_size_heap__;
|
||||
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
|
||||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
|
||||
|
||||
define block CSTACK with alignment = 4, size = __ICFEDIT_size_cstack__ { };
|
||||
define block SVC_STACK with alignment = 4, size = __ICFEDIT_size_svcstack__ { };
|
||||
define block IRQ_STACK with alignment = 4, size = __ICFEDIT_size_irqstack__ { };
|
||||
define block HEAP with alignment = 4, size = __ICFEDIT_size_heap__ { };
|
||||
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place in VEC_region { section .vectors };
|
||||
place in RAM_region { section .cstartup, readonly, readwrite, block IRQ_STACK, block SVC_STACK, block CSTACK, block HEAP};
|
|
@ -0,0 +1,80 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in internal SRAM on the AT91CAP7.
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x1f0000, LENGTH = 0x28000
|
||||
sdram (W!RX) : ORIGIN = 0x20000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
|
||||
{
|
||||
. = ALIGN(4);
|
||||
.fixed :
|
||||
{
|
||||
_sfixed = .;
|
||||
*(.vectors)
|
||||
*(.ramfunc)
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.data)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sram
|
||||
|
||||
.relocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_srelocate = .;
|
||||
. = ALIGN(4);
|
||||
_erelocate = .;
|
||||
}
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
|
||||
_sstack = 0x218000;
|
||||
}
|
||||
end = .;
|
|
@ -0,0 +1,97 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in internal SRAM on the AT91CAP7
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
romcodesram (W!RX) : ORIGIN = 0x1f0000, LENGTH = 0x1000
|
||||
sram (W!RX) : ORIGIN = 0x1f1000, LENGTH = 0x27000
|
||||
sdram (W!RX) : ORIGIN = 0x20000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed0 :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed0 = .;
|
||||
*(.vectors)
|
||||
*(.text*)
|
||||
*(.CP15_*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
. = ALIGN(4);
|
||||
_efixed0 = .;
|
||||
_efixed = .;
|
||||
} >sram
|
||||
|
||||
.fixed1 :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed1 = .;
|
||||
*(.rodata*)
|
||||
*(.data)
|
||||
. = ALIGN(4);
|
||||
_efixed1 = .;
|
||||
} >sram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
}
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
_sstack = 0x218000;
|
||||
}
|
||||
end = .;
|
||||
|
|
@ -0,0 +1,317 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2009, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the disclaimer below in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \dir
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition and functions for using AT91CAP7 related features, such
|
||||
/// as PIO pins, memories, etc.
|
||||
///
|
||||
/// !Usage
|
||||
/// -# The code for booting the board is provided by board_cstartup.S and
|
||||
/// board_lowlevel.c.
|
||||
/// -# For using board PIOs, board characteristics (clock, etc.) and external
|
||||
/// components, see board.h.
|
||||
/// -# For manipulating memories (remapping, SDRAM, etc.), see board_memories.h.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition of AT91CAP7-DK characteristics, AT91CAP7 dependant PIOs and
|
||||
/// external components interfacing.
|
||||
///
|
||||
/// !Usage
|
||||
/// -# For operating frequency information, see "AT91CAP7-DK - Operating frequencies".
|
||||
/// -# For using portable PIO definitions, see "AT91CAP7-DK - PIO definitions".
|
||||
/// -# Several USB definitions are included here (see "AT91CAP7-DK - USB device").
|
||||
/// -# For external components definitions, see "AT91CAP7-DK - External components".
|
||||
/// -# For memory-related definitions, see "AT91CAP7-DK - Memories".
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_H
|
||||
#define BOARD_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#if defined(at91cap7)
|
||||
#include "at91cap7/chip.h"
|
||||
#include "at91cap7/at91cap7.h"
|
||||
#else
|
||||
#error Board does not support the specified chip.
|
||||
#endif
|
||||
|
||||
#include "fpga.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-DK - Board Description"
|
||||
/// This page lists several definition related to the board description
|
||||
///
|
||||
/// !Definitions
|
||||
/// - BOARD_NAME
|
||||
|
||||
/// Name of the board.
|
||||
#define BOARD_NAME "AT91CAP7-DK"
|
||||
|
||||
/// Board definition.
|
||||
#define at91cap7dk
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-DK - Operating frequencies"
|
||||
/// This page lists several definition related to the board operating frequency
|
||||
/// (when using the initialization done by board_lowlevel.c).
|
||||
///
|
||||
/// !Definitions
|
||||
/// - BOARD_MAINOSC
|
||||
/// - BOARD_MCK
|
||||
|
||||
/// Frequency of the board main oscillator.
|
||||
#define BOARD_MAINOSC 12000000
|
||||
|
||||
/// Master clock frequency (when using board_lowlevel.c).
|
||||
#define BOARD_MCK ((12000000 * 8 / 1) / 2)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-DK - USB device"
|
||||
/// This page lists constants describing several characteristics (controller
|
||||
/// type, D+ pull-up type, etc.) of the USB device controller of the chip/board.
|
||||
///
|
||||
/// !Constants
|
||||
/// - BOARD_USB_UDP
|
||||
/// - BOARD_USB_PULLUP_MATRIX
|
||||
/// - BOARD_USB_NUMENDPOINTS
|
||||
/// - BOARD_USB_ENDPOINTS_MAXPACKETSIZE
|
||||
/// - BOARD_USB_ENDPOINTS_BANKS
|
||||
/// - BOARD_USB_BMATTRIBUTES
|
||||
|
||||
/// Chip has a UDP controller.
|
||||
#define BOARD_USB_UDP
|
||||
|
||||
/// Indicates the D+ pull-up is always connected.
|
||||
#define BOARD_USB_PULLUP_MATRIX
|
||||
|
||||
/// Number of endpoints in the USB controller.
|
||||
#define BOARD_USB_NUMENDPOINTS 6
|
||||
|
||||
/// Returns the maximum packet size of the given endpoint.
|
||||
#define BOARD_USB_ENDPOINTS_MAXPACKETSIZE(i) ((((i) == 4) || ((i) == 5)) ? 256 : (((i) == 0) ? 8 : 64))
|
||||
|
||||
/// Returns the number of FIFO banks for the given endpoint.
|
||||
#define BOARD_USB_ENDPOINTS_BANKS(i) ((((i) == 0) || ((i) == 3)) ? 1 : 2)
|
||||
|
||||
/// USB attributes configuration descriptor (bus or self powered, remote wakeup)
|
||||
#define BOARD_USB_BMATTRIBUTES USBConfigurationDescriptor_SELFPOWERED_NORWAKEUP
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-DK - PIO definitions"
|
||||
/// This pages lists all the pio definitions contained in board.h. The constants
|
||||
/// are named using the following convention: PIN_* for a constant which defines
|
||||
/// a single Pin instance (but may include several PIOs sharing the same
|
||||
/// controller), and PINS_* for a list of Pin instances.
|
||||
///
|
||||
/// !DBGU
|
||||
/// - PINS_DBGU
|
||||
///
|
||||
/// !USART0
|
||||
/// - PIN_USART0_RXD
|
||||
/// - PIN_USART0_TXD
|
||||
/// - PIN_USART0_SCK
|
||||
///
|
||||
/// !SPI
|
||||
/// - PIN_SPI_MISO
|
||||
/// - PIN_SPI_MOSI
|
||||
/// - PIN_SPI_SPCK
|
||||
/// - PINS_SPI
|
||||
/// - PIN_SPI_NPCS0
|
||||
/// - PIN_SPI_NPCS1
|
||||
|
||||
/// List of all DBGU pin definitions.
|
||||
#define PINS_DBGU {(1<<0)|(1<<1), AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
/// USART0 SCK pin definition.
|
||||
#define PIN_USART0_SCK {AT91C_PIO_PA2, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// USART0 RTS pin definition
|
||||
#define PIN_USART0_RTS {AT91C_PIO_PA3, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// USART0 CTS pin definition
|
||||
#define PIN_USART0_CTS {AT91C_PIO_PA4, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// USART0 TXD pin definition.
|
||||
#define PIN_USART0_TXD {AT91C_PIO_PA5, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// USART0 RXD pin definition.
|
||||
#define PIN_USART0_RXD {AT91C_PIO_PA6, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
/// SPI MISO pin definition.
|
||||
#define PIN_SPI_MISO {AT91C_PIO_PA7, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI MOSI pin definition.
|
||||
#define PIN_SPI_MOSI {AT91C_PIO_PA8, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI SPCK pin definition.
|
||||
#define PIN_SPI_SPCK {AT91C_PIO_PA9, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// List of SPI pin definitions (MISO, MOSI & SPCK).
|
||||
#define PINS_SPI PIN_SPI_MISO, PIN_SPI_MOSI, PIN_SPI_SPCK
|
||||
/// SPI chip select 0 pin definition.
|
||||
#define PIN_SPI_NPCS0 {AT91C_PIO_PA10, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI chip select 1 pin definition.
|
||||
#define PIN_SPI_NPCS1 {AT91C_PIO_PA11, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-DK - Memories"
|
||||
/// This page lists definitions related to external on-board memories.
|
||||
///
|
||||
/// !AT26 Serial Flash
|
||||
/// - BOARD_AT26_A_SPI_BASE
|
||||
/// - BOARD_AT26_A_SPI_ID
|
||||
/// - BOARD_AT26_A_SPI_PINS
|
||||
/// - BOARD_AT26_A_SPI
|
||||
/// - BOARD_AT26_A_NPCS
|
||||
/// - BOARD_AT26_A_NPCS_PIN
|
||||
///
|
||||
/// !SDRAM
|
||||
/// - BOARD_SDRAM_SIZE
|
||||
/// - PINS_SDRAM
|
||||
/// - BOARD_SDRAM_BUSWIDTH
|
||||
///
|
||||
/// !Nandflash
|
||||
/// - PINS_NANDFLASH
|
||||
/// - BOARD_NF_EBI_COMMAND_ADDR
|
||||
/// - BOARD_NF_EBI_ADDRESS_ADDR
|
||||
/// - BOARD_NF_EBI_DATA_ADDR
|
||||
/// - BOARD_NF_CE_PIN
|
||||
/// - BOARD_NF_RB_PIN
|
||||
///
|
||||
/// !NorFlash
|
||||
/// - BOARD_NORFLASH_ADDR
|
||||
|
||||
#define BOARD_AT26F004
|
||||
|
||||
/// Base address of SPI peripheral connected to the serialflash.
|
||||
#define BOARD_AT26_A_SPI_BASE AT91C_BASE_SPI
|
||||
/// Identifier of SPI peripheral connected to the serialflash.
|
||||
#define BOARD_AT26_A_SPI_ID AT91C_ID_SPI
|
||||
/// Pins of the SPI peripheral connected to the serialflash.
|
||||
#define BOARD_AT26_A_SPI_PINS PINS_SPI
|
||||
/// Serialflash SPI number.
|
||||
#define BOARD_AT26_A_SPI 0
|
||||
/// Chip select connected to the serialflash.
|
||||
#define BOARD_AT26_A_NPCS 0
|
||||
/// Chip select pin connected to the serialflash.
|
||||
#define BOARD_AT26_A_NPCS_PIN PIN_SPI_NPCS0
|
||||
|
||||
/// Board SDRAM size
|
||||
#define BOARD_SDRAM_SIZE (64*1024*1024) // with AT91CAP-MEM33 extension
|
||||
/// List of all SDRAM pins definitions.
|
||||
#define PINS_SDRAM {0xFFFF0000, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// SDRAM bus width.
|
||||
#define BOARD_SDRAM_BUSWIDTH 32
|
||||
|
||||
/// Nandflash controller peripheral pins definition.
|
||||
#define PINS_NANDFLASH BOARD_NF_OE_PIN, BOARD_NF_WE_PIN
|
||||
/// Nandflash output enable pin definition.
|
||||
#define BOARD_NF_OE_PIN {1 << 5, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// Nandflash write enable pin definition
|
||||
#define BOARD_NF_WE_PIN {1 << 6, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// Nandflash chip enable pin definition.
|
||||
#define BOARD_NF_CE_PIN {0, 0, 0, 0, 0}
|
||||
/// Nandflash ready/busy pin definition.
|
||||
#define BOARD_NF_RB_PIN {0, 0, 0, 0, 0}// Not used on the DK board. Use Read Status Register Command
|
||||
/// Address for transferring command bytes to the nandflash.
|
||||
#define BOARD_NF_COMMAND_ADDR 0x40400000
|
||||
/// Address for transferring address bytes to the nandflash.
|
||||
#define BOARD_NF_ADDRESS_ADDR 0x40200000
|
||||
/// Address for transferring data bytes to the nandflash.
|
||||
#define BOARD_NF_DATA_ADDR 0x40000000
|
||||
|
||||
/// Address for transferring command bytes to the norflash.
|
||||
#define BOARD_NORFLASH_ADDR 0x10000000
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Constants: Operating frequencies
|
||||
// AT91C_AIC_SRCTYPE_INT - Interrupt triggering mode.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#if defined(at91cap7)
|
||||
#define AT91C_AIC_SRCTYPE_INT AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE
|
||||
#else
|
||||
#error Board does not support the specified chip.
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-DK - Individual chip definition"
|
||||
/// This page lists the definitions related to different chip's definition
|
||||
/// located in the board.h file for the AT91CAP7-DK
|
||||
|
||||
/// USART
|
||||
#define BOARD_PIN_USART_RXD PIN_USART0_RXD
|
||||
#define BOARD_PIN_USART_TXD PIN_USART0_TXD
|
||||
#define BOARD_PIN_USART_CTS PIN_USART0_CTS
|
||||
#define BOARD_PIN_USART_RTS PIN_USART0_RTS
|
||||
#define BOARD_USART_BASE AT91C_BASE_US0
|
||||
#define BOARD_ID_USART AT91C_ID_US0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#endif //#ifndef BOARD_H
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
# ----------------------------------------------------------------------------
|
||||
# ATMEL Microcontroller Software Support - ROUSSET -
|
||||
# ----------------------------------------------------------------------------
|
||||
# Copyright (c) 2007, Atmel Corporation
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the disclaiimer below.
|
||||
#
|
||||
# - Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the disclaimer below in the documentation and/or
|
||||
# other materials provided with the distribution.
|
||||
#
|
||||
# Atmel's name may not be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# Defines which are the available memory targets for the AT91CAP7-DK board.
|
||||
|
||||
MEMORIES = sram sdram
|
||||
|
|
@ -0,0 +1,184 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support - ROUSSET -
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2007, Atmel Corporation
|
||||
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the disclaimer below in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define IRQ_STACK_SIZE 8*3*4
|
||||
|
||||
#define ARM_MODE_ABT 0x17
|
||||
#define ARM_MODE_FIQ 0x11
|
||||
#define ARM_MODE_IRQ 0x12
|
||||
#define ARM_MODE_SVC 0x13
|
||||
|
||||
#define I_BIT 0x80
|
||||
#define F_BIT 0x40
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Startup routine
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
.align 4
|
||||
.arm
|
||||
|
||||
/* Exception vectors
|
||||
*******************/
|
||||
.section .vectors, "a"
|
||||
|
||||
resetVector:
|
||||
ldr pc, =resetHandler /* Reset */
|
||||
undefVector:
|
||||
b undefVector /* Undefined instruction */
|
||||
swiVector:
|
||||
b swiVector /* Software interrupt */
|
||||
prefetchAbortVector:
|
||||
b prefetchAbortVector /* Prefetch abort */
|
||||
dataAbortVector:
|
||||
b dataAbortVector /* Data abort */
|
||||
reservedVector:
|
||||
b reservedVector /* Reserved for future use */
|
||||
irqVector:
|
||||
b irqHandler /* Interrupt */
|
||||
fiqVector:
|
||||
/* Fast interrupt */
|
||||
//------------------------------------------------------------------------------
|
||||
/// Handles a fast interrupt request by branching to the address defined in the
|
||||
/// AIC.
|
||||
//------------------------------------------------------------------------------
|
||||
fiqHandler:
|
||||
b fiqHandler
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Handles incoming interrupt requests by branching to the corresponding
|
||||
/// handler, as defined in the AIC. Supports interrupt nesting.
|
||||
//------------------------------------------------------------------------------
|
||||
irqHandler:
|
||||
|
||||
/* Save interrupt context on the stack to allow nesting */
|
||||
sub lr, lr, #4
|
||||
stmfd sp!, {lr}
|
||||
mrs lr, SPSR
|
||||
stmfd sp!, {r0, lr}
|
||||
|
||||
/* Write in the IVR to support Protect Mode */
|
||||
ldr lr, =AT91C_BASE_AIC
|
||||
ldr r0, [r14, #AIC_IVR]
|
||||
str lr, [r14, #AIC_IVR]
|
||||
|
||||
/* Branch to interrupt handler in Supervisor mode */
|
||||
msr CPSR_c, #ARM_MODE_SVC
|
||||
stmfd sp!, {r1-r3, r12, lr}
|
||||
mov lr, pc
|
||||
bx r0
|
||||
ldmia sp!, {r1-r3, r12, lr}
|
||||
msr CPSR_c, #ARM_MODE_IRQ | I_BIT
|
||||
|
||||
/* Acknowledge interrupt */
|
||||
ldr lr, =AT91C_BASE_AIC
|
||||
str lr, [r14, #AIC_EOICR]
|
||||
|
||||
/* Restore interrupt context and branch back to calling code */
|
||||
ldmia sp!, {r0, lr}
|
||||
msr SPSR_cxsf, lr
|
||||
ldmia sp!, {pc}^
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initializes the chip and branches to the main() function.
|
||||
//------------------------------------------------------------------------------
|
||||
.section .text
|
||||
.global entry
|
||||
|
||||
entry:
|
||||
resetHandler:
|
||||
|
||||
/* Dummy access to the .vectors section so it does not get optimized */
|
||||
ldr r0, =resetVector
|
||||
|
||||
/* Set pc to actual code location (i.e. not in remap zone) */
|
||||
ldr pc, =1f
|
||||
|
||||
/* Perform low-level initialization of the chip using LowLevelInit() */
|
||||
1:
|
||||
ldr r4, =_sstack
|
||||
mov sp, r4
|
||||
ldr r0, =LowLevelInit
|
||||
mov lr, pc
|
||||
bx r0
|
||||
|
||||
/* Initialize the relocate segment */
|
||||
|
||||
ldr r0, =_efixed
|
||||
ldr r1, =_srelocate
|
||||
ldr r2, =_erelocate
|
||||
1:
|
||||
cmp r1, r2
|
||||
ldrcc r3, [r0], #4
|
||||
strcc r3, [r1], #4
|
||||
bcc 1b
|
||||
|
||||
/* Clear the zero segment */
|
||||
ldr r0, =_szero
|
||||
ldr r1, =_ezero
|
||||
mov r2, #0
|
||||
1:
|
||||
cmp r0, r1
|
||||
strcc r2, [r0], #4
|
||||
bcc 1b
|
||||
|
||||
/* Setup stacks
|
||||
**************/
|
||||
/* IRQ mode */
|
||||
msr CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT
|
||||
mov sp, r4
|
||||
sub r4, r4, #IRQ_STACK_SIZE
|
||||
|
||||
/* Supervisor mode (interrupts enabled) */
|
||||
msr CPSR_c, #ARM_MODE_SVC | F_BIT
|
||||
mov sp, r4
|
||||
|
||||
/* Branch to main()
|
||||
******************/
|
||||
ldr r0, =main
|
||||
mov lr, pc
|
||||
bx r0
|
||||
|
||||
/* Loop indefinitely when program is finished */
|
||||
1:
|
||||
b 1b
|
||||
|
|
@ -0,0 +1,179 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
IAR startup file for AT91CAP7 microcontrollers.
|
||||
*/
|
||||
|
||||
MODULE ?cstartup
|
||||
|
||||
;; Forward declaration of sections.
|
||||
SECTION IRQ_STACK:DATA:NOROOT(2)
|
||||
SECTION CSTACK:DATA:NOROOT(3)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define __ASSEMBLY__
|
||||
#include "board.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define ARM_MODE_ABT 0x17
|
||||
#define ARM_MODE_FIQ 0x11
|
||||
#define ARM_MODE_IRQ 0x12
|
||||
#define ARM_MODE_SVC 0x13
|
||||
#define ARM_MODE_SYS 0x1F
|
||||
|
||||
#define I_BIT 0x80
|
||||
#define F_BIT 0x40
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Startup routine
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Exception vectors
|
||||
*/
|
||||
SECTION .vectors:CODE:NOROOT(2)
|
||||
|
||||
PUBLIC resetVector
|
||||
PUBLIC irqHandler
|
||||
|
||||
EXTERN Undefined_Handler
|
||||
EXTERN SWI_Handler
|
||||
EXTERN Prefetch_Handler
|
||||
EXTERN Abort_Handler
|
||||
EXTERN FIQ_Handler
|
||||
|
||||
ARM
|
||||
|
||||
__iar_init$$done: ; The interrupt vector is not needed
|
||||
; until after copy initialization is done
|
||||
|
||||
resetVector:
|
||||
; All default exception handlers (except reset) are
|
||||
; defined as weak symbol definitions.
|
||||
; If a handler is defined by the application it will take precedence.
|
||||
LDR pc, =resetHandler ; Reset
|
||||
LDR pc, Undefined_Addr ; Undefined instructions
|
||||
LDR pc, SWI_Addr ; Software interrupt (SWI/SVC)
|
||||
LDR pc, Prefetch_Addr ; Prefetch abort
|
||||
LDR pc, Abort_Addr ; Data abort
|
||||
B . ; RESERVED
|
||||
LDR pc, =irqHandler ; IRQ
|
||||
LDR pc, FIQ_Addr ; FIQ
|
||||
|
||||
Undefined_Addr: DCD Undefined_Handler
|
||||
SWI_Addr: DCD SWI_Handler
|
||||
Prefetch_Addr: DCD Prefetch_Handler
|
||||
Abort_Addr: DCD Abort_Handler
|
||||
FIQ_Addr: DCD FIQ_Handler
|
||||
|
||||
/*
|
||||
Handles incoming interrupt requests by branching to the corresponding
|
||||
handler, as defined in the AIC. Supports interrupt nesting.
|
||||
*/
|
||||
irqHandler:
|
||||
/* Save interrupt context on the stack to allow nesting */
|
||||
SUB lr, lr, #4
|
||||
STMFD sp!, {lr}
|
||||
MRS lr, SPSR
|
||||
STMFD sp!, {r0, lr}
|
||||
|
||||
/* Write in the IVR to support Protect Mode */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
LDR r0, [r14, #AIC_IVR]
|
||||
STR lr, [r14, #AIC_IVR]
|
||||
|
||||
/* Branch to interrupt handler in System Mode */
|
||||
MSR CPSR_c, #ARM_MODE_SYS
|
||||
STMFD sp!, {r1-r3, r4, r12, lr}
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
LDMIA sp!, {r1-r3, r4, r12, lr}
|
||||
MSR CPSR_c, #ARM_MODE_IRQ | I_BIT
|
||||
|
||||
/* Acknowledge interrupt */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
STR lr, [r14, #AIC_EOICR]
|
||||
|
||||
/* Restore interrupt context and branch back to calling code */
|
||||
LDMIA sp!, {r0, lr}
|
||||
MSR SPSR_cxsf, lr
|
||||
LDMIA sp!, {pc}^
|
||||
|
||||
|
||||
/*
|
||||
After a reset, execution starts here, the mode is ARM, supervisor
|
||||
with interrupts disabled.
|
||||
Initializes the chip and branches to the main() function.
|
||||
*/
|
||||
SECTION .cstartup:CODE:NOROOT(2)
|
||||
|
||||
PUBLIC resetHandler
|
||||
EXTERN LowLevelInit
|
||||
EXTERN ?main
|
||||
REQUIRE resetVector
|
||||
ARM
|
||||
|
||||
resetHandler:
|
||||
|
||||
/* Set pc to actual code location (i.e. not in remap zone) */
|
||||
LDR pc, =label
|
||||
|
||||
/* Perform low-level initialization of the chip using LowLevelInit() */
|
||||
label:
|
||||
LDR r0, =LowLevelInit
|
||||
LDR r4, =SFE(CSTACK)
|
||||
MOV sp, r4
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
|
||||
/* Set up the interrupt stack pointer. */
|
||||
MSR cpsr_c, #ARM_MODE_IRQ | I_BIT | F_BIT ; Change the mode
|
||||
LDR sp, =SFE(IRQ_STACK)
|
||||
|
||||
/* Set up the System stack pointer. */
|
||||
MSR cpsr_c, #ARM_MODE_SYS | F_BIT ; Change the mode
|
||||
LDR sp, =SFE(CSTACK)
|
||||
|
||||
/* Branch to main() */
|
||||
LDR r0, =?main
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
|
||||
/* Loop indefinitely when program is finished */
|
||||
loop4:
|
||||
B loop4
|
||||
|
||||
END
|
|
@ -0,0 +1,175 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
#include "board_memories.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
Constants: Clock and PLL settings
|
||||
|
||||
BOARD_OSCOUNT - Startup time of main oscillator (in number of slow clock
|
||||
ticks).
|
||||
BOARD_USBDIV - USB PLL divisor value to obtain a 48MHz clock.
|
||||
BOARD_CKGR_PLL - PLL frequency range.
|
||||
BOARD_PLLCOUNT - PLL startup time (in number of slow clock ticks).
|
||||
BOARD_MUL - PLL MUL value.
|
||||
BOARD_DIV - PLL DIV value.
|
||||
BOARD_PRESCALER - Master clock prescaler value.
|
||||
*/
|
||||
#define BOARD_OSCOUNT (AT91C_CKGR_OSCOUNT & (0xf << 8))
|
||||
|
||||
#define BOARD_CKGR_PLLA (AT91C_CKGR_SRCA | AT91C_CKGR_OUTA_0)
|
||||
#define BOARD_PLLACOUNT (40 << 8) // maximum
|
||||
#define BOARD_MULA (AT91C_CKGR_MULA & (7 << 16))
|
||||
#define BOARD_DIVA (AT91C_CKGR_DIVA & 1)
|
||||
|
||||
#define BOARD_USBDIV AT91C_CKGR_USBDIV_1
|
||||
#define BOARD_CKGR_PLLB AT91C_CKGR_OUTB_0
|
||||
#define BOARD_PLLBCOUNT BOARD_PLLACOUNT
|
||||
#define BOARD_MULB (7 << 16)
|
||||
#define BOARD_DIVB 1
|
||||
|
||||
#define BOARD_PRESCALER AT91C_PMC_PRES_CLK_2
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
/*!
|
||||
Default spurious interrupt handler
|
||||
*/
|
||||
void defaultSpuriousHandler(void)
|
||||
{
|
||||
//while (1);
|
||||
}
|
||||
|
||||
/*!
|
||||
Default handler for fast interrupt requests.
|
||||
*/
|
||||
void defaultFiqHandler(void)
|
||||
{
|
||||
while (1);
|
||||
}
|
||||
|
||||
/*!
|
||||
Default handler for standard interrupt requests.
|
||||
*/
|
||||
void defaultIrqHandler(void)
|
||||
{
|
||||
while (1);
|
||||
}
|
||||
|
||||
#include <board.h>
|
||||
#include <pio/pio.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
/*!
|
||||
Performs the low-level initialization of the chip.
|
||||
*/
|
||||
|
||||
void LowLevelInit( void )
|
||||
{
|
||||
unsigned char i;
|
||||
|
||||
#if !defined (sdram)
|
||||
// Initialize main oscillator
|
||||
AT91C_BASE_PMC->PMC_MOR = BOARD_OSCOUNT | AT91C_CKGR_MOSCEN;
|
||||
|
||||
// Wait for the main oscillator to stabilize
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));
|
||||
|
||||
// Initialize PLLA at 96MHz
|
||||
AT91C_BASE_PMC->PMC_PLLAR = BOARD_CKGR_PLLA
|
||||
| BOARD_PLLACOUNT
|
||||
| BOARD_MULA
|
||||
| BOARD_DIVA ;
|
||||
|
||||
// Wait for the PLLA to lock
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKA));
|
||||
|
||||
// Initialize PLLB for USB usage (if not already locked)
|
||||
if (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKB)) {
|
||||
AT91C_BASE_PMC->PMC_PLLBR = BOARD_USBDIV
|
||||
| BOARD_CKGR_PLLB
|
||||
| BOARD_PLLBCOUNT
|
||||
| BOARD_MULB
|
||||
| BOARD_DIVB;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKB));
|
||||
}
|
||||
|
||||
// Select PLLA
|
||||
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
|
||||
|
||||
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK_2;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
|
||||
#endif //#if !defined (sdram)
|
||||
|
||||
/* Initialize AIC
|
||||
****************/
|
||||
AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF;
|
||||
AT91C_BASE_AIC->AIC_SVR[0] = (unsigned int) defaultFiqHandler;
|
||||
for (i = 1; i < 31; i++) {
|
||||
|
||||
AT91C_BASE_AIC->AIC_SVR[i] = (unsigned int) defaultIrqHandler;
|
||||
}
|
||||
AT91C_BASE_AIC->AIC_SPU = (unsigned int) defaultSpuriousHandler;
|
||||
|
||||
// Unstack nested interrupts
|
||||
for (i = 0; i < 8 ; i++) {
|
||||
|
||||
AT91C_BASE_AIC->AIC_EOICR = 0;
|
||||
}
|
||||
|
||||
// Enable Debug mode
|
||||
AT91C_BASE_AIC->AIC_DCR = AT91C_AIC_DCR_PROT;
|
||||
|
||||
/* Watchdog initialization
|
||||
*************************/
|
||||
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_KEY | AT91C_WDTC_WDDIS;
|
||||
|
||||
/* Remap
|
||||
*******/
|
||||
BOARD_RemapRam();
|
||||
|
||||
// Disable RTT and PIT interrupts (potential problem when program A
|
||||
// configures RTT, then program B wants to use PIT only, interrupts
|
||||
// from the RTT will still occur since they both use AT91C_ID_SYS)
|
||||
AT91C_BASE_RTTC->RTTC_RTMR &= ~(AT91C_RTTC_ALMIEN | AT91C_RTTC_RTTINCIEN);
|
||||
AT91C_BASE_PITC->PITC_PIMR &= ~AT91C_PITC_PITIEN;
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
///
|
||||
/// !Purpose
|
||||
///
|
||||
/// Provides the low-level initialization function that gets called on chip
|
||||
/// startup.
|
||||
///
|
||||
/// !Usage
|
||||
///
|
||||
/// LowLevelInit() is called in #board_cstartup.S#.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_LOWLEVEL_H
|
||||
#define BOARD_LOWLEVEL_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
extern void LowLevelInit(void);
|
||||
|
||||
#endif // BOARD_LOWLEVEL_H
|
||||
|
|
@ -0,0 +1,353 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the disclaimer below in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
Title: Memories implementation
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include <board.h>
|
||||
#include <pio/pio.h>
|
||||
#include "board_memories.h"
|
||||
|
||||
/*
|
||||
Macros:
|
||||
READ - Reads a register value. Useful to add trace information to read
|
||||
accesses.
|
||||
WRITE - Writes data in a register. Useful to add trace information to
|
||||
write accesses.
|
||||
*/
|
||||
|
||||
#define READ(peripheral, register) (peripheral->register)
|
||||
#define WRITE(peripheral, register, value) (peripheral->register = value)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
Constants: Remap types
|
||||
BOARD_ROM - ROM or EBI CS0 is mirrored in the remap zone.
|
||||
BOARD_RAM - RAM is mirrored in the remap zone.
|
||||
*/
|
||||
|
||||
#define BOARD_ROM 0
|
||||
#define BOARD_RAM 1
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
/// Returns the current remap (see <Remap types>).
|
||||
//------------------------------------------------------------------------------
|
||||
static unsigned char BOARD_GetRemap()
|
||||
{
|
||||
volatile unsigned int *remap = (volatile unsigned int *) 0;
|
||||
volatile unsigned int *ram = (volatile unsigned int *) AT91C_IRAM;
|
||||
// Try to write in 0 and see if this affects the RAM
|
||||
unsigned int temp = *ram;
|
||||
*ram = temp + 1;
|
||||
if (*remap == *ram) {
|
||||
|
||||
*ram = temp;
|
||||
return BOARD_RAM;
|
||||
}
|
||||
else {
|
||||
|
||||
*ram = temp;
|
||||
return BOARD_ROM;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Use in SDRAM and DDRAM configuration
|
||||
//------------------------------------------------------------------------------
|
||||
void sleep_time(unsigned int timeval)
|
||||
{
|
||||
unsigned int i;
|
||||
for( i=0; i<timeval; i++);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize Vdd EBI external memory
|
||||
//------------------------------------------------------------------------------
|
||||
int BOARD_ConfigureVddMemSel(unsigned char VddMemSel)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Changes the mapping of the chip so that the remap area mirrors the
|
||||
/// internal ROM or the EBI CS0.
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_RemapRom()
|
||||
{
|
||||
if (BOARD_GetRemap() != BOARD_ROM)
|
||||
{
|
||||
WRITE(AT91C_BASE_MATRIX, MATRIX_MRCR, 0);
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Changes the mapping of the chip so that the remap area mirrors the
|
||||
/// internal RAM.
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_RemapRam()
|
||||
{
|
||||
if (BOARD_GetRemap() != BOARD_RAM)
|
||||
{
|
||||
WRITE(AT91C_BASE_MATRIX, MATRIX_MRCR, (AT91C_MATRIX_RCB0_ARM7TDMI | AT91C_MATRIX_RCB1_PDC));
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize and configure the SDRAM
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define AT91C_SDRAM ((volatile unsigned int *)0x20000000)
|
||||
#define SDRAM_TOP 0x24000000 // 64 MByte
|
||||
#define SDRAM_BASE 0x20000000 //
|
||||
|
||||
void BOARD_ConfigureSdram(unsigned char busWidth)
|
||||
{
|
||||
volatile unsigned int i=0;
|
||||
static const Pin pinsSdram[] = {PINS_SDRAM};
|
||||
volatile unsigned int *pSdram = (unsigned int *) AT91C_EBI_SDRAM;
|
||||
unsigned short sdrc_dbw = 0;
|
||||
|
||||
switch (busWidth) {
|
||||
case 16:
|
||||
sdrc_dbw = AT91C_SDRAMC_DBW_16_BITS;
|
||||
break;
|
||||
|
||||
case 32:
|
||||
default:
|
||||
sdrc_dbw = AT91C_SDRAMC_DBW_32_BITS;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// Enable EBI chip select for the SDRAM
|
||||
AT91C_BASE_MATRIX->MATRIX_EBICSA |= AT91C_MATRIX_EBI_CS1A_SDRAMC;
|
||||
|
||||
// Enable corresponding PIOs
|
||||
PIO_Configure(pinsSdram, 1);
|
||||
|
||||
// CFG Control Register
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_CR , ( AT91C_SDRAMC_TXSR_10 |
|
||||
AT91C_SDRAMC_TRAS_6 |
|
||||
AT91C_SDRAMC_TRCD_3 |
|
||||
AT91C_SDRAMC_TRP_3 |
|
||||
AT91C_SDRAMC_TRC_9 |
|
||||
AT91C_SDRAMC_TWR_2 |
|
||||
sdrc_dbw |
|
||||
AT91C_SDRAMC_CAS_2 |
|
||||
AT91C_SDRAMC_NB_4_BANKS |
|
||||
AT91C_SDRAMC_NR_13 |
|
||||
AT91C_SDRAMC_NC_9)); // row = 13, column = 9 SDRAM CAS = 3
|
||||
|
||||
// CFG Memory Device Register
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MDR, AT91C_SDRAMC_MD_SDRAM);
|
||||
|
||||
// Wait for at least 200us
|
||||
for (i = 0; i < 3000; i++);
|
||||
|
||||
// Perform NOP
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_NOP_CMD) ;
|
||||
pSdram[0] = 0x00000000;
|
||||
|
||||
// Perform All Bank Precharge
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_PRCGALL_CMD) ;
|
||||
pSdram[0] = 0x00000000;
|
||||
|
||||
// Perform 8 CBR cycles
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD) ;
|
||||
for (i = 0 ; i < 8 ; i++)
|
||||
{
|
||||
pSdram[0] = 0x00000000;
|
||||
}
|
||||
|
||||
// Program the SDRAM
|
||||
// Perform LMR operation
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_LMR_CMD) ;
|
||||
pSdram[0] = 0x00000000;
|
||||
|
||||
// Set Normal CTRL
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_NORMAL_CMD) ;
|
||||
pSdram[0] = 0x00000000;
|
||||
|
||||
// Set Refresh timer
|
||||
//pSDRAMC->SDRAMC_TR = sdram_Ptr->sdram_tr;
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_TR, 375); //Refresh Timer (ex: ((64 x 10^-3)/8192) x 48 x 10^6 ) => 375 or 0x177 for MCK 48 MHz
|
||||
|
||||
//SDRAM is ready to use
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Configures the EBI for NandFlash access
|
||||
/// \Param busWidth Bus width
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNandFlash(unsigned char busWidth)
|
||||
{
|
||||
// Configure EBI
|
||||
AT91C_BASE_MATRIX->MATRIX_EBICSA |= AT91C_MATRIX_EBI_CS3A_SM;
|
||||
|
||||
AT91C_BASE_SMC->SMC_SETUP3 = ((AT91C_SMC_NWESETUP & (0x1)) |
|
||||
( AT91C_SMC_NCSSETUPWR & (0x1<<8)) |
|
||||
( AT91C_SMC_NRDSETUP & (0x1<<16)) |
|
||||
( AT91C_SMC_NCSSETUPRD & (0x1<<24)));
|
||||
|
||||
AT91C_BASE_SMC->SMC_PULSE3 = (( AT91C_SMC_NCSPULSERD & (0x03 <<24)) |
|
||||
( AT91C_SMC_NRDPULSE & (0x02 <<16)) |
|
||||
( AT91C_SMC_NCSPULSEWR & (0x03 <<8)) |
|
||||
( AT91C_SMC_NWEPULSE & 0x02));
|
||||
|
||||
AT91C_BASE_SMC->SMC_CYCLE3 = ((AT91C_SMC_NRDCYCLE & (0x06<<16)) |
|
||||
( AT91C_SMC_NWECYCLE & 0x06));
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 = ( AT91C_SMC_BAT_BYTE_WRITE |
|
||||
AT91C_SMC_READMODE |
|
||||
AT91C_SMC_WRITEMODE |
|
||||
AT91C_SMC_DBW_WIDTH_EIGTH_BITS |
|
||||
(AT91C_SMC_TDF & (0x2 <<16)));
|
||||
|
||||
if (busWidth == 8) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
else if (busWidth == 32) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Configures the EBI for NandFlash access at 48MHz.
|
||||
/// \Param busWidth Bus width
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNandFlash48MHz(unsigned char busWidth)
|
||||
{
|
||||
// Configure EBI
|
||||
AT91C_BASE_MATRIX->MATRIX_EBICSA |= AT91C_MATRIX_EBI_CS3A_SM;
|
||||
|
||||
// Configure SMC
|
||||
|
||||
AT91C_BASE_SMC->SMC_SETUP3 = 0x00010001;
|
||||
AT91C_BASE_SMC->SMC_PULSE3 = 0x04030302;
|
||||
AT91C_BASE_SMC->SMC_CYCLE3 = 0x00070004;
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 = (AT91C_SMC_READMODE
|
||||
| AT91C_SMC_WRITEMODE
|
||||
| AT91C_SMC_NWAITM_NWAIT_DISABLE
|
||||
| ((0x1 << 16) & AT91C_SMC_TDF));
|
||||
|
||||
if (busWidth == 8) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
else if (busWidth == 32) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Configures the EBI for NorFlash access
|
||||
// \Param busWidth Bus width
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNorFlash(unsigned char busWidth)
|
||||
{
|
||||
// Configure SMC
|
||||
|
||||
AT91C_BASE_SMC->SMC_SETUP0 = 0x00000002;
|
||||
AT91C_BASE_SMC->SMC_PULSE0 = 0x0A0A0A06;
|
||||
AT91C_BASE_SMC->SMC_CYCLE0 = 0x000A000A;
|
||||
AT91C_BASE_SMC->SMC_CTRL0 = (AT91C_SMC_READMODE
|
||||
| AT91C_SMC_WRITEMODE
|
||||
| AT91C_SMC_NWAITM_NWAIT_DISABLE
|
||||
| ((0x1 << 16) & AT91C_SMC_TDF));
|
||||
|
||||
if (busWidth == 8) {
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
else if (busWidth == 32) {
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Configures the EBI for NorFlash access at 48MHz.
|
||||
/// \Param busWidth Bus width
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNorFlash48MHz(unsigned char busWidth)
|
||||
{
|
||||
AT91C_BASE_SMC->SMC_SETUP0 = 0x02040204;
|
||||
AT91C_BASE_SMC->SMC_PULSE0 = 0x0A080A08;
|
||||
AT91C_BASE_SMC->SMC_CYCLE0 = 0x00100010;
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL0 = (AT91C_SMC_READMODE
|
||||
| AT91C_SMC_WRITEMODE
|
||||
| AT91C_SMC_NWAITM_NWAIT_DISABLE
|
||||
| ((0x1 << 16) & AT91C_SMC_TDF));
|
||||
|
||||
if (busWidth == 8) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
else if (busWidth == 32) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the disclaimer below in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef BOARD_MEMORIES_H
|
||||
#define BOARD_MEMORIES_H
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
#define VDDMEMSEL_1V8 0 // Memories are 1.8V powered
|
||||
#define VDDMEMSEL_3V3 1 // Memories are 3.3V powered.
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
extern void BOARD_RemapRom(void);
|
||||
|
||||
extern void BOARD_RemapRam(void);
|
||||
|
||||
extern int BOARD_ConfigureVddMemSel(unsigned char VddMemSel);
|
||||
|
||||
extern void BOARD_ConfigureSdram(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNandFlash(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNandFlash48MHz(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNorFlash(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNorFlash48MHz(unsigned char busWidth);
|
||||
|
||||
#endif // #ifndef BOARD_MEMORIES_H
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
#include <pmc/pmc.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Put the CPU in IDLE mode
|
||||
//------------------------------------------------------------------------------
|
||||
void LowPowerMode(void)
|
||||
{
|
||||
PMC_CPUInIdleMode();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Returns to normal mode automatically
|
||||
//------------------------------------------------------------------------------
|
||||
void NormalPowerMode(void)
|
||||
{
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
///
|
||||
/// !Usage
|
||||
///
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_POWERMODE_H
|
||||
#define BOARD_POWERMODE_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
extern void LowPowerMode(void);
|
||||
|
||||
extern void NormalPowerMode(void);
|
||||
|
||||
#endif //#ifndef BOARD_MEMORIES_H
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2007, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the disclaimer below in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef FPGA_H
|
||||
#define FPGA_H
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions - PIOA connection to FPGA I/Os.
|
||||
// This fpga.h file is used in conjuction with the verilog (*.v) file for
|
||||
// FPGA interface I/O conneciton.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
/// LED #0 pin definition.
|
||||
#define PIN_LED_0 {1 << 26, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}
|
||||
/// LED #1 pin definition.
|
||||
#define PIN_LED_1 {1 << 27, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}
|
||||
/// LED #2 pin definition.
|
||||
|
||||
/// List of all LEDs definitions.
|
||||
#define PINS_LEDS PIN_LED_0, PIN_LED_1
|
||||
|
||||
|
||||
|
||||
#endif //#ifndef FPGA_H
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,108 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition of AT91CAP7 characteristics and features
|
||||
///
|
||||
/// !Usage
|
||||
/// -# For ARM core feature, see "AT91CAP7 - ARM core features".
|
||||
/// -# For IP features, see "AT91CAP7 - IP features".
|
||||
/// -# For misc, see "AT91CAP7 - Misc".
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef CHIP_H
|
||||
#define CHIP_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7 - ARM core features"
|
||||
/// This page lists several characteristics related to the ARM core
|
||||
///
|
||||
|
||||
//ARM core features
|
||||
|
||||
/// ARM core definition.
|
||||
#define arm7tdmi
|
||||
|
||||
/// family definition.
|
||||
//#define at91cap7 (already defined)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7 - IP features"
|
||||
/// This page lists several characteristics related to the embedded IP
|
||||
///
|
||||
|
||||
//IP FEATURES
|
||||
|
||||
/// Indicates chip has an UDP Full Speed.
|
||||
#define CHIP_USB_UDP
|
||||
|
||||
/// Indicates chip has an internal pull-up set by matrix.
|
||||
#define CHIP_USB_PULLUP_MATRIX
|
||||
|
||||
/// Number of USB endpoints
|
||||
#define CHIP_USB_NUMENDPOINTS 6
|
||||
|
||||
/// Endpoints max paxcket size
|
||||
#define CHIP_USB_ENDPOINTS_MAXPACKETSIZE(i) \
|
||||
((i == 0) ? 8 : \
|
||||
((i == 1) ? 64 : \
|
||||
((i == 2) ? 64 : \
|
||||
((i == 3) ? 64 : \
|
||||
((i == 4) ? 256 : \
|
||||
((i == 5) ? 256 : 0 ))))))
|
||||
|
||||
/// Endpoints Number of Bank
|
||||
#define CHIP_USB_ENDPOINTS_BANKS(i) \
|
||||
((i == 0) ? 1 : \
|
||||
((i == 1) ? 2 : \
|
||||
((i == 2) ? 2 : \
|
||||
((i == 3) ? 1 : \
|
||||
((i == 4) ? 2 : \
|
||||
((i == 5) ? 2 : 0 ))))))
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7 - Misc "
|
||||
/// This page lists misc features
|
||||
///
|
||||
|
||||
//Misc
|
||||
|
||||
#endif //#ifndef CHIP_H
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
# ----------------------------------------------------------------------------
|
||||
# ATMEL Microcontroller Software Support
|
||||
# ----------------------------------------------------------------------------
|
||||
# Copyright (c) 2008, Atmel Corporation
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the disclaimer below.
|
||||
#
|
||||
# Atmel's name may not be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# Defines which are the specific available IP for the chip AT91CAP7
|
||||
CHIP_CORE = arm7tdmi
|
||||
CHIP_IP_UDP = USB_UDP
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
|
||||
/*-Memory Regions-*/
|
||||
|
||||
define symbol __ICFEDIT_region_SDRAM_start__ = 0x20000000;
|
||||
define symbol __ICFEDIT_region_SDRAM_end__ = 0x23FFFFFF;
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x1f0000;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x217fff;
|
||||
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_startup__ = 0x100;
|
||||
define symbol __ICFEDIT_size_vectors__ = 0x100;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x2000;
|
||||
define symbol __ICFEDIT_size_svcstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_irqstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x0;
|
||||
|
||||
/*-Exports-*/
|
||||
export symbol __ICFEDIT_region_SDRAM_start__;
|
||||
export symbol __ICFEDIT_region_SDRAM_end__;
|
||||
export symbol __ICFEDIT_region_RAM_start__;
|
||||
export symbol __ICFEDIT_region_RAM_end__;
|
||||
export symbol __ICFEDIT_size_vectors__;
|
||||
export symbol __ICFEDIT_size_cstack__;
|
||||
export symbol __ICFEDIT_size_svcstack__;
|
||||
export symbol __ICFEDIT_size_irqstack__;
|
||||
export symbol __ICFEDIT_size_heap__;
|
||||
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
|
||||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
|
||||
define region STA_region = mem:[from __ICFEDIT_region_SDRAM_start__ size __ICFEDIT_size_startup__];
|
||||
define region SDRAM_region = mem:[from __ICFEDIT_region_SDRAM_start__+__ICFEDIT_size_startup__ to __ICFEDIT_region_SDRAM_end__];
|
||||
|
||||
define block CSTACK with alignment = 4, size = __ICFEDIT_size_cstack__ { };
|
||||
define block SVC_STACK with alignment = 4, size = __ICFEDIT_size_svcstack__ { };
|
||||
define block IRQ_STACK with alignment = 4, size = __ICFEDIT_size_irqstack__ { };
|
||||
define block HEAP with alignment = 4, size = __ICFEDIT_size_heap__ { };
|
||||
|
||||
initialize by copy { section .vectors };
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place in STA_region { section .cstartup };
|
||||
place in VEC_region { section .vectors };
|
||||
place in SDRAM_region { readonly, readwrite, block IRQ_STACK, block SVC_STACK, block CSTACK, block HEAP };
|
|
@ -0,0 +1,89 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support - ROUSSET -
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2007, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaiimer below.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the disclaimer below in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in external SDRAM on the AT91CAP7
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x1f0000, LENGTH = 0x28000
|
||||
sdram (W!RX) : ORIGIN = 0x20000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sdram
|
||||
|
||||
.relocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_srelocate = .;
|
||||
*(.vectors);
|
||||
*(.ramfunc)
|
||||
*(.data)
|
||||
. = ALIGN(4);
|
||||
_erelocate = .;
|
||||
} >sram
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
.zero (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
_ezero = .;
|
||||
} >sdram
|
||||
|
||||
_sstack = 0x24000000;
|
||||
}
|
||||
end = .;
|
||||
|
||||
|
|
@ -0,0 +1,87 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in external SDRAM on the AT91CAP7
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x1f0000, LENGTH = 0x28000
|
||||
sdram (W!RX) : ORIGIN = 0x20000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.data)
|
||||
*(.CP15_*)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sdram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
*(.vectors);
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
} >sram
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sdram
|
||||
|
||||
_sstack = 0x218000;
|
||||
}
|
||||
end = .;
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
|
||||
|
||||
/*-Memory Regions-*/
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x001f0000;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x00217fff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_vectors__ = 0x100;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x2000;
|
||||
define symbol __ICFEDIT_size_svcstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_irqstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x0;
|
||||
|
||||
/*-Exports-*/
|
||||
export symbol __ICFEDIT_region_RAM_start__;
|
||||
export symbol __ICFEDIT_region_RAM_end__;
|
||||
export symbol __ICFEDIT_size_vectors__;
|
||||
export symbol __ICFEDIT_size_cstack__;
|
||||
export symbol __ICFEDIT_size_svcstack__;
|
||||
export symbol __ICFEDIT_size_irqstack__;
|
||||
export symbol __ICFEDIT_size_heap__;
|
||||
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
|
||||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
|
||||
|
||||
define block CSTACK with alignment = 4, size = __ICFEDIT_size_cstack__ { };
|
||||
define block SVC_STACK with alignment = 4, size = __ICFEDIT_size_svcstack__ { };
|
||||
define block IRQ_STACK with alignment = 4, size = __ICFEDIT_size_irqstack__ { };
|
||||
define block HEAP with alignment = 4, size = __ICFEDIT_size_heap__ { };
|
||||
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place in VEC_region { section .vectors };
|
||||
place in RAM_region { section .cstartup, readonly, readwrite, block IRQ_STACK, block SVC_STACK, block CSTACK, block HEAP};
|
|
@ -0,0 +1,80 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in internal SRAM on the AT91SAM7S512.
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x1f0000, LENGTH = 0x28000
|
||||
sdram (W!RX) : ORIGIN = 0x20000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
|
||||
{
|
||||
. = ALIGN(4);
|
||||
.fixed :
|
||||
{
|
||||
_sfixed = .;
|
||||
*(.vectors)
|
||||
*(.ramfunc)
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.data)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sram
|
||||
|
||||
.relocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_srelocate = .;
|
||||
. = ALIGN(4);
|
||||
_erelocate = .;
|
||||
}
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
|
||||
_sstack = 0x218000;
|
||||
}
|
||||
end = .;
|
|
@ -0,0 +1,97 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in internal SRAM on the AT91CAP7
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
romcodesram (W!RX) : ORIGIN = 0x1f0000, LENGTH = 0x1000
|
||||
sram (W!RX) : ORIGIN = 0x1f1000, LENGTH = 0x27000
|
||||
sdram (W!RX) : ORIGIN = 0x20000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed0 :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed0 = .;
|
||||
*(.vectors)
|
||||
*(.text*)
|
||||
*(.CP15_*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
. = ALIGN(4);
|
||||
_efixed0 = .;
|
||||
_efixed = .;
|
||||
} >sram
|
||||
|
||||
.fixed1 :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed1 = .;
|
||||
*(.rodata*)
|
||||
*(.data)
|
||||
. = ALIGN(4);
|
||||
_efixed1 = .;
|
||||
} >sram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
}
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
_sstack = 0x218000;
|
||||
}
|
||||
end = .;
|
||||
|
|
@ -0,0 +1,322 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2009, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the disclaimer below in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \dir
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition and functions for using AT91CAP7 related features, such
|
||||
/// as PIO pins, memories, etc.
|
||||
///
|
||||
/// !Usage
|
||||
/// -# The code for booting the board is provided by board_cstartup.S and
|
||||
/// board_lowlevel.c.
|
||||
/// -# For using board PIOs, board characteristics (clock, etc.) and external
|
||||
/// components, see board.h.
|
||||
/// -# For manipulating memories (remapping, SDRAM, etc.), see board_memories.h.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition of AT91CAP7-STK characteristics, AT91CAP7 dependant PIOs and
|
||||
/// external components interfacing.
|
||||
///
|
||||
/// !Usage
|
||||
/// -# For operating frequency information, see "AT91CAP7-STK - Operating frequencies".
|
||||
/// -# For using portable PIO definitions, see "AT91CAP7-STK - PIO definitions".
|
||||
/// -# Several USB definitions are included here (see "AT91CAP7-STK - USB device").
|
||||
/// -# For external components definitions, see "AT91CAP7-STK - External components".
|
||||
/// -# For memory related definitions, see "AT91CAP7-STK - Memories".
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_H
|
||||
#define BOARD_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#if defined(at91cap7)
|
||||
#include "at91cap7/chip.h"
|
||||
#include "at91cap7/at91cap7.h"
|
||||
#else
|
||||
#error Board does not support the specified chip.
|
||||
#endif
|
||||
|
||||
#include "fpga.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-STK - Board Description"
|
||||
/// This page lists several definition related to the board description
|
||||
///
|
||||
/// !Definitions
|
||||
/// - BOARD_NAME
|
||||
|
||||
/// Name of the board.
|
||||
#define BOARD_NAME "AT91CAP7-STK"
|
||||
|
||||
/// Board definition.
|
||||
#define at91cap7stk
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-STK - Operating frequencies"
|
||||
/// This page lists several definition related to the board operating frequency
|
||||
/// (when using the initialization done by board_lowlevel.c).
|
||||
///
|
||||
/// !Definitions
|
||||
/// - BOARD_MAINOSC
|
||||
/// - BOARD_MCK
|
||||
|
||||
/// Frequency of the board main oscillator.
|
||||
#define BOARD_MAINOSC 12000000
|
||||
|
||||
/// Master clock frequency (when using board_lowlevel.c).
|
||||
#define BOARD_MCK ((12000000 * 8 / 1) / 2)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// ADC
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/// ADC clock frequency, at 10-bit resolution (in Hz)
|
||||
#define ADC_MAX_CK_10BIT 5000000
|
||||
|
||||
/// Startup time max, return from Idle mode (in µs)
|
||||
#define ADC_STARTUP_TIME_MAX 40
|
||||
|
||||
/// Track and hold Acquisition Time min (in ns)
|
||||
#define ADC_TRACK_HOLD_TIME_MIN 500
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-STK - USB device"
|
||||
/// This page lists constants describing several characteristics (controller
|
||||
/// type, D+ pull-up type, etc.) of the USB device controller of the chip/board.
|
||||
///
|
||||
/// !Constants
|
||||
/// - BOARD_USB_UDP
|
||||
/// - BOARD_USB_PULLUP_MATRIX
|
||||
/// - BOARD_USB_NUMENDPOINTS
|
||||
/// - BOARD_USB_ENDPOINTS_MAXPACKETSIZE
|
||||
/// - BOARD_USB_ENDPOINTS_BANKS
|
||||
/// - BOARD_USB_BMATTRIBUTES
|
||||
|
||||
/// Chip has a UDP controller.
|
||||
#define BOARD_USB_UDP
|
||||
|
||||
/// Indicates the D+ pull-up is always connected.
|
||||
#define BOARD_USB_PULLUP_MATRIX
|
||||
|
||||
/// Number of endpoints in the USB controller.
|
||||
#define BOARD_USB_NUMENDPOINTS 6
|
||||
|
||||
/// Returns the maximum packet size of the given endpoint.
|
||||
#define BOARD_USB_ENDPOINTS_MAXPACKETSIZE(i) ((((i) == 4) || ((i) == 5)) ? 256 : (((i) == 0) ? 8 : 64))
|
||||
|
||||
/// Returns the number of FIFO banks for the given endpoint.
|
||||
#define BOARD_USB_ENDPOINTS_BANKS(i) ((((i) == 0) || ((i) == 3)) ? 1 : 2)
|
||||
|
||||
/// USB attributes configuration descriptor (bus or self powered, remote wakeup)
|
||||
#define BOARD_USB_BMATTRIBUTES USBConfigurationDescriptor_SELFPOWERED_NORWAKEUP
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-STK - PIO definitions"
|
||||
/// This pages lists all the pio definitions contained in board.h. The constants
|
||||
/// are named using the following convention: PIN_* for a constant which defines
|
||||
/// a single Pin instance (but may include several PIOs sharing the same
|
||||
/// controller), and PINS_* for a list of Pin instances.
|
||||
///
|
||||
/// !DBGU
|
||||
/// - PINS_DBGU
|
||||
///
|
||||
/// !USART0
|
||||
/// - PIN_USART0_RXD
|
||||
/// - PIN_USART0_TXD
|
||||
/// - PIN_USART0_SCK
|
||||
///
|
||||
/// !SPI
|
||||
/// - PIN_SPI_MISO
|
||||
/// - PIN_SPI_MOSI
|
||||
/// - PIN_SPI_SPCK
|
||||
/// - PINS_SPI
|
||||
/// - PIN_SPI_NPCS0
|
||||
/// - PIN_SPI_NPCS1
|
||||
|
||||
/// List of all DBGU pin definitions.
|
||||
#define PINS_DBGU {(1<<0)|(1<<1), AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
/// USART0 SCK pin definition.
|
||||
#define PIN_USART0_SCK {AT91C_PIO_PA2, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// USART0 RTS pin definition
|
||||
#define PIN_USART0_RTS {AT91C_PIO_PA3, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// USART0 CTS pin definition
|
||||
#define PIN_USART0_CTS {AT91C_PIO_PA4, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// USART0 TXD pin definition.
|
||||
#define PIN_USART0_TXD {AT91C_PIO_PA5, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// USART0 RXD pin definition.
|
||||
#define PIN_USART0_RXD {AT91C_PIO_PA6, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
/// SPI MISO pin definition.
|
||||
#define PIN_SPI_MISO {AT91C_PIO_PA7, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_PULLUP}
|
||||
/// SPI MOSI pin definition.
|
||||
#define PIN_SPI_MOSI {AT91C_PIO_PA8, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI SPCK pin definition.
|
||||
#define PIN_SPI_SPCK {AT91C_PIO_PA9, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// List of SPI pin definitions (MISO, MOSI & SPCK).
|
||||
#define PINS_SPI PIN_SPI_MISO, PIN_SPI_MOSI, PIN_SPI_SPCK
|
||||
/// SPI chip select 0 pin definition.
|
||||
#define PIN_SPI_NPCS0 {AT91C_PIO_PA10, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI chip select 1 pin definition.
|
||||
#define PIN_SPI_NPCS1 {AT91C_PIO_PA11, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-STK - Memories"
|
||||
/// This page lists definitions related to external on-board memories.
|
||||
///
|
||||
/// !AT45 Dataflash
|
||||
/// - BOARD_AT45_A_SPI_BASE
|
||||
/// - BOARD_AT45_A_SPI_ID
|
||||
/// - BOARD_AT45_A_SPI_PINS
|
||||
/// - BOARD_AT45_A_SPI
|
||||
/// - BOARD_AT45_A_NPCS
|
||||
/// - BOARD_AT45_A_NPCS_PIN
|
||||
///
|
||||
/// !SDRAM
|
||||
/// - BOARD_SDRAM_SIZE
|
||||
/// - PINS_SDRAM
|
||||
/// - BOARD_SDRAM_BUSWIDTH
|
||||
///
|
||||
/// !Nandflash
|
||||
/// - PINS_NANDFLASH
|
||||
/// - BOARD_NF_EBI_COMMAND_ADDR
|
||||
/// - BOARD_NF_EBI_ADDRESS_ADDR
|
||||
/// - BOARD_NF_EBI_DATA_ADDR
|
||||
/// - BOARD_NF_CE_PIN
|
||||
/// - BOARD_NF_RB_PIN
|
||||
|
||||
/// Base address of SPI peripheral connected to the dataflash.
|
||||
#define BOARD_AT45_A_SPI_BASE AT91C_BASE_SPI
|
||||
/// Identifier of SPI peripheral connected to the dataflash.
|
||||
#define BOARD_AT45_A_SPI_ID AT91C_ID_SPI
|
||||
/// Pins of the SPI peripheral connected to the dataflash.
|
||||
#define BOARD_AT45_A_SPI_PINS PINS_SPI
|
||||
/// Dataflahs SPI number.
|
||||
#define BOARD_AT45_A_SPI 0
|
||||
/// Chip select connected to the dataflash.
|
||||
#define BOARD_AT45_A_NPCS 0
|
||||
/// Chip select pin connected to the dataflash.
|
||||
#define BOARD_AT45_A_NPCS_PIN PIN_SPI_NPCS0
|
||||
|
||||
/// Board SDRAM size
|
||||
#define BOARD_SDRAM_SIZE (64*1024*1024) // 64 MB
|
||||
/// List of all SDRAM pins definitions.
|
||||
#define PINS_SDRAM {0xFFFF0000, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// SDRAM bus width.
|
||||
#define BOARD_SDRAM_BUSWIDTH 32
|
||||
|
||||
/// Nandflash controller peripheral pins definition.
|
||||
#define PINS_NANDFLASH BOARD_NF_OE_PIN, BOARD_NF_WE_PIN
|
||||
/// Nandflash output enable pin definition.
|
||||
#define BOARD_NF_OE_PIN {1 << 5, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// Nandflash write enable pin definition
|
||||
#define BOARD_NF_WE_PIN {1 << 6, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// Nandflash chip enable pin definition.
|
||||
#define BOARD_NF_CE_PIN {1 << 14, AT91C_BASE_PIOA, AT91C_ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// Nandflash ready/busy pin definition.
|
||||
#define BOARD_NF_RB_PIN {0, 0, 0, 0, 0}// Not used on the DK board. Use Read Status Register Command
|
||||
/// Address for transferring command bytes to the nandflash.
|
||||
#define BOARD_NF_COMMAND_ADDR 0x40400000
|
||||
/// Address for transferring address bytes to the nandflash.
|
||||
#define BOARD_NF_ADDRESS_ADDR 0x40200000
|
||||
/// Address for transferring data bytes to the nandflash.
|
||||
#define BOARD_NF_DATA_ADDR 0x40000000
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Constants: Operating frequencies
|
||||
// AT91C_AIC_SRCTYPE_INT - Interrupt triggering mode.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#if defined(at91cap7)
|
||||
#define AT91C_AIC_SRCTYPE_INT AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE
|
||||
#else
|
||||
#error Board does not support the specified chip.
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP7-STK - Individual chip definition"
|
||||
/// This page lists the definitions related to different chip's definition
|
||||
/// located in the board.h file for the AT91CAP7-STK
|
||||
|
||||
/// USART
|
||||
#define BOARD_PIN_USART_RXD PIN_USART0_RXD
|
||||
#define BOARD_PIN_USART_TXD PIN_USART0_TXD
|
||||
#define BOARD_PIN_USART_CTS PIN_USART0_CTS
|
||||
#define BOARD_PIN_USART_RTS PIN_USART0_RTS
|
||||
#define BOARD_USART_BASE AT91C_BASE_US0
|
||||
#define BOARD_ID_USART AT91C_ID_US0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#endif //#ifndef BOARD_H
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
# ----------------------------------------------------------------------------
|
||||
# ATMEL Microcontroller Software Support - ROUSSET -
|
||||
# ----------------------------------------------------------------------------
|
||||
# Copyright (c) 2007, Atmel Corporation
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the disclaiimer below.
|
||||
#
|
||||
# - Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the disclaimer below in the documentation and/or
|
||||
# other materials provided with the distribution.
|
||||
#
|
||||
# Atmel's name may not be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# Defines which are the available memory targets for the AT91CAP7-STK board.
|
||||
|
||||
MEMORIES = sram sdram
|
||||
|
|
@ -0,0 +1,184 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support - ROUSSET -
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2007, Atmel Corporation
|
||||
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the disclaimer below in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define IRQ_STACK_SIZE 8*3*4
|
||||
|
||||
#define ARM_MODE_ABT 0x17
|
||||
#define ARM_MODE_FIQ 0x11
|
||||
#define ARM_MODE_IRQ 0x12
|
||||
#define ARM_MODE_SVC 0x13
|
||||
|
||||
#define I_BIT 0x80
|
||||
#define F_BIT 0x40
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Startup routine
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
.align 4
|
||||
.arm
|
||||
|
||||
/* Exception vectors
|
||||
*******************/
|
||||
.section .vectors, "a"
|
||||
|
||||
resetVector:
|
||||
ldr pc, =resetHandler /* Reset */
|
||||
undefVector:
|
||||
b undefVector /* Undefined instruction */
|
||||
swiVector:
|
||||
b swiVector /* Software interrupt */
|
||||
prefetchAbortVector:
|
||||
b prefetchAbortVector /* Prefetch abort */
|
||||
dataAbortVector:
|
||||
b dataAbortVector /* Data abort */
|
||||
reservedVector:
|
||||
b reservedVector /* Reserved for future use */
|
||||
irqVector:
|
||||
b irqHandler /* Interrupt */
|
||||
fiqVector:
|
||||
/* Fast interrupt */
|
||||
//------------------------------------------------------------------------------
|
||||
/// Handles a fast interrupt request by branching to the address defined in the
|
||||
/// AIC.
|
||||
//------------------------------------------------------------------------------
|
||||
fiqHandler:
|
||||
b fiqHandler
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Handles incoming interrupt requests by branching to the corresponding
|
||||
/// handler, as defined in the AIC. Supports interrupt nesting.
|
||||
//------------------------------------------------------------------------------
|
||||
irqHandler:
|
||||
|
||||
/* Save interrupt context on the stack to allow nesting */
|
||||
sub lr, lr, #4
|
||||
stmfd sp!, {lr}
|
||||
mrs lr, SPSR
|
||||
stmfd sp!, {r0, lr}
|
||||
|
||||
/* Write in the IVR to support Protect Mode */
|
||||
ldr lr, =AT91C_BASE_AIC
|
||||
ldr r0, [r14, #AIC_IVR]
|
||||
str lr, [r14, #AIC_IVR]
|
||||
|
||||
/* Branch to interrupt handler in Supervisor mode */
|
||||
msr CPSR_c, #ARM_MODE_SVC
|
||||
stmfd sp!, {r1-r3, r12, lr}
|
||||
mov lr, pc
|
||||
bx r0
|
||||
ldmia sp!, {r1-r3, r12, lr}
|
||||
msr CPSR_c, #ARM_MODE_IRQ | I_BIT
|
||||
|
||||
/* Acknowledge interrupt */
|
||||
ldr lr, =AT91C_BASE_AIC
|
||||
str lr, [r14, #AIC_EOICR]
|
||||
|
||||
/* Restore interrupt context and branch back to calling code */
|
||||
ldmia sp!, {r0, lr}
|
||||
msr SPSR_cxsf, lr
|
||||
ldmia sp!, {pc}^
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initializes the chip and branches to the main() function.
|
||||
//------------------------------------------------------------------------------
|
||||
.section .text
|
||||
.global entry
|
||||
|
||||
entry:
|
||||
resetHandler:
|
||||
|
||||
/* Dummy access to the .vectors section so it does not get optimized */
|
||||
ldr r0, =resetVector
|
||||
|
||||
/* Set pc to actual code location (i.e. not in remap zone) */
|
||||
ldr pc, =1f
|
||||
|
||||
/* Perform low-level initialization of the chip using LowLevelInit() */
|
||||
1:
|
||||
ldr r4, =_sstack
|
||||
mov sp, r4
|
||||
ldr r0, =LowLevelInit
|
||||
mov lr, pc
|
||||
bx r0
|
||||
|
||||
/* Initialize the relocate segment */
|
||||
|
||||
ldr r0, =_efixed
|
||||
ldr r1, =_srelocate
|
||||
ldr r2, =_erelocate
|
||||
1:
|
||||
cmp r1, r2
|
||||
ldrcc r3, [r0], #4
|
||||
strcc r3, [r1], #4
|
||||
bcc 1b
|
||||
|
||||
/* Clear the zero segment */
|
||||
ldr r0, =_szero
|
||||
ldr r1, =_ezero
|
||||
mov r2, #0
|
||||
1:
|
||||
cmp r0, r1
|
||||
strcc r2, [r0], #4
|
||||
bcc 1b
|
||||
|
||||
/* Setup stacks
|
||||
**************/
|
||||
/* IRQ mode */
|
||||
msr CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT
|
||||
mov sp, r4
|
||||
sub r4, r4, #IRQ_STACK_SIZE
|
||||
|
||||
/* Supervisor mode (interrupts enabled) */
|
||||
msr CPSR_c, #ARM_MODE_SVC | F_BIT
|
||||
mov sp, r4
|
||||
|
||||
/* Branch to main()
|
||||
******************/
|
||||
ldr r0, =main
|
||||
mov lr, pc
|
||||
bx r0
|
||||
|
||||
/* Loop indefinitely when program is finished */
|
||||
1:
|
||||
b 1b
|
||||
|
|
@ -0,0 +1,179 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
IAR startup file for AT91CAP7 microcontrollers.
|
||||
*/
|
||||
|
||||
MODULE ?cstartup
|
||||
|
||||
;; Forward declaration of sections.
|
||||
SECTION IRQ_STACK:DATA:NOROOT(2)
|
||||
SECTION CSTACK:DATA:NOROOT(3)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define __ASSEMBLY__
|
||||
#include "board.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define ARM_MODE_ABT 0x17
|
||||
#define ARM_MODE_FIQ 0x11
|
||||
#define ARM_MODE_IRQ 0x12
|
||||
#define ARM_MODE_SVC 0x13
|
||||
#define ARM_MODE_SYS 0x1F
|
||||
|
||||
#define I_BIT 0x80
|
||||
#define F_BIT 0x40
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Startup routine
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Exception vectors
|
||||
*/
|
||||
SECTION .vectors:CODE:NOROOT(2)
|
||||
|
||||
PUBLIC resetVector
|
||||
PUBLIC irqHandler
|
||||
|
||||
EXTERN Undefined_Handler
|
||||
EXTERN SWI_Handler
|
||||
EXTERN Prefetch_Handler
|
||||
EXTERN Abort_Handler
|
||||
EXTERN FIQ_Handler
|
||||
|
||||
ARM
|
||||
|
||||
__iar_init$$done: ; The interrupt vector is not needed
|
||||
; until after copy initialization is done
|
||||
|
||||
resetVector:
|
||||
; All default exception handlers (except reset) are
|
||||
; defined as weak symbol definitions.
|
||||
; If a handler is defined by the application it will take precedence.
|
||||
LDR pc, =resetHandler ; Reset
|
||||
LDR pc, Undefined_Addr ; Undefined instructions
|
||||
LDR pc, SWI_Addr ; Software interrupt (SWI/SVC)
|
||||
LDR pc, Prefetch_Addr ; Prefetch abort
|
||||
LDR pc, Abort_Addr ; Data abort
|
||||
B . ; RESERVED
|
||||
LDR pc, =irqHandler ; IRQ
|
||||
LDR pc, FIQ_Addr ; FIQ
|
||||
|
||||
Undefined_Addr: DCD Undefined_Handler
|
||||
SWI_Addr: DCD SWI_Handler
|
||||
Prefetch_Addr: DCD Prefetch_Handler
|
||||
Abort_Addr: DCD Abort_Handler
|
||||
FIQ_Addr: DCD FIQ_Handler
|
||||
|
||||
/*
|
||||
Handles incoming interrupt requests by branching to the corresponding
|
||||
handler, as defined in the AIC. Supports interrupt nesting.
|
||||
*/
|
||||
irqHandler:
|
||||
/* Save interrupt context on the stack to allow nesting */
|
||||
SUB lr, lr, #4
|
||||
STMFD sp!, {lr}
|
||||
MRS lr, SPSR
|
||||
STMFD sp!, {r0, lr}
|
||||
|
||||
/* Write in the IVR to support Protect Mode */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
LDR r0, [r14, #AIC_IVR]
|
||||
STR lr, [r14, #AIC_IVR]
|
||||
|
||||
/* Branch to interrupt handler in System Mode */
|
||||
MSR CPSR_c, #ARM_MODE_SYS
|
||||
STMFD sp!, {r1-r3, r4, r12, lr}
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
LDMIA sp!, {r1-r3, r4, r12, lr}
|
||||
MSR CPSR_c, #ARM_MODE_IRQ | I_BIT
|
||||
|
||||
/* Acknowledge interrupt */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
STR lr, [r14, #AIC_EOICR]
|
||||
|
||||
/* Restore interrupt context and branch back to calling code */
|
||||
LDMIA sp!, {r0, lr}
|
||||
MSR SPSR_cxsf, lr
|
||||
LDMIA sp!, {pc}^
|
||||
|
||||
|
||||
/*
|
||||
After a reset, execution starts here, the mode is ARM, supervisor
|
||||
with interrupts disabled.
|
||||
Initializes the chip and branches to the main() function.
|
||||
*/
|
||||
SECTION .cstartup:CODE:NOROOT(2)
|
||||
|
||||
PUBLIC resetHandler
|
||||
EXTERN LowLevelInit
|
||||
EXTERN ?main
|
||||
REQUIRE resetVector
|
||||
ARM
|
||||
|
||||
resetHandler:
|
||||
|
||||
/* Set pc to actual code location (i.e. not in remap zone) */
|
||||
LDR pc, =label
|
||||
|
||||
/* Perform low-level initialization of the chip using LowLevelInit() */
|
||||
label:
|
||||
LDR r0, =LowLevelInit
|
||||
LDR r4, =SFE(CSTACK)
|
||||
MOV sp, r4
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
|
||||
/* Set up the interrupt stack pointer. */
|
||||
MSR cpsr_c, #ARM_MODE_IRQ | I_BIT | F_BIT ; Change the mode
|
||||
LDR sp, =SFE(IRQ_STACK)
|
||||
|
||||
/* Set up the System stack pointer. */
|
||||
MSR cpsr_c, #ARM_MODE_SYS | F_BIT ; Change the mode
|
||||
LDR sp, =SFE(CSTACK)
|
||||
|
||||
/* Branch to main() */
|
||||
LDR r0, =?main
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
|
||||
/* Loop indefinitely when program is finished */
|
||||
loop4:
|
||||
B loop4
|
||||
|
||||
END
|
|
@ -0,0 +1,175 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
#include "board_memories.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
Constants: Clock and PLL settings
|
||||
|
||||
BOARD_OSCOUNT - Startup time of main oscillator (in number of slow clock
|
||||
ticks).
|
||||
BOARD_USBDIV - USB PLL divisor value to obtain a 48MHz clock.
|
||||
BOARD_CKGR_PLL - PLL frequency range.
|
||||
BOARD_PLLCOUNT - PLL startup time (in number of slow clock ticks).
|
||||
BOARD_MUL - PLL MUL value.
|
||||
BOARD_DIV - PLL DIV value.
|
||||
BOARD_PRESCALER - Master clock prescaler value.
|
||||
*/
|
||||
#define BOARD_OSCOUNT (AT91C_CKGR_OSCOUNT & (0xf << 8))
|
||||
|
||||
#define BOARD_CKGR_PLLA (AT91C_CKGR_SRCA | AT91C_CKGR_OUTA_0)
|
||||
#define BOARD_PLLACOUNT (40 << 8) // maximum
|
||||
#define BOARD_MULA (AT91C_CKGR_MULA & (7 << 16))
|
||||
#define BOARD_DIVA (AT91C_CKGR_DIVA & 1)
|
||||
|
||||
#define BOARD_USBDIV AT91C_CKGR_USBDIV_1
|
||||
#define BOARD_CKGR_PLLB AT91C_CKGR_OUTB_0
|
||||
#define BOARD_PLLBCOUNT BOARD_PLLACOUNT
|
||||
#define BOARD_MULB (7 << 16)
|
||||
#define BOARD_DIVB 1
|
||||
|
||||
#define BOARD_PRESCALER AT91C_PMC_PRES_CLK_2
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
/*!
|
||||
Default spurious interrupt handler
|
||||
*/
|
||||
void defaultSpuriousHandler(void)
|
||||
{
|
||||
//while (1);
|
||||
}
|
||||
|
||||
/*!
|
||||
Default handler for fast interrupt requests.
|
||||
*/
|
||||
void defaultFiqHandler(void)
|
||||
{
|
||||
while (1);
|
||||
}
|
||||
|
||||
/*!
|
||||
Default handler for standard interrupt requests.
|
||||
*/
|
||||
void defaultIrqHandler(void)
|
||||
{
|
||||
while (1);
|
||||
}
|
||||
|
||||
#include <board.h>
|
||||
#include <pio/pio.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
/*!
|
||||
Performs the low-level initialization of the chip.
|
||||
*/
|
||||
|
||||
void LowLevelInit( void )
|
||||
{
|
||||
unsigned char i;
|
||||
|
||||
#if !defined (sdram)
|
||||
// Initialize main oscillator
|
||||
AT91C_BASE_PMC->PMC_MOR = BOARD_OSCOUNT | AT91C_CKGR_MOSCEN;
|
||||
|
||||
// Wait for the main oscillator to stabilize
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));
|
||||
|
||||
// Initialize PLLA at 96MHz
|
||||
AT91C_BASE_PMC->PMC_PLLAR = BOARD_CKGR_PLLA
|
||||
| BOARD_PLLACOUNT
|
||||
| BOARD_MULA
|
||||
| BOARD_DIVA ;
|
||||
|
||||
// Wait for the PLLA to lock
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKA));
|
||||
|
||||
// Initialize PLLB for USB usage (if not already locked)
|
||||
if (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKB)) {
|
||||
AT91C_BASE_PMC->PMC_PLLBR = BOARD_USBDIV
|
||||
| BOARD_CKGR_PLLB
|
||||
| BOARD_PLLBCOUNT
|
||||
| BOARD_MULB
|
||||
| BOARD_DIVB;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKB));
|
||||
}
|
||||
|
||||
// Select PLLA
|
||||
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
|
||||
|
||||
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK_2;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
|
||||
#endif //#if !defined (sdram)
|
||||
|
||||
/* Initialize AIC
|
||||
****************/
|
||||
AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF;
|
||||
AT91C_BASE_AIC->AIC_SVR[0] = (unsigned int) defaultFiqHandler;
|
||||
for (i = 1; i < 31; i++) {
|
||||
|
||||
AT91C_BASE_AIC->AIC_SVR[i] = (unsigned int) defaultIrqHandler;
|
||||
}
|
||||
AT91C_BASE_AIC->AIC_SPU = (unsigned int) defaultSpuriousHandler;
|
||||
|
||||
// Unstack nested interrupts
|
||||
for (i = 0; i < 8 ; i++) {
|
||||
|
||||
AT91C_BASE_AIC->AIC_EOICR = 0;
|
||||
}
|
||||
|
||||
// Enable Debug mode
|
||||
AT91C_BASE_AIC->AIC_DCR = AT91C_AIC_DCR_PROT;
|
||||
|
||||
/* Watchdog initialization
|
||||
*************************/
|
||||
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_KEY | AT91C_WDTC_WDDIS;
|
||||
|
||||
/* Remap
|
||||
*******/
|
||||
BOARD_RemapRam();
|
||||
|
||||
// Disable RTT and PIT interrupts (potential problem when program A
|
||||
// configures RTT, then program B wants to use PIT only, interrupts
|
||||
// from the RTT will still occur since they both use AT91C_ID_SYS)
|
||||
AT91C_BASE_RTTC->RTTC_RTMR &= ~(AT91C_RTTC_ALMIEN | AT91C_RTTC_RTTINCIEN);
|
||||
AT91C_BASE_PITC->PITC_PIMR &= ~AT91C_PITC_PITIEN;
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
///
|
||||
/// !Purpose
|
||||
///
|
||||
/// Provides the low-level initialization function that gets called on chip
|
||||
/// startup.
|
||||
///
|
||||
/// !Usage
|
||||
///
|
||||
/// LowLevelInit() is called in #board_cstartup.S#.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_LOWLEVEL_H
|
||||
#define BOARD_LOWLEVEL_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
extern void LowLevelInit(void);
|
||||
|
||||
#endif // BOARD_LOWLEVEL_H
|
||||
|
|
@ -0,0 +1,296 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the disclaimer below in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
Title: Memories implementation
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include <board.h>
|
||||
#include <pio/pio.h>
|
||||
#include "board_memories.h"
|
||||
|
||||
/*
|
||||
Macros:
|
||||
READ - Reads a register value. Useful to add trace information to read
|
||||
accesses.
|
||||
WRITE - Writes data in a register. Useful to add trace information to
|
||||
write accesses.
|
||||
*/
|
||||
|
||||
#define READ(peripheral, register) (peripheral->register)
|
||||
#define WRITE(peripheral, register, value) (peripheral->register = value)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
Constants: Remap types
|
||||
BOARD_ROM - ROM or EBI CS0 is mirrored in the remap zone.
|
||||
BOARD_RAM - RAM is mirrored in the remap zone.
|
||||
*/
|
||||
|
||||
#define BOARD_ROM 0
|
||||
#define BOARD_RAM 1
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
/// Returns the current remap (see <Remap types>).
|
||||
//------------------------------------------------------------------------------
|
||||
static unsigned char BOARD_GetRemap()
|
||||
{
|
||||
volatile unsigned int *remap = (volatile unsigned int *) 0;
|
||||
volatile unsigned int *ram = (volatile unsigned int *) AT91C_IRAM;
|
||||
// Try to write in 0 and see if this affects the RAM
|
||||
unsigned int temp = *ram;
|
||||
*ram = temp + 1;
|
||||
if (*remap == *ram) {
|
||||
|
||||
*ram = temp;
|
||||
return BOARD_RAM;
|
||||
}
|
||||
else {
|
||||
|
||||
*ram = temp;
|
||||
return BOARD_ROM;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Use in SDRAM and DDRAM configuration
|
||||
//------------------------------------------------------------------------------
|
||||
void sleep_time(unsigned int timeval)
|
||||
{
|
||||
unsigned int i;
|
||||
for( i=0; i<timeval; i++);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize Vdd EBI external memory
|
||||
//------------------------------------------------------------------------------
|
||||
int BOARD_ConfigureVddMemSel(unsigned char VddMemSel)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Changes the mapping of the chip so that the remap area mirrors the
|
||||
/// internal ROM or the EBI CS0.
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_RemapRom()
|
||||
{
|
||||
if (BOARD_GetRemap() != BOARD_ROM)
|
||||
{
|
||||
WRITE(AT91C_BASE_MATRIX, MATRIX_MRCR, 0);
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Changes the mapping of the chip so that the remap area mirrors the
|
||||
/// internal RAM.
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_RemapRam()
|
||||
{
|
||||
if (BOARD_GetRemap() != BOARD_RAM)
|
||||
{
|
||||
WRITE(AT91C_BASE_MATRIX, MATRIX_MRCR, (AT91C_MATRIX_RCB0_ARM7TDMI | AT91C_MATRIX_RCB1_PDC));
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize and configure the SDRAM
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define AT91C_SDRAM ((volatile unsigned int *)0x20000000)
|
||||
#define SDRAM_TOP 0x24000000 // 64 MByte
|
||||
#define SDRAM_BASE 0x20000000 //
|
||||
|
||||
void BOARD_ConfigureSdram(unsigned char busWidth)
|
||||
{
|
||||
volatile unsigned int i=0;
|
||||
static const Pin pinsSdram[] = {PINS_SDRAM};
|
||||
volatile unsigned int *pSdram = (unsigned int *) AT91C_EBI_SDRAM;
|
||||
unsigned short sdrc_dbw = 0;
|
||||
|
||||
switch (busWidth) {
|
||||
case 16:
|
||||
sdrc_dbw = AT91C_SDRAMC_DBW_16_BITS;
|
||||
break;
|
||||
|
||||
case 32:
|
||||
default:
|
||||
sdrc_dbw = AT91C_SDRAMC_DBW_32_BITS;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// Enable EBI chip select for the SDRAM
|
||||
AT91C_BASE_MATRIX->MATRIX_EBICSA |= AT91C_MATRIX_EBI_CS1A_SDRAMC;
|
||||
|
||||
// Enable corresponding PIOs
|
||||
PIO_Configure(pinsSdram, 1);
|
||||
|
||||
// CFG Control Register
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_CR , ( AT91C_SDRAMC_TXSR_10 |
|
||||
AT91C_SDRAMC_TRAS_6 |
|
||||
AT91C_SDRAMC_TRCD_3 |
|
||||
AT91C_SDRAMC_TRP_3 |
|
||||
AT91C_SDRAMC_TRC_9 |
|
||||
AT91C_SDRAMC_TWR_2 |
|
||||
sdrc_dbw |
|
||||
AT91C_SDRAMC_CAS_2 |
|
||||
AT91C_SDRAMC_NB_4_BANKS |
|
||||
AT91C_SDRAMC_NR_13 |
|
||||
AT91C_SDRAMC_NC_9)); // row = 13, column = 9 SDRAM CAS = 3
|
||||
|
||||
// CFG Memory Device Register
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MDR, AT91C_SDRAMC_MD_SDRAM);
|
||||
|
||||
// Wait for at least 200us
|
||||
for (i = 0; i < 3000; i++);
|
||||
|
||||
// Perform NOP
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_NOP_CMD) ;
|
||||
pSdram[0] = 0x00000000;
|
||||
|
||||
// Perform All Bank Precharge
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_PRCGALL_CMD) ;
|
||||
pSdram[0] = 0x00000000;
|
||||
|
||||
// Perform 8 CBR cycles
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_RFSH_CMD) ;
|
||||
for (i = 0 ; i < 8 ; i++)
|
||||
{
|
||||
pSdram[0] = 0x00000000;
|
||||
}
|
||||
|
||||
// Program the SDRAM
|
||||
// Perform LMR operation
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_LMR_CMD) ;
|
||||
pSdram[0] = 0x00000000;
|
||||
|
||||
// Set Normal CTRL
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_MR, AT91C_SDRAMC_MODE_NORMAL_CMD) ;
|
||||
pSdram[0] = 0x00000000;
|
||||
|
||||
// Set Refresh timer
|
||||
//pSDRAMC->SDRAMC_TR = sdram_Ptr->sdram_tr;
|
||||
WRITE(AT91C_BASE_SDRAMC, SDRAMC_TR, 375); //Refresh Timer (ex: ((64 x 10^-3)/8192) x 48 x 10^6 ) => 375 or 0x177 for MCK 48 MHz
|
||||
|
||||
//SDRAM is ready to use
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Configures the EBI for NandFlash access
|
||||
/// \Param busWidth Bus width
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNandFlash(unsigned char busWidth)
|
||||
{
|
||||
// Configure EBI
|
||||
AT91C_BASE_MATRIX->MATRIX_EBICSA |= AT91C_MATRIX_EBI_CS3A_SM;
|
||||
|
||||
AT91C_BASE_SMC->SMC_SETUP3 = ((AT91C_SMC_NWESETUP & (0x1)) |
|
||||
( AT91C_SMC_NCSSETUPWR & (0x1<<8)) |
|
||||
( AT91C_SMC_NRDSETUP & (0x1<<16)) |
|
||||
( AT91C_SMC_NCSSETUPRD & (0x1<<24)));
|
||||
|
||||
AT91C_BASE_SMC->SMC_PULSE3 = (( AT91C_SMC_NCSPULSERD & (0x03 <<24)) |
|
||||
( AT91C_SMC_NRDPULSE & (0x02 <<16)) |
|
||||
( AT91C_SMC_NCSPULSEWR & (0x03 <<8)) |
|
||||
( AT91C_SMC_NWEPULSE & 0x02));
|
||||
|
||||
AT91C_BASE_SMC->SMC_CYCLE3 = ((AT91C_SMC_NRDCYCLE & (0x06<<16)) |
|
||||
( AT91C_SMC_NWECYCLE & 0x06));
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 = ( AT91C_SMC_BAT_BYTE_WRITE |
|
||||
AT91C_SMC_READMODE |
|
||||
AT91C_SMC_WRITEMODE |
|
||||
AT91C_SMC_DBW_WIDTH_EIGTH_BITS |
|
||||
(AT91C_SMC_TDF & (0x2 <<16)));
|
||||
|
||||
if (busWidth == 8) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
else if (busWidth == 32) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Configures the EBI for NandFlash access at 48MHz.
|
||||
/// \Param busWidth Bus width
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNandFlash48MHz(unsigned char busWidth)
|
||||
{
|
||||
// Configure EBI
|
||||
AT91C_BASE_MATRIX->MATRIX_EBICSA |= AT91C_MATRIX_EBI_CS3A_SM;
|
||||
|
||||
// Configure SMC
|
||||
|
||||
AT91C_BASE_SMC->SMC_SETUP3 = 0x00010001;
|
||||
AT91C_BASE_SMC->SMC_PULSE3 = 0x04030302;
|
||||
AT91C_BASE_SMC->SMC_CYCLE3 = 0x00070004;
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 = (AT91C_SMC_READMODE
|
||||
| AT91C_SMC_WRITEMODE
|
||||
| AT91C_SMC_NWAITM_NWAIT_DISABLE
|
||||
| ((0x1 << 16) & AT91C_SMC_TDF));
|
||||
|
||||
if (busWidth == 8) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
else if (busWidth == 32) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the disclaimer below in the documentation and/or
|
||||
* other materials provided with the distribution.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef BOARD_MEMORIES_H
|
||||
#define BOARD_MEMORIES_H
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
#define VDDMEMSEL_1V8 0 // Memories are 1.8V powered
|
||||
#define VDDMEMSEL_3V3 1 // Memories are 3.3V powered.
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
extern void BOARD_RemapRom(void);
|
||||
|
||||
extern void BOARD_RemapRam(void);
|
||||
|
||||
extern int BOARD_ConfigureVddMemSel(unsigned char VddMemSel);
|
||||
|
||||
extern void BOARD_ConfigureSdram(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNandFlash(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNandFlash48MHz(unsigned char busWidth);
|
||||
|
||||
#endif // #ifndef BOARD_MEMORIES_H
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
#include <pmc/pmc.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Put the CPU in IDLE mode
|
||||
//------------------------------------------------------------------------------
|
||||
void LowPowerMode(void)
|
||||
{
|
||||
PMC_CPUInIdleMode();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Returns to normal mode automatically
|
||||
//------------------------------------------------------------------------------
|
||||
void NormalPowerMode(void)
|
||||
{
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
///
|
||||
/// !Usage
|
||||
///
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_POWERMODE_H
|
||||
#define BOARD_POWERMODE_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
extern void LowPowerMode(void);
|
||||
|
||||
extern void NormalPowerMode(void);
|
||||
|
||||
#endif //#ifndef BOARD_MEMORIES_H
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef FPGA_H
|
||||
#define FPGA_H
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions - PIOA connection to FPGA I/Os.
|
||||
// This fpga.h file is used in conjuction with the verilog (*.v) file for
|
||||
// FPGA interface I/O conneciton.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
/************/
|
||||
/* LEDs */
|
||||
/************/
|
||||
|
||||
/// LED #0 pin definition.
|
||||
#define PIN_LED_DS1 {1 << 10, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}
|
||||
|
||||
/// LED #1 pin definition.
|
||||
#define PIN_LED_DS2 {1 << 11, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_OUTPUT_1, PIO_DEFAULT}
|
||||
|
||||
|
||||
|
||||
#define PINS_LEDS PIN_LED_DS1, PIN_LED_DS2 //, PIN_LED_DS3, PIN_LED_DS4, PIN_LED_DS5, PIN_LED_DS6, PIN_LED_DS7
|
||||
|
||||
|
||||
|
||||
/// LED DS1 index.
|
||||
#define LED_DS1 0
|
||||
|
||||
/// LED DS2 index.
|
||||
#define LED_DS2 1
|
||||
|
||||
|
||||
|
||||
/********************/
|
||||
/* Push Buttons */
|
||||
/********************/
|
||||
|
||||
|
||||
/// Push button #0 definition.
|
||||
#define PIN_PUSHBUTTON_1 {1 << 8, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_INPUT, PIO_DEGLITCH | PIO_PULLUP}
|
||||
|
||||
/// Push button #1 definition.
|
||||
#define PIN_PUSHBUTTON_2 {1 << 9, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_INPUT, PIO_DEGLITCH | PIO_PULLUP}
|
||||
|
||||
|
||||
|
||||
/// List of all push button definitions.
|
||||
|
||||
|
||||
#define PINS_PUSHBUTTONS PIN_PUSHBUTTON_1, PIN_PUSHBUTTON_2 // , PIN_PUSHBUTTON_3, PIN_PUSHBUTTON_4
|
||||
|
||||
|
||||
/// Push button #0 index.
|
||||
#define PUSHBUTTON_BP1 0
|
||||
|
||||
/// Push button #1 index.
|
||||
#define PUSHBUTTON_BP2 1
|
||||
|
||||
|
||||
/// Push button #2 index.
|
||||
/// #define PUSHBUTTON_BP3 2
|
||||
|
||||
/// Push button #3 index.
|
||||
/// #define PUSHBUTTON_BP4 3
|
||||
|
||||
|
||||
/***********************/
|
||||
/* Joystick control */
|
||||
/***********************/
|
||||
|
||||
// Joystick UP.
|
||||
#define PIN_JOYSTICK_UP {1 << 20, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_INPUT, PIO_PULLUP}
|
||||
// Joystick DOWN.
|
||||
#define PIN_JOYSTICK_DOWN {1 << 23, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_INPUT, PIO_PULLUP}
|
||||
// Joystick LEFT.
|
||||
#define PIN_JOYSTICK_LEFT {1 << 22, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_INPUT, PIO_PULLUP}
|
||||
// Joystick RIGHT.
|
||||
#define PIN_JOYSTICK_RIGHT {1 << 21, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_INPUT, PIO_PULLUP}
|
||||
// Joystick LEFT clic.
|
||||
#define PIN_JOYSTICK_LCLIC {1 << 24, AT91C_BASE_PIOB, AT91C_ID_PIOB, PIO_INPUT, PIO_PULLUP}
|
||||
// Joystick PUSH button.
|
||||
#define PIN_JOYSTICK_PUSH PIN_JOYSTICK_LCLIC
|
||||
// List of all Joystick click definitions
|
||||
#define PINS_JOYSTICK_CLIC PIN_JOYSTICK_LCLIC
|
||||
// List of all Joystick movement direction definitions
|
||||
#define PINS_JOYSTICK_MOVE PIN_JOYSTICK_UP, PIN_JOYSTICK_DOWN, \
|
||||
PIN_JOYSTICK_LEFT, PIN_JOYSTICK_RIGHT
|
||||
// List of all Joystick definitions
|
||||
#define PINS_JOYSTICK PINS_JOYSTICK_MOVE, \
|
||||
PINS_JOYSTICK_CLIC
|
||||
// Joystick UP index.
|
||||
#define JOYSTICK_UP 0
|
||||
// Joystick DOWN index.
|
||||
#define JOYSTICK_DOWN 1
|
||||
// Joystick LEFT index.
|
||||
#define JOYSTICK_LEFT 2
|
||||
// Joystick RIGHT index.
|
||||
#define JOYSTICK_RIGHT 3
|
||||
// Joystick LEFT CLICK index.
|
||||
#define JOYSTICK_LCLIC 4
|
||||
// Joystick PUSH button index.
|
||||
#define JOYSTICK_PUSH 4
|
||||
|
||||
|
||||
#endif //#ifndef FPGA_H
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Binary file not shown.
|
@ -0,0 +1,2 @@
|
|||
The fpga.h file in this directory is used for getting started design for AT91CAP7-STk board only
|
||||
since PIOB is used to connect to LEDs through FPGA for this board only.
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,36 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
|
||||
/*-Memory Regions-*/
|
||||
define symbol __ICFEDIT_region_BCRAM_start__ = 0x20000000;
|
||||
define symbol __ICFEDIT_region_BCRAM_end__ = 0x20FFFFFF;
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x100000;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x107fff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_startup__ = 0x100;
|
||||
define symbol __ICFEDIT_size_vectors__ = 0x100;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_sysstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_irqstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x0;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
|
||||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
|
||||
define region STA_region = mem:[from __ICFEDIT_region_BCRAM_start__ size __ICFEDIT_size_startup__];
|
||||
define region BCRAM_region = mem:[from __ICFEDIT_region_BCRAM_start__+__ICFEDIT_size_startup__ to __ICFEDIT_region_BCRAM_end__];
|
||||
|
||||
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
|
||||
define block SYS_STACK with alignment = 8, size = __ICFEDIT_size_sysstack__ { };
|
||||
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
|
||||
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
|
||||
|
||||
initialize by copy { section .vectors };
|
||||
initialize by copy { section .ramfunc };
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place in STA_region { section .cstartup };
|
||||
place in VEC_region { section .vectors };
|
||||
place in RAM_region { section .ramfunc };
|
||||
place in BCRAM_region { readonly, readwrite, block IRQ_STACK, block SYS_STACK, block CSTACK, block HEAP };
|
|
@ -0,0 +1,89 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in external BCRAM on the AT91CAP9
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x100000, LENGTH = 0x8000
|
||||
bcram (W!RX) : ORIGIN = 0x20000000, LENGTH = 0x1000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.data)
|
||||
*(.CP15_*)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >bcram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
*(.vectors);
|
||||
*(.ramfunc)
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
} >sram
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >bcram
|
||||
|
||||
_sstack = 0x21000000;
|
||||
}
|
||||
end = .;
|
||||
|
||||
PROVIDE(__HEAP_START = _ezero );
|
|
@ -0,0 +1,49 @@
|
|||
; * ----------------------------------------------------------------------------
|
||||
; * ATMEL Microcontroller Software Support
|
||||
; * ----------------------------------------------------------------------------
|
||||
; * Copyright (c) 2008, Atmel Corporation
|
||||
; *
|
||||
; * All rights reserved.
|
||||
; *
|
||||
; * Redistribution and use in source and binary forms, with or without
|
||||
; * modification, are permitted provided that the following conditions are met:
|
||||
; *
|
||||
; * - Redistributions of source code must retain the above copyright notice,
|
||||
; * this list of conditions and the disclaimer below.
|
||||
; *
|
||||
; * Atmel's name may not be used to endorse or promote products derived from
|
||||
; * this software without specific prior written permission.
|
||||
; *
|
||||
; * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
; * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
; * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
; * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
; * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
; * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
; * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
; * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
; * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
; * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
; * ----------------------------------------------------------------------------
|
||||
|
||||
; *------------------------------------------------------------------------------
|
||||
; * Linker scatter for running in external SDRAM on the AT91SAMCAP9
|
||||
; *----------------------------------------------------------------------------*/
|
||||
|
||||
Load_region 0x20000000 0x1000000 {
|
||||
|
||||
Fixed_region 0x20000000 {
|
||||
*(cstartup +First)
|
||||
.ANY (+RO +RW +ZI)
|
||||
}
|
||||
|
||||
Relocate_region 0x100000 0x8000 {
|
||||
*.o (VECTOR, +First)
|
||||
}
|
||||
|
||||
ARM_LIB_HEAP 0x20FFE000 EMPTY 0x1000 {
|
||||
}
|
||||
|
||||
ARM_LIB_STACK 0x21000000 EMPTY -0x1000 {
|
||||
}
|
||||
}
|
|
@ -0,0 +1,130 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition of AT91CAP9 characteristics and features
|
||||
///
|
||||
/// !Usage
|
||||
/// -# For ARM core feature, see "AT91CAP9 - ARM core features".
|
||||
/// -# For IP features, see "AT91CAP9 - IP features".
|
||||
/// -# For misc, see "AT91CAP9 - Misc".
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef CHIP_H
|
||||
#define CHIP_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9 - ARM core features"
|
||||
/// This page lists several characteristics related to the ARM core
|
||||
///
|
||||
|
||||
//ARM core features
|
||||
|
||||
/// ARM core definition.
|
||||
#define arm926ej_s
|
||||
|
||||
/// family definition.
|
||||
//#define at91cap9 (already defined)
|
||||
|
||||
/// temporary define, to be removed
|
||||
#define CP15_PRESENT
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9 - IP features"
|
||||
/// This page lists several characteristics related to the embedded IP
|
||||
///
|
||||
|
||||
//IP FEATURES
|
||||
|
||||
// DMA channels number
|
||||
#define CHIP_DMA_CHANNEL_NUM 4
|
||||
|
||||
/// Indicates chip has an UDP High Speed.
|
||||
#define CHIP_USB_UDPHS
|
||||
|
||||
/// Indicates chip has an Host Full Speed.
|
||||
#define CHIP_USB_UHP_OHCI
|
||||
|
||||
/// Indicates chip has an internal pull-up.
|
||||
#define CHIP_USB_PULLUP_INTERNAL
|
||||
|
||||
/// Number of USB endpoints
|
||||
#define CHIP_USB_NUMENDPOINTS 8
|
||||
|
||||
/// Endpoints max paxcket size
|
||||
#define CHIP_USB_ENDPOINTS_MAXPACKETSIZE(i) \
|
||||
((i == 0) ? 64 : \
|
||||
((i == 1) ? 1024 : \
|
||||
((i == 2) ? 1024 : \
|
||||
((i == 3) ? 1024 : \
|
||||
((i == 4) ? 1024 : \
|
||||
((i == 5) ? 1024 : \
|
||||
((i == 6) ? 1024 : \
|
||||
((i == 7) ? 1024 : 0 ))))))))
|
||||
|
||||
/// Endpoints Number of Bank
|
||||
#define CHIP_USB_ENDPOINTS_BANKS(i) \
|
||||
((i == 0) ? 1 : \
|
||||
((i == 1) ? 3 : \
|
||||
((i == 2) ? 3 : \
|
||||
((i == 3) ? 2 : \
|
||||
((i == 4) ? 2 : \
|
||||
((i == 5) ? 2 : \
|
||||
((i == 6) ? 2 : \
|
||||
((i == 7) ? 2 : 0 ))))))))
|
||||
|
||||
/// Endpoints max paxcket size
|
||||
#define CHIP_USB_ENDPOINTS_DMA(i) \
|
||||
((i == 1) ? 1 : \
|
||||
((i == 2) ? 1 : \
|
||||
((i == 3) ? 1 : \
|
||||
((i == 4) ? 1 : \
|
||||
((i == 5) ? 1 : \
|
||||
((i == 6) ? 1 : 0 ))))))
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9 - Misc "
|
||||
/// This page lists misc features
|
||||
///
|
||||
|
||||
//Misc
|
||||
|
||||
#endif //#ifndef CHIP_H
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
# ----------------------------------------------------------------------------
|
||||
# ATMEL Microcontroller Software Support
|
||||
# ----------------------------------------------------------------------------
|
||||
# Copyright (c) 2008, Atmel Corporation
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the disclaimer below.
|
||||
#
|
||||
# Atmel's name may not be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# Defines which are the specific available IP for the chip AT91CAP9
|
||||
CHIP_CORE = arm926ej_s
|
||||
CHIP_IP_TS = NO_TSADC
|
||||
CHIP_IP_MCI = MCI_PDC
|
||||
CHIP_IP_UDP = USB_UDPHS
|
||||
CHIP_IP_UHP = USB_OHCI
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
|
||||
/*-Memory Regions-*/
|
||||
define symbol __ICFEDIT_region_DDRAM_start__ = 0x70000000;
|
||||
define symbol __ICFEDIT_region_DDRAM_end__ = 0x71FFFFFF;
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x100000;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x107fff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_startup__ = 0x100;
|
||||
define symbol __ICFEDIT_size_vectors__ = 0x100;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_sysstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_irqstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x0;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
|
||||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
|
||||
define region STA_region = mem:[from __ICFEDIT_region_DDRAM_start__ size __ICFEDIT_size_startup__];
|
||||
define region DDRAM_region = mem:[from __ICFEDIT_region_DDRAM_start__+__ICFEDIT_size_startup__ to __ICFEDIT_region_DDRAM_end__];
|
||||
|
||||
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
|
||||
define block SYS_STACK with alignment = 8, size = __ICFEDIT_size_sysstack__ { };
|
||||
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
|
||||
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
|
||||
|
||||
initialize by copy { section .vectors };
|
||||
initialize by copy { section .ramfunc };
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place in STA_region { section .cstartup };
|
||||
place in VEC_region { section .vectors };
|
||||
place in RAM_region { section .ramfunc };
|
||||
place in DDRAM_region { readonly, readwrite, block IRQ_STACK, block SYS_STACK, block CSTACK, block HEAP };
|
|
@ -0,0 +1,89 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in external DDRAM on the AT91CAP9
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x100000, LENGTH = 0x8000
|
||||
sdram (W!RX) : ORIGIN = 0x70000000, LENGTH = 0x2000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.data)
|
||||
*(.CP15_*)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sdram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
*(.vectors);
|
||||
*(.ramfunc)
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
} >sram
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
_sstack = 0x72000000;
|
||||
}
|
||||
end = .;
|
||||
|
||||
PROVIDE(__HEAP_START = _ezero );
|
|
@ -0,0 +1,49 @@
|
|||
; * ----------------------------------------------------------------------------
|
||||
; * ATMEL Microcontroller Software Support
|
||||
; * ----------------------------------------------------------------------------
|
||||
; * Copyright (c) 2008, Atmel Corporation
|
||||
; *
|
||||
; * All rights reserved.
|
||||
; *
|
||||
; * Redistribution and use in source and binary forms, with or without
|
||||
; * modification, are permitted provided that the following conditions are met:
|
||||
; *
|
||||
; * - Redistributions of source code must retain the above copyright notice,
|
||||
; * this list of conditions and the disclaimer below.
|
||||
; *
|
||||
; * Atmel's name may not be used to endorse or promote products derived from
|
||||
; * this software without specific prior written permission.
|
||||
; *
|
||||
; * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
; * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
; * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
; * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
; * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
; * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
; * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
; * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
; * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
; * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
; * ----------------------------------------------------------------------------
|
||||
|
||||
; *------------------------------------------------------------------------------
|
||||
; * Linker scatter for running in external SDRAM on the AT91SAMCAP9
|
||||
; *----------------------------------------------------------------------------*/
|
||||
|
||||
Load_region 0x70000000 0x2000000 {
|
||||
|
||||
Fixed_region 0x70000000 {
|
||||
*(cstartup +First)
|
||||
.ANY (+RO +RW +ZI)
|
||||
}
|
||||
|
||||
Relocate_region 0x100000 0x8000 {
|
||||
*.o (VECTOR, +First)
|
||||
}
|
||||
|
||||
ARM_LIB_HEAP 0x71FFE000 EMPTY 0x1000 {
|
||||
}
|
||||
|
||||
ARM_LIB_STACK 0x72000000 EMPTY -0x1000 {
|
||||
}
|
||||
}
|
|
@ -0,0 +1,90 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in NORFlash on the AT91CAP9
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x00100000, LENGTH = 32K
|
||||
ebi_cs0 (RX) : ORIGIN = 0x10000000, LENGTH = 8M
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
*board_lowlevel.o(.text*)
|
||||
*board_memories.o(.text*)
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
} >sram
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
*(.vectors)
|
||||
*(.ramfunc)
|
||||
*(.data)
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
} >sram
|
||||
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.CP15_*)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >ebi_cs0
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
_sstack = 0x108000;
|
||||
}
|
||||
end = .;
|
||||
|
||||
PROVIDE(__HEAP_START = _ezero );
|
|
@ -0,0 +1,36 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
|
||||
/*-Memory Regions-*/
|
||||
define symbol __ICFEDIT_region_SDRAM_start__ = 0x70000000;
|
||||
define symbol __ICFEDIT_region_SDRAM_end__ = 0x73FFFFFF;
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x100000;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x107fff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_startup__ = 0x100;
|
||||
define symbol __ICFEDIT_size_vectors__ = 0x100;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_sysstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_irqstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x0;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
|
||||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
|
||||
define region STA_region = mem:[from __ICFEDIT_region_SDRAM_start__ size __ICFEDIT_size_startup__];
|
||||
define region SDRAM_region = mem:[from __ICFEDIT_region_SDRAM_start__+__ICFEDIT_size_startup__ to __ICFEDIT_region_SDRAM_end__];
|
||||
|
||||
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
|
||||
define block SYS_STACK with alignment = 8, size = __ICFEDIT_size_sysstack__ { };
|
||||
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
|
||||
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
|
||||
|
||||
initialize by copy { section .vectors };
|
||||
initialize by copy { section .ramfunc };
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place in STA_region { section .cstartup };
|
||||
place in VEC_region { section .vectors };
|
||||
place in RAM_region { section .ramfunc };
|
||||
place in SDRAM_region { readonly, readwrite, block IRQ_STACK, block SYS_STACK, block CSTACK, block HEAP };
|
|
@ -0,0 +1,89 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in external SDRAM on the AT91CAP9
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x100000, LENGTH = 0x8000
|
||||
sdram (W!RX) : ORIGIN = 0x70000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.data)
|
||||
*(.CP15_*)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sdram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
*(.vectors);
|
||||
*(.ramfunc)
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
} >sram
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sdram
|
||||
|
||||
_sstack = 0x74000000;
|
||||
}
|
||||
end = .;
|
||||
|
||||
PROVIDE(__HEAP_START = _ezero );
|
|
@ -0,0 +1,49 @@
|
|||
; * ----------------------------------------------------------------------------
|
||||
; * ATMEL Microcontroller Software Support
|
||||
; * ----------------------------------------------------------------------------
|
||||
; * Copyright (c) 2008, Atmel Corporation
|
||||
; *
|
||||
; * All rights reserved.
|
||||
; *
|
||||
; * Redistribution and use in source and binary forms, with or without
|
||||
; * modification, are permitted provided that the following conditions are met:
|
||||
; *
|
||||
; * - Redistributions of source code must retain the above copyright notice,
|
||||
; * this list of conditions and the disclaimer below.
|
||||
; *
|
||||
; * Atmel's name may not be used to endorse or promote products derived from
|
||||
; * this software without specific prior written permission.
|
||||
; *
|
||||
; * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
; * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
; * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
; * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
; * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
; * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
; * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
; * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
; * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
; * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
; * ----------------------------------------------------------------------------
|
||||
|
||||
; *------------------------------------------------------------------------------
|
||||
; * Linker scatter for running in external SDRAM on the AT91SAMCAP9
|
||||
; *----------------------------------------------------------------------------*/
|
||||
|
||||
Load_region 0x70000000 0x4000000 {
|
||||
|
||||
Fixed_region 0x70000000 {
|
||||
*(cstartup +First)
|
||||
.ANY (+RO +RW +ZI)
|
||||
}
|
||||
|
||||
Relocate_region 0x100000 0x8000 {
|
||||
*.o (VECTOR, +First)
|
||||
}
|
||||
|
||||
ARM_LIB_HEAP 0x73FFE000 EMPTY 0x1000 {
|
||||
}
|
||||
|
||||
ARM_LIB_STACK 0x74000000 EMPTY -0x1000 {
|
||||
}
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in external SDRAM on the AT91CAP9
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x100000, LENGTH = 0x8000
|
||||
sdram (W!RX) : ORIGIN = 0x70000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.data)
|
||||
*(.CP15_*)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sdram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
*(.vectors);
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
} >sram
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sdram
|
||||
|
||||
_sstack = 0x108000;
|
||||
}
|
||||
end = .;
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
|
||||
/*-Memory Regions-*/
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x100000;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x107fff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_vectors__ = 0x100;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_sysstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_irqstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x0;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
|
||||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
|
||||
|
||||
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
|
||||
define block SYS_STACK with alignment = 8, size = __ICFEDIT_size_sysstack__ { };
|
||||
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
|
||||
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
|
||||
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place in VEC_region { section .vectors };
|
||||
place in RAM_region { section .cstartup, readonly, readwrite, block IRQ_STACK, block SYS_STACK, block CSTACK, block HEAP};
|
|
@ -0,0 +1,88 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in internal SRAM on the AT91CAP9
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x100000, LENGTH = 0x8000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.vectors)
|
||||
*(.ramfunc)
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.data)
|
||||
*(.CP15_*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
}
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
_sstack = 0x108000;
|
||||
}
|
||||
end = .;
|
||||
|
||||
PROVIDE(__HEAP_START = _ezero );
|
|
@ -0,0 +1,53 @@
|
|||
; * ----------------------------------------------------------------------------
|
||||
; * ATMEL Microcontroller Software Support
|
||||
; * ----------------------------------------------------------------------------
|
||||
; * Copyright (c) 2008, Atmel Corporation
|
||||
; *
|
||||
; * All rights reserved.
|
||||
; *
|
||||
; * Redistribution and use in source and binary forms, with or without
|
||||
; * modification, are permitted provided that the following conditions are met:
|
||||
; *
|
||||
; * - Redistributions of source code must retain the above copyright notice,
|
||||
; * this list of conditions and the disclaimer below.
|
||||
; *
|
||||
; * Atmel's name may not be used to endorse or promote products derived from
|
||||
; * this software without specific prior written permission.
|
||||
; *
|
||||
; * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
; * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
; * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
; * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
; * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
; * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
; * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
; * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
; * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
; * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
; * ----------------------------------------------------------------------------
|
||||
|
||||
; *------------------------------------------------------------------------------
|
||||
; * Linker scatter for running in internal SRAM on the AT91SAMCAP9
|
||||
; *----------------------------------------------------------------------------*/
|
||||
|
||||
Load_region 0x100000 0x8000 {
|
||||
|
||||
Fixed_region 0x100000 {
|
||||
*.o (VECTOR, +First)
|
||||
.ANY (+RO)
|
||||
}
|
||||
|
||||
Relocate_region +0 {
|
||||
*(cstartup +First)
|
||||
.ANY (+RW +ZI)
|
||||
}
|
||||
|
||||
ScatterAssert((ImageLength(Fixed_region) + ImageLength(Relocate_region)) < 0x7800)
|
||||
|
||||
ARM_LIB_HEAP 0x107800 EMPTY 0x400 {
|
||||
}
|
||||
|
||||
ARM_LIB_STACK 0x108000 EMPTY -0x400 {
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in internal SRAM on the AT91CAP9
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
romcodesram (W!RX) : ORIGIN = 0x100000, LENGTH = 0x1000
|
||||
sram (W!RX) : ORIGIN = 0x101000, LENGTH = 0x7000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed0 :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed0 = .;
|
||||
*(.vectors)
|
||||
*(.text*)
|
||||
*(.CP15_*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
. = ALIGN(4);
|
||||
_efixed0 = .;
|
||||
_efixed = .;
|
||||
} >sram
|
||||
|
||||
.fixed1 :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed1 = .;
|
||||
*(.rodata*)
|
||||
*(.data)
|
||||
. = ALIGN(4);
|
||||
_efixed1 = .;
|
||||
} >sram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
}
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
_sstack = 0x108000;
|
||||
}
|
||||
end = .;
|
||||
|
|
@ -0,0 +1,791 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \dir
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition and functions for using AT91CAP9-related features, such
|
||||
/// has PIO pins, memories, etc.
|
||||
///
|
||||
/// !Usage
|
||||
/// -# The code for booting the board is provided by board_cstartup.S and
|
||||
/// board_lowlevel.c.
|
||||
/// -# For using board PIOs, board characteristics (clock, etc.) and external
|
||||
/// components, see board.h.
|
||||
/// -# For manipulating memories (remapping, SDRAM, etc.), see board_memories.h.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition of AT91CAP9-DK characteristics, AT91CAP9-dependant PIOs and
|
||||
/// external components interfacing.
|
||||
///
|
||||
/// !Usage
|
||||
/// -# For operating frequency information, see "AT91CAP9-DK - Operating frequencies".
|
||||
/// -# For using portable PIO definitions, see "AT91CAP9-DK - PIO definitions".
|
||||
/// -# Several USB definitions are included here (see "AT91CAP9-DK - USB device").
|
||||
/// -# For external components definitions, see "AT91CAP9-DK - External components".
|
||||
/// -# For memory-related definitions, see "AT91CAP9-DK - Memories".
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_H
|
||||
#define BOARD_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#if defined(at91cap9)
|
||||
#include "at91cap9/chip.h"
|
||||
#include "at91cap9/AT91CAP9.h"
|
||||
#else
|
||||
#error Board does not support the specified chip.
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-DK - Board Description"
|
||||
/// This page lists several definition related to the board description
|
||||
///
|
||||
/// !Definitions
|
||||
/// - BOARD_NAME
|
||||
|
||||
/// Name of the board.
|
||||
#define BOARD_NAME "AT91CAP9-DK"
|
||||
/// Board definition.
|
||||
#define at91cap9dk
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-DK - Operating frequencies"
|
||||
/// This page lists several definition related to the board operating frequency
|
||||
/// (when using the initialization done by board_lowlevel.c).
|
||||
///
|
||||
/// !Definitions
|
||||
/// - BOARD_MAINOSC
|
||||
/// - BOARD_MCK
|
||||
|
||||
/// Frequency of the board main oscillator.
|
||||
#define BOARD_MAINOSC 12000000
|
||||
|
||||
/// Master clock frequency (when using board_lowlevel.c).
|
||||
#define BOARD_MCK ((12000000 * 50 / 3) / 2)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// ADC
|
||||
//------------------------------------------------------------------------------
|
||||
/// ADC clock frequency, at 10-bit resolution (in Hz)
|
||||
#define ADC_MAX_CK_10BIT 5000000
|
||||
/// Startup time max, return from Idle mode (in µs)
|
||||
#define ADC_STARTUP_TIME_MAX 40
|
||||
/// Track and hold Acquisition Time min (in ns)
|
||||
#define ADC_TRACK_HOLD_TIME_MIN 500
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-DK - USB device"
|
||||
///
|
||||
/// !Constants
|
||||
/// - BOARD_USB_BMATTRIBUTES
|
||||
|
||||
/// USB attributes configuration descriptor (bus or self powered, remote wakeup)
|
||||
#define BOARD_USB_BMATTRIBUTES USBConfigurationDescriptor_SELFPOWERED_NORWAKEUP
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-DK - PIO definitions"
|
||||
/// This pages lists all the pio definitions contained in board.h. The constants
|
||||
/// are named using the following convention: PIN_* for a constant which defines
|
||||
/// a single Pin instance (but may include several PIOs sharing the same
|
||||
/// controller), and PINS_* for a list of Pin instances.
|
||||
///
|
||||
/// !DBGU
|
||||
/// - PINS_DBGU
|
||||
///
|
||||
/// !LEDs
|
||||
/// - PIN_LED_0
|
||||
/// - PIN_LED_1
|
||||
/// - PINS_LEDS
|
||||
/// - LED_POWER
|
||||
/// - LED_DS1
|
||||
/// - LED_DS2
|
||||
///
|
||||
/// !Push buttons
|
||||
/// - PIN_KEYBOARD_COL0
|
||||
/// - PIN_KEYBOARD_COL1
|
||||
/// - PIN_KEYBOARD_COL2
|
||||
/// - PIN_KEYBOARD_COL3
|
||||
/// - PIN_KEYBOARD_ROW0
|
||||
/// - PIN_KEYBOARD_ROW1
|
||||
/// - PIN_KEYBOARD_ROW2
|
||||
/// - PIN_KEYBOARD_ROW3
|
||||
/// - PINS_KEYBOARD_COL
|
||||
/// - PINS_KEYBOARD_ROW
|
||||
/// - PIN_PUSHBUTTON_1
|
||||
/// - PIN_PUSHBUTTON_2
|
||||
/// - PIN_PUSHBUTTON_3
|
||||
/// - PIN_PUSHBUTTON_4
|
||||
/// - PINS_PUSHBUTTONS
|
||||
/// - PUSHBUTTON_BP1
|
||||
/// - PUSHBUTTON_BP2
|
||||
/// - JOYSTICK_LEFT
|
||||
/// - JOYSTICK_RIGHT
|
||||
/// - JOYSTICK_UP
|
||||
/// - JOYSTICK_DOWN
|
||||
///
|
||||
/// !USART0
|
||||
/// - PIN_USART0_RXD
|
||||
/// - PIN_USART0_TXD
|
||||
/// - PIN_USART0_RTS
|
||||
/// - PIN_USART0_CTS
|
||||
/// - PIN_USART0_SCK
|
||||
///
|
||||
/// !USART1
|
||||
/// - PIN_USART1_RXD
|
||||
/// - PIN_USART1_TXD
|
||||
///
|
||||
/// !USART2
|
||||
/// - PIN_USART2_RXD
|
||||
/// - PIN_USART2_TXD
|
||||
///
|
||||
/// !SPI0
|
||||
/// - PIN_SPI0_MISO
|
||||
/// - PIN_SPI0_MOSI
|
||||
/// - PIN_SPI0_SPCK
|
||||
/// - PINS_SPI0
|
||||
/// - PIN_SPI0_NPCS0
|
||||
///
|
||||
/// !AC97
|
||||
/// - PINS_AC97
|
||||
///
|
||||
/// !PWMC
|
||||
/// - PIN_PWMC_PWM0
|
||||
/// - PIN_PWMC_PWM1
|
||||
/// - PIN_PWM_LED0
|
||||
/// - PIN_PWM_LED1
|
||||
/// - CHANNEL_PWM_LED0
|
||||
/// - CHANNEL_PWM_LED1
|
||||
///
|
||||
/// !ADC
|
||||
/// - PIN_ADC_ADC0
|
||||
/// - PIN_ADC_ADC1
|
||||
/// - PIN_ADC_ADC2
|
||||
/// - PIN_ADC_ADC3
|
||||
/// - PINS_ADC
|
||||
///
|
||||
/// !SSC
|
||||
/// - PINS_SSC_TX
|
||||
///
|
||||
/// !USB
|
||||
/// - PIN_USB_VBUS
|
||||
///
|
||||
/// !CAN
|
||||
/// - PIN_CAN_TRANSCEIVER_RS
|
||||
/// - PIN_CAN1_TRANSCEIVER_TXD
|
||||
/// - PIN_CAN1_TRANSCEIVER_RXD
|
||||
/// - PIN_CAN2_TRANSCEIVER_TXD
|
||||
/// - PIN_CAN2_TRANSCEIVER_RXD
|
||||
/// - PINS_CAN_TRANSCEIVER_TXD
|
||||
/// - PINS_CAN_TRANSCEIVER_RXD
|
||||
|
||||
/// !PCK
|
||||
/// - PIN_PCK0
|
||||
/// - PIN_PCK1
|
||||
/// - PIN_PCK2
|
||||
|
||||
/// List of all DBGU pin definitions.
|
||||
#define PINS_DBGU {(1<<30)|(1<<31), AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// LED #0 pin definition.
|
||||
#define PIN_LED_0 {AT91C_PIO_PA10, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_OUTPUT_0, PIO_DEFAULT}
|
||||
/// LED #1 pin definition.
|
||||
#define PIN_LED_1 {AT91C_PIO_PA11, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_OUTPUT_0, PIO_DEFAULT}
|
||||
/// LED #2 pin definition.
|
||||
#define PIN_LED_2 {AT91C_PIO_PC29, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_OUTPUT_0, PIO_DEFAULT}
|
||||
/// List of all LEDs definitions.
|
||||
#define PINS_LEDS PIN_LED_0, PIN_LED_1, PIN_LED_2
|
||||
|
||||
/// Keyboard rows ( scanning output )
|
||||
#define PIN_KEYBOARD_ROW0 {1 << 10, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_OUTPUT_0, PIO_DEFAULT}
|
||||
#define PIN_KEYBOARD_ROW1 {1 << 11, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_OUTPUT_0, PIO_DEFAULT}
|
||||
#define PIN_KEYBOARD_ROW2 {1 << 12, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_OUTPUT_0, PIO_DEFAULT}
|
||||
#define PIN_KEYBOARD_ROW3 {1 << 13, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_OUTPUT_0, PIO_DEFAULT}
|
||||
|
||||
#define PIN_KEYBOARD_COL0 {1 << 9, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_INPUT, PIO_PULLUP}
|
||||
#define PIN_KEYBOARD_COL1 {1 << 8, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_INPUT, PIO_PULLUP}
|
||||
#define PIN_KEYBOARD_COL2 {1 << 7, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_INPUT, PIO_PULLUP}
|
||||
#define PIN_KEYBOARD_COL3 {1 << 6, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_INPUT, PIO_PULLUP}
|
||||
|
||||
#define PINS_KEYBOARD_ROW PIN_KEYBOARD_ROW0, PIN_KEYBOARD_ROW1, PIN_KEYBOARD_ROW2, PIN_KEYBOARD_ROW3
|
||||
#define PINS_KEYBOARD_COL PIN_KEYBOARD_COL0, PIN_KEYBOARD_COL1, PIN_KEYBOARD_COL2, PIN_KEYBOARD_COL3
|
||||
|
||||
/// Push button #1 pin definition.
|
||||
#define PIN_PUSHBUTTON_1 PIN_KEYBOARD_COL0
|
||||
/// Push button #2 pin definition.
|
||||
#define PIN_PUSHBUTTON_2 PIN_KEYBOARD_COL1
|
||||
/// Push button #3 pin definition.
|
||||
#define PIN_PUSHBUTTON_3 PIN_KEYBOARD_COL2
|
||||
/// Push button #4 pin definition.
|
||||
#define PIN_PUSHBUTTON_4 PIN_KEYBOARD_COL3
|
||||
/// List of push button pin definitions.
|
||||
#define PINS_PUSHBUTTONS PIN_PUSHBUTTON_1, PIN_PUSHBUTTON_2, PIN_PUSHBUTTON_3, PIN_PUSHBUTTON_4
|
||||
/// Push button #1 index.
|
||||
#define PUSHBUTTON_BP1 0
|
||||
/// Push button #2 index.
|
||||
#define PUSHBUTTON_BP2 1
|
||||
/// Simulated joystick LEFT index.
|
||||
#define JOYSTICK_LEFT 0
|
||||
/// Simulated joystick RIGHT index.
|
||||
#define JOYSTICK_RIGHT 1
|
||||
/// Simulated joystick UP index.
|
||||
#define JOYSTICK_UP 2
|
||||
/// Simulated joystick DOWN index.
|
||||
#define JOYSTICK_DOWN 3
|
||||
|
||||
/// USART0 TXD pin definition.
|
||||
#define PIN_USART0_RXD {1 << 23, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// USART0 RXD pin definition.
|
||||
#define PIN_USART0_TXD {1 << 22, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// USART0 RTS pin definition.
|
||||
#define PIN_USART0_RTS {1 << 24, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// USART0 CTS pin definition.
|
||||
#define PIN_USART0_CTS {1 << 25, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// USART0 SCK pin definition.
|
||||
#define PIN_USART0_SCK {1 << 26, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// USART1 TXD pin definition.
|
||||
#define PIN_USART1_RXD {1 << 1, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// USART1 RXD pin definition.
|
||||
#define PIN_USART1_TXD {1 << 0, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// USART2 TXD pin definition.
|
||||
#define PIN_USART2_RXD {1 << 3, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// USART2 RXD pin definition.
|
||||
#define PIN_USART2_TXD {1 << 2, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// SPI MISO pin definition.
|
||||
#define PIN_SPI0_MISO {AT91C_PA0_SPI0_MISO, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_PULLUP}
|
||||
/// SPI MOSI pin definition.
|
||||
#define PIN_SPI0_MOSI {AT91C_PA1_SPI0_MOSI, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI SPCK pin definition.
|
||||
#define PIN_SPI0_SPCK {AT91C_PA2_SPI0_SPCK, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// List of SPI pin definitions (MISO, MOSI & SPCK).
|
||||
#define PINS_SPI0 PIN_SPI0_MISO, PIN_SPI0_MOSI, PIN_SPI0_SPCK
|
||||
/// SPI chip select 0 pin definition.
|
||||
#define PIN_SPI0_NPCS0 {AT91C_PA5_SPI0_NPCS0, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI chip select 1 pin definition.
|
||||
#define PIN_SPI0_NPCS1 {AT91C_PA3_SPI0_NPCS1, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI chip select 2 pin definition.
|
||||
#define PIN_SPI0_NPCS2 {AT91C_PA4_SPI0_NPCS2A, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI chip select 3 pin definition.
|
||||
#define PIN_SPI0_NPCS3 {AT91C_PD1_SPI0_NPCS3D, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
/// AC97 pins definition.
|
||||
#define PINS_AC97 {0x000003C0, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// PWMC PWM1 pin definition.
|
||||
#define PIN_PWMC_PWM1 {1 << 10, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// PWMC PWM2 pin definition.
|
||||
#define PIN_PWMC_PWM3 {1 << 11, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// PWM pin definition for LED0
|
||||
#define PIN_PWM_LED0 PIN_PWMC_PWM1
|
||||
/// PWM pin definition for LED1
|
||||
#define PIN_PWM_LED1 PIN_PWMC_PWM3
|
||||
/// PWM channel for LED0
|
||||
#define CHANNEL_PWM_LED0 1
|
||||
/// PWM channel for LED1
|
||||
#define CHANNEL_PWM_LED1 3
|
||||
|
||||
/// ADC_AD0 pin definition.
|
||||
#define PIN_ADC_ADC0 {AT91C_PB13_AD0, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD1 pin definition.
|
||||
#define PIN_ADC_ADC1 {AT91C_PB14_AD1, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD2 pin definition.
|
||||
#define PIN_ADC_ADC2 {AT91C_PB15_AD2, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD3 pin definition.
|
||||
#define PIN_ADC_ADC3 {AT91C_PB16_AD3, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD0 pin definition.
|
||||
#define PIN_ADC_ADC4 {AT91C_PB17_AD4, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD1 pin definition.
|
||||
#define PIN_ADC_ADC5 {AT91C_PB18_AD5, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD2 pin definition.
|
||||
#define PIN_ADC_ADC6 {AT91C_PB19_AD6, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD3 pin definition.
|
||||
#define PIN_ADC_ADC7 {AT91C_PB20_AD7, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// Pins ADC
|
||||
#define PINS_ADC PIN_ADC_ADC0, PIN_ADC_ADC1, PIN_ADC_ADC2, PIN_ADC_ADC3
|
||||
|
||||
/// SSC transmitter pins definition.
|
||||
#define PINS_SSC_TX { (1 << 0) | (1 << 1) | (1 << 2), \
|
||||
AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// USB VBus monitoring pin definition.
|
||||
#define PIN_USB_VBUS {1 << 31, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
|
||||
/// CAN Definition
|
||||
/// RS: Select input for high speed mode or silent mode
|
||||
#define PIN_CAN_TRANSCEIVER_RS {1<<12, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_OUTPUT_1, PIO_DEFAULT}
|
||||
|
||||
/// TXD: Transmit data input
|
||||
#define PIN_CAN1_TRANSCEIVER_TXD {1<<12, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// RXD: Receive data output
|
||||
#define PIN_CAN1_TRANSCEIVER_RXD {1<<13, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// TXD pins
|
||||
#define PINS_CAN_TRANSCEIVER_TXD PIN_CAN1_TRANSCEIVER_TXD
|
||||
/// RXD pins
|
||||
#define PINS_CAN_TRANSCEIVER_RXD PIN_CAN1_TRANSCEIVER_RXD
|
||||
|
||||
// PCK pins
|
||||
#define PIN_PCK0 {1 << 12, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
#define PIN_PCK1 {1 << 27, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
#define PIN_PCK1bis {1 << 10, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
#define PIN_PCK2 {1 << 15, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-DK - External components"
|
||||
/// This page lists the definitions related to external on-board components
|
||||
/// located in the board.h file for the AT91CAP9-DK.
|
||||
///
|
||||
/// !AT45 Dataflash
|
||||
/// - BOARD_AT45_A_SPI_BASE
|
||||
/// - BOARD_AT45_A_SPI_ID
|
||||
/// - BOARD_AT45_A_SPI_PINS
|
||||
/// - BOARD_AT45_A_SPI
|
||||
/// - BOARD_AT45_A_NPCS
|
||||
/// - BOARD_AT45_A_NPCS_PIN
|
||||
///
|
||||
/// !AT26 Serial Flash
|
||||
/// - BOARD_AT26_A_SPI_BASE
|
||||
/// - BOARD_AT26_A_SPI_ID
|
||||
/// - BOARD_AT26_A_SPI_PINS
|
||||
/// - BOARD_AT26_A_SPI
|
||||
/// - BOARD_AT26_A_NPCS
|
||||
/// - BOARD_AT26_A_NPCS_PIN
|
||||
///
|
||||
/// !LCD
|
||||
/// - PINS_LCD
|
||||
/// - BOARD_LCD_WIDTH
|
||||
/// - BOARD_LCD_HEIGHT
|
||||
/// - BOARD_LCD_BPP
|
||||
/// - BOARD_LCD_IFWIDTH
|
||||
/// - BOARD_LCD_FRAMESIZE_PIXELS
|
||||
/// - BOARD_LCD_FRAMESIZE
|
||||
/// - BOARD_LCD_FRAMERATE
|
||||
/// - BOARD_LCD_PIXELCLOCK
|
||||
/// - BOARD_LCD_DISPLAYTYPE
|
||||
/// - BOARD_LCD_POLARITY_INVVD
|
||||
/// - BOARD_LCD_POLARITY_INVFRAME
|
||||
/// - BOARD_LCD_POLARITY_INVLINE
|
||||
/// - BOARD_LCD_POLARITY_INVCLK
|
||||
/// - BOARD_LCD_POLARITY_INVDVAL
|
||||
/// - BOARD_LCD_CLOCKMODE
|
||||
/// - BOARD_LCD_TIMING_VFP
|
||||
/// - BOARD_LCD_TIMING_VBP
|
||||
/// - BOARD_LCD_TIMING_VPW
|
||||
/// - BOARD_LCD_TIMING_VHDLY
|
||||
/// - BOARD_LCD_TIMING_HFP
|
||||
/// - BOARD_LCD_TIMING_HBP
|
||||
/// - BOARD_LCD_TIMING_HPW
|
||||
///
|
||||
/// !TouchScreen
|
||||
/// - BOARD_TSC_ADS7843
|
||||
/// - PIN_TCS_IRQ
|
||||
/// - PIN_TCS_BUSY
|
||||
/// - BOARD_TSC_SPI_BASE
|
||||
/// - BOARD_TSC_SPI_ID
|
||||
/// - BOARD_TSC_SPI_PINS
|
||||
/// - BOARD_TSC_NPCS
|
||||
/// - BOARD_TSC_NPCS_PIN
|
||||
///
|
||||
/// !SD Card (MCI0)
|
||||
/// - BOARD_SD_MCI_BASE
|
||||
/// - BOARD_SD_MCI_ID
|
||||
/// - BOARD_SD_PINS
|
||||
/// - BOARD_SD_PIN_CD
|
||||
/// - BOARD_SD_SLOT
|
||||
///
|
||||
/// !SD Card (MCI1)
|
||||
/// - BOARD_SD_MCI1_BASE
|
||||
/// - BOARD_SD_MCI1_ID
|
||||
/// - BOARD_SD_MCI1_PINS
|
||||
/// - BOARD_SD_MCI1_PIN_CD
|
||||
/// - BOARD_SD_BOOT_MCISLOT
|
||||
///
|
||||
/// !SD Card SPI
|
||||
/// - BOARD_SD_SPI_BASE
|
||||
/// - BOARD_SD_SPI_ID
|
||||
/// - BOARD_SD_SPI_PINS
|
||||
/// - BOARD_SD_NPCS
|
||||
///
|
||||
/// !EMAC
|
||||
/// - BOARD_EMAC_PHY_ADDR
|
||||
/// - BOARD_EMAC_PHY_COMP_DM9161
|
||||
/// - BOARD_EMAC_POWER_ALWAYS_ON
|
||||
/// - BOARD_EMAC_MODE_RMII
|
||||
/// - BOARD_EMAC_PINS
|
||||
/// - BOARD_EMAC_PIN_RXDV
|
||||
/// - BOARD_EMAC_PIN_COL
|
||||
/// - BOARD_EMAC_RST_PINS
|
||||
///
|
||||
/// !UDA1342
|
||||
/// - BOARD_UDA1342_TWI_BASE
|
||||
/// - BOARD_UDA1342_TWI_ID
|
||||
/// - BOARD_UDA1342_TWI_PINS
|
||||
/// - BOARD_UDA1342_SSC_BASE
|
||||
/// - BOARD_UDA1342_SSC_ID
|
||||
/// - BOARD_UDA1342_SSC_PINS
|
||||
/// - BOARD_UDA1342_MCK_PIN
|
||||
/// - BOARD_UDA1342_SLAVE_ADDR
|
||||
///
|
||||
/// !ISI
|
||||
/// - BOARD_ISI_PIO_CNTRL1
|
||||
/// - BOARD_ISI_PIO_CNTRL2
|
||||
/// - BOARD_ISI_TWCK
|
||||
/// - BOARD_ISI_TWD
|
||||
/// - BOARD_ISI_MCK
|
||||
/// - BOARD_ISI_VSYNC
|
||||
/// - BOARD_ISI_HSYNC
|
||||
/// - BOARD_ISI_PCK
|
||||
/// - BOARD_ISI_PINS_DATA
|
||||
///
|
||||
/// !AT98SC
|
||||
/// - BOARD_AT98SC_SPI_BASE
|
||||
/// - BOARD_AT98SC_SPI_ID
|
||||
/// - BOARD_AT98SC_SPI_PINS
|
||||
/// - BOARD_AT98SC_NPCS
|
||||
/// - BOARD_AT98SC_NPCS_PIN
|
||||
|
||||
/// Base address of SPI peripheral connected to the dataflash.
|
||||
#define BOARD_AT45_A_SPI_BASE AT91C_BASE_SPI0
|
||||
/// Identifier of SPI peripheral connected to the dataflash.
|
||||
#define BOARD_AT45_A_SPI_ID AT91C_ID_SPI0
|
||||
/// Pins of the SPI peripheral connected to the dataflash.
|
||||
#define BOARD_AT45_A_SPI_PINS PINS_SPI0
|
||||
/// Dataflahs SPI number.
|
||||
#define BOARD_AT45_A_SPI 0
|
||||
/// Chip select connected to the dataflash.
|
||||
#define BOARD_AT45_A_NPCS 0
|
||||
/// Chip select pin connected to the dataflash.
|
||||
#define BOARD_AT45_A_NPCS_PIN PIN_SPI0_NPCS0
|
||||
|
||||
/// Base address of SPI peripheral connected to the serialflash.
|
||||
#define BOARD_AT26_A_SPI_BASE AT91C_BASE_SPI0
|
||||
/// Identifier of SPI peripheral connected to the serialflash.
|
||||
#define BOARD_AT26_A_SPI_ID AT91C_ID_SPI0
|
||||
/// Pins of the SPI peripheral connected to the serialflash.
|
||||
#define BOARD_AT26_A_SPI_PINS PINS_SPI0
|
||||
/// Serialflash SPI number.
|
||||
#define BOARD_AT26_A_SPI 0
|
||||
/// Chip select connected to the serialflash.
|
||||
#define BOARD_AT26_A_NPCS 0
|
||||
/// Chip select pin connected to the serialflash.
|
||||
#define BOARD_AT26_A_NPCS_PIN PIN_SPI0_NPCS0
|
||||
|
||||
/// LCD pin list.
|
||||
#define PINS_LCD \
|
||||
{0x00000200, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}, \
|
||||
{0x0FCFCFCE, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// Display width in pixels.
|
||||
#define BOARD_LCD_WIDTH 240
|
||||
/// Display height in pixels.
|
||||
#define BOARD_LCD_HEIGHT 320
|
||||
/// Display resolution in bits per pixel (bpp).
|
||||
#define BOARD_LCD_BPP AT91C_LCDC_PIXELSIZE_TWENTYFOURBITSPERPIXEL
|
||||
/// Display interface width in bits.
|
||||
#define BOARD_LCD_IFWIDTH 24
|
||||
/// Frame size in pixels (height * width * bpp).
|
||||
#define BOARD_LCD_FRAMESIZE_PIXELS (BOARD_LCD_WIDTH * BOARD_LCD_HEIGHT * 24)
|
||||
/// Frame size in words (height * width * bpp / 32)
|
||||
#define BOARD_LCD_FRAMESIZE (BOARD_LCD_FRAMESIZE_PIXELS / 32)
|
||||
/// Frame rate in Hz.
|
||||
#define BOARD_LCD_FRAMERATE 60
|
||||
/// Pixel clock rate in Hz (frameSize * frameRate / interfaceWidth).
|
||||
#define BOARD_LCD_PIXELCLOCK (BOARD_LCD_FRAMESIZE_PIXELS * BOARD_LCD_FRAMERATE / BOARD_LCD_IFWIDTH)
|
||||
/// LCD display type.
|
||||
#define BOARD_LCD_DISPLAYTYPE AT91C_LCDC_DISTYPE_TFT
|
||||
/// LCDC polarity.
|
||||
#define BOARD_LCD_POLARITY_INVVD AT91C_LCDC_INVVD_NORMALPOL
|
||||
/// LCDVSYNC polarity.
|
||||
#define BOARD_LCD_POLARITY_INVFRAME AT91C_LCDC_INVFRAME_NORMALPOL
|
||||
/// LCDHSYNC polarity.
|
||||
#define BOARD_LCD_POLARITY_INVLINE AT91C_LCDC_INVLINE_NORMALPOL
|
||||
/// LCDDOTCLK polarity.
|
||||
#define BOARD_LCD_POLARITY_INVCLK AT91C_LCDC_INVCLK_NORMALPOL
|
||||
/// LCDDEN polarity.
|
||||
#define BOARD_LCD_POLARITY_INVDVAL AT91C_LCDC_INVDVAL_NORMALPOL
|
||||
/// Pixel clock mode.
|
||||
#define BOARD_LCD_CLOCKMODE AT91C_LCDC_CLKMOD_ALWAYSACTIVE
|
||||
/// Vertical front porch in number of lines.
|
||||
#define BOARD_LCD_TIMING_VFP 2
|
||||
/// Vertical back porch in number of lines.
|
||||
#define BOARD_LCD_TIMING_VBP 4
|
||||
/// Vertical pulse width in LCDDOTCLK cycles.
|
||||
#define BOARD_LCD_TIMING_VPW 1
|
||||
/// Number of cycles between VSYNC edge and HSYNC rising edge.
|
||||
#define BOARD_LCD_TIMING_VHDLY 1
|
||||
/// Horizontal front porch in LCDDOTCLK cycles.
|
||||
#define BOARD_LCD_TIMING_HFP 11
|
||||
/// Horizontal back porch in LCDDOTCLK cycles.
|
||||
#define BOARD_LCD_TIMING_HBP 17
|
||||
/// Horizontal pulse width in LCDDOTCLK cycles.
|
||||
#define BOARD_LCD_TIMING_HPW 5
|
||||
|
||||
/// Indicates board has an ADS7843 external component to manage Touch Screen
|
||||
#define BOARD_TSC_ADS7843
|
||||
|
||||
/// Touchscreen controller IRQ pin definition.
|
||||
#define PIN_TCS_IRQ {AT91C_PIO_PC4, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_INPUT, PIO_PULLUP}
|
||||
/// Touchscreen controller Busy pin definition.
|
||||
#define PIN_TCS_BUSY {AT91C_PIO_PC5, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
|
||||
/// Base address of SPI peripheral connected to the touchscreen controller.
|
||||
#define BOARD_TSC_SPI_BASE AT91C_BASE_SPI0
|
||||
/// Identifier of SPI peripheral connected to the touchscreen controller.
|
||||
#define BOARD_TSC_SPI_ID AT91C_ID_SPI0
|
||||
/// Pins of the SPI peripheral connected to the touchscreen controller.
|
||||
#define BOARD_TSC_SPI_PINS PINS_SPI0
|
||||
/// Chip select connected to the touchscreen controller.
|
||||
#define BOARD_TSC_NPCS 3
|
||||
/// Chip select pin connected to the touchscreen controller.
|
||||
#define BOARD_TSC_NPCS_PIN PIN_SPI0_NPCS3
|
||||
|
||||
/// Base address of the MCI peripheral connected to the SD card.
|
||||
#define BOARD_SD_MCI_BASE AT91C_BASE_MCI0
|
||||
/// Peripheral identifier of the MCI connected to the SD card.
|
||||
#define BOARD_SD_MCI_ID AT91C_ID_MCI0
|
||||
/// MCI pins that shall be configured to access the SD card.
|
||||
#define BOARD_SD_PINS PINS_MCI
|
||||
/// MCI slot to which the SD card is connected to.
|
||||
#define BOARD_SD_SLOT MCI_SD_SLOTA
|
||||
/// SD card detection pin definition.
|
||||
#define BOARD_SD_PIN_CD {AT91C_PIO_PC20, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_INPUT, PIO_PULLUP}
|
||||
/// SD boot slot
|
||||
#define BOARD_SD_BOOT_MCISLOT 0
|
||||
|
||||
/// List of MCI pins definitions.
|
||||
#define PINS_MCI {0x0000003F, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// Base address of the MCI peripheral connected to the SD card.
|
||||
#define BOARD_SD_MCI1_BASE AT91C_BASE_MCI1
|
||||
/// Peripheral identifier of the MCI connected to the SD card.
|
||||
#define BOARD_SD_MCI1_ID AT91C_ID_MCI1
|
||||
/// MCI pins that shall be configured to access the SD card.
|
||||
#define BOARD_SD_MCI1_PINS PINS_MCI1
|
||||
/// Second MCI slot to which the SD card is connected to.
|
||||
#define BOARD_SD_MCI1_SLOT MCI_SD_SLOTA
|
||||
/// SD card detection pin definition.
|
||||
#define BOARD_SD_MCI1_PIN_CD {AT91C_PIO_PC21, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_INPUT, PIO_PULLUP}
|
||||
|
||||
/// List of MCI pins definitions.
|
||||
#define PINS_MCI1 {0x003F0000, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// Base address of the SPI peripheral connected to the SD card.
|
||||
#define BOARD_SD_SPI_BASE AT91C_BASE_SPI0
|
||||
/// Identifier of the SPI peripheral connected to the SD card.
|
||||
#define BOARD_SD_SPI_ID AT91C_ID_SPI0
|
||||
/// List of pins to configure to access the SD card
|
||||
#define BOARD_SD_SPI_PINS PINS_SPI0, PIN_SPI0_NPCS0
|
||||
/// NPCS number
|
||||
#define BOARD_SD_NPCS 0
|
||||
|
||||
/// TWI0 pins definition.
|
||||
#define PINS_TWI {(1<<4) | (1<<5), AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
|
||||
/// PHY address
|
||||
#define BOARD_EMAC_PHY_ADDR 0
|
||||
/// PHY Component
|
||||
#define BOARD_EMAC_PHY_COMP_DM9161 1
|
||||
/// Board EMAC power control - ALWAYS ON
|
||||
#define BOARD_EMAC_POWER_ALWAYS_ON
|
||||
/// Board EMAC work mode - RMII/MII ( 1 / 0 )
|
||||
#define BOARD_EMAC_MODE_RMII 1
|
||||
|
||||
/// The PIN list of PIO for EMAC
|
||||
#define BOARD_EMAC_PINS {0x7FE00000, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}, \
|
||||
{0x0FF00000, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
#define BOARD_EMAC_PIN_RXDV {(1<<22), AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
#define BOARD_EMAC_PIN_COL {(1<<26), AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// The PIN Configure list for EMAC on power up reset (MII)
|
||||
#define BOARD_EMAC_RST_PINS BOARD_EMAC_PIN_RXDV, BOARD_EMAC_PIN_COL
|
||||
/// The runtime pin configure list for EMAC
|
||||
#define BOARD_EMAC_RUN_PINS BOARD_EMAC_PINS
|
||||
|
||||
/// UDA1342
|
||||
#define BOARD_UDA1342_TWI_BASE AT91C_BASE_TWI
|
||||
#define BOARD_UDA1342_TWI_ID AT91C_ID_TWI
|
||||
#define BOARD_UDA1342_TWI_PINS PINS_TWI
|
||||
#define BOARD_UDA1342_SSC_BASE AT91C_BASE_SSC0
|
||||
#define BOARD_UDA1342_SSC_ID AT91C_ID_SSC0
|
||||
#define BOARD_UDA1342_SSC_PINS PINS_SSC_TX
|
||||
#define BOARD_UDA1342_MCK_PIN PIN_PCK1bis
|
||||
#define BOARD_UDA1342_SLAVE_ADDR 0x1A
|
||||
|
||||
/// ISI
|
||||
#define BOARD_CAPTOR_OV9650
|
||||
#define BOARD_ISI_PIO_CTRL1 {(1<<14), AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_OUTPUT_0, PIO_DEFAULT}
|
||||
#define BOARD_ISI_PIO_CTRL2 {(1<<15), AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_OUTPUT_0, PIO_DEFAULT}
|
||||
#define BOARD_ISI_TWCK {(1<<5), AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
#define BOARD_ISI_TWD {(1<<4), AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
// PCK1 use instead of ISI_MCK
|
||||
#define BOARD_ISI_MCK {(1<<27), AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
#define BOARD_ISI_VSYNC {(1<<26), AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
#define BOARD_ISI_HSYNC {(1<<25), AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
#define BOARD_ISI_PCK {(1<<24), AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
#define BOARD_ISI_PINS_DATA {(1<<16)|(1<<17)|(1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|\
|
||||
(1<<23)|(1<<28)|(1<<29)|(1<<30)|(1<<31),\
|
||||
AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
/// Base address of SPI peripheral connected to the AT98 secure chip.
|
||||
#define BOARD_AT98SC_SPI_BASE AT91C_BASE_SPI0
|
||||
/// Identifier of SPI peripheral connected to the AT98 secure chip.
|
||||
#define BOARD_AT98SC_SPI_ID AT91C_ID_SPI0
|
||||
/// Pins of the SPI peripheral connected to the AT98 secure chip.
|
||||
#define BOARD_AT98SC_SPI_PINS PINS_SPI0
|
||||
/// Chip select connected to the AT98 secure chip.
|
||||
#define BOARD_AT98SC_NPCS 0
|
||||
/// Chip select pin connected to the AT98 secure chip.
|
||||
#define BOARD_AT98SC_NPCS_PIN PIN_SPI0_NPCS0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-DK - Memories"
|
||||
/// This page lists definitions related to external on-board memories.
|
||||
///
|
||||
/// !SDRAM
|
||||
/// - BOARD_SDRAM_SIZE
|
||||
/// - PINS_SDRAM
|
||||
/// - BOARD_SDRAM_BUSWIDTH
|
||||
///
|
||||
/// !DDRAM
|
||||
/// - BOARD_DDRAM_SIZE
|
||||
/// - BOARD_DDRAM_BUSWIDTH
|
||||
///
|
||||
/// !BCRAM
|
||||
/// - BOARD_BCRAM_SIZE
|
||||
/// - BOARD_BCRAM_BUSWIDTH
|
||||
///
|
||||
/// !Nandflash
|
||||
/// - PINS_NANDFLASH
|
||||
/// - BOARD_NF_CE_PIN
|
||||
/// - BOARD_NF_RB_PIN
|
||||
/// - BOARD_NF_COMMAND_ADDR
|
||||
/// - BOARD_NF_ADDRESS_ADDR
|
||||
/// - BOARD_NF_DATA_ADDR
|
||||
///
|
||||
/// !NorFlash
|
||||
/// - BOARD_NORFLASH_ADDR
|
||||
/// - BOARD_NORFLASH_DFT_BUS_SIZE
|
||||
|
||||
/// Board SDRAM size
|
||||
#define BOARD_SDRAM_SIZE (64*1024*1024) // with AT91CAP-MEM33 extension
|
||||
/// List of all SDRAM pins definitions.
|
||||
#define PINS_SDRAM {0xFFFF0000, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// SDRAM bus width.
|
||||
#define BOARD_SDRAM_BUSWIDTH 32
|
||||
|
||||
/// Board DDRAM size
|
||||
#define BOARD_DDRAM_SIZE (32*1024*1024) // with AT91CAP-MEM18 extension
|
||||
/// DDRAM bus width.
|
||||
#define BOARD_DDRAM_BUSWIDTH 16
|
||||
|
||||
/// Board BCRAM size
|
||||
#define BOARD_BCRAM_SIZE (16*1024*1024) // with AT91CAP-MEM18 extension
|
||||
/// BCRAM bus width.
|
||||
#define BOARD_BCRAM_BUSWIDTH 16
|
||||
|
||||
/// Nandflash controller peripheral pins definition.
|
||||
#define PINS_NANDFLASH BOARD_NF_CE_PIN
|
||||
/// Nandflash output enable pin definition.
|
||||
//#define PIN_NF_OE // => dedicated pin
|
||||
/// Nandflash write enable pin definition
|
||||
//#define PIN_NF_WE // => dedicated pin
|
||||
/// Nandflash chip enable pin definition.
|
||||
#define BOARD_NF_CE_PIN {1 << 15, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_OUTPUT_1, PIO_DEFAULT}
|
||||
/// Nandflash ready/busy pin definition.
|
||||
#define BOARD_NF_RB_PIN { 0, 0, 0, 0, 0}// Not used on the DK board. Use Read Status Register Command
|
||||
/// Address for transferring command bytes to the nandflash.
|
||||
#define BOARD_NF_COMMAND_ADDR 0x40400000
|
||||
/// Address for transferring address bytes to the nandflash.
|
||||
#define BOARD_NF_ADDRESS_ADDR 0x40200000
|
||||
/// Address for transferring data bytes to the nandflash.
|
||||
#define BOARD_NF_DATA_ADDR 0x40000000
|
||||
|
||||
/// Address for transferring command bytes to the norflash.
|
||||
#define BOARD_NORFLASH_ADDR 0x10000000
|
||||
/// Dafult Nor bus size after power reser
|
||||
#define BOARD_NORFLASH_DFT_BUS_SIZE 16
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Library naming workaround
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/// Source type definition
|
||||
#define AIC_SRCTYPE AT91C_AIC_SRCTYPE_EXT_HIGH_LEVEL
|
||||
|
||||
#define AT91C_EBI_DDRAM (AT91_CAST(char *) 0x70000000) // DDRAM on EBI Chip Select 6 base address
|
||||
#define AT91C_EBI_DDRAM_SIZE (16*1024*1024) // DDRAM on EBI Chip Select 6 size in byte (262144 Kbytes)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-DK - Individual chip definition"
|
||||
/// This page lists the definitions related to different chip's definition
|
||||
/// located in the board.h file for the AT91CAP9-DK
|
||||
|
||||
/// Twi define
|
||||
#define BOARD_ID_TWI_EEPROM AT91C_ID_TWI
|
||||
#define BOARD_BASE_TWI_EEPROM AT91C_BASE_TWI
|
||||
#define BOARD_PINS_TWI_EEPROM PINS_TWI
|
||||
|
||||
/// USART
|
||||
#define BOARD_PIN_USART_RXD PIN_USART0_RXD
|
||||
#define BOARD_PIN_USART_TXD PIN_USART0_TXD
|
||||
#define BOARD_PIN_USART_CTS PIN_USART0_CTS
|
||||
#define BOARD_PIN_USART_RTS PIN_USART0_RTS
|
||||
#define BOARD_USART_BASE AT91C_BASE_US0
|
||||
#define BOARD_ID_USART AT91C_ID_US0
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#endif //#ifndef BOARD_H
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
# ----------------------------------------------------------------------------
|
||||
# ATMEL Microcontroller Software Support
|
||||
# ----------------------------------------------------------------------------
|
||||
# Copyright (c) 2008, Atmel Corporation
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the disclaimer below.
|
||||
#
|
||||
# Atmel's name may not be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# Defines which are the available memory targets for the AT91CAP9-DK board.
|
||||
|
||||
MEMORIES = sram sdram ddram bcram
|
||||
|
|
@ -0,0 +1,191 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define IRQ_STACK_SIZE 8*3*4
|
||||
|
||||
#define ARM_MODE_ABT 0x17
|
||||
#define ARM_MODE_FIQ 0x11
|
||||
#define ARM_MODE_IRQ 0x12
|
||||
#define ARM_MODE_SVC 0x13
|
||||
|
||||
#define I_BIT 0x80
|
||||
#define F_BIT 0x40
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Startup routine
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
.align 4
|
||||
.arm
|
||||
|
||||
/* Exception vectors
|
||||
*******************/
|
||||
.section .vectors, "a", %progbits
|
||||
|
||||
resetVector:
|
||||
ldr pc, =resetHandler /* Reset */
|
||||
undefVector:
|
||||
b undefVector /* Undefined instruction */
|
||||
swiVector:
|
||||
b swiVector /* Software interrupt */
|
||||
prefetchAbortVector:
|
||||
b prefetchAbortVector /* Prefetch abort */
|
||||
dataAbortVector:
|
||||
b dataAbortVector /* Data abort */
|
||||
reservedVector:
|
||||
b reservedVector /* Reserved for future use */
|
||||
irqVector:
|
||||
b irqHandler /* Interrupt */
|
||||
fiqVector:
|
||||
/* Fast interrupt */
|
||||
//------------------------------------------------------------------------------
|
||||
/// Handles a fast interrupt request by branching to the address defined in the
|
||||
/// AIC.
|
||||
//------------------------------------------------------------------------------
|
||||
fiqHandler:
|
||||
b fiqHandler
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Handles incoming interrupt requests by branching to the corresponding
|
||||
/// handler, as defined in the AIC. Supports interrupt nesting.
|
||||
//------------------------------------------------------------------------------
|
||||
irqHandler:
|
||||
|
||||
/* Save interrupt context on the stack to allow nesting */
|
||||
sub lr, lr, #4
|
||||
stmfd sp!, {lr}
|
||||
mrs lr, SPSR
|
||||
stmfd sp!, {r0, lr}
|
||||
|
||||
/* Write in the IVR to support Protect Mode */
|
||||
ldr lr, =AT91C_BASE_AIC
|
||||
ldr r0, [lr, #AIC_IVR]
|
||||
str lr, [lr, #AIC_IVR]
|
||||
|
||||
/* Branch to interrupt handler in Supervisor mode */
|
||||
msr CPSR_c, #ARM_MODE_SVC
|
||||
stmfd sp!, {r1-r3, r4, r12, lr}
|
||||
blx r0
|
||||
|
||||
/* Restore scratch/used registers and LR from User Stack */
|
||||
/* Disable Interrupt and switch back in IRQ mode */
|
||||
ldmia sp!, {r1-r3, r4, r12, lr}
|
||||
msr CPSR_c, #ARM_MODE_IRQ | I_BIT
|
||||
|
||||
/* Acknowledge interrupt */
|
||||
ldr lr, =AT91C_BASE_AIC
|
||||
str lr, [lr, #AIC_EOICR]
|
||||
|
||||
/* Restore interrupt context and branch back to calling code */
|
||||
ldmia sp!, {r0, lr}
|
||||
msr SPSR_cxsf, lr
|
||||
ldmia sp!, {pc}^
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initializes the chip and branches to the main() function.
|
||||
//------------------------------------------------------------------------------
|
||||
.section .text
|
||||
.global entry
|
||||
|
||||
entry:
|
||||
resetHandler:
|
||||
|
||||
/* Useless instruction for referencing the .vectors section */
|
||||
ldr r0, =resetVector
|
||||
|
||||
/* Set pc to actual code location (i.e. not in remap zone) */
|
||||
ldr pc, =1f
|
||||
|
||||
/* Initialize the prerelocate segment */
|
||||
1:
|
||||
ldr r0, =_efixed
|
||||
ldr r1, =_sprerelocate
|
||||
ldr r2, =_eprerelocate
|
||||
1:
|
||||
cmp r1, r2
|
||||
ldrcc r3, [r0], #4
|
||||
strcc r3, [r1], #4
|
||||
bcc 1b
|
||||
|
||||
/* Perform low-level initialization of the chip using LowLevelInit() */
|
||||
ldr sp, =_sstack
|
||||
stmfd sp!, {r0}
|
||||
ldr r0, =LowLevelInit
|
||||
blx r0
|
||||
|
||||
/* Initialize the postrelocate segment */
|
||||
|
||||
ldmfd sp!, {r0}
|
||||
ldr r1, =_spostrelocate
|
||||
ldr r2, =_epostrelocate
|
||||
1:
|
||||
cmp r1, r2
|
||||
ldrcc r3, [r0], #4
|
||||
strcc r3, [r1], #4
|
||||
bcc 1b
|
||||
|
||||
/* Clear the zero segment */
|
||||
ldr r0, =_szero
|
||||
ldr r1, =_ezero
|
||||
mov r2, #0
|
||||
1:
|
||||
cmp r0, r1
|
||||
strcc r2, [r0], #4
|
||||
bcc 1b
|
||||
|
||||
/* Setup stacks
|
||||
**************/
|
||||
/* IRQ mode */
|
||||
msr CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT
|
||||
ldr sp, =_sstack
|
||||
sub r4, sp, #IRQ_STACK_SIZE
|
||||
|
||||
/* Supervisor mode (interrupts enabled) */
|
||||
msr CPSR_c, #ARM_MODE_SVC | F_BIT
|
||||
mov sp, r4
|
||||
|
||||
/* Branch to main()
|
||||
******************/
|
||||
ldr r0, =main
|
||||
blx r0
|
||||
|
||||
/* Loop indefinitely when program is finished */
|
||||
1:
|
||||
b 1b
|
||||
|
|
@ -0,0 +1,177 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
IAR startup file for AT91SAM9RL microcontrollers.
|
||||
*/
|
||||
|
||||
MODULE ?cstartup
|
||||
|
||||
;; Forward declaration of sections.
|
||||
SECTION IRQ_STACK:DATA:NOROOT(2)
|
||||
SECTION CSTACK:DATA:NOROOT(3)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define __ASSEMBLY__
|
||||
#include "board.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define ARM_MODE_ABT 0x17
|
||||
#define ARM_MODE_FIQ 0x11
|
||||
#define ARM_MODE_IRQ 0x12
|
||||
#define ARM_MODE_SVC 0x13
|
||||
#define ARM_MODE_SYS 0x1F
|
||||
|
||||
#define I_BIT 0x80
|
||||
#define F_BIT 0x40
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Startup routine
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Exception vectors
|
||||
*/
|
||||
SECTION .vectors:CODE:NOROOT(2)
|
||||
|
||||
PUBLIC resetVector
|
||||
PUBLIC irqHandler
|
||||
|
||||
EXTERN Undefined_Handler
|
||||
EXTERN SWI_Handler
|
||||
EXTERN Prefetch_Handler
|
||||
EXTERN Abort_Handler
|
||||
EXTERN FIQ_Handler
|
||||
|
||||
ARM
|
||||
|
||||
__iar_init$$done: ; The interrupt vector is not needed
|
||||
; until after copy initialization is done
|
||||
|
||||
resetVector:
|
||||
; All default exception handlers (except reset) are
|
||||
; defined as weak symbol definitions.
|
||||
; If a handler is defined by the application it will take precedence.
|
||||
LDR pc, =resetHandler ; Reset
|
||||
LDR pc, Undefined_Addr ; Undefined instructions
|
||||
LDR pc, SWI_Addr ; Software interrupt (SWI/SYS)
|
||||
LDR pc, Prefetch_Addr ; Prefetch abort
|
||||
LDR pc, Abort_Addr ; Data abort
|
||||
B . ; RESERVED
|
||||
LDR pc, =irqHandler ; IRQ
|
||||
LDR pc, FIQ_Addr ; FIQ
|
||||
|
||||
Undefined_Addr: DCD Undefined_Handler
|
||||
SWI_Addr: DCD SWI_Handler
|
||||
Prefetch_Addr: DCD Prefetch_Handler
|
||||
Abort_Addr: DCD Abort_Handler
|
||||
FIQ_Addr: DCD FIQ_Handler
|
||||
|
||||
/*
|
||||
Handles incoming interrupt requests by branching to the corresponding
|
||||
handler, as defined in the AIC. Supports interrupt nesting.
|
||||
*/
|
||||
irqHandler:
|
||||
/* Save interrupt context on the stack to allow nesting */
|
||||
SUB lr, lr, #4
|
||||
STMFD sp!, {lr}
|
||||
MRS lr, SPSR
|
||||
STMFD sp!, {r0, lr}
|
||||
|
||||
/* Write in the IVR to support Protect Mode */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
LDR r0, [r14, #AIC_IVR]
|
||||
STR lr, [r14, #AIC_IVR]
|
||||
|
||||
/* Branch to interrupt handler in Supervisor mode */
|
||||
MSR CPSR_c, #ARM_MODE_SYS
|
||||
STMFD sp!, {r1-r3, r4, r12, lr}
|
||||
BLX r0
|
||||
LDMIA sp!, {r1-r3, r4, r12, lr}
|
||||
MSR CPSR_c, #ARM_MODE_IRQ | I_BIT
|
||||
|
||||
/* Acknowledge interrupt */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
STR lr, [r14, #AIC_EOICR]
|
||||
|
||||
/* Restore interrupt context and branch back to calling code */
|
||||
LDMIA sp!, {r0, lr}
|
||||
MSR SPSR_cxsf, lr
|
||||
LDMIA sp!, {pc}^
|
||||
|
||||
|
||||
/*
|
||||
After a reset, execution starts here, the mode is ARM, supervisor
|
||||
with interrupts disabled.
|
||||
Initializes the chip and branches to the main() function.
|
||||
*/
|
||||
SECTION .cstartup:CODE:NOROOT(2)
|
||||
|
||||
PUBLIC resetHandler
|
||||
EXTERN LowLevelInit
|
||||
EXTERN ?main
|
||||
REQUIRE resetVector
|
||||
ARM
|
||||
|
||||
resetHandler:
|
||||
|
||||
/* Set pc to actual code location (i.e. not in remap zone) */
|
||||
LDR pc, =label
|
||||
|
||||
/* Perform low-level initialization of the chip using LowLevelInit() */
|
||||
label:
|
||||
LDR r0, =LowLevelInit
|
||||
LDR r4, =SFE(CSTACK)
|
||||
MOV sp, r4
|
||||
BLX r0
|
||||
|
||||
/* Set up the interrupt stack pointer. */
|
||||
MSR cpsr_c, #ARM_MODE_IRQ | I_BIT | F_BIT ; Change the mode
|
||||
LDR sp, =SFE(IRQ_STACK)
|
||||
|
||||
/* Set up the SYS stack pointer. */
|
||||
MSR cpsr_c, #ARM_MODE_SYS | F_BIT ; Change the mode
|
||||
LDR sp, =SFE(CSTACK)
|
||||
|
||||
/* Branch to main() */
|
||||
LDR r0, =?main
|
||||
BLX r0
|
||||
|
||||
/* Loop indefinitely when program is finished */
|
||||
loop4:
|
||||
B loop4
|
||||
|
||||
END
|
||||
|
|
@ -0,0 +1,208 @@
|
|||
; * ----------------------------------------------------------------------------
|
||||
; * ATMEL Microcontroller Software Support
|
||||
; * ----------------------------------------------------------------------------
|
||||
; * Copyright (c) 2008, Atmel Corporation
|
||||
; *
|
||||
; * All rights reserved.
|
||||
; *
|
||||
; * Redistribution and use in source and binary forms, with or without
|
||||
; * modification, are permitted provided that the following conditions are met:
|
||||
; *
|
||||
; * - Redistributions of source code must retain the above copyright notice,
|
||||
; * this list of conditions and the disclaimer below.
|
||||
; *
|
||||
; * Atmel's name may not be used to endorse or promote products derived from
|
||||
; * this software without specific prior written permission.
|
||||
; *
|
||||
; * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
; * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
; * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
; * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
; * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
; * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
; * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
; * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
; * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
; * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
; * ----------------------------------------------------------------------------
|
||||
|
||||
|
||||
; KEIL startup file for AT91SAMCAP9 microcontrollers.
|
||||
|
||||
; ------------------------------------------------------------------------------
|
||||
; Definitions
|
||||
; ------------------------------------------------------------------------------
|
||||
|
||||
; Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs
|
||||
|
||||
ARM_MODE_USR EQU 0x10
|
||||
ARM_MODE_FIQ EQU 0x11
|
||||
ARM_MODE_IRQ EQU 0x12
|
||||
ARM_MODE_SVC EQU 0x13
|
||||
ARM_MODE_ABT EQU 0x17
|
||||
ARM_MODE_UND EQU 0x1B
|
||||
ARM_MODE_SYS EQU 0x1F
|
||||
|
||||
I_BIT EQU 0x80 ; when I bit is set, IRQ is disabled
|
||||
F_BIT EQU 0x40 ; when F bit is set, FIQ is disabled
|
||||
|
||||
AT91C_BASE_AIC EQU 0xFFFFF000
|
||||
AIC_IVR EQU 0x100
|
||||
AIC_EOICR EQU 0x130
|
||||
|
||||
UND_Stack_Size EQU 0x00000000
|
||||
SVC_Stack_Size EQU 0x00000100
|
||||
ABT_Stack_Size EQU 0x00000000
|
||||
FIQ_Stack_Size EQU 0x00000000
|
||||
IRQ_Stack_Size EQU 0x00000080
|
||||
USR_Stack_Size EQU 0x00000400
|
||||
|
||||
PRESERVE8
|
||||
|
||||
; Area Definition and Entry Point
|
||||
; Startup Code must be linked first at Address at which it expects to run.
|
||||
|
||||
AREA VECTOR, CODE
|
||||
ARM
|
||||
|
||||
; Exception Vectors
|
||||
|
||||
Vectors
|
||||
LDR pc,=resetHandler
|
||||
undefVector
|
||||
b undefVector ; Undefined instruction
|
||||
swiVector
|
||||
b swiVector ; Software interrupt
|
||||
prefetchAbortVector
|
||||
b prefetchAbortVector ; Prefetch abort
|
||||
dataAbortVector
|
||||
b dataAbortVector ; Data abort
|
||||
reservedVector
|
||||
b reservedVector ; Reserved for future use
|
||||
irqVector
|
||||
b irqHandler ; Interrupt
|
||||
fiqVector
|
||||
; Fast interrupt
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; Handles a fast interrupt request by branching to the address defined in the
|
||||
; AIC.
|
||||
;------------------------------------------------------------------------------
|
||||
fiqHandler
|
||||
b fiqHandler
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; Handles incoming interrupt requests by branching to the corresponding
|
||||
; handler, as defined in the AIC. Supports interrupt nesting.
|
||||
;------------------------------------------------------------------------------
|
||||
irqHandler
|
||||
; Save interrupt context on the stack to allow nesting */
|
||||
SUB lr, lr, #4
|
||||
STMFD sp!, {lr}
|
||||
MRS lr, SPSR
|
||||
STMFD sp!, {r0,r1,lr}
|
||||
|
||||
; Write in the IVR to support Protect Mode */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
LDR r0, [r14, #AIC_IVR]
|
||||
STR lr, [r14, #AIC_IVR]
|
||||
|
||||
; Branch to interrupt handler in Supervisor mode */
|
||||
MSR CPSR_c, #ARM_MODE_SVC
|
||||
STMFD sp!, {r1-r4, r12, lr}
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
LDMIA sp!, {r1-r4, r12, lr}
|
||||
MSR CPSR_c, #ARM_MODE_IRQ | I_BIT
|
||||
|
||||
; Acknowledge interrupt */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
STR lr, [r14, #AIC_EOICR]
|
||||
|
||||
; Restore interrupt context and branch back to calling code
|
||||
LDMIA sp!, {r0,r1,lr}
|
||||
MSR SPSR_cxsf, lr
|
||||
LDMIA sp!, {pc}^
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; After a reset, execution starts here, the mode is ARM, supervisor
|
||||
; with interrupts disabled.
|
||||
; Initializes the chip and branches to the main() function.
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
AREA cstartup, CODE
|
||||
ENTRY ; Entry point for the application
|
||||
|
||||
|
||||
; Reset Handler
|
||||
|
||||
EXPORT resetHandler
|
||||
IMPORT |Image$$Fixed_region$$Limit|
|
||||
IMPORT |Image$$Relocate_region$$Base|
|
||||
IMPORT |Image$$Relocate_region$$ZI$$Base|
|
||||
IMPORT |Image$$Relocate_region$$ZI$$Limit|
|
||||
IMPORT |Image$$ARM_LIB_STACK$$Base|
|
||||
IMPORT |Image$$ARM_LIB_STACK$$ZI$$Limit|
|
||||
|
||||
; Perform low-level initialization of the chip using LowLevelInit()
|
||||
IMPORT LowLevelInit
|
||||
|
||||
resetHandler
|
||||
|
||||
; Set pc to actual code location (i.e. not in remap zone)
|
||||
LDR pc, =label
|
||||
label
|
||||
; Set up temporary stack (Top of the SRAM)
|
||||
LDR r0, = |Image$$ARM_LIB_STACK$$ZI$$Limit|
|
||||
MOV sp, r0
|
||||
; Call Low level init
|
||||
LDR r0, =LowLevelInit
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
|
||||
|
||||
;Initialize the Relocate_region segment
|
||||
LDR r0, = |Image$$Fixed_region$$Limit|
|
||||
LDR r1, = |Image$$Relocate_region$$Base|
|
||||
LDR r3, = |Image$$Relocate_region$$ZI$$Base|
|
||||
|
||||
CMP r0, r1
|
||||
BEQ %1
|
||||
|
||||
|
||||
; Copy init data
|
||||
0 CMP r1, r3
|
||||
LDRCC r2, [r0], #4
|
||||
STRCC r2, [r1], #4
|
||||
BCC %0
|
||||
|
||||
1 LDR r1, =|Image$$Relocate_region$$ZI$$Limit|
|
||||
MOV r2, #0
|
||||
2 CMP r3, r1
|
||||
STRCC r2, [r3], #4
|
||||
BCC %2
|
||||
|
||||
|
||||
; Setup Stack for each mode
|
||||
|
||||
LDR R0, = |Image$$ARM_LIB_STACK$$ZI$$Limit|
|
||||
|
||||
; Enter IRQ Mode and set its Stack Pointer
|
||||
MSR CPSR_c, #ARM_MODE_IRQ:OR:I_BIT:OR:F_BIT
|
||||
MOV SP, R0
|
||||
SUB R4, SP, #IRQ_Stack_Size
|
||||
|
||||
; Supervisor mode (interrupts enabled)
|
||||
MSR CPSR_c, #ARM_MODE_SVC | F_BIT
|
||||
MOV SP, R4
|
||||
|
||||
; Enter the C code
|
||||
|
||||
IMPORT __main
|
||||
LDR R0, =__main
|
||||
BX R0
|
||||
loop4
|
||||
B loop4
|
||||
|
||||
END
|
||||
|
|
@ -0,0 +1,483 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
Title: FPGA / CAP synchronization routines
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
#include <board.h>
|
||||
#include <rtt/rtt.h>
|
||||
#include <slck/slck.h>
|
||||
#include <pio/pio.h>
|
||||
#include <utility/trace.h>
|
||||
#include "board_fpga_init.h"
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA Config done on PC13 (CAP9S3-DKZ only)
|
||||
//------------------------------------------------------------------------------
|
||||
#define PIN_FPGA_CONFDONE {1 << 13, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEGLITCH}
|
||||
static const Pin pinPC13 = PIN_FPGA_CONFDONE;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Prototype of internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int fpga_synchro_newIF(void);
|
||||
unsigned int init_mpblock_revC(unsigned char mode);
|
||||
unsigned int fpga_synchro_revC(void);
|
||||
void init_mpbs_revC(volatile unsigned int* mpbs,char pun,char lp,char sup);
|
||||
unsigned int init_mpblock_revB(void);
|
||||
unsigned int fpga_synchro_revB(void);
|
||||
void init_mpbs_revB(volatile unsigned int* mpbs,char pun,char lp,char sup);
|
||||
void wait_slck_periods(int periods);
|
||||
void wait_for_FPGA_config(void);
|
||||
void wait_for_FPGA_config_CAP9S3(void);
|
||||
unsigned int search_last_match(void);
|
||||
unsigned int search_first_match(void);
|
||||
int fpga_pattern_ok(void);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Globlal variables
|
||||
//------------------------------------------------------------------------------
|
||||
int delay_status, master_cnt_hold, master_cnt;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA access initialization
|
||||
// Returns : programmed clk out delay if success
|
||||
// error code with pattern CACAB0Fx if fail
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int BOARD_InitMPBlock(unsigned char mode)
|
||||
{
|
||||
// Switch to external 32KHz if not done
|
||||
if(!SLCK_Is32k())SLCK_RCto32k();
|
||||
|
||||
// Wait 1 second
|
||||
wait_slck_periods(32768);
|
||||
|
||||
if (!(RSTC_SR_REG&0x00000600)){
|
||||
wait_for_FPGA_config_CAP9S3(); // if POR, wait until FPGA is ready
|
||||
}
|
||||
|
||||
if(CAP9_CHECK_REVISION_REG == REV_B_CHECK_VALUE) {
|
||||
TRACE_INFO("Init MPBlock rev B\n\r");
|
||||
return(init_mpblock_revB()); // CAP9 revB detected
|
||||
}
|
||||
else {
|
||||
if(EXTENDED_CHIP_ID_REG) {
|
||||
TRACE_INFO("No init MPBlock : it is not a dev chip\n\r");
|
||||
return(NOT_A_DEV_CHIP_ERROR); // not a dev chip
|
||||
}
|
||||
else {
|
||||
TRACE_INFO("Init MPBlock rev C\n\r");
|
||||
return(init_mpblock_revC(mode)); // CAP9 revC detected
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// CAP9 / FPGA synchronization loop - CAP9 RevC / new interface
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int fpga_synchro_newIF (void)
|
||||
{
|
||||
unsigned int time = 0;
|
||||
unsigned int wait_loop1;
|
||||
unsigned int wait_loop2;
|
||||
unsigned int wait_loop3;
|
||||
unsigned int delay_ctrl, clkin_delay, clkin_delay_max,dw_width;
|
||||
|
||||
|
||||
//-- Write in CONFIG_INIT register
|
||||
//-- - dllin_used bit = 0 (used clock coming from FPGA)
|
||||
//-- - dllout_used bit = 0 (bypass the DelayLine OUT)
|
||||
//-- - drive_pad_by_sfr = - (drive pad by register)
|
||||
CONFIG_INIT_REG &= 0xFFFFFE7F; //outi(0xFDF00000+0x28, (ini(0xFDF00000+0x28) & 0xFFFFFE7F));
|
||||
|
||||
// clk_in setup
|
||||
delay_status = DELAY_STATUS_REG; //-- read in DELAY_STATUS register
|
||||
master_cnt_hold = ((delay_status & 0xFF00) >> 8) + 6;
|
||||
master_cnt = (delay_status & 0xFF0000) >> 16;
|
||||
|
||||
|
||||
//ERr
|
||||
//clkin_delay = (master_cnt_hold >> 2)-2; //start in data window
|
||||
clkin_delay = 0;
|
||||
DELAY_CTRL_REG=(clkin_delay << 16)|0x1;
|
||||
|
||||
//-- FPGA I/F INIT
|
||||
INIT_ARG_REG = 0x5C00;
|
||||
INIT_CMD_REG = 0x01; // INIT_CMD = INIT_CMD_START_INIT
|
||||
wait_loop1 = 5000000;while(wait_loop1--);
|
||||
wait_loop2 = 5000000;while(wait_loop2--);
|
||||
wait_loop3 = 5000000;while(wait_loop3--);
|
||||
|
||||
if (fpga_pattern_ok()){ // already in data window
|
||||
clkin_delay_max = search_last_match();
|
||||
clkin_delay = search_first_match();
|
||||
dw_width = clkin_delay_max + master_cnt_hold-clkin_delay;
|
||||
//ERr debug purppose
|
||||
printf("-I- Data window : 0x%02X to 0x%02X\n\r", clkin_delay,clkin_delay_max);
|
||||
clkin_delay = (clkin_delay+dw_width/2)%master_cnt_hold;
|
||||
}
|
||||
else{ // not in data window
|
||||
clkin_delay = search_first_match();
|
||||
clkin_delay_max = search_last_match();
|
||||
dw_width = clkin_delay_max-clkin_delay;
|
||||
//ERr debug purppose
|
||||
printf("-I- Data window : 0x%02X to 0x%02X\n\r", clkin_delay,clkin_delay_max);
|
||||
clkin_delay = (clkin_delay+dw_width/2)%master_cnt_hold;
|
||||
}
|
||||
|
||||
|
||||
// debug purppose
|
||||
printf("-I- Master count : 0x%02X\n\r", master_cnt);
|
||||
//clkin_delay = (master_cnt_hold >> 2)-2; //start in data window
|
||||
printf("-I- clk_in delay : 0x%02X\n\r", clkin_delay);
|
||||
printf("-I- data window width : 0x%02X (%dns)\n\r", dw_width,(dw_width*10/master_cnt));
|
||||
|
||||
|
||||
// Set clk in delay
|
||||
delay_ctrl = DELAY_CTRL_REG;
|
||||
DELAY_CTRL_REG=((delay_ctrl & ~(0xFF << 16)) | clkin_delay << 16);
|
||||
DELAY_CTRL_REG|=0x1;
|
||||
|
||||
|
||||
|
||||
// Cycle index select
|
||||
time = 0;
|
||||
while((CYCLE_IDX_RESP_R_LSB_REG != 0x0A7014E0)&&time++<FPGA_SYNCHRO_TIMEOUT3){
|
||||
INIT_ARG_REG = 0x02; // INIT_ARG = 2
|
||||
INIT_CMD_REG = 0x02; // INIT_CMD = INIT_CMD_ADD_CYCLE
|
||||
}
|
||||
if(time>FPGA_SYNCHRO_TIMEOUT3)return(FPGA_SYNCHRO_ERROR3);
|
||||
|
||||
|
||||
// Return the number of iterations
|
||||
return(time);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA access initialization - CAP9 RevC
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int init_mpblock_revC(unsigned char mode)
|
||||
{
|
||||
// AT91PS_CCFG pCCFG = (AT91PS_CCFG) AT91C_BASE_CCFG; //not used
|
||||
unsigned int ret_value;
|
||||
|
||||
// Enable clk
|
||||
*((unsigned int*)0xFFFFFC00)|=0x4;
|
||||
init_mpbs_revC(MPBS0,PULLUP_ON,MPIO_LP,MPIO_SUPPLY);
|
||||
|
||||
// User IF pad config
|
||||
/*
|
||||
*((unsigned int*)0xFDF00028)&=0xFFFFFFFD; // Drive pad by user if
|
||||
*((unsigned int*)0xFDF00034)=0x01000000; // MPIOB SUP
|
||||
*((unsigned int*)0xFDF00038)=0x00000000; // MPIOB SUP
|
||||
*((unsigned int*)0xFDF0003C)=0x00000000; // MPIOA SUP
|
||||
*((unsigned int*)0xFDF00040)=0x01000000; // MPIOB LP1
|
||||
*((unsigned int*)0xFDF00044)=0x00000000; // MPIOB LP2
|
||||
*((unsigned int*)0xFDF00048)=0x00000000; // MPIOA LP
|
||||
*((unsigned int*)0xFDF0004C)=0x00000000; // MPIOB PU1
|
||||
*((unsigned int*)0xFDF00050)=0x00000000; // MPIOB PU2
|
||||
*((unsigned int*)0xFDF00054)=0x00000000; // MPIOA PU
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __FPGA_IF_TYPE_DIV3
|
||||
FPGA_IF_TYPE_REG = 0x01;
|
||||
#endif
|
||||
|
||||
// DELAY LINE SETUP
|
||||
DELAY_CTRL_REG = 0x03; // write in DELAY_CTRL register enable_delay = 1 and update_delay = 1
|
||||
while (!(DELAY_STATUS_REG & 0x1)){} // wait master_is_locked = 1
|
||||
|
||||
|
||||
// FPGA IF synchronization loop
|
||||
TRACE_INFO("FPGA IF synchro loop...\n\r");
|
||||
|
||||
//#ifdef NEW_INTERFACE
|
||||
if (mode==NEW_IF){
|
||||
ret_value = fpga_synchro_newIF();
|
||||
if(ret_value>FPGA_SYNCHRO_TIMEOUT3)return(FPGA_SYNCHRO_ERROR3);
|
||||
}
|
||||
else{
|
||||
ret_value = fpga_synchro_revC();
|
||||
if ((ret_value&0xFFFF0000) == 0xCACA0000)return(ret_value);
|
||||
}
|
||||
//#endif
|
||||
TRACE_INFO("Synchro done\n\r");
|
||||
|
||||
// Switch to functionnal mode
|
||||
//outi(0x30DC00, 0xDC00);
|
||||
INIT_ARG_REG = 0x4C727354; // INIT_ARG = INIT_CMD_START_INIT
|
||||
INIT_ARG_REG = 0x4C6F634B; // INIT_ARG = INIT_CMD_START_INIT
|
||||
INIT_CMD_REG = 0x03; // INIT_CMD = INIT_CMD_CYCLE_IDX_LOCKED
|
||||
|
||||
// Return the programmed clock_out_delay value
|
||||
return(ret_value);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA access initialization - CAP9 RevC
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int fpga_synchro_revC(void)
|
||||
{
|
||||
unsigned char clk_out_delay_mean;
|
||||
unsigned char clk_out_delay = 0;
|
||||
unsigned int time = 0;
|
||||
|
||||
INIT_ARG_REG = 0x5C00; //
|
||||
wait_slck_periods(1); // about 30us (wait 10us for FPGA PLL relock)
|
||||
INIT_CMD_REG = 0x01; // INIT_CMD = INIT_CMD_START_INIT
|
||||
|
||||
//Search first match value
|
||||
time = 0;
|
||||
while(((CYCLE_IDX_RESP_R_LSB_REG != CYCLE_IDX_RESP_F_LSB_REG)||(CYCLE_IDX_RESP_R_MSB_REG != ~CYCLE_IDX_RESP_F_MSB_REG))&&time++<FPGA_SYNCHRO_TIMEOUT1)DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
if(time > FPGA_SYNCHRO_TIMEOUT1)return(FPGA_SYNCHRO_ERROR1);
|
||||
clk_out_delay_mean = clk_out_delay;
|
||||
|
||||
//Search last match value
|
||||
DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
while(((CYCLE_IDX_RESP_R_LSB_REG == CYCLE_IDX_RESP_F_LSB_REG)&&(CYCLE_IDX_RESP_R_MSB_REG == ~CYCLE_IDX_RESP_F_MSB_REG))&&time++<FPGA_SYNCHRO_TIMEOUT2)DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
if(time>FPGA_SYNCHRO_TIMEOUT2)return(FPGA_SYNCHRO_ERROR2);
|
||||
clk_out_delay_mean = (clk_out_delay_mean + clk_out_delay)/2;
|
||||
|
||||
// Setup to middle match value
|
||||
DELAY_CTRL_REG = (clk_out_delay_mean << 8) | 0x1;
|
||||
|
||||
|
||||
// Cycle index select
|
||||
time = 0;
|
||||
while((CYCLE_IDX_RESP_R_LSB_REG != 0x0A7014E0)&&time++<FPGA_SYNCHRO_TIMEOUT3) {
|
||||
INIT_ARG_REG = 0x02; // INIT_ARG = 2
|
||||
INIT_CMD_REG = 0x02; // INIT_CMD = INIT_CMD_ADD_CYCLE
|
||||
}
|
||||
if(time>FPGA_SYNCHRO_TIMEOUT3)return(FPGA_SYNCHRO_ERROR3);
|
||||
|
||||
// Return the programmed clock_out_delay value
|
||||
return ((unsigned int)clk_out_delay_mean);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Enable CAP to FPGA clock, and configure pads - CAP9 RevC
|
||||
//------------------------------------------------------------------------------
|
||||
// Updated for UMC pads
|
||||
void init_mpbs_revC(volatile unsigned int* mpbs,char pun,char lp,char sup)
|
||||
{
|
||||
unsigned int value;
|
||||
|
||||
if (mpbs!=MPBS0 && mpbs!=MPBS1 && mpbs!=MPBS2 && mpbs!=MPBS3)
|
||||
return;
|
||||
value = *mpbs | MPBS_ENABLE_BIT;
|
||||
|
||||
if (pun==PULLUP_ON) value&= ~(MPIOB_PUN_BIT|MPIOA_PUN_BIT);
|
||||
else if (pun==PULLUP_OFF) value|= (MPIOB_PUN_BIT|MPIOA_PUN_BIT);
|
||||
|
||||
if (lp==LOWPOWER_OFF) value|= (MPIOB_LP_BIT|MPIOA_LP_BIT);
|
||||
else if(lp==LOWPOWER_ON)value&= ~(MPIOB_LP_BIT|MPIOA_LP_BIT);
|
||||
|
||||
if (sup==SUPPLY_18) value|= (MPIOB_SUP_BIT|MPIOA_SUP_BIT);
|
||||
else if(sup==SUPPLY_33)value&= ~(MPIOB_SUP_BIT|MPIOA_SUP_BIT);
|
||||
|
||||
*mpbs = value;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA access initialization - CAP9 RevB
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int init_mpblock_revB(void)
|
||||
{
|
||||
// AT91PS_CCFG pCCFG = (AT91PS_CCFG) AT91C_BASE_CCFG; // not used
|
||||
unsigned int ret_value;
|
||||
|
||||
// Enable clk
|
||||
init_mpbs_revB(MPBS0,PULLUP_ON,MPIO_LP,MPIO_SUPPLY);
|
||||
|
||||
TRACE_INFO("FPGA IF synchro loop...\n\r");
|
||||
|
||||
#ifdef __FPGA_IF_TYPE_DIV3
|
||||
FPGA_IF_TYPE_REG = 0x01;
|
||||
#endif
|
||||
// DELAY LINE SETUP
|
||||
DELAY_CTRL_REG = 0x03; // write in DELAY_CTRL register enable_delay = 1 and update_delay = 1
|
||||
while (!(DELAY_STATUS_REG & 0x1)){} // wait master_is_locked = 1
|
||||
|
||||
// FPGA IF synchronization loop
|
||||
//ret_value = fpga_synchro_old();
|
||||
ret_value = fpga_synchro_revB();
|
||||
if ((ret_value&0xFFFF0000) == 0xCACA0000)return(ret_value);
|
||||
|
||||
TRACE_INFO("Synchro done\n\r");
|
||||
|
||||
// Switch to functionnal mode
|
||||
//outi(0x30DC00, 0xDC00);
|
||||
INIT_ARG_REG = 0x4C727354; // INIT_ARG = INIT_CMD_START_INIT
|
||||
INIT_ARG_REG = 0x4C6F634B; // INIT_ARG = INIT_CMD_START_INIT
|
||||
INIT_CMD_REG = 0x03; // INIT_CMD = INIT_CMD_CYCLE_IDX_LOCKED
|
||||
|
||||
// Return the programmed clock_out_delay value
|
||||
return(ret_value);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// CAP9 / FPGA synchronization loop - CAP9 RevB
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int fpga_synchro_revB(void)
|
||||
{
|
||||
unsigned char clk_out_delay_mean;
|
||||
unsigned char clk_out_delay = 0;
|
||||
unsigned int time = 0;
|
||||
|
||||
|
||||
INIT_ARG_REG = 0x5C00; //
|
||||
wait_slck_periods(1); // about 30us (wait 10us for FPGA PLL relock)
|
||||
INIT_CMD_REG = 0x01; // INIT_CMD = INIT_CMD_START_INIT
|
||||
|
||||
//Search first match value
|
||||
time = 0;
|
||||
while(((CYCLE_IDX_RESP_R_LSB_REG != CYCLE_IDX_RESP_F_LSB_REG)||(CYCLE_IDX_RESP_R_MSB_REG != ~CYCLE_IDX_RESP_F_MSB_REG))&&time++<FPGA_SYNCHRO_TIMEOUT1)DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
if(time > FPGA_SYNCHRO_TIMEOUT1)return(FPGA_SYNCHRO_ERROR1);
|
||||
clk_out_delay_mean = clk_out_delay;
|
||||
|
||||
//Search last match value
|
||||
DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
while(((CYCLE_IDX_RESP_R_LSB_REG == CYCLE_IDX_RESP_F_LSB_REG)&&(CYCLE_IDX_RESP_R_MSB_REG == ~CYCLE_IDX_RESP_F_MSB_REG))&&time++<FPGA_SYNCHRO_TIMEOUT2)DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
if(time>FPGA_SYNCHRO_TIMEOUT2)return(FPGA_SYNCHRO_ERROR2);
|
||||
clk_out_delay_mean = (clk_out_delay_mean + clk_out_delay)/2;
|
||||
|
||||
// Setup to middle match value
|
||||
DELAY_CTRL_REG = (clk_out_delay_mean << 8) | 0x1;
|
||||
|
||||
// Cycle index select
|
||||
time = 0;
|
||||
while((CYCLE_IDX_RESP_R_LSB_REG != 0x0A7014E0)&&time++<FPGA_SYNCHRO_TIMEOUT3) {
|
||||
INIT_ARG_REG = 0x02; // INIT_ARG = 2
|
||||
INIT_CMD_REG = 0x02; // INIT_CMD = INIT_CMD_ADD_CYCLE
|
||||
}
|
||||
if(time>FPGA_SYNCHRO_TIMEOUT3)return(FPGA_SYNCHRO_ERROR3);
|
||||
|
||||
// Return the programmed clock_out_delay value
|
||||
return ((unsigned int)clk_out_delay_mean);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Enable CAP to FPGA clock, and configure pads - CAP9 RevB
|
||||
//------------------------------------------------------------------------------
|
||||
void init_mpbs_revB(volatile unsigned int* mpbs,char pun,char lp,char sup)
|
||||
{
|
||||
//AT91PS_CCFG pCCFG = (AT91PS_CCFG) AT91C_BASE_CCFG;
|
||||
//pCCFG->CCFG_MPBS0 |= (1<<31) | (1<<16) | (1<<24);
|
||||
unsigned int value;
|
||||
|
||||
if (mpbs!=MPBS0 && mpbs!=MPBS1 && mpbs!=MPBS2 && mpbs!=MPBS3)
|
||||
return;
|
||||
value = *mpbs | MPBS_ENABLE_BIT;
|
||||
|
||||
if (pun==PULLUP_ON) value&= ~(MPIOB_PUN_BIT|MPIOA_PUN_BIT);
|
||||
else if (pun==PULLUP_OFF) value|= (MPIOB_PUN_BIT|MPIOA_PUN_BIT);
|
||||
|
||||
if (lp==LOWPOWER_ON) value|= (MPIOB_LP_BIT|MPIOA_LP_BIT);
|
||||
else if(lp==LOWPOWER_OFF)value&= ~(MPIOB_LP_BIT|MPIOA_LP_BIT);
|
||||
|
||||
if (sup==SUPPLY_33) value|= (MPIOB_SUP_BIT|MPIOA_SUP_BIT);
|
||||
else if(sup==SUPPLY_18)value&= ~(MPIOB_SUP_BIT|MPIOA_SUP_BIT);
|
||||
|
||||
*mpbs = value;
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Wait specified number of slow clock periods (30.52uS if external 32KHz)
|
||||
//------------------------------------------------------------------------------
|
||||
void wait_slck_periods(int periods)
|
||||
{
|
||||
RTT_SetPrescaler(AT91C_BASE_RTTC, 1);
|
||||
while(RTT_GetTime(AT91C_BASE_RTTC)!=periods);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Wait for correct FPGA configuration (used after POR)
|
||||
//------------------------------------------------------------------------------
|
||||
void wait_for_FPGA_config()
|
||||
{
|
||||
int i;
|
||||
for(i=0;i<POWER_ON_TEMPO;++i);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Wait for correct FPGA configuration (used after POR) / CAP9S3-DKZ
|
||||
//------------------------------------------------------------------------------
|
||||
void wait_for_FPGA_config_CAP9S3()
|
||||
{
|
||||
PIO_Configure(&pinPC13, 1);
|
||||
while(!PIO_Get(&pinPC13)); // Wait for config_done
|
||||
wait_slck_periods(4); // Wait 100us more for user mode
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA pattern checking
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int search_last_match()
|
||||
{
|
||||
unsigned int clkin_delay;
|
||||
|
||||
clkin_delay = (DELAY_CTRL_REG >> 16)&(0xFF);
|
||||
while (fpga_pattern_ok() && (clkin_delay++ < master_cnt_hold))
|
||||
DELAY_CTRL_REG=(clkin_delay << 16)|0x1;
|
||||
|
||||
return clkin_delay;
|
||||
}
|
||||
|
||||
unsigned int search_first_match()
|
||||
{
|
||||
unsigned int clkin_delay;
|
||||
|
||||
clkin_delay = (DELAY_CTRL_REG >> 16)&(0xFF);
|
||||
while (!fpga_pattern_ok() && (clkin_delay++ < master_cnt_hold))
|
||||
DELAY_CTRL_REG=(clkin_delay << 16)|0x1;
|
||||
|
||||
return clkin_delay;
|
||||
}
|
||||
|
||||
int fpga_pattern_ok()
|
||||
{
|
||||
return((CYCLE_IDX_RESP_R_LSB_REG == CYCLE_IDX_RESP_F_LSB_REG)&&(CYCLE_IDX_RESP_R_MSB_REG == ~CYCLE_IDX_RESP_F_MSB_REG));
|
||||
}
|
||||
|
|
@ -0,0 +1,152 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef FPGA_INIT_H
|
||||
#define FPGA_INIT_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
// PAD configuration //////////////////////////////////////////////////////////
|
||||
#define MPIO_LP LOWPOWER_ON
|
||||
|
||||
/*
|
||||
#ifdef MPIO18
|
||||
#define MPIO_SUPPLY SUPPLY_18
|
||||
#else
|
||||
#define MPIO_SUPPLY SUPPLY_33
|
||||
#endif
|
||||
*/
|
||||
#define MPIO_SUPPLY SUPPLY_33
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CAP9 Part identification //////////////////////////////////////////
|
||||
#define EXTENDED_CHIP_ID_REG *((volatile unsigned int*)0xFFFFEE44)
|
||||
#define NOT_A_DEV_CHIP_ERROR 0xCACAB0F0
|
||||
#define CAP9_CHECK_REVISION_REG *((volatile unsigned int*)0xFFFFFCFC)
|
||||
#define REV_C_CHECK_VALUE 0x00000601
|
||||
#define REV_B_CHECK_VALUE 0x00000399
|
||||
#define NEW_IF 0
|
||||
#define OLD_IF 1
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define RSTC_SR_REG *((volatile unsigned int*)0xFFFFFD04)
|
||||
#define POWER_ON_TEMPO 0x00FFFFFF
|
||||
|
||||
#define __FPGA_IF_TYPE_DIV5
|
||||
// #define __FPGA_IF_TYPE_DIV3
|
||||
#define CLK_OUT_DELAY_MIN 28
|
||||
#define CLK_OUT_DELAY_MAX 50
|
||||
|
||||
#define FPGA_SYNCHRO_TIMEOUT1 180 // max iteration number for first clk_out_delay match value research
|
||||
#define FPGA_SYNCHRO_TIMEOUT2 180 // max iteration number for last clk_out_delay match value research
|
||||
#define FPGA_SYNCHRO_TIMEOUT3 10 // max iteration number for cycle index match value
|
||||
|
||||
#define FPGA_SYNCHRO_ERROR1 0xCACAB0F1 // timeout occured for first clk_out_delay match value research
|
||||
#define FPGA_SYNCHRO_ERROR2 0xCACAB0F2 // timeout occured for last clk_out_delay match value research
|
||||
#define FPGA_SYNCHRO_ERROR3 0xCACAB0F3 // timeout occured for cycle index match value
|
||||
|
||||
// CAP9 MP Block user interface registers /////////////////////////////////////
|
||||
#define MPBLOCK_USER_INTERFACE_BASE_ADDR (char*)0xFDF00000
|
||||
#define INIT_CMD_REG_OFFSET 0x00
|
||||
#define INIT_ARG_REG_OFFSET 0x04
|
||||
#define FPGA_IF_TYPE_REG_OFFSET 0x08
|
||||
#define CYCLE_IDX_RESP_R_LSB_REG_OFFSET 0x10
|
||||
#define CYCLE_IDX_RESP_R_MSB_REG_OFFSET 0x14
|
||||
#define CYCLE_IDX_RESP_F_LSB_REG_OFFSET 0x18
|
||||
#define CYCLE_IDX_RESP_F_MSB_REG_OFFSET 0x1C
|
||||
#define DELAY_CTRL_REG_OFFSET 0x20
|
||||
#define DELAY_STATUS_REG_OFFSET 0x24
|
||||
#define CONFIG_INIT_REG_OFFSET 0x28
|
||||
#define LOCK_IPS_KEY1_REG_OFFSET 0x30
|
||||
#define LOCK_IPS_KEY2_REG_OFFSET 0x34
|
||||
#define LOCK_IPS_KEY3_REG_OFFSET 0x38
|
||||
#define LOCK_IPS_KEY4_REG_OFFSET 0x3C
|
||||
#define UNLOCK_IPS_REG_OFFSET 0x40
|
||||
|
||||
#define INIT_CMD_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+INIT_CMD_REG_OFFSET))
|
||||
#define INIT_ARG_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+INIT_ARG_REG_OFFSET))
|
||||
#define FPGA_IF_TYPE_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+FPGA_IF_TYPE_REG_OFFSET))
|
||||
#define CYCLE_IDX_RESP_R_LSB_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+CYCLE_IDX_RESP_R_LSB_REG_OFFSET))
|
||||
#define CYCLE_IDX_RESP_R_MSB_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+CYCLE_IDX_RESP_R_MSB_REG_OFFSET))
|
||||
#define CYCLE_IDX_RESP_F_LSB_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+CYCLE_IDX_RESP_F_LSB_REG_OFFSET))
|
||||
#define CYCLE_IDX_RESP_F_MSB_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+CYCLE_IDX_RESP_F_MSB_REG_OFFSET))
|
||||
#define DELAY_CTRL_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+DELAY_CTRL_REG_OFFSET))
|
||||
#define DELAY_STATUS_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+DELAY_STATUS_REG_OFFSET))
|
||||
#define CONFIG_INIT_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+CONFIG_INIT_REG_OFFSET))
|
||||
#define LOCK_IPS_KEY1_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+LOCK_IPS_KEY1_REG_OFFSET))
|
||||
#define LOCK_IPS_KEY2_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+LOCK_IPS_KEY2_REG_OFFSET))
|
||||
#define LOCK_IPS_KEY3_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+LOCK_IPS_KEY3_REG_OFFSET))
|
||||
#define LOCK_IPS_KEY4_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+LOCK_IPS_KEY4_REG_OFFSET))
|
||||
#define UNLOCK_IPS_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+UNLOCK_IPS_REG_OFFSET))
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CAP9 chip configuration user interface /////////////////////////////////////
|
||||
#define CCF_INTERFACE_BASE_ADDR (char*)0xFFFFEA00
|
||||
#define MPBS0_SFR_OFFSET 0x0114
|
||||
#define MPBS1_SFR_OFFSET 0x011C
|
||||
#define EBI_CSA_OFFSET 0x0120
|
||||
#define MPBS2_SFR_OFFSET 0x012C
|
||||
#define MPBS3_SFR_OFFSET 0x0130
|
||||
|
||||
#define MPBS_ENABLE_BIT 0x80000000
|
||||
#define MPIOB_PUN_BIT 0x04000000
|
||||
#define MPIOB_LP_BIT 0x02000000
|
||||
#define MPIOB_SUP_BIT 0x01000000
|
||||
#define MPIOA_PUN_BIT 0x00040000
|
||||
#define MPIOA_LP_BIT 0x00020000
|
||||
#define MPIOA_SUP_BIT 0x00010000
|
||||
|
||||
#define MPBS0_SFR_REG *((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS0_SFR_OFFSET))
|
||||
#define MPBS1_SFR_REG *((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS1_SFR_OFFSET))
|
||||
#define EBI_CSA_REG *((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+EBI_CSA_OFFSET))
|
||||
#define MPBS2_SFR_REG *((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS2_SFR_OFFSET))
|
||||
#define MPBS3_SFR_REG *((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS3_SFR_OFFSET))
|
||||
|
||||
#define MPBS0 ((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS0_SFR_OFFSET))
|
||||
#define MPBS1 ((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS1_SFR_OFFSET))
|
||||
#define MPBS2 ((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS2_SFR_OFFSET))
|
||||
#define MPBS3 ((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS3_SFR_OFFSET))
|
||||
#define PULLUP_ON 1
|
||||
#define PULLUP_OFF 2
|
||||
#define LOWPOWER_ON 3
|
||||
#define LOWPOWER_OFF 4
|
||||
#define SUPPLY_33 33
|
||||
#define SUPPLY_18 18
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
extern unsigned int BOARD_InitMPBlock(unsigned char mode);
|
||||
|
||||
|
||||
#endif // FPGA_INIT_H
|
|
@ -0,0 +1,194 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
#include "board_memories.h"
|
||||
#include <pio/pio.h>
|
||||
#include <pmc/pmc.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
Constants: Clock and PLL settings
|
||||
|
||||
BOARD_OSCOUNT - Startup time of main oscillator (in number of slow clock
|
||||
ticks).
|
||||
BOARD_USBDIV - USB PLL divisor value to obtain a 48MHz clock.
|
||||
BOARD_CKGR_PLL - PLL frequency range.
|
||||
BOARD_PLLCOUNT - PLL startup time (in number of slow clock ticks).
|
||||
BOARD_MUL - PLL MUL value.
|
||||
BOARD_DIV - PLL DIV value.
|
||||
BOARD_PRESCALER - Master clock prescaler value.
|
||||
*/
|
||||
#define BOARD_OSCOUNT (AT91C_CKGR_OSCOUNT & (64 << 8))
|
||||
|
||||
#define BOARD_CKGR_PLLA (AT91C_CKGR_SRCA | AT91C_CKGR_OUTA_2)
|
||||
#define BOARD_PLLACOUNT (63 << 8) // maximum
|
||||
#define BOARD_MULA (AT91C_CKGR_MULA & (49 << 16))
|
||||
#define BOARD_DIVA (AT91C_CKGR_DIVA & 3)
|
||||
|
||||
#define BOARD_USBDIV AT91C_CKGR_USBDIV_2
|
||||
#define BOARD_CKGR_PLLB AT91C_CKGR_OUTB_0
|
||||
#define BOARD_PLLBCOUNT BOARD_PLLACOUNT
|
||||
#define BOARD_MULB (175 << 16)
|
||||
#define BOARD_DIVB 15
|
||||
|
||||
#define BOARD_PRESCALER AT91C_PMC_MDIV_2
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
/// Default spurious interrupt handler. Infinite loop.
|
||||
//------------------------------------------------------------------------------
|
||||
void defaultSpuriousHandler( void )
|
||||
{
|
||||
//while (1);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Default handler for fast interrupt requests. Infinite loop.
|
||||
//------------------------------------------------------------------------------
|
||||
void defaultFiqHandler( void )
|
||||
{
|
||||
while (1);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Default handler for standard interrupt requests. Infinite loop.
|
||||
//------------------------------------------------------------------------------
|
||||
void defaultIrqHandler( void )
|
||||
{
|
||||
while (1);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
/// Performs the low-level initialization of the chip. Initialisation depends
|
||||
/// on where the application is executed:
|
||||
/// - in sdram: it means that sdram has previously been initialized. No further
|
||||
/// initialization is required.
|
||||
/// - in sram: PLL shall be initialized in LowLevelInit. Other initializations
|
||||
/// can be done later by the application.
|
||||
/// - in norflash: LowLevelInit can't be executed in norflash because SMC
|
||||
/// settings can't be changed while executing in external flash.
|
||||
/// LowLevelInit shall be executed in internal sram. It initializes
|
||||
/// PLL and SMC.
|
||||
/// This function also reset the AIC and disable RTT and PIT interrupts
|
||||
//------------------------------------------------------------------------------
|
||||
void LowLevelInit( void )
|
||||
{
|
||||
unsigned char i;
|
||||
// If already running in external ram, PLL settings have already been done
|
||||
#if !defined(sdram) && !defined(ddram) && !defined(bcram)
|
||||
|
||||
/* Initialize main oscillator
|
||||
****************************/
|
||||
AT91C_BASE_PMC->PMC_MOR = BOARD_OSCOUNT | AT91C_CKGR_MOSCEN;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));
|
||||
|
||||
// Initialize PLLA at 200MHz
|
||||
AT91C_BASE_PMC->PMC_PLLAR = BOARD_CKGR_PLLA
|
||||
| BOARD_PLLACOUNT
|
||||
| BOARD_MULA
|
||||
| BOARD_DIVA;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKA));
|
||||
|
||||
// Initialize PLLB for USB usage (if not already locked)
|
||||
if (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKB)) {
|
||||
AT91C_BASE_PMC->PMC_PLLBR = BOARD_USBDIV
|
||||
| BOARD_CKGR_PLLB
|
||||
| BOARD_PLLBCOUNT
|
||||
| BOARD_MULB
|
||||
| BOARD_DIVB;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKB));
|
||||
}
|
||||
|
||||
/* Switch to fast clock
|
||||
**********************/
|
||||
|
||||
/* Wait for the master clock if it was already initialized */
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
|
||||
|
||||
/* Switch to main oscillator + prescaler */
|
||||
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_SLOW_CLK | AT91C_PMC_PRES_CLK | AT91C_PMC_MDIV_2;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
|
||||
|
||||
// Select PLLA
|
||||
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK | AT91C_PMC_MDIV_2;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
|
||||
#endif //#if !defined(sdram) && !defined(ddram) && !defined(bcram)
|
||||
|
||||
/* Initialize AIC
|
||||
****************/
|
||||
AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF;
|
||||
AT91C_BASE_AIC->AIC_SVR[0] = (unsigned int) defaultFiqHandler;
|
||||
for (i = 1; i < 31; i++) {
|
||||
|
||||
AT91C_BASE_AIC->AIC_SVR[i] = (unsigned int) defaultIrqHandler;
|
||||
}
|
||||
AT91C_BASE_AIC->AIC_SPU = (unsigned int) defaultSpuriousHandler;
|
||||
|
||||
// Unstack nested interrupts
|
||||
for (i = 0; i < 8 ; i++) {
|
||||
|
||||
AT91C_BASE_AIC->AIC_EOICR = 0;
|
||||
}
|
||||
|
||||
/* Watchdog initialization
|
||||
*************************/
|
||||
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
|
||||
|
||||
/* Remap
|
||||
*******/
|
||||
BOARD_RemapRam();
|
||||
|
||||
/* User reset is deleted (workaround Issue 5387) */
|
||||
AT91C_BASE_RSTC->RSTC_RMR = 0xA5000000;
|
||||
|
||||
// Disable RTT and PIT interrupts (potential problem when program A
|
||||
// configures RTT, then program B wants to use PIT only, interrupts
|
||||
// from the RTT will still occur since they both use AT91C_ID_SYS)
|
||||
AT91C_BASE_RTTC->RTTC_RTMR &= ~(AT91C_RTTC_ALMIEN | AT91C_RTTC_RTTINCIEN);
|
||||
AT91C_BASE_PITC->PITC_PIMR &= ~AT91C_PITC_PITIEN;
|
||||
|
||||
|
||||
#if defined(norflash)
|
||||
BOARD_ConfigureNorFlash(BOARD_NORFLASH_DFT_BUS_SIZE);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
///
|
||||
/// !Purpose
|
||||
///
|
||||
/// Provides the low-level initialization function that gets called on chip
|
||||
/// startup.
|
||||
///
|
||||
/// !Usage
|
||||
///
|
||||
/// LowLevelInit() is called in #board_cstartup.S#.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_LOWLEVEL_H
|
||||
#define BOARD_LOWLEVEL_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
extern void LowLevelInit(void);
|
||||
|
||||
#endif // BOARD_LOWLEVEL_H
|
||||
|
|
@ -0,0 +1,526 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
Title: Memories implementation
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include <board.h>
|
||||
#include <pio/pio.h>
|
||||
#include "board_memories.h"
|
||||
|
||||
/*
|
||||
Macros:
|
||||
READ - Reads a register value. Useful to add trace information to read
|
||||
accesses.
|
||||
WRITE - Writes data in a register. Useful to add trace information to
|
||||
write accesses.
|
||||
*/
|
||||
#define READ(peripheral, register) (peripheral->register)
|
||||
#define WRITE(peripheral, register, value) (peripheral->register = value)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
Constants: Remap types
|
||||
BOARD_ROM - ROM or EBI CS0 is mirrored in the remap zone.
|
||||
BOARD_RAM - RAM is mirrored in the remap zone.
|
||||
*/
|
||||
#define BOARD_ROM 0
|
||||
#define BOARD_RAM 1
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
/// Returns the current remap (see <Remap types>).
|
||||
//------------------------------------------------------------------------------
|
||||
/*static unsigned char BOARD_GetRemap()
|
||||
{
|
||||
volatile unsigned int *remap = (volatile unsigned int *) 0;
|
||||
volatile unsigned int *ram = (volatile unsigned int *) AT91C_IRAM;
|
||||
// Try to write in 0 and see if this affects the RAM
|
||||
unsigned int temp = *ram;
|
||||
*ram = temp + 1;
|
||||
if (*remap == *ram) {
|
||||
|
||||
*ram = temp;
|
||||
return BOARD_RAM;
|
||||
}
|
||||
else {
|
||||
|
||||
*ram = temp;
|
||||
return BOARD_ROM;
|
||||
}
|
||||
}*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Use in SDRAM and DDRAM configguration
|
||||
//------------------------------------------------------------------------------
|
||||
void sleep_time(unsigned int timeval)
|
||||
{
|
||||
unsigned int i;
|
||||
for( i=0; i<timeval; i++);
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Changes the mapping of the chip so that the remap area mirrors the
|
||||
/// internal ROM or the EBI CS0.
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_RemapRom()
|
||||
{
|
||||
WRITE(AT91C_BASE_MATRIX, MATRIX_MRCR, 0);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Changes the mapping of the chip so that the remap area mirrors the
|
||||
/// internal RAM.
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_RemapRam()
|
||||
{
|
||||
WRITE(AT91C_BASE_MATRIX, MATRIX_MRCR, (AT91C_MATRIX_RCA926I | AT91C_MATRIX_RCA926D));
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize Vdd EBI external memory
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureVddMemSel(unsigned char VddMemSel)
|
||||
{
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA &= ~AT91C_EBI_OSMODE;
|
||||
|
||||
if(VddMemSel == VDDMEMSEL_3V3)
|
||||
{
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA |= AT91C_EBI_OSALLN1;
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA &= ~AT91C_EBI_OSALLN0;
|
||||
}
|
||||
else
|
||||
{
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA &= ~AT91C_EBI_OSALLN1;
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA &= ~AT91C_EBI_OSALLN0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize and configure the SDRAM
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureSdram(unsigned char busWidth)
|
||||
{
|
||||
// Micron MT48LC16M16A2
|
||||
unsigned int i;
|
||||
static const Pin pinsSdram[] = {PINS_SDRAM};
|
||||
volatile unsigned int *pSdram = (unsigned int *) AT91C_EBI_SDRAM;
|
||||
unsigned short sdrc_dbw = 0;
|
||||
|
||||
switch (busWidth) {
|
||||
case 16:
|
||||
sdrc_dbw = AT91C_B16MODE_16_BITS;
|
||||
break;
|
||||
|
||||
case 32:
|
||||
default:
|
||||
sdrc_dbw = AT91C_B16MODE_32_BITS;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// Enable corresponding PIOs
|
||||
PIO_Configure(pinsSdram, 1);
|
||||
|
||||
//-- 1st Step : Program the memory device type into Memory Device Register
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MDR , AT91C_MD_SDR_SDRAM
|
||||
| sdrc_dbw); // SDRAM type 3.3V + 32bit MODE
|
||||
|
||||
//-- 2nd Step : Program the SDR-SDRAM device into the Configuration Register
|
||||
//-- (number of columns, rows, cas latency)
|
||||
//-- and into the Timing Register (asynchronous timing)
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_CR , AT91C_NC_DDR10_SDR9
|
||||
| AT91C_NR_13
|
||||
| AT91C_CAS_3); // row = 13, column = 9 SDRAM CAS = 3
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_T0PR, AT91C_TRAS_4
|
||||
| AT91C_TRCD_2
|
||||
| AT91C_TWR_2
|
||||
| AT91C_TRC_4
|
||||
| AT91C_TRP_3
|
||||
| AT91C_TRRD_3
|
||||
| AT91C_TWTR_1
|
||||
| AT91C_TMRD_6);
|
||||
|
||||
//-- 3rd Step : this step is performed only with mobile SDRAM
|
||||
|
||||
sleep_time(50000); // --------- WAIT ---------
|
||||
|
||||
//-- 4th Step : a NOP command is performed => allow to enable clk
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_NOP_CMD); // NOP command
|
||||
pSdram[0] = 0x00000000; // Dummy read to access SDRAM : validate preceeding command
|
||||
|
||||
//-- 5th Step : an All Bank Precharge command is issued to the SDR-SDRAM
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_PRCGALL_CMD); // Precharge All Banks command
|
||||
pSdram[0] = 0x00000000; // Dummy read to access SDRAM : validate preceeding command
|
||||
|
||||
//-- 6th Step : eight auto refresh cycles are provided
|
||||
for(i=0;i<8;i++) {
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_RFSH_CMD); // AutoRefresh command
|
||||
pSdram[0] = 0x00000000; // Dummy read to access SDRAM : validate preceeding command
|
||||
}
|
||||
|
||||
//-- 7th Step : a Mode Register Set is issued to program the parameters of the SDR-SDRAM device
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_LMR_CMD); // Set MR JEDEC compliant : Load mode Register command
|
||||
pSdram[8] = 0x00000000; // Perform LMR burst=1, lat=2
|
||||
|
||||
//-- 8th Step : this step is performed only with mobile SDRAM
|
||||
|
||||
//-- 9th Step : Set Normal mode
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_NORMAL_CMD); // Set Normal mode : Any access to the DDRSDRAMC is decoded normally
|
||||
pSdram[0] = 0x00000000; // Dummy read to access SDRAM : validate preceeding command
|
||||
|
||||
//-- 10th Step : Set Refresh timer
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_RTR, 781); // Set Refresh Timer (ex: ((64 x 10^-3)/8192) x 100 x 10^6 ) => 781 for 100 MHz
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize and configure the DDRAM
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureDdram(
|
||||
unsigned char ddrModel,
|
||||
unsigned char busWidth
|
||||
)
|
||||
{
|
||||
// Micron MT46H16M16LF
|
||||
unsigned int i;
|
||||
volatile unsigned int *pDdram = (unsigned int *) AT91C_EBI_DDRAM;
|
||||
unsigned short ddrc_dbw = 0;
|
||||
|
||||
switch (busWidth) {
|
||||
case 16:
|
||||
ddrc_dbw = AT91C_B16MODE_16_BITS;
|
||||
break;
|
||||
|
||||
case 32:
|
||||
default:
|
||||
ddrc_dbw = AT91C_B16MODE_32_BITS;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// Enable DDR controller Clock
|
||||
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_DDR;
|
||||
|
||||
// Step 1: program the memory device type into Memory Device Register
|
||||
// Memory Device Register
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MDR, AT91C_MD_LP_DDR_SDRAM
|
||||
| ddrc_dbw );
|
||||
|
||||
// Step 2: program the features of the Mobile DDR into the Configuration Register
|
||||
// number of columns, rows, banks and cas latency
|
||||
|
||||
// Configuration Register (Normal driver strength(0) | Disable DLL reset(0) | SDRAM CAS = 3 | row = 13 | column = 9)
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_CR, AT91C_DLL_RESET_DISABLED
|
||||
| AT91C_CAS_3
|
||||
| AT91C_NR_13
|
||||
| AT91C_NC_DDR9_SDR8 );
|
||||
|
||||
// Timing 0 Parameter Register
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_T0PR, AT91C_TMRD_2
|
||||
| AT91C_TWTR_1
|
||||
| AT91C_TRRD_2
|
||||
| AT91C_TRP_3
|
||||
| AT91C_TRC_8
|
||||
| AT91C_TWR_2
|
||||
| AT91C_TRCD_3
|
||||
| AT91C_TRAS_5);
|
||||
|
||||
// Timing 1 Parameter Register
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_T1PR, AT91C_TXP_4
|
||||
| AT91C_TXSRD_12
|
||||
| AT91C_TXSNR_12
|
||||
| AT91C_TRFC_9 );
|
||||
|
||||
// Step 3: program temperature compensated self refresh (tcr),
|
||||
// Partial array self refresh (pasr)
|
||||
// and Drive strength (ds) into the Low-power Register.
|
||||
|
||||
// --------- WAIT ---------
|
||||
|
||||
// Step 4: perform a NOP command in order to allow to enable clk
|
||||
// NOP command
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_NOP_CMD);
|
||||
pDdram[0] = 0x00000000; // Dummy write to access SDRAM : validate preceeding command
|
||||
|
||||
sleep_time(200);
|
||||
|
||||
// Step 5: perform an All Banks Precharge command
|
||||
// Precharge All Banks command
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_PRCGALL_CMD);
|
||||
pDdram[0] = 0x00000000; // Dummy write to access SDRAM : validate preceeding command
|
||||
|
||||
// Step 6: two auto refresh cycles are provided
|
||||
for (i=0;i<2;i++)
|
||||
{
|
||||
// AutoRefresh command
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_RFSH_CMD);
|
||||
pDdram[0] = 0x00000000; // Dummy write to access SDRAM : validate preceeding command
|
||||
}
|
||||
|
||||
// Step 7: an extended mode register set cycle is issued
|
||||
// Extended Mode Register Set command
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_EXT_LMR_CMD);
|
||||
pDdram[0x400000] = 0x00000000; //@0x71000000 (BA[0]=0 BA[1]=1)
|
||||
|
||||
// Step 8: a mode register set cycle is issued
|
||||
// Mode Register Set command
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_LMR_CMD);
|
||||
pDdram[0] = 0x00000000;
|
||||
|
||||
// Step 9: Set Normal mode
|
||||
// Set Normal mode : Any access to the DDRSDRAMC is decoded normally
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_NORMAL_CMD);
|
||||
pDdram[0] = 0x00000000;
|
||||
|
||||
// Step 10: Perform a write access to any DDR-SDRAM address
|
||||
pDdram[0] = 0x00000000;
|
||||
|
||||
// a third write to avoid DLL fine tuning
|
||||
pDdram[0] = 0x00000000;
|
||||
|
||||
// Step 11: Set Refresh timer
|
||||
// Set Refresh Timer : ((64 x 10^-3)/8192) x 48 x 10^6 ---> 375 for 48 MHz
|
||||
//WRITE(AT91C_BASE_SDDRC, SDDRC_RTR, 375);
|
||||
// Set Refresh Timer : ((64 x 10^-3)/8192) x 100 x 10^6 ---> 781 for 100 MHz
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_RTR, 781);
|
||||
|
||||
// --------- WAIT ---------
|
||||
sleep_time(2000);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize and configure the BCRAM
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureBcram(unsigned char busWidth)
|
||||
{
|
||||
volatile unsigned int *pBcram = (unsigned int *) AT91C_EBI_BCRAM;
|
||||
|
||||
// Configure EBI
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA |= AT91C_EBI_CS1A_BCRAMC;
|
||||
|
||||
// Configure A23 and A24 PIO as Periph A
|
||||
AT91C_BASE_PIOD->PIO_PDR = AT91C_PIO_PD12 | AT91C_PIO_PD13;
|
||||
AT91C_BASE_PIOD->PIO_ASR = AT91C_PIO_PD12 | AT91C_PIO_PD13;
|
||||
|
||||
// Step 1: The Cellular Ram memory type must be set in the BCRAMC Memory Device Register.
|
||||
// -------------------------------------------------------------------------
|
||||
// Burst CellularRAM Version 1.5
|
||||
// (BCRAMC_MDR = 0x00000001)
|
||||
AT91C_BASE_BCRAMC->BCRAMC_MDR = AT91C_BCRAMC_MD_BCRAM_V15;
|
||||
|
||||
// Step 2: Temperature compensated self refresh (TCSR) and partial array
|
||||
// refresh (PAR) must be set in the BCRAMC Low Power register.
|
||||
// -------------------------------------------------------------------------
|
||||
// Low power register => Low-power is inhibited, Internal Temperature Sensor choosen
|
||||
// PAR[2:0] : Partial Array Refresh = 000 (Full Array)
|
||||
// TCR_TCSR[5:4] : Temperature Compensated Refresh/Self-refresh = 00 (Internal sensor or 70°C)
|
||||
// LPCB[9:8] : Low Power Command Bit = 00 (Low power Feature inhibited)
|
||||
// (BCRAMC_LPR = 0x00000000)
|
||||
AT91C_BASE_BCRAMC->BCRAMC_LPR = AT91C_BCRAMC_PAR_FULL |
|
||||
//AT91C_BCRAMC_TCR_INTERNAL_OR_70C |
|
||||
AT91C_BCRAMC_LPCB_DISABLE;
|
||||
|
||||
// High Speed Register
|
||||
// DA(0) Decode Cycle = 0 (No decode cycle added)
|
||||
// (BCRAMC_HSR = 0x00000000)
|
||||
AT91C_BASE_BCRAMC->BCRAMC_HSR = AT91C_BCRAMC_DA_DISABLE;
|
||||
|
||||
// Step 3: Asynchronous timings (TCKA, TCRE..) must be set in the BCRAMC Timing Register.
|
||||
// -------------------------------------------------------------------------
|
||||
// TCW[3:0] : Chip Enable to End of Write = 3
|
||||
// TCRES[5:4] : Control Register Enable Setup = 2
|
||||
// TCKA[11:8] : BCWE High to BCCK Valid = 0
|
||||
// (BCRAMC_TPR = 0x00000023)
|
||||
AT91C_BASE_BCRAMC->BCRAMC_TPR = AT91C_BCRAMC_TCW_3 |
|
||||
AT91C_BCRAMC_TCRES_2 |
|
||||
AT91C_BCRAMC_TCKA_0;
|
||||
|
||||
// Step 4: Cellular Ram features must be set in the HBCRAMC Configuration Register:
|
||||
// – number rows, latency, drive strength (DS), the data bus width and cram_enabled bit must be high.
|
||||
// -------------------------------------------------------------------------
|
||||
// CRAM_EN(0) : BCRAM enabled = 0
|
||||
// LM[6:4] : Latency Mode = 011 = 3 cycles (reset value)
|
||||
// DBW[8] : Data Bus Width = 1 (0->32bits / 1->16bits)
|
||||
// BOUNDARY_WORD[13:12] : Number of Words in Row = 01 = 128 words by row
|
||||
// ADDRDATA_MUX[16] : Address and Data bus Multiplexed ? = 0 => NO
|
||||
// DS[21:20] : Drive Strength = 00 => FULL
|
||||
// VAR_FIX_LAT[24] : Variable or Fixed latency ? = 0 => VARIABLE
|
||||
// 3 latency cycles, dbw = 16 bits, 128 words per row, address & data bus
|
||||
// not muxed, full drive strength, variable latency
|
||||
// (BCRAMC_CR = 0x00001130)
|
||||
AT91C_BASE_BCRAMC->BCRAMC_CR = AT91C_BCRAMC_CAS_3 |
|
||||
AT91C_BCRAM_NWIR_128 |
|
||||
AT91C_BCRAM_ADMX_NO_MUX |
|
||||
AT91C_BCRAM_DS_FULL_DRIVE |
|
||||
AT91C_BCRAM_VFLAT_VARIABLE;
|
||||
switch (busWidth) {
|
||||
case 16:
|
||||
AT91C_BASE_BCRAMC->BCRAMC_CR |= AT91C_BCRAMC_DBW_16_BITS;
|
||||
break;
|
||||
|
||||
case 32:
|
||||
default:
|
||||
AT91C_BASE_BCRAMC->BCRAMC_CR |= AT91C_BCRAMC_DBW_32_BITS;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// + BCRAMC enabled
|
||||
AT91C_BASE_BCRAMC->BCRAMC_CR |= AT91C_BCRAMC_EN;
|
||||
|
||||
// Step 5: Perform a write to the Cellular Ram device and the Bus Configuration Register (BCR) and
|
||||
// Refresh Configuration Register (RCR) are programmed automatically.
|
||||
// Dummy write to access BCRAM : validate preceeding command
|
||||
pBcram[0] = 0x12345678;//00000000;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Configures the EBI for NandFlash access. Pins must be configured after or
|
||||
/// before calling this function.
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNandFlash(unsigned char busWidth)
|
||||
{
|
||||
// Configure EBI
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA |= AT91C_EBI_CS3A_SM;
|
||||
|
||||
// Configure SMC
|
||||
AT91C_BASE_SMC->SMC_SETUP3 = 0x00010001;
|
||||
AT91C_BASE_SMC->SMC_PULSE3 = 0x03030303;
|
||||
AT91C_BASE_SMC->SMC_CYCLE3 = 0x00050005;
|
||||
AT91C_BASE_SMC->SMC_CTRL3 = 0x00020003;
|
||||
|
||||
if (busWidth == 8) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Configures the EBI for NandFlash access at 48MHz. Pins must be configured
|
||||
/// after or before calling this function.
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNandFlash48MHz(unsigned char busWidth)
|
||||
{
|
||||
// Configure EBI
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA |= AT91C_EBI_CS3A_SM;
|
||||
|
||||
// Configure SMC
|
||||
AT91C_BASE_SMC->SMC_SETUP3 = 0x00010001;
|
||||
AT91C_BASE_SMC->SMC_PULSE3 = 0x04030302;
|
||||
AT91C_BASE_SMC->SMC_CYCLE3 = 0x00070004;
|
||||
AT91C_BASE_SMC->SMC_CTRL3 = (AT91C_SMC_READMODE
|
||||
| AT91C_SMC_WRITEMODE
|
||||
| AT91C_SMC_NWAITM_NWAIT_DISABLE
|
||||
| ((0x1 << 16) & AT91C_SMC_TDF));
|
||||
|
||||
if (busWidth == 8) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Configures the EBI for NorFlash access
|
||||
/// \Param busWidth Bus width
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNorFlash(unsigned char busWidth)
|
||||
{
|
||||
// Configure SMC
|
||||
|
||||
AT91C_BASE_SMC->SMC_SETUP0 = 0x00000002;
|
||||
AT91C_BASE_SMC->SMC_PULSE0 = 0x0A0A0A06;
|
||||
AT91C_BASE_SMC->SMC_CYCLE0 = 0x000A000A;
|
||||
AT91C_BASE_SMC->SMC_CTRL0 = (AT91C_SMC_READMODE
|
||||
| AT91C_SMC_WRITEMODE
|
||||
| AT91C_SMC_NWAITM_NWAIT_DISABLE
|
||||
| ((0x1 << 16) & AT91C_SMC_TDF));
|
||||
|
||||
if (busWidth == 8) {
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
else if (busWidth == 32) {
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Configures the EBI for NorFlash access at 48MHz.
|
||||
/// \Param busWidth Bus width
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNorFlash48MHz(unsigned char busWidth)
|
||||
{
|
||||
// Configure SMC
|
||||
AT91C_BASE_SMC->SMC_SETUP0 = 0x00000001;
|
||||
AT91C_BASE_SMC->SMC_PULSE0 = 0x07070703;
|
||||
AT91C_BASE_SMC->SMC_CYCLE0 = 0x00070007;
|
||||
AT91C_BASE_SMC->SMC_CTRL0 = (AT91C_SMC_READMODE
|
||||
| AT91C_SMC_WRITEMODE
|
||||
| AT91C_SMC_NWAITM_NWAIT_DISABLE
|
||||
| ((0x1 << 16) & AT91C_SMC_TDF));
|
||||
|
||||
if (busWidth == 8) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
else if (busWidth == 32) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL0 |= AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef BOARD_MEMORIES_H
|
||||
#define BOARD_MEMORIES_H
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
#define VDDMEMSEL_1V8 0
|
||||
#define VDDMEMSEL_3V3 1
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
extern void BOARD_RemapRom(void);
|
||||
|
||||
extern void BOARD_RemapRam(void);
|
||||
|
||||
extern void BOARD_ConfigureVddMemSel(unsigned char VddMemSel);
|
||||
|
||||
extern void BOARD_ConfigureSdram(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureDdram(unsigned char ddrModel, unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureBcram(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNandFlash(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNandFlash48MHz(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNorFlash(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNorFlash48MHz(unsigned char busWidth);
|
||||
|
||||
#endif //#ifndef BOARD_MEMORIES_H
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
#include <pmc/pmc.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal variables
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Put the CPU in IDLE mode with CP15
|
||||
//------------------------------------------------------------------------------
|
||||
void LowPowerMode(void)
|
||||
{
|
||||
PMC_CPUInIdleMode();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Returns to normal mode automatically
|
||||
//------------------------------------------------------------------------------
|
||||
void NormalPowerMode(void)
|
||||
{
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
///
|
||||
/// !Usage
|
||||
///
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_POWERMODE_H
|
||||
#define BOARD_POWERMODE_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
extern void LowPowerMode(void);
|
||||
|
||||
extern void NormalPowerMode(void);
|
||||
|
||||
#endif //#ifndef BOARD_MEMORIES_H
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,130 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition of AT91CAP9 characteristics and features
|
||||
///
|
||||
/// !Usage
|
||||
/// -# For ARM core feature, see "AT91CAP9 - ARM core features".
|
||||
/// -# For IP features, see "AT91CAP9 - IP features".
|
||||
/// -# For misc, see "AT91CAP9 - Misc".
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef CHIP_H
|
||||
#define CHIP_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9 - ARM core features"
|
||||
/// This page lists several characteristics related to the ARM core
|
||||
///
|
||||
|
||||
//ARM core features
|
||||
|
||||
/// ARM core definition.
|
||||
#define arm926ej_s
|
||||
|
||||
/// family definition.
|
||||
//#define at91cap9 (already defined)
|
||||
|
||||
/// temporary define, to be removed
|
||||
#define CP15_PRESENT
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9 - IP features"
|
||||
/// This page lists several characteristics related to the embedded IP
|
||||
///
|
||||
|
||||
//IP FEATURES
|
||||
|
||||
// DMA channels number
|
||||
#define CHIP_DMA_CHANNEL_NUM 4
|
||||
|
||||
/// Indicates chip has an UDP High Speed.
|
||||
#define CHIP_USB_UDPHS
|
||||
|
||||
/// Indicates chip has an Host Full Speed.
|
||||
#define CHIP_USB_UHP_OHCI
|
||||
|
||||
/// Indicates chip has an internal pull-up.
|
||||
#define CHIP_USB_PULLUP_INTERNAL
|
||||
|
||||
/// Number of USB endpoints
|
||||
#define CHIP_USB_NUMENDPOINTS 8
|
||||
|
||||
/// Endpoints max paxcket size
|
||||
#define CHIP_USB_ENDPOINTS_MAXPACKETSIZE(i) \
|
||||
((i == 0) ? 64 : \
|
||||
((i == 1) ? 1024 : \
|
||||
((i == 2) ? 1024 : \
|
||||
((i == 3) ? 1024 : \
|
||||
((i == 4) ? 1024 : \
|
||||
((i == 5) ? 1024 : \
|
||||
((i == 6) ? 1024 : \
|
||||
((i == 7) ? 1024 : 0 ))))))))
|
||||
|
||||
/// Endpoints Number of Bank
|
||||
#define CHIP_USB_ENDPOINTS_BANKS(i) \
|
||||
((i == 0) ? 1 : \
|
||||
((i == 1) ? 3 : \
|
||||
((i == 2) ? 3 : \
|
||||
((i == 3) ? 2 : \
|
||||
((i == 4) ? 2 : \
|
||||
((i == 5) ? 2 : \
|
||||
((i == 6) ? 2 : \
|
||||
((i == 7) ? 2 : 0 ))))))))
|
||||
|
||||
/// Endpoints max paxcket size
|
||||
#define CHIP_USB_ENDPOINTS_DMA(i) \
|
||||
((i == 1) ? 1 : \
|
||||
((i == 2) ? 1 : \
|
||||
((i == 3) ? 1 : \
|
||||
((i == 4) ? 1 : \
|
||||
((i == 5) ? 1 : \
|
||||
((i == 6) ? 1 : 0 ))))))
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9 - Misc "
|
||||
/// This page lists misc features
|
||||
///
|
||||
|
||||
//Misc
|
||||
|
||||
#endif //#ifndef CHIP_H
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
# ----------------------------------------------------------------------------
|
||||
# ATMEL Microcontroller Software Support
|
||||
# ----------------------------------------------------------------------------
|
||||
# Copyright (c) 2008, Atmel Corporation
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the disclaimer below.
|
||||
#
|
||||
# Atmel's name may not be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# Defines which are the specific available IP for the chip AT91CAP9
|
||||
CHIP_CORE = arm926ej_s
|
||||
CHIP_IP_TS = NO_TSADC
|
||||
CHIP_IP_MCI = MCI_PDC
|
||||
CHIP_IP_UDP = USB_UDPHS
|
||||
CHIP_IP_UHP = USB_OHCI
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
|
||||
/*-Memory Regions-*/
|
||||
define symbol __ICFEDIT_region_SDRAM_start__ = 0x70000000;
|
||||
define symbol __ICFEDIT_region_SDRAM_end__ = 0x73FFFFFF;
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x100000;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x107fff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_startup__ = 0x100;
|
||||
define symbol __ICFEDIT_size_vectors__ = 0x100;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_sysstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_irqstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x0;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
|
||||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
|
||||
define region STA_region = mem:[from __ICFEDIT_region_SDRAM_start__ size __ICFEDIT_size_startup__];
|
||||
define region SDRAM_region = mem:[from __ICFEDIT_region_SDRAM_start__+__ICFEDIT_size_startup__ to __ICFEDIT_region_SDRAM_end__];
|
||||
|
||||
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
|
||||
define block SYS_STACK with alignment = 8, size = __ICFEDIT_size_sysstack__ { };
|
||||
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
|
||||
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
|
||||
|
||||
initialize by copy { section .vectors };
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place in STA_region { section .cstartup };
|
||||
place in VEC_region { section .vectors };
|
||||
place in SDRAM_region { readonly, readwrite, block IRQ_STACK, block SYS_STACK, block CSTACK, block HEAP };
|
|
@ -0,0 +1,89 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in external SDRAM on the AT91CAP9
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x100000, LENGTH = 0x08000
|
||||
sdram (W!RX) : ORIGIN = 0x70000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.data)
|
||||
*(.CP15_*)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sdram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
*(.vectors);
|
||||
*(.ramfunc)
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
} >sram
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
_sstack = 0x74000000;
|
||||
}
|
||||
end = .;
|
||||
|
||||
PROVIDE(__HEAP_START = _ezero );
|
|
@ -0,0 +1,49 @@
|
|||
; * ----------------------------------------------------------------------------
|
||||
; * ATMEL Microcontroller Software Support
|
||||
; * ----------------------------------------------------------------------------
|
||||
; * Copyright (c) 2008, Atmel Corporation
|
||||
; *
|
||||
; * All rights reserved.
|
||||
; *
|
||||
; * Redistribution and use in source and binary forms, with or without
|
||||
; * modification, are permitted provided that the following conditions are met:
|
||||
; *
|
||||
; * - Redistributions of source code must retain the above copyright notice,
|
||||
; * this list of conditions and the disclaimer below.
|
||||
; *
|
||||
; * Atmel's name may not be used to endorse or promote products derived from
|
||||
; * this software without specific prior written permission.
|
||||
; *
|
||||
; * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
; * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
; * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
; * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
; * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
; * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
; * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
; * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
; * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
; * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
; * ----------------------------------------------------------------------------
|
||||
|
||||
; *------------------------------------------------------------------------------
|
||||
; * Linker scatter for running in external SDRAM on the AT91SAMCAP9
|
||||
; *----------------------------------------------------------------------------*/
|
||||
|
||||
Load_region 0x70000000 0x4000000 {
|
||||
|
||||
Fixed_region 0x70000000 {
|
||||
*(cstartup +First)
|
||||
.ANY (+RO +RW +ZI)
|
||||
}
|
||||
|
||||
Relocate_region 0x100000 0x8000 {
|
||||
*.o (VECTOR, +First)
|
||||
}
|
||||
|
||||
ARM_LIB_HEAP 0x73FFE000 EMPTY 0x1000 {
|
||||
}
|
||||
|
||||
ARM_LIB_STACK 0x74000000 EMPTY -0x1000 {
|
||||
}
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in external SDRAM on the AT91CAP9
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x100000, LENGTH = 0x8000
|
||||
sdram (W!RX) : ORIGIN = 0x70000000, LENGTH = 0x4000000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
*(.data)
|
||||
*(.CP15_*)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sdram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
*(.vectors);
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
} >sram
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sdram
|
||||
|
||||
_sstack = 0x108000;
|
||||
}
|
||||
end = .;
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/*###ICF### Section handled by ICF editor, don't touch! ****/
|
||||
/*-Editor annotation file-*/
|
||||
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\a_v1_0.xml" */
|
||||
/*-Memory Regions-*/
|
||||
define symbol __ICFEDIT_region_RAM_start__ = 0x100000;
|
||||
define symbol __ICFEDIT_region_RAM_end__ = 0x107fff;
|
||||
/*-Sizes-*/
|
||||
define symbol __ICFEDIT_size_vectors__ = 0x100;
|
||||
define symbol __ICFEDIT_size_cstack__ = 0x1000;
|
||||
define symbol __ICFEDIT_size_sysstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_irqstack__ = 0x60;
|
||||
define symbol __ICFEDIT_size_heap__ = 0x0;
|
||||
/**** End of ICF editor section. ###ICF###*/
|
||||
|
||||
define memory mem with size = 4G;
|
||||
define region VEC_region = mem:[from __ICFEDIT_region_RAM_start__ size __ICFEDIT_size_vectors__];
|
||||
define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__+__ICFEDIT_size_vectors__ to __ICFEDIT_region_RAM_end__];
|
||||
|
||||
define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { };
|
||||
define block SYS_STACK with alignment = 8, size = __ICFEDIT_size_sysstack__ { };
|
||||
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
|
||||
define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { };
|
||||
|
||||
do not initialize { section .noinit };
|
||||
|
||||
place in VEC_region { section .vectors };
|
||||
place in RAM_region { section .cstartup, readonly, readwrite, block IRQ_STACK, block SYS_STACK, block CSTACK, block HEAP };
|
|
@ -0,0 +1,88 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in internal SRAM on the AT91CAP9
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
sram (W!RX) : ORIGIN = 0x100000, LENGTH = 0x8000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed = .;
|
||||
*(.vectors)
|
||||
*(.ramfunc)
|
||||
*(.text*)
|
||||
*(.rodata*)
|
||||
*(.data)
|
||||
*(.CP15_*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
. = ALIGN(4);
|
||||
_efixed = .;
|
||||
} >sram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
}
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
_sstack = 0x108000;
|
||||
}
|
||||
end = .;
|
||||
|
||||
PROVIDE(__HEAP_START = _ezero );
|
|
@ -0,0 +1,53 @@
|
|||
; * ----------------------------------------------------------------------------
|
||||
; * ATMEL Microcontroller Software Support
|
||||
; * ----------------------------------------------------------------------------
|
||||
; * Copyright (c) 2008, Atmel Corporation
|
||||
; *
|
||||
; * All rights reserved.
|
||||
; *
|
||||
; * Redistribution and use in source and binary forms, with or without
|
||||
; * modification, are permitted provided that the following conditions are met:
|
||||
; *
|
||||
; * - Redistributions of source code must retain the above copyright notice,
|
||||
; * this list of conditions and the disclaimer below.
|
||||
; *
|
||||
; * Atmel's name may not be used to endorse or promote products derived from
|
||||
; * this software without specific prior written permission.
|
||||
; *
|
||||
; * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
; * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
; * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
; * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
; * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
; * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
; * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
; * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
; * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
; * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
; * ----------------------------------------------------------------------------
|
||||
|
||||
; *------------------------------------------------------------------------------
|
||||
; * Linker scatter for running in internal SRAM on the AT91SAMCAP9
|
||||
; *----------------------------------------------------------------------------*/
|
||||
|
||||
Load_region 0x100000 0x8000 {
|
||||
|
||||
Fixed_region 0x100000 {
|
||||
*.o (VECTOR, +First)
|
||||
.ANY (+RO)
|
||||
}
|
||||
|
||||
Relocate_region +0 {
|
||||
*(cstartup +First)
|
||||
.ANY (+RW +ZI)
|
||||
}
|
||||
|
||||
ScatterAssert((ImageLength(Fixed_region) + ImageLength(Relocate_region)) < 0x7800)
|
||||
|
||||
ARM_LIB_HEAP 0x107800 EMPTY 0x400 {
|
||||
}
|
||||
|
||||
ARM_LIB_STACK 0x108000 EMPTY -0x400 {
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
* Linker script for running in internal SRAM on the AT91CAP9
|
||||
*----------------------------------------------------------------------------*/
|
||||
|
||||
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
|
||||
OUTPUT_ARCH(arm)
|
||||
ENTRY(entry)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
romcodesram (W!RX) : ORIGIN = 0x100000, LENGTH = 0x1000
|
||||
sram (W!RX) : ORIGIN = 0x101000, LENGTH = 0x7000
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.fixed0 :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed0 = .;
|
||||
*(.vectors)
|
||||
*(.text*)
|
||||
*(.CP15_*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
. = ALIGN(4);
|
||||
_efixed0 = .;
|
||||
_efixed = .;
|
||||
} >sram
|
||||
|
||||
.fixed1 :
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sfixed1 = .;
|
||||
*(.rodata*)
|
||||
*(.data)
|
||||
. = ALIGN(4);
|
||||
_efixed1 = .;
|
||||
} >sram
|
||||
|
||||
.prerelocate : AT (_efixed)
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_sprerelocate = .;
|
||||
. = ALIGN(4);
|
||||
_eprerelocate = .;
|
||||
}
|
||||
|
||||
.postrelocate : AT (_efixed + SIZEOF(.prerelocate))
|
||||
{
|
||||
. = ALIGN(4);
|
||||
_spostrelocate = .;
|
||||
. = ALIGN(4);
|
||||
_epostrelocate = .;
|
||||
}
|
||||
|
||||
.bss (NOLOAD) : {
|
||||
_szero = .;
|
||||
*(.bss)
|
||||
. = ALIGN(4);
|
||||
_ezero = .;
|
||||
} >sram
|
||||
|
||||
_sstack = 0x108000;
|
||||
}
|
||||
end = .;
|
||||
|
|
@ -0,0 +1,626 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \dir
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition and functions for using AT91CAP9-related features, such
|
||||
/// has PIO pins, memories, etc.
|
||||
///
|
||||
/// !Usage
|
||||
/// -# The code for booting the board is provided by board_cstartup.S and
|
||||
/// board_lowlevel.c.
|
||||
/// -# For using board PIOs, board characteristics (clock, etc.) and external
|
||||
/// components, see board.h.
|
||||
/// -# For manipulating memories (remapping, SDRAM, etc.), see board_memories.h.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
/// Definition of AT91CAP9-STK characteristics, AT91CAP9-dependant PIOs and
|
||||
/// external components interfacing.
|
||||
///
|
||||
/// !Usage
|
||||
/// -# For operating frequency information, see "AT91CAP9-STK - Operating frequencies".
|
||||
/// -# For using portable PIO definitions, see "AT91CAP9-STK - PIO definitions".
|
||||
/// -# Several USB definitions are included here (see "AT91CAP9-STK - USB device").
|
||||
/// -# For external components definitions, see "AT91CAP9-STK - External components".
|
||||
/// -# For memory-related definitions, see "AT91CAP9-STK - Memories".
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_H
|
||||
#define BOARD_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#if defined(at91cap9)
|
||||
#include "at91cap9/chip.h"
|
||||
#include "at91cap9/AT91CAP9.h"
|
||||
#else
|
||||
#error Board does not support the specified chip.
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-STK - Board Description"
|
||||
/// This page lists several definition related to the board description
|
||||
///
|
||||
/// !Definitions
|
||||
/// - BOARD_NAME
|
||||
|
||||
/// Name of the board.
|
||||
#define BOARD_NAME "AT91CAP9-STK"
|
||||
/// Board definition.
|
||||
#define at91cap9stk
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-STK - Operating frequencies"
|
||||
/// This page lists several definition related to the board operating frequency
|
||||
/// (when using the initialization done by board_lowlevel.c).
|
||||
///
|
||||
/// !Definitions
|
||||
/// - BOARD_MAINOSC
|
||||
/// - BOARD_MCK
|
||||
|
||||
/// Frequency of the board main oscillator.
|
||||
#define BOARD_MAINOSC 12000000
|
||||
|
||||
/// Master clock frequency (when using board_lowlevel.c).
|
||||
#define BOARD_MCK ((12000000 * 50 / 3) / 2)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// ADC
|
||||
//------------------------------------------------------------------------------
|
||||
/// ADC clock frequency, at 10-bit resolution (in Hz)
|
||||
#define ADC_MAX_CK_10BIT 5000000
|
||||
/// Startup time max, return from Idle mode (in µs)
|
||||
#define ADC_STARTUP_TIME_MAX 40
|
||||
/// Track and hold Acquisition Time min (in ns)
|
||||
#define ADC_TRACK_HOLD_TIME_MIN 500
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-STK - USB device"
|
||||
///
|
||||
/// !Constants
|
||||
/// - BOARD_USB_BMATTRIBUTES
|
||||
|
||||
/// USB attributes configuration descriptor (bus or self powered, remote wakeup)
|
||||
#define BOARD_USB_BMATTRIBUTES USBConfigurationDescriptor_SELFPOWERED_NORWAKEUP
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-STK - PIO definitions"
|
||||
/// This pages lists all the pio definitions contained in board.h. The constants
|
||||
/// are named using the following convention: PIN_* for a constant which defines
|
||||
/// a single Pin instance (but may include several PIOs sharing the same
|
||||
/// controller), and PINS_* for a list of Pin instances.
|
||||
///
|
||||
/// !Programmable clocks
|
||||
/// - PIN_PCK2
|
||||
///
|
||||
/// !DBGU
|
||||
/// - PINS_DBGU
|
||||
///
|
||||
/// !LEDs
|
||||
/// - PIN_LED_0
|
||||
/// - PIN_LED_1
|
||||
/// - PINS_LEDS
|
||||
/// - LED_POWER
|
||||
/// - LED_DS1
|
||||
/// - LED_DS2
|
||||
///
|
||||
/// !Push buttons
|
||||
/// - PIN_PUSHBUTTON_1
|
||||
/// - PIN_PUSHBUTTON_2
|
||||
/// - PINS_PUSHBUTTONS
|
||||
/// - PUSHBUTTON_BP1
|
||||
/// - PUSHBUTTON_BP2
|
||||
/// - JOYSTICK_LEFT
|
||||
/// - JOYSTICK_RIGHT
|
||||
///
|
||||
/// !SPI0
|
||||
/// - PIN_SPI0_MISO
|
||||
/// - PIN_SPI0_MOSI
|
||||
/// - PIN_SPI0_SPCK
|
||||
/// - PINS_SPI0
|
||||
/// - PIN_SPI0_NPCS0
|
||||
/// - PIN_SPI0_NPCS1
|
||||
/// - PIN_SPI0_NPCS2
|
||||
///
|
||||
/// !SPI1
|
||||
/// - PIN_SPI1_MISO
|
||||
/// - PIN_SPI1_MOSI
|
||||
/// - PIN_SPI1_SPCK
|
||||
/// - PINS_SPI1
|
||||
/// - PIN_SPI1_NPCS0
|
||||
///
|
||||
/// !SSC
|
||||
/// - PINS_SSC_TX
|
||||
///
|
||||
/// !PWMC
|
||||
/// - PIN_PWMC_PWM0
|
||||
/// - PIN_PWMC_PWM1
|
||||
/// - PIN_PWM_LED0
|
||||
/// - PIN_PWM_LED1
|
||||
/// - CHANNEL_PWM_LED0
|
||||
/// - CHANNEL_PWM_LED1
|
||||
///
|
||||
/// !ADC
|
||||
/// - PIN_ADC_ADC0
|
||||
/// - PIN_ADC_ADC1
|
||||
/// - PIN_ADC_ADC2
|
||||
/// - PIN_ADC_ADC3
|
||||
/// - PINS_ADC
|
||||
///
|
||||
/// !USB
|
||||
/// - PIN_USB_VBUS
|
||||
///
|
||||
/// !MCI
|
||||
/// - PINS_MCI
|
||||
///
|
||||
/// !TWI
|
||||
/// - PINS_TWI
|
||||
|
||||
/// PCK0 pin definition.
|
||||
#define PIN_PCK2 {AT91C_PA15_PCK2, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
/// List of all DBGU pin definitions.
|
||||
#define PINS_DBGU {(1<<30)|(1<<31), AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// LED #0 pin definition.
|
||||
#define PIN_LED_0 {AT91C_PIO_PA10, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_OUTPUT_0, PIO_DEFAULT}
|
||||
/// LED #1 pin definition.
|
||||
#define PIN_LED_1 {AT91C_PIO_PA14, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_OUTPUT_0, PIO_DEFAULT}
|
||||
/// List of all LEDs definitions.
|
||||
#define PINS_LEDS PIN_LED_0, PIN_LED_1
|
||||
|
||||
/// Push button #1 pin definition.
|
||||
#define PIN_PUSHBUTTON_1 {1 << 9, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_INPUT, PIO_PULLUP}
|
||||
/// Push button #2 pin definition.
|
||||
#define PIN_PUSHBUTTON_2 {1 << 8, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_INPUT, PIO_PULLUP}
|
||||
/// List of push button pin definitions.
|
||||
#define PINS_PUSHBUTTONS PIN_PUSHBUTTON_1, PIN_PUSHBUTTON_2
|
||||
/// Push button #1 index.
|
||||
#define PUSHBUTTON_BP1 0
|
||||
/// Push button #2 index.
|
||||
#define PUSHBUTTON_BP2 1
|
||||
/// Simulated joystick LEFT index.
|
||||
#define JOYSTICK_LEFT 0
|
||||
/// Simulated joystick RIGHT index.
|
||||
#define JOYSTICK_RIGHT 1
|
||||
|
||||
/// SPI MISO pin definition.
|
||||
#define PIN_SPI0_MISO {AT91C_PA0_SPI0_MISO, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_PULLUP}
|
||||
/// SPI MOSI pin definition.
|
||||
#define PIN_SPI0_MOSI {AT91C_PA1_SPI0_MOSI, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI SPCK pin definition.
|
||||
#define PIN_SPI0_SPCK {AT91C_PA2_SPI0_SPCK, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// List of SPI pin definitions (MISO, MOSI & SPCK).
|
||||
#define PINS_SPI0 PIN_SPI0_MISO, PIN_SPI0_MOSI, PIN_SPI0_SPCK
|
||||
/// SPI chip select 0 pin definition.
|
||||
#define PIN_SPI0_NPCS0 {AT91C_PA5_SPI0_NPCS0, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI chip select 1 pin definition.
|
||||
#define PIN_SPI0_NPCS1 {AT91C_PA3_SPI0_NPCS1, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI chip select 2 pin definition.
|
||||
#define PIN_SPI0_NPCS2 {AT91C_PA4_SPI0_NPCS2A, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// SPI chip select 3 pin definition.
|
||||
#define PIN_SPI0_NPCS3 {AT91C_PD1_SPI0_NPCS3D, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
/// SPI MISO pin definition.
|
||||
#define PIN_SPI1_MISO {AT91C_PB12_SPI1_MISO, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_PULLUP}
|
||||
/// SPI MOSI pin definition.
|
||||
#define PIN_SPI1_MOSI {AT91C_PB13_SPI1_MOSI, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// SPI SPCK pin definition.
|
||||
#define PIN_SPI1_SPCK {AT91C_PB14_SPI1_SPCK, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// List of SPI pin definitions (MISO, MOSI & SPCK).
|
||||
#define PINS_SPI1 PIN_SPI1_MISO, PIN_SPI1_MOSI, PIN_SPI1_SPCK
|
||||
/// SPI chip select 0 pin definition.
|
||||
#define PIN_SPI1_NPCS0 {AT91C_PB15_SPI1_NPCS0, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// SPI chip select 1 pin definition.
|
||||
#define PIN_SPI1_NPCS1 {AT91C_PB16_SPI1_NPCS1, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// SPI chip select 2 pin definition.
|
||||
#define PIN_SPI1_NPCS2 {AT91C_PB17_SPI1_NPCS2B, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// SPI chip select 3 pin definition.
|
||||
#define PIN_SPI1_NPCS3 {AT91C_PB18_SPI1_NPCS3B, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// SSC transmitter pins definition.
|
||||
#define PINS_SSC_TX { (1 << 0) | (1 << 1) | (1 << 2), \
|
||||
AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// PWMC PWM1 pin definition.
|
||||
#define PIN_PWMC_PWM1 {1 << 10, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// PWMC PWM2 pin definition.
|
||||
#define PIN_PWMC_PWM3 {1 << 11, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
/// PWM pin definition for LED0
|
||||
#define PIN_PWM_LED0 PIN_PWMC_PWM1
|
||||
/// PWM pin definition for LED1
|
||||
#define PIN_PWM_LED1 PIN_PWMC_PWM3
|
||||
/// PWM channel for LED0
|
||||
#define CHANNEL_PWM_LED0 1
|
||||
/// PWM channel for LED1
|
||||
#define CHANNEL_PWM_LED1 3
|
||||
|
||||
/// ADC_AD0 pin definition.
|
||||
#define PIN_ADC_ADC0 {AT91C_PB13_AD0, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD1 pin definition.
|
||||
#define PIN_ADC_ADC1 {AT91C_PB14_AD1, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD2 pin definition.
|
||||
#define PIN_ADC_ADC2 {AT91C_PB15_AD2, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD3 pin definition.
|
||||
#define PIN_ADC_ADC3 {AT91C_PB16_AD3, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD0 pin definition.
|
||||
#define PIN_ADC_ADC4 {AT91C_PB17_AD4, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD1 pin definition.
|
||||
#define PIN_ADC_ADC5 {AT91C_PB18_AD5, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD2 pin definition.
|
||||
#define PIN_ADC_ADC6 {AT91C_PB19_AD6, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// ADC_AD3 pin definition.
|
||||
#define PIN_ADC_ADC7 {AT91C_PB20_AD7, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
/// Pins ADC
|
||||
#define PINS_ADC PIN_ADC_ADC0, PIN_ADC_ADC1, PIN_ADC_ADC2, PIN_ADC_ADC3
|
||||
|
||||
/// USB monitoring pin definition.
|
||||
#define PIN_USB_VBUS {1 << 8, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
|
||||
/// List of MCI pins definitions.
|
||||
#define PINS_MCI {0x003F0000, AT91C_BASE_PIOA, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// TWI0 pins definition.
|
||||
#define PINS_TWI {(1<<4) | (1<<5), AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-STK - External components"
|
||||
/// This page lists the definitions related to external on-board components
|
||||
/// located in the board.h file for the AT91CAP9-STK.
|
||||
///
|
||||
/// !AT45 Dataflash
|
||||
/// - BOARD_AT45_A_SPI_BASE
|
||||
/// - BOARD_AT45_A_SPI_ID
|
||||
/// - BOARD_AT45_A_SPI_PINS
|
||||
/// - BOARD_AT45_A_SPI
|
||||
/// - BOARD_AT45_A_NPCS
|
||||
/// - BOARD_AT45_A_NPCS_PIN
|
||||
///
|
||||
/// !AT26 Serial Flash
|
||||
/// - BOARD_AT26_A_SPI_BASE
|
||||
/// - BOARD_AT26_A_SPI_ID
|
||||
/// - BOARD_AT26_A_SPI_PINS
|
||||
/// - BOARD_AT26_A_SPI
|
||||
/// - BOARD_AT26_A_NPCS
|
||||
/// - BOARD_AT26_A_NPCS_PIN
|
||||
///
|
||||
/// !LCD
|
||||
/// - PINS_LCD
|
||||
/// - BOARD_LCD_WIDTH
|
||||
/// - BOARD_LCD_HEIGHT
|
||||
/// - BOARD_LCD_BPP
|
||||
/// - BOARD_LCD_IFWIDTH
|
||||
/// - BOARD_LCD_FRAMESIZE_PIXELS
|
||||
/// - BOARD_LCD_FRAMESIZE
|
||||
/// - BOARD_LCD_FRAMERATE
|
||||
/// - BOARD_LCD_PIXELCLOCK
|
||||
/// - BOARD_LCD_DISPLAYTYPE
|
||||
/// - BOARD_LCD_POLARITY_INVVD
|
||||
/// - BOARD_LCD_POLARITY_INVFRAME
|
||||
/// - BOARD_LCD_POLARITY_INVLINE
|
||||
/// - BOARD_LCD_POLARITY_INVCLK
|
||||
/// - BOARD_LCD_POLARITY_INVDVAL
|
||||
/// - BOARD_LCD_CLOCKMODE
|
||||
/// - BOARD_LCD_TIMING_VFP
|
||||
/// - BOARD_LCD_TIMING_VBP
|
||||
/// - BOARD_LCD_TIMING_VPW
|
||||
/// - BOARD_LCD_TIMING_VHDLY
|
||||
/// - BOARD_LCD_TIMING_HFP
|
||||
/// - BOARD_LCD_TIMING_HBP
|
||||
/// - BOARD_LCD_TIMING_HPW
|
||||
///
|
||||
/// !TouchScreen
|
||||
/// - BOARD_TSC_ADS7843
|
||||
/// - PIN_TCS_IRQ
|
||||
/// - PIN_TCS_BUSY
|
||||
/// - BOARD_TSC_SPI_BASE
|
||||
/// - BOARD_TSC_SPI_ID
|
||||
/// - BOARD_TSC_SPI_PINS
|
||||
/// - BOARD_TSC_NPCS
|
||||
/// - BOARD_TSC_NPCS_PIN
|
||||
///
|
||||
/// !SD Card
|
||||
/// - BOARD_SD_MCI_BASE
|
||||
/// - BOARD_SD_MCI_ID
|
||||
/// - BOARD_SD_PINS
|
||||
/// - BOARD_SD_PIN_CD
|
||||
/// - BOARD_SD_SLOT
|
||||
///
|
||||
/// !EMAC
|
||||
/// - BOARD_EMAC_PHY_ADDR
|
||||
/// - BOARD_EMAC_PHY_COMP_LAN8700
|
||||
/// - BOARD_EMAC_PIN_PWRDN
|
||||
/// - BOARD_EMAC_MODE_RMII
|
||||
/// - BOARD_EMAC_PINS
|
||||
/// - BOARD_EMAC_PIN_RXDV
|
||||
/// - BOARD_EMAC_PIN_COL
|
||||
/// - BOARD_EMAC_RST_PINS
|
||||
/// - BOARD_EMAC_RUN_PINS
|
||||
///
|
||||
/// !AT73C213
|
||||
/// - BOARD_AT73C213_SPI
|
||||
/// - BOARD_AT73C213_SPI_ID
|
||||
/// - BOARD_AT73C213_NPCS
|
||||
/// - BOARD_AT73C213_SSC
|
||||
/// - BOARD_AT73C213_SSC_ID
|
||||
/// - BOARD_AT73C213_MCK
|
||||
///
|
||||
/// !AT98SC
|
||||
/// - BOARD_AT98SC_SPI_BASE
|
||||
/// - BOARD_AT98SC_SPI_ID
|
||||
/// - BOARD_AT98SC_SPI_PINS
|
||||
/// - BOARD_AT98SC_NPCS
|
||||
/// - BOARD_AT98SC_NPCS_PIN
|
||||
|
||||
/// Base address of SPI peripheral connected to the dataflash.
|
||||
#define BOARD_AT45_A_SPI_BASE AT91C_BASE_SPI0
|
||||
/// Identifier of SPI peripheral connected to the dataflash.
|
||||
#define BOARD_AT45_A_SPI_ID AT91C_ID_SPI0
|
||||
/// Pins of the SPI peripheral connected to the dataflash.
|
||||
#define BOARD_AT45_A_SPI_PINS PINS_SPI0
|
||||
/// Dataflahs SPI number.
|
||||
#define BOARD_AT45_A_SPI 0
|
||||
/// Chip select connected to the dataflash.
|
||||
#define BOARD_AT45_A_NPCS 0
|
||||
/// Chip select pin connected to the dataflash.
|
||||
#define BOARD_AT45_A_NPCS_PIN PIN_SPI0_NPCS0
|
||||
|
||||
/// Base address of SPI peripheral connected to the serialflash.
|
||||
#define BOARD_AT26_A_SPI_BASE AT91C_BASE_SPI
|
||||
/// Identifier of SPI peripheral connected to the serialflash.
|
||||
#define BOARD_AT26_A_SPI_ID AT91C_ID_SPI
|
||||
/// Pins of the SPI peripheral connected to the serialflash.
|
||||
#define BOARD_AT26_A_SPI_PINS PINS_SPI0
|
||||
/// Serialflash SPI number.
|
||||
#define BOARD_AT26_A_SPI 0
|
||||
/// Chip select connected to the serialflash.
|
||||
#define BOARD_AT26_A_NPCS 0
|
||||
/// Chip select pin connected to the serialflash.
|
||||
#define BOARD_AT26_A_NPCS_PIN PIN_SPI_NPCS0
|
||||
|
||||
/// LCD pin list.
|
||||
#define PINS_LCD \
|
||||
{0x00000200, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}, \
|
||||
{0x0FCFCFCE, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
|
||||
/// Display width in pixels.
|
||||
#define BOARD_LCD_WIDTH 240
|
||||
/// Display height in pixels.
|
||||
#define BOARD_LCD_HEIGHT 320
|
||||
/// Display resolution in bits per pixel (bpp).
|
||||
#define BOARD_LCD_BPP AT91C_LCDC_PIXELSIZE_TWENTYFOURBITSPERPIXEL
|
||||
/// Display interface width in bits.
|
||||
#define BOARD_LCD_IFWIDTH 24
|
||||
/// Frame size in pixels (height * width * bpp).
|
||||
#define BOARD_LCD_FRAMESIZE_PIXELS (BOARD_LCD_WIDTH * BOARD_LCD_HEIGHT * 24)
|
||||
/// Frame size in words (height * width * bpp / 32)
|
||||
#define BOARD_LCD_FRAMESIZE (BOARD_LCD_FRAMESIZE_PIXELS / 32)
|
||||
/// Frame rate in Hz.
|
||||
#define BOARD_LCD_FRAMERATE 60
|
||||
/// Pixel clock rate in Hz (frameSize * frameRate / interfaceWidth).
|
||||
#define BOARD_LCD_PIXELCLOCK (BOARD_LCD_FRAMESIZE_PIXELS * BOARD_LCD_FRAMERATE / BOARD_LCD_IFWIDTH)
|
||||
/// LCD display type.
|
||||
#define BOARD_LCD_DISPLAYTYPE AT91C_LCDC_DISTYPE_TFT
|
||||
/// LCDC polarity.
|
||||
#define BOARD_LCD_POLARITY_INVVD AT91C_LCDC_INVVD_NORMALPOL
|
||||
/// LCDVSYNC polarity.
|
||||
#define BOARD_LCD_POLARITY_INVFRAME AT91C_LCDC_INVFRAME_NORMALPOL
|
||||
/// LCDHSYNC polarity.
|
||||
#define BOARD_LCD_POLARITY_INVLINE AT91C_LCDC_INVLINE_NORMALPOL
|
||||
/// LCDDOTCLK polarity.
|
||||
#define BOARD_LCD_POLARITY_INVCLK AT91C_LCDC_INVCLK_NORMALPOL
|
||||
/// LCDDEN polarity.
|
||||
#define BOARD_LCD_POLARITY_INVDVAL AT91C_LCDC_INVDVAL_NORMALPOL
|
||||
/// Pixel clock mode.
|
||||
#define BOARD_LCD_CLOCKMODE AT91C_LCDC_CLKMOD_ALWAYSACTIVE
|
||||
/// Vertical front porch in number of lines.
|
||||
#define BOARD_LCD_TIMING_VFP 2
|
||||
/// Vertical back porch in number of lines.
|
||||
#define BOARD_LCD_TIMING_VBP 4
|
||||
/// Vertical pulse width in LCDDOTCLK cycles.
|
||||
#define BOARD_LCD_TIMING_VPW 1
|
||||
/// Number of cycles between VSYNC edge and HSYNC rising edge.
|
||||
#define BOARD_LCD_TIMING_VHDLY 1
|
||||
/// Horizontal front porch in LCDDOTCLK cycles.
|
||||
#define BOARD_LCD_TIMING_HFP 11
|
||||
/// Horizontal back porch in LCDDOTCLK cycles.
|
||||
#define BOARD_LCD_TIMING_HBP 17
|
||||
/// Horizontal pulse width in LCDDOTCLK cycles.
|
||||
#define BOARD_LCD_TIMING_HPW 5
|
||||
|
||||
/// Indicates board has an ADS7843 external component to manage Touch Screen
|
||||
#define BOARD_TSC_ADS7843
|
||||
|
||||
/// Touchscreen controller IRQ pin definition.
|
||||
#define PIN_TCS_IRQ {AT91C_PIO_PC4, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_INPUT, PIO_PULLUP}
|
||||
/// Touchscreen controller Busy pin definition.
|
||||
#define PIN_TCS_BUSY {AT91C_PIO_PC5, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEFAULT}
|
||||
|
||||
/// Base address of SPI peripheral connected to the touchscreen controller.
|
||||
#define BOARD_TSC_SPI_BASE AT91C_BASE_SPI0
|
||||
/// Identifier of SPI peripheral connected to the touchscreen controller.
|
||||
#define BOARD_TSC_SPI_ID AT91C_ID_SPI0
|
||||
/// Pins of the SPI peripheral connected to the touchscreen controller.
|
||||
#define BOARD_TSC_SPI_PINS PINS_SPI0
|
||||
/// Chip select connected to the touchscreen controller.
|
||||
#define BOARD_TSC_NPCS 1
|
||||
/// Chip select pin connected to the touchscreen controller.
|
||||
#define BOARD_TSC_NPCS_PIN PIN_SPI0_NPCS1
|
||||
|
||||
/// Base address of the MCI peripheral connected to the SD card.
|
||||
#define BOARD_SD_MCI_BASE AT91C_BASE_MCI1
|
||||
/// Peripheral identifier of the MCI connected to the SD card.
|
||||
#define BOARD_SD_MCI_ID AT91C_ID_MCI1
|
||||
/// MCI pins that shall be configured to access the SD card.
|
||||
#define BOARD_SD_PINS PINS_MCI
|
||||
/// MCI slot to which the SD card is connected to.
|
||||
#define BOARD_SD_SLOT MCI_SD_SLOTA
|
||||
/// SD card detection pin definition.
|
||||
#define BOARD_SD_PIN_CD {AT91C_PIO_PC21, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_INPUT, PIO_PULLUP}
|
||||
|
||||
/// Base address of the MCI peripheral connected to the SD card.
|
||||
#define BOARD_SD_MCI1_BASE BOARD_SD_MCI_BASE
|
||||
/// Peripheral identifier of the MCI connected to the SD card.
|
||||
#define BOARD_SD_MCI1_ID BOARD_SD_MCI_ID
|
||||
/// MCI pins that shall be configured to access the SD card.
|
||||
#define BOARD_SD_MCI1_PINS PINS_MCI
|
||||
/// Second MCI slot to which the SD card is connected to.
|
||||
#define BOARD_SD_MCI1_SLOT MCI_SD_SLOTA
|
||||
/// SD card detection pin definition.
|
||||
#define BOARD_SD_MCI1_PIN_CD BOARD_SD_PIN_CD
|
||||
|
||||
/// PHY address
|
||||
#define BOARD_EMAC_PHY_ADDR 31
|
||||
/// PHY component
|
||||
#define BOARD_EMAC_PHY_COMP_LAN8700 1
|
||||
/// Board EMAC work mode - RMII/MII ( 1 / 0 )
|
||||
#define BOARD_EMAC_MODE_RMII 1
|
||||
/// Board EMAC Power Up control pin
|
||||
#define BOARD_EMAC_PIN_PWRDN { (1<<31), AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_OUTPUT_1, PIO_DEFAULT}
|
||||
/// The PIN list of PIO for EMAC
|
||||
#define BOARD_EMAC_PINS {0x7FE00000, AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}, \
|
||||
{0x0FF00000, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_PERIPH_B, PIO_DEFAULT}
|
||||
#define BOARD_EMAC_PIN_RXDV {(1<<22), AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
#define BOARD_EMAC_PIN_COL {(1<<26), AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
#define BOARD_EMAC_RESET {(1<<9), AT91C_BASE_PIOB, AT91C_ID_PIOABCD, PIO_OUTPUT_1, PIO_DEFAULT}
|
||||
/// The PIN Configure list for EMAC on power up reset (MII)
|
||||
#define BOARD_EMAC_RST_PINS BOARD_EMAC_PIN_RXDV, BOARD_EMAC_PIN_COL
|
||||
/// The runtime pin configure list for EMAC
|
||||
#define BOARD_EMAC_RUN_PINS BOARD_EMAC_PINS
|
||||
|
||||
/// Base address of SPI peripheral to which the DAC is connected.
|
||||
#define BOARD_AT73C213_SPI AT91C_BASE_SPI0
|
||||
/// Peripheral ID of the SPI connected to the DAC.
|
||||
#define BOARD_AT73C213_SPI_ID AT91C_ID_SPI0
|
||||
/// Chip select value for accessing the DAC with the SPI.
|
||||
#define BOARD_AT73C213_SPI_NPCS 2
|
||||
/// Pins to configure for the SPI interface.
|
||||
#define BOARD_AT73C213_SPI_PINS PINS_SPI0, PIN_SPI0_NPCS2
|
||||
/// SSC peripheral to which the DAC is connected.
|
||||
#define BOARD_AT73C213_SSC AT91C_BASE_SSC0
|
||||
/// Peripheral ID of the SSC connected to the DAC.
|
||||
#define BOARD_AT73C213_SSC_ID AT91C_ID_SSC0
|
||||
/// Pins to configure for the SSC interface.
|
||||
#define BOARD_AT73C213_SSC_PINS PINS_SSC_TX
|
||||
/// PCK pin connected to the DAC MCK pin
|
||||
#define BOARD_AT73C213_MCK PIN_PCK2
|
||||
|
||||
/// Base address of SPI peripheral connected to the AT98 secure chip
|
||||
#define BOARD_AT98SC_SPI_BASE AT91C_BASE_SPI1
|
||||
/// Identifier of SPI peripheral connected to the AT98 secure chip
|
||||
#define BOARD_AT98SC_SPI_ID AT91C_ID_SPI1
|
||||
/// Pins of the SPI peripheral connected to the AT98 secure chip
|
||||
#define BOARD_AT98SC_SPI_PINS PINS_SPI1
|
||||
/// Chip select connected to the AT98 secure chip
|
||||
#define BOARD_AT98SC_NPCS 0
|
||||
/// Chip select pin connected to the AT98 secure chip
|
||||
#define BOARD_AT98SC_NPCS_PIN PIN_SPI1_NPCS0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-STK - Memories"
|
||||
/// This page lists definitions related to external on-board memories.
|
||||
///
|
||||
/// !SDRAM
|
||||
/// - BOARD_SDRAM_SIZE
|
||||
/// - PIN_SDRAM
|
||||
/// - BOARD_SDRAM_BUSWIDTH
|
||||
///
|
||||
/// !Nandflash
|
||||
/// - PINS_NANDFLASH
|
||||
/// - BOARD_NF_CE_PIN
|
||||
/// - BOARD_NF_RB_PIN
|
||||
/// - BOARD_NF_COMMAND_ADDR
|
||||
/// - BOARD_NF_ADDRESS_ADDR
|
||||
/// - BOARD_NF_DATA_ADDR
|
||||
|
||||
/// Board SDRAM size
|
||||
#define BOARD_SDRAM_SIZE (64*1024*1024) // 64 MB
|
||||
/// List of all SDRAM pins definitions.
|
||||
#define PINS_SDRAM {0xFFFF0000, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_PERIPH_A, PIO_DEFAULT}
|
||||
/// SDRAM bus width.
|
||||
#define BOARD_SDRAM_BUSWIDTH 32
|
||||
|
||||
/// Nandflash controller peripheral pins definition.
|
||||
#define PINS_NANDFLASH BOARD_NF_CE_PIN
|
||||
/// Nandflash output enable pin definition.
|
||||
//#define PIN_NF_OE // => dedicated pin
|
||||
/// Nandflash write enable pin definition
|
||||
//#define PIN_NF_WE // => dedicated pin
|
||||
/// Nandflash chip enable pin definition.
|
||||
#define BOARD_NF_CE_PIN {1 << 15, AT91C_BASE_PIOD, AT91C_ID_PIOABCD, PIO_OUTPUT_1, PIO_DEFAULT}
|
||||
/// Nandflash ready/busy pin definition.
|
||||
#define BOARD_NF_RB_PIN { 0, 0, 0, 0, 0}// Not used on the DK board. Use Read Status Register Command
|
||||
/// Address for transferring command bytes to the nandflash.
|
||||
#define BOARD_NF_COMMAND_ADDR 0x40400000
|
||||
/// Address for transferring address bytes to the nandflash.
|
||||
#define BOARD_NF_ADDRESS_ADDR 0x40200000
|
||||
/// Address for transferring data bytes to the nandflash.
|
||||
#define BOARD_NF_DATA_ADDR 0x40000000
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Library naming workaround
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \page "AT91CAP9-STK- Individual chip definition"
|
||||
/// This page lists the definitions related to different chip's definition
|
||||
/// located in the board.h file for the AT91CAP9-STK.
|
||||
|
||||
/// Twi eeprom
|
||||
#define BOARD_ID_TWI_EEPROM AT91C_ID_TWI
|
||||
#define BOARD_BASE_TWI_EEPROM AT91C_BASE_TWI
|
||||
#define BOARD_PINS_TWI_EEPROM PINS_TWI
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
#endif //#ifndef BOARD_H
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
# ----------------------------------------------------------------------------
|
||||
# ATMEL Microcontroller Software Support
|
||||
# ----------------------------------------------------------------------------
|
||||
# Copyright (c) 2008, Atmel Corporation
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# - Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the disclaimer below.
|
||||
#
|
||||
# Atmel's name may not be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# Defines which are the available memory targets for the AT91CAP9-DK board.
|
||||
|
||||
MEMORIES = sdram sram
|
||||
|
|
@ -0,0 +1,191 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define IRQ_STACK_SIZE 8*3*4
|
||||
|
||||
#define ARM_MODE_ABT 0x17
|
||||
#define ARM_MODE_FIQ 0x11
|
||||
#define ARM_MODE_IRQ 0x12
|
||||
#define ARM_MODE_SVC 0x13
|
||||
|
||||
#define I_BIT 0x80
|
||||
#define F_BIT 0x40
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Startup routine
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
.align 4
|
||||
.arm
|
||||
|
||||
/* Exception vectors
|
||||
*******************/
|
||||
.section .vectors, "a", %progbits
|
||||
|
||||
resetVector:
|
||||
ldr pc, =resetHandler /* Reset */
|
||||
undefVector:
|
||||
b undefVector /* Undefined instruction */
|
||||
swiVector:
|
||||
b swiVector /* Software interrupt */
|
||||
prefetchAbortVector:
|
||||
b prefetchAbortVector /* Prefetch abort */
|
||||
dataAbortVector:
|
||||
b dataAbortVector /* Data abort */
|
||||
reservedVector:
|
||||
b reservedVector /* Reserved for future use */
|
||||
irqVector:
|
||||
b irqHandler /* Interrupt */
|
||||
fiqVector:
|
||||
/* Fast interrupt */
|
||||
//------------------------------------------------------------------------------
|
||||
/// Handles a fast interrupt request by branching to the address defined in the
|
||||
/// AIC.
|
||||
//------------------------------------------------------------------------------
|
||||
fiqHandler:
|
||||
b fiqHandler
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Handles incoming interrupt requests by branching to the corresponding
|
||||
/// handler, as defined in the AIC. Supports interrupt nesting.
|
||||
//------------------------------------------------------------------------------
|
||||
irqHandler:
|
||||
|
||||
/* Save interrupt context on the stack to allow nesting */
|
||||
sub lr, lr, #4
|
||||
stmfd sp!, {lr}
|
||||
mrs lr, SPSR
|
||||
stmfd sp!, {r0, lr}
|
||||
|
||||
/* Write in the IVR to support Protect Mode */
|
||||
ldr lr, =AT91C_BASE_AIC
|
||||
ldr r0, [lr, #AIC_IVR]
|
||||
str lr, [lr, #AIC_IVR]
|
||||
|
||||
/* Branch to interrupt handler in Supervisor mode */
|
||||
msr CPSR_c, #ARM_MODE_SVC
|
||||
stmfd sp!, {r1-r3, r4, r12, lr}
|
||||
blx r0
|
||||
|
||||
/* Restore scratch/used registers and LR from User Stack */
|
||||
/* Disable Interrupt and switch back in IRQ mode */
|
||||
ldmia sp!, {r1-r3, r4, r12, lr}
|
||||
msr CPSR_c, #ARM_MODE_IRQ | I_BIT
|
||||
|
||||
/* Acknowledge interrupt */
|
||||
ldr lr, =AT91C_BASE_AIC
|
||||
str lr, [lr, #AIC_EOICR]
|
||||
|
||||
/* Restore interrupt context and branch back to calling code */
|
||||
ldmia sp!, {r0, lr}
|
||||
msr SPSR_cxsf, lr
|
||||
ldmia sp!, {pc}^
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initializes the chip and branches to the main() function.
|
||||
//------------------------------------------------------------------------------
|
||||
.section .text
|
||||
.global entry
|
||||
|
||||
entry:
|
||||
resetHandler:
|
||||
|
||||
/* Useless instruction for referencing the .vectors section */
|
||||
ldr r0, =resetVector
|
||||
|
||||
/* Set pc to actual code location (i.e. not in remap zone) */
|
||||
ldr pc, =1f
|
||||
|
||||
/* Initialize the prerelocate segment */
|
||||
1:
|
||||
ldr r0, =_efixed
|
||||
ldr r1, =_sprerelocate
|
||||
ldr r2, =_eprerelocate
|
||||
1:
|
||||
cmp r1, r2
|
||||
ldrcc r3, [r0], #4
|
||||
strcc r3, [r1], #4
|
||||
bcc 1b
|
||||
|
||||
/* Perform low-level initialization of the chip using LowLevelInit() */
|
||||
ldr sp, =_sstack
|
||||
stmfd sp!, {r0}
|
||||
ldr r0, =LowLevelInit
|
||||
blx r0
|
||||
|
||||
/* Initialize the postrelocate segment */
|
||||
|
||||
ldmfd sp!, {r0}
|
||||
ldr r1, =_spostrelocate
|
||||
ldr r2, =_epostrelocate
|
||||
1:
|
||||
cmp r1, r2
|
||||
ldrcc r3, [r0], #4
|
||||
strcc r3, [r1], #4
|
||||
bcc 1b
|
||||
|
||||
/* Clear the zero segment */
|
||||
ldr r0, =_szero
|
||||
ldr r1, =_ezero
|
||||
mov r2, #0
|
||||
1:
|
||||
cmp r0, r1
|
||||
strcc r2, [r0], #4
|
||||
bcc 1b
|
||||
|
||||
/* Setup stacks
|
||||
**************/
|
||||
/* IRQ mode */
|
||||
msr CPSR_c, #ARM_MODE_IRQ | I_BIT | F_BIT
|
||||
ldr sp, =_sstack
|
||||
sub r4, sp, #IRQ_STACK_SIZE
|
||||
|
||||
/* Supervisor mode (interrupts enabled) */
|
||||
msr CPSR_c, #ARM_MODE_SVC | F_BIT
|
||||
mov sp, r4
|
||||
|
||||
/* Branch to main()
|
||||
******************/
|
||||
ldr r0, =main
|
||||
blx r0
|
||||
|
||||
/* Loop indefinitely when program is finished */
|
||||
1:
|
||||
b 1b
|
||||
|
|
@ -0,0 +1,176 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
IAR startup file for AT91SAM9RL microcontrollers.
|
||||
*/
|
||||
|
||||
MODULE ?cstartup
|
||||
|
||||
;; Forward declaration of sections.
|
||||
SECTION IRQ_STACK:DATA:NOROOT(2)
|
||||
SECTION CSTACK:DATA:NOROOT(3)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define __ASSEMBLY__
|
||||
#include "board.h"
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#define ARM_MODE_ABT 0x17
|
||||
#define ARM_MODE_FIQ 0x11
|
||||
#define ARM_MODE_IRQ 0x12
|
||||
#define ARM_MODE_SVC 0x13
|
||||
#define ARM_MODE_SYS 0x1F
|
||||
|
||||
#define I_BIT 0x80
|
||||
#define F_BIT 0x40
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Startup routine
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
Exception vectors
|
||||
*/
|
||||
SECTION .vectors:CODE:NOROOT(2)
|
||||
|
||||
PUBLIC resetVector
|
||||
PUBLIC irqHandler
|
||||
|
||||
EXTERN Undefined_Handler
|
||||
EXTERN SWI_Handler
|
||||
EXTERN Prefetch_Handler
|
||||
EXTERN Abort_Handler
|
||||
EXTERN FIQ_Handler
|
||||
|
||||
ARM
|
||||
|
||||
__iar_init$$done: ; The interrupt vector is not needed
|
||||
; until after copy initialization is done
|
||||
|
||||
resetVector:
|
||||
; All default exception handlers (except reset) are
|
||||
; defined as weak symbol definitions.
|
||||
; If a handler is defined by the application it will take precedence.
|
||||
LDR pc, =resetHandler ; Reset
|
||||
LDR pc, Undefined_Addr ; Undefined instructions
|
||||
LDR pc, SWI_Addr ; Software interrupt (SWI/SYS)
|
||||
LDR pc, Prefetch_Addr ; Prefetch abort
|
||||
LDR pc, Abort_Addr ; Data abort
|
||||
B . ; RESERVED
|
||||
LDR pc, =irqHandler ; IRQ
|
||||
LDR pc, FIQ_Addr ; FIQ
|
||||
|
||||
Undefined_Addr: DCD Undefined_Handler
|
||||
SWI_Addr: DCD SWI_Handler
|
||||
Prefetch_Addr: DCD Prefetch_Handler
|
||||
Abort_Addr: DCD Abort_Handler
|
||||
FIQ_Addr: DCD FIQ_Handler
|
||||
|
||||
/*
|
||||
Handles incoming interrupt requests by branching to the corresponding
|
||||
handler, as defined in the AIC. Supports interrupt nesting.
|
||||
*/
|
||||
irqHandler:
|
||||
/* Save interrupt context on the stack to allow nesting */
|
||||
SUB lr, lr, #4
|
||||
STMFD sp!, {lr}
|
||||
MRS lr, SPSR
|
||||
STMFD sp!, {r0, lr}
|
||||
|
||||
/* Write in the IVR to support Protect Mode */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
LDR r0, [r14, #AIC_IVR]
|
||||
STR lr, [r14, #AIC_IVR]
|
||||
|
||||
/* Branch to interrupt handler in Supervisor mode */
|
||||
MSR CPSR_c, #ARM_MODE_SYS
|
||||
STMFD sp!, {r1-r3, r4, r12, lr}
|
||||
BLX r0
|
||||
LDMIA sp!, {r1-r3, r4, r12, lr}
|
||||
MSR CPSR_c, #ARM_MODE_IRQ | I_BIT
|
||||
|
||||
/* Acknowledge interrupt */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
STR lr, [r14, #AIC_EOICR]
|
||||
|
||||
/* Restore interrupt context and branch back to calling code */
|
||||
LDMIA sp!, {r0, lr}
|
||||
MSR SPSR_cxsf, lr
|
||||
LDMIA sp!, {pc}^
|
||||
|
||||
|
||||
/*
|
||||
After a reset, execution starts here, the mode is ARM, supervisor
|
||||
with interrupts disabled.
|
||||
Initializes the chip and branches to the main() function.
|
||||
*/
|
||||
SECTION .cstartup:CODE:NOROOT(2)
|
||||
|
||||
PUBLIC resetHandler
|
||||
EXTERN LowLevelInit
|
||||
EXTERN ?main
|
||||
REQUIRE resetVector
|
||||
ARM
|
||||
|
||||
resetHandler:
|
||||
|
||||
/* Set pc to actual code location (i.e. not in remap zone) */
|
||||
LDR pc, =label
|
||||
|
||||
/* Perform low-level initialization of the chip using LowLevelInit() */
|
||||
label:
|
||||
LDR r0, =LowLevelInit
|
||||
LDR r4, =SFE(CSTACK)
|
||||
MOV sp, r4
|
||||
BLX r0
|
||||
|
||||
/* Set up the interrupt stack pointer. */
|
||||
MSR cpsr_c, #ARM_MODE_IRQ | I_BIT | F_BIT ; Change the mode
|
||||
LDR sp, =SFE(IRQ_STACK)
|
||||
|
||||
/* Set up the SYS stack pointer. */
|
||||
MSR cpsr_c, #ARM_MODE_SYS | F_BIT ; Change the mode
|
||||
LDR sp, =SFE(CSTACK)
|
||||
|
||||
/* Branch to main() */
|
||||
LDR r0, =?main
|
||||
BLX r0
|
||||
|
||||
/* Loop indefinitely when program is finished */
|
||||
loop4:
|
||||
B loop4
|
||||
|
||||
END
|
|
@ -0,0 +1,206 @@
|
|||
; * ----------------------------------------------------------------------------
|
||||
; * ATMEL Microcontroller Software Support
|
||||
; * ----------------------------------------------------------------------------
|
||||
; * Copyright (c) 2008, Atmel Corporation
|
||||
; *
|
||||
; * All rights reserved.
|
||||
; *
|
||||
; * Redistribution and use in source and binary forms, with or without
|
||||
; * modification, are permitted provided that the following conditions are met:
|
||||
; *
|
||||
; * - Redistributions of source code must retain the above copyright notice,
|
||||
; * this list of conditions and the disclaimer below.
|
||||
; *
|
||||
; * Atmel's name may not be used to endorse or promote products derived from
|
||||
; * this software without specific prior written permission.
|
||||
; *
|
||||
; * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
; * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
; * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
; * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
; * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
; * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
; * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
; * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
; * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
; * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
; * ----------------------------------------------------------------------------
|
||||
|
||||
|
||||
; KEIL startup file for AT91SAMCAP9 microcontrollers.
|
||||
|
||||
; ------------------------------------------------------------------------------
|
||||
; Definitions
|
||||
; ------------------------------------------------------------------------------
|
||||
|
||||
; Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs
|
||||
|
||||
ARM_MODE_USR EQU 0x10
|
||||
ARM_MODE_FIQ EQU 0x11
|
||||
ARM_MODE_IRQ EQU 0x12
|
||||
ARM_MODE_SVC EQU 0x13
|
||||
ARM_MODE_ABT EQU 0x17
|
||||
ARM_MODE_UND EQU 0x1B
|
||||
ARM_MODE_SYS EQU 0x1F
|
||||
|
||||
I_BIT EQU 0x80 ; when I bit is set, IRQ is disabled
|
||||
F_BIT EQU 0x40 ; when F bit is set, FIQ is disabled
|
||||
|
||||
AT91C_BASE_AIC EQU 0xFFFFF000
|
||||
AIC_IVR EQU 0x100
|
||||
AIC_EOICR EQU 0x130
|
||||
|
||||
UND_Stack_Size EQU 0x00000000
|
||||
SVC_Stack_Size EQU 0x00000100
|
||||
ABT_Stack_Size EQU 0x00000000
|
||||
FIQ_Stack_Size EQU 0x00000000
|
||||
IRQ_Stack_Size EQU 0x00000080
|
||||
USR_Stack_Size EQU 0x00000400
|
||||
|
||||
PRESERVE8
|
||||
|
||||
; Area Definition and Entry Point
|
||||
; Startup Code must be linked first at Address at which it expects to run.
|
||||
|
||||
AREA VECTOR, CODE
|
||||
ARM
|
||||
|
||||
; Exception Vectors
|
||||
|
||||
Vectors
|
||||
LDR pc,=resetHandler
|
||||
undefVector
|
||||
b undefVector ; Undefined instruction
|
||||
swiVector
|
||||
b swiVector ; Software interrupt
|
||||
prefetchAbortVector
|
||||
b prefetchAbortVector ; Prefetch abort
|
||||
dataAbortVector
|
||||
b dataAbortVector ; Data abort
|
||||
reservedVector
|
||||
b reservedVector ; Reserved for future use
|
||||
irqVector
|
||||
b irqHandler ; Interrupt
|
||||
fiqVector
|
||||
; Fast interrupt
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; Handles a fast interrupt request by branching to the address defined in the
|
||||
; AIC.
|
||||
;------------------------------------------------------------------------------
|
||||
fiqHandler
|
||||
b fiqHandler
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; Handles incoming interrupt requests by branching to the corresponding
|
||||
; handler, as defined in the AIC. Supports interrupt nesting.
|
||||
;------------------------------------------------------------------------------
|
||||
irqHandler
|
||||
; Save interrupt context on the stack to allow nesting */
|
||||
SUB lr, lr, #4
|
||||
STMFD sp!, {lr}
|
||||
MRS lr, SPSR
|
||||
STMFD sp!, {r0,r1,lr}
|
||||
|
||||
; Write in the IVR to support Protect Mode */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
LDR r0, [r14, #AIC_IVR]
|
||||
STR lr, [r14, #AIC_IVR]
|
||||
|
||||
; Branch to interrupt handler in Supervisor mode */
|
||||
MSR CPSR_c, #ARM_MODE_SVC
|
||||
STMFD sp!, {r1-r4, r12, lr}
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
LDMIA sp!, {r1-r4, r12, lr}
|
||||
MSR CPSR_c, #ARM_MODE_IRQ | I_BIT
|
||||
|
||||
; Acknowledge interrupt */
|
||||
LDR lr, =AT91C_BASE_AIC
|
||||
STR lr, [r14, #AIC_EOICR]
|
||||
|
||||
; Restore interrupt context and branch back to calling code
|
||||
LDMIA sp!, {r0,r1,lr}
|
||||
MSR SPSR_cxsf, lr
|
||||
LDMIA sp!, {pc}^
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; After a reset, execution starts here, the mode is ARM, supervisor
|
||||
; with interrupts disabled.
|
||||
; Initializes the chip and branches to the main() function.
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
AREA cstartup, CODE
|
||||
ENTRY ; Entry point for the application
|
||||
|
||||
; Reset Handler
|
||||
|
||||
EXPORT resetHandler
|
||||
IMPORT |Image$$Fixed_region$$Limit|
|
||||
IMPORT |Image$$Relocate_region$$Base|
|
||||
IMPORT |Image$$Relocate_region$$ZI$$Base|
|
||||
IMPORT |Image$$Relocate_region$$ZI$$Limit|
|
||||
IMPORT |Image$$ARM_LIB_STACK$$Base|
|
||||
IMPORT |Image$$ARM_LIB_STACK$$ZI$$Limit|
|
||||
|
||||
; Perform low-level initialization of the chip using LowLevelInit()
|
||||
IMPORT LowLevelInit
|
||||
|
||||
resetHandler
|
||||
|
||||
; Set pc to actual code location (i.e. not in remap zone)
|
||||
LDR pc, =label
|
||||
label
|
||||
; Set up temporary stack (Top of the SRAM)
|
||||
LDR r0, = |Image$$ARM_LIB_STACK$$ZI$$Limit|
|
||||
MOV sp, r0
|
||||
; Call Low level init
|
||||
LDR r0, =LowLevelInit
|
||||
MOV lr, pc
|
||||
BX r0
|
||||
|
||||
|
||||
;Initialize the Relocate_region segment
|
||||
LDR r0, = |Image$$Fixed_region$$Limit|
|
||||
LDR r1, = |Image$$Relocate_region$$Base|
|
||||
LDR r3, = |Image$$Relocate_region$$ZI$$Base|
|
||||
|
||||
CMP r0, r1
|
||||
BEQ %1
|
||||
|
||||
; Copy init data
|
||||
0 CMP r1, r3
|
||||
LDRCC r2, [r0], #4
|
||||
STRCC r2, [r1], #4
|
||||
BCC %0
|
||||
|
||||
1 LDR r1, =|Image$$Relocate_region$$ZI$$Limit|
|
||||
MOV r2, #0
|
||||
2 CMP r3, r1
|
||||
STRCC r2, [r3], #4
|
||||
BCC %2
|
||||
|
||||
|
||||
; Setup Stack for each mode
|
||||
|
||||
LDR R0, = |Image$$ARM_LIB_STACK$$ZI$$Limit|
|
||||
|
||||
; Enter IRQ Mode and set its Stack Pointer
|
||||
MSR CPSR_c, #ARM_MODE_IRQ:OR:I_BIT:OR:F_BIT
|
||||
MOV SP, R0
|
||||
SUB R4, SP, #IRQ_Stack_Size
|
||||
|
||||
; Supervisor mode (interrupts enabled)
|
||||
MSR CPSR_c, #ARM_MODE_SVC | F_BIT
|
||||
MOV SP, R4
|
||||
|
||||
; Enter the C code
|
||||
|
||||
IMPORT __main
|
||||
LDR R0, =__main
|
||||
BX R0
|
||||
loop4
|
||||
B loop4
|
||||
|
||||
END
|
||||
|
|
@ -0,0 +1,480 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
Title: FPGA / CAP synchronization routines
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
#include <board.h>
|
||||
#include <rtt/rtt.h>
|
||||
#include <slck/slck.h>
|
||||
#include <pio/pio.h>
|
||||
#include <utility/trace.h>
|
||||
#include "board_fpga_init.h"
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA Config done on PC13 (CAP9S3-DKZ only)
|
||||
//------------------------------------------------------------------------------
|
||||
#define PIN_FPGA_CONFDONE {1 << 13, AT91C_BASE_PIOC, AT91C_ID_PIOABCD, PIO_INPUT, PIO_DEGLITCH}
|
||||
static const Pin pinPC13 = PIN_FPGA_CONFDONE;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Prototype of internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int fpga_synchro_newIF(void);
|
||||
unsigned int init_mpblock_revC(unsigned char mode);
|
||||
unsigned int fpga_synchro_revC(void);
|
||||
void init_mpbs_revC(volatile unsigned int* mpbs,char pun,char lp,char sup);
|
||||
unsigned int init_mpblock_revB(void);
|
||||
unsigned int fpga_synchro_revB(void);
|
||||
void init_mpbs_revB(volatile unsigned int* mpbs,char pun,char lp,char sup);
|
||||
void wait_slck_periods(int periods);
|
||||
void wait_for_FPGA_config(void);
|
||||
void wait_for_FPGA_config_CAP9S3(void);
|
||||
unsigned int search_last_match(void);
|
||||
unsigned int search_first_match(void);
|
||||
int fpga_pattern_ok(void);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Globlal variables
|
||||
//------------------------------------------------------------------------------
|
||||
int delay_status, master_cnt_hold, master_cnt;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA access initialization
|
||||
// Returns : programmed clk out delay if success
|
||||
// error code with pattern CACAB0Fx if fail
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int BOARD_InitMPBlock(unsigned char mode)
|
||||
{
|
||||
// Switch to external 32KHz if not done
|
||||
if(!SLCK_Is32k())SLCK_RCto32k();
|
||||
|
||||
if (!(RSTC_SR_REG&0x00000600)){
|
||||
wait_for_FPGA_config_CAP9S3(); // if POR, wait until FPGA is ready
|
||||
}
|
||||
|
||||
if(CAP9_CHECK_REVISION_REG == REV_B_CHECK_VALUE) {
|
||||
TRACE_INFO("Init MPBlock rev B\n\r");
|
||||
return(init_mpblock_revB()); // CAP9 revB detected
|
||||
}
|
||||
else {
|
||||
if(EXTENDED_CHIP_ID_REG) {
|
||||
TRACE_INFO("No init MPBlock : it is not a dev chip\n\r");
|
||||
return(NOT_A_DEV_CHIP_ERROR); // not a dev chip
|
||||
}
|
||||
else {
|
||||
TRACE_INFO("Init MPBlock rev C\n\r");
|
||||
return(init_mpblock_revC(mode)); // CAP9 revC detected
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// CAP9 / FPGA synchronization loop - CAP9 RevC / new interface
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int fpga_synchro_newIF (void)
|
||||
{
|
||||
unsigned int time = 0;
|
||||
unsigned int wait_loop1;
|
||||
unsigned int wait_loop2;
|
||||
unsigned int wait_loop3;
|
||||
unsigned int delay_ctrl, clkin_delay, clkin_delay_max,dw_width;
|
||||
|
||||
|
||||
//-- Write in CONFIG_INIT register
|
||||
//-- - dllin_used bit = 0 (used clock coming from FPGA)
|
||||
//-- - dllout_used bit = 0 (bypass the DelayLine OUT)
|
||||
//-- - drive_pad_by_sfr = - (drive pad by register)
|
||||
CONFIG_INIT_REG &= 0xFFFFFE7F; //outi(0xFDF00000+0x28, (ini(0xFDF00000+0x28) & 0xFFFFFE7F));
|
||||
|
||||
// clk_in setup
|
||||
delay_status = DELAY_STATUS_REG; //-- read in DELAY_STATUS register
|
||||
master_cnt_hold = ((delay_status & 0xFF00) >> 8) + 6;
|
||||
master_cnt = (delay_status & 0xFF0000) >> 16;
|
||||
|
||||
|
||||
//ERr
|
||||
//clkin_delay = (master_cnt_hold >> 2)-2; //start in data window
|
||||
clkin_delay = 0;
|
||||
DELAY_CTRL_REG=(clkin_delay << 16)|0x1;
|
||||
|
||||
//-- FPGA I/F INIT
|
||||
INIT_ARG_REG = 0x5C00;
|
||||
INIT_CMD_REG = 0x01; // INIT_CMD = INIT_CMD_START_INIT
|
||||
wait_loop1 = 5000000;while(wait_loop1--);
|
||||
wait_loop2 = 5000000;while(wait_loop2--);
|
||||
wait_loop3 = 5000000;while(wait_loop3--);
|
||||
|
||||
if (fpga_pattern_ok()){ // already in data window
|
||||
clkin_delay_max = search_last_match();
|
||||
clkin_delay = search_first_match();
|
||||
dw_width = clkin_delay_max + master_cnt_hold-clkin_delay;
|
||||
//ERr debug purppose
|
||||
printf("-I- Data window : 0x%02X to 0x%02X\n\r", clkin_delay,clkin_delay_max);
|
||||
clkin_delay = (clkin_delay+dw_width/2)%master_cnt_hold;
|
||||
}
|
||||
else{ // not in data window
|
||||
clkin_delay = search_first_match();
|
||||
clkin_delay_max = search_last_match();
|
||||
dw_width = clkin_delay_max-clkin_delay;
|
||||
//ERr debug purppose
|
||||
printf("-I- Data window : 0x%02X to 0x%02X\n\r", clkin_delay,clkin_delay_max);
|
||||
clkin_delay = (clkin_delay+dw_width/2)%master_cnt_hold;
|
||||
}
|
||||
|
||||
|
||||
// debug purppose
|
||||
printf("-I- Master count : 0x%02X\n\r", master_cnt);
|
||||
//clkin_delay = (master_cnt_hold >> 2)-2; //start in data window
|
||||
printf("-I- clk_in delay : 0x%02X\n\r", clkin_delay);
|
||||
printf("-I- data window width : 0x%02X (%dns)\n\r", dw_width,(dw_width*10/master_cnt));
|
||||
|
||||
|
||||
// Set clk in delay
|
||||
delay_ctrl = DELAY_CTRL_REG;
|
||||
DELAY_CTRL_REG=((delay_ctrl & ~(0xFF << 16)) | clkin_delay << 16);
|
||||
DELAY_CTRL_REG|=0x1;
|
||||
|
||||
|
||||
|
||||
// Cycle index select
|
||||
time = 0;
|
||||
while((CYCLE_IDX_RESP_R_LSB_REG != 0x0A7014E0)&&time++<FPGA_SYNCHRO_TIMEOUT3){
|
||||
INIT_ARG_REG = 0x02; // INIT_ARG = 2
|
||||
INIT_CMD_REG = 0x02; // INIT_CMD = INIT_CMD_ADD_CYCLE
|
||||
}
|
||||
if(time>FPGA_SYNCHRO_TIMEOUT3)return(FPGA_SYNCHRO_ERROR3);
|
||||
|
||||
|
||||
// Return the number of iterations
|
||||
return(time);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA access initialization - CAP9 RevC
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int init_mpblock_revC(unsigned char mode)
|
||||
{
|
||||
// AT91PS_CCFG pCCFG = (AT91PS_CCFG) AT91C_BASE_CCFG; //not used
|
||||
unsigned int ret_value;
|
||||
|
||||
// Enable clk
|
||||
*((unsigned int*)0xFFFFFC00)|=0x4;
|
||||
init_mpbs_revC(MPBS0,PULLUP_ON,MPIO_LP,MPIO_SUPPLY);
|
||||
|
||||
// User IF pad config
|
||||
/*
|
||||
*((unsigned int*)0xFDF00028)&=0xFFFFFFFD; // Drive pad by user if
|
||||
*((unsigned int*)0xFDF00034)=0x01000000; // MPIOB SUP
|
||||
*((unsigned int*)0xFDF00038)=0x00000000; // MPIOB SUP
|
||||
*((unsigned int*)0xFDF0003C)=0x00000000; // MPIOA SUP
|
||||
*((unsigned int*)0xFDF00040)=0x01000000; // MPIOB LP1
|
||||
*((unsigned int*)0xFDF00044)=0x00000000; // MPIOB LP2
|
||||
*((unsigned int*)0xFDF00048)=0x00000000; // MPIOA LP
|
||||
*((unsigned int*)0xFDF0004C)=0x00000000; // MPIOB PU1
|
||||
*((unsigned int*)0xFDF00050)=0x00000000; // MPIOB PU2
|
||||
*((unsigned int*)0xFDF00054)=0x00000000; // MPIOA PU
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __FPGA_IF_TYPE_DIV3
|
||||
FPGA_IF_TYPE_REG = 0x01;
|
||||
#endif
|
||||
|
||||
// DELAY LINE SETUP
|
||||
DELAY_CTRL_REG = 0x03; // write in DELAY_CTRL register enable_delay = 1 and update_delay = 1
|
||||
while (!(DELAY_STATUS_REG & 0x1)){} // wait master_is_locked = 1
|
||||
|
||||
|
||||
// FPGA IF synchronization loop
|
||||
TRACE_INFO("FPGA IF synchro loop...\n\r");
|
||||
|
||||
//#ifdef NEW_INTERFACE
|
||||
if (mode==NEW_IF){
|
||||
ret_value = fpga_synchro_newIF();
|
||||
if(ret_value>FPGA_SYNCHRO_TIMEOUT3)return(FPGA_SYNCHRO_ERROR3);
|
||||
}
|
||||
else{
|
||||
ret_value = fpga_synchro_revC();
|
||||
if ((ret_value&0xFFFF0000) == 0xCACA0000)return(ret_value);
|
||||
}
|
||||
//#endif
|
||||
TRACE_INFO("Synchro done\n\r");
|
||||
|
||||
// Switch to functionnal mode
|
||||
//outi(0x30DC00, 0xDC00);
|
||||
INIT_ARG_REG = 0x4C727354; // INIT_ARG = INIT_CMD_START_INIT
|
||||
INIT_ARG_REG = 0x4C6F634B; // INIT_ARG = INIT_CMD_START_INIT
|
||||
INIT_CMD_REG = 0x03; // INIT_CMD = INIT_CMD_CYCLE_IDX_LOCKED
|
||||
|
||||
// Return the programmed clock_out_delay value
|
||||
return(ret_value);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA access initialization - CAP9 RevC
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int fpga_synchro_revC(void)
|
||||
{
|
||||
unsigned char clk_out_delay_mean;
|
||||
unsigned char clk_out_delay = 0;
|
||||
unsigned int time = 0;
|
||||
|
||||
INIT_ARG_REG = 0x5C00; //
|
||||
wait_slck_periods(1); // about 30us (wait 10us for FPGA PLL relock)
|
||||
INIT_CMD_REG = 0x01; // INIT_CMD = INIT_CMD_START_INIT
|
||||
|
||||
//Search first match value
|
||||
time = 0;
|
||||
while(((CYCLE_IDX_RESP_R_LSB_REG != CYCLE_IDX_RESP_F_LSB_REG)||(CYCLE_IDX_RESP_R_MSB_REG != ~CYCLE_IDX_RESP_F_MSB_REG))&&time++<FPGA_SYNCHRO_TIMEOUT1)DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
if(time > FPGA_SYNCHRO_TIMEOUT1)return(FPGA_SYNCHRO_ERROR1);
|
||||
clk_out_delay_mean = clk_out_delay;
|
||||
|
||||
//Search last match value
|
||||
DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
while(((CYCLE_IDX_RESP_R_LSB_REG == CYCLE_IDX_RESP_F_LSB_REG)&&(CYCLE_IDX_RESP_R_MSB_REG == ~CYCLE_IDX_RESP_F_MSB_REG))&&time++<FPGA_SYNCHRO_TIMEOUT2)DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
if(time>FPGA_SYNCHRO_TIMEOUT2)return(FPGA_SYNCHRO_ERROR2);
|
||||
clk_out_delay_mean = (clk_out_delay_mean + clk_out_delay)/2;
|
||||
|
||||
// Setup to middle match value
|
||||
DELAY_CTRL_REG = (clk_out_delay_mean << 8) | 0x1;
|
||||
|
||||
|
||||
// Cycle index select
|
||||
time = 0;
|
||||
while((CYCLE_IDX_RESP_R_LSB_REG != 0x0A7014E0)&&time++<FPGA_SYNCHRO_TIMEOUT3) {
|
||||
INIT_ARG_REG = 0x02; // INIT_ARG = 2
|
||||
INIT_CMD_REG = 0x02; // INIT_CMD = INIT_CMD_ADD_CYCLE
|
||||
}
|
||||
if(time>FPGA_SYNCHRO_TIMEOUT3)return(FPGA_SYNCHRO_ERROR3);
|
||||
|
||||
// Return the programmed clock_out_delay value
|
||||
return ((unsigned int)clk_out_delay_mean);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Enable CAP to FPGA clock, and configure pads - CAP9 RevC
|
||||
//------------------------------------------------------------------------------
|
||||
// Updated for UMC pads
|
||||
void init_mpbs_revC(volatile unsigned int* mpbs,char pun,char lp,char sup)
|
||||
{
|
||||
unsigned int value;
|
||||
|
||||
if (mpbs!=MPBS0 && mpbs!=MPBS1 && mpbs!=MPBS2 && mpbs!=MPBS3)
|
||||
return;
|
||||
value = *mpbs | MPBS_ENABLE_BIT;
|
||||
|
||||
if (pun==PULLUP_ON) value&= ~(MPIOB_PUN_BIT|MPIOA_PUN_BIT);
|
||||
else if (pun==PULLUP_OFF) value|= (MPIOB_PUN_BIT|MPIOA_PUN_BIT);
|
||||
|
||||
if (lp==LOWPOWER_OFF) value|= (MPIOB_LP_BIT|MPIOA_LP_BIT);
|
||||
else if(lp==LOWPOWER_ON)value&= ~(MPIOB_LP_BIT|MPIOA_LP_BIT);
|
||||
|
||||
if (sup==SUPPLY_18) value|= (MPIOB_SUP_BIT|MPIOA_SUP_BIT);
|
||||
else if(sup==SUPPLY_33)value&= ~(MPIOB_SUP_BIT|MPIOA_SUP_BIT);
|
||||
|
||||
*mpbs = value;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA access initialization - CAP9 RevB
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int init_mpblock_revB(void)
|
||||
{
|
||||
// AT91PS_CCFG pCCFG = (AT91PS_CCFG) AT91C_BASE_CCFG; // not used
|
||||
unsigned int ret_value;
|
||||
|
||||
// Enable clk
|
||||
init_mpbs_revB(MPBS0,PULLUP_ON,MPIO_LP,MPIO_SUPPLY);
|
||||
|
||||
TRACE_INFO("FPGA IF synchro loop...\n\r");
|
||||
|
||||
#ifdef __FPGA_IF_TYPE_DIV3
|
||||
FPGA_IF_TYPE_REG = 0x01;
|
||||
#endif
|
||||
// DELAY LINE SETUP
|
||||
DELAY_CTRL_REG = 0x03; // write in DELAY_CTRL register enable_delay = 1 and update_delay = 1
|
||||
while (!(DELAY_STATUS_REG & 0x1)){} // wait master_is_locked = 1
|
||||
|
||||
// FPGA IF synchronization loop
|
||||
//ret_value = fpga_synchro_old();
|
||||
ret_value = fpga_synchro_revB();
|
||||
if ((ret_value&0xFFFF0000) == 0xCACA0000)return(ret_value);
|
||||
|
||||
TRACE_INFO("Synchro done\n\r");
|
||||
|
||||
// Switch to functionnal mode
|
||||
//outi(0x30DC00, 0xDC00);
|
||||
INIT_ARG_REG = 0x4C727354; // INIT_ARG = INIT_CMD_START_INIT
|
||||
INIT_ARG_REG = 0x4C6F634B; // INIT_ARG = INIT_CMD_START_INIT
|
||||
INIT_CMD_REG = 0x03; // INIT_CMD = INIT_CMD_CYCLE_IDX_LOCKED
|
||||
|
||||
// Return the programmed clock_out_delay value
|
||||
return(ret_value);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// CAP9 / FPGA synchronization loop - CAP9 RevB
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int fpga_synchro_revB(void)
|
||||
{
|
||||
unsigned char clk_out_delay_mean;
|
||||
unsigned char clk_out_delay = 0;
|
||||
unsigned int time = 0;
|
||||
|
||||
|
||||
INIT_ARG_REG = 0x5C00; //
|
||||
wait_slck_periods(1); // about 30us (wait 10us for FPGA PLL relock)
|
||||
INIT_CMD_REG = 0x01; // INIT_CMD = INIT_CMD_START_INIT
|
||||
|
||||
//Search first match value
|
||||
time = 0;
|
||||
while(((CYCLE_IDX_RESP_R_LSB_REG != CYCLE_IDX_RESP_F_LSB_REG)||(CYCLE_IDX_RESP_R_MSB_REG != ~CYCLE_IDX_RESP_F_MSB_REG))&&time++<FPGA_SYNCHRO_TIMEOUT1)DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
if(time > FPGA_SYNCHRO_TIMEOUT1)return(FPGA_SYNCHRO_ERROR1);
|
||||
clk_out_delay_mean = clk_out_delay;
|
||||
|
||||
//Search last match value
|
||||
DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
while(((CYCLE_IDX_RESP_R_LSB_REG == CYCLE_IDX_RESP_F_LSB_REG)&&(CYCLE_IDX_RESP_R_MSB_REG == ~CYCLE_IDX_RESP_F_MSB_REG))&&time++<FPGA_SYNCHRO_TIMEOUT2)DELAY_CTRL_REG=(clk_out_delay++ << 8)|0x1;
|
||||
if(time>FPGA_SYNCHRO_TIMEOUT2)return(FPGA_SYNCHRO_ERROR2);
|
||||
clk_out_delay_mean = (clk_out_delay_mean + clk_out_delay)/2;
|
||||
|
||||
// Setup to middle match value
|
||||
DELAY_CTRL_REG = (clk_out_delay_mean << 8) | 0x1;
|
||||
|
||||
// Cycle index select
|
||||
time = 0;
|
||||
while((CYCLE_IDX_RESP_R_LSB_REG != 0x0A7014E0)&&time++<FPGA_SYNCHRO_TIMEOUT3) {
|
||||
INIT_ARG_REG = 0x02; // INIT_ARG = 2
|
||||
INIT_CMD_REG = 0x02; // INIT_CMD = INIT_CMD_ADD_CYCLE
|
||||
}
|
||||
if(time>FPGA_SYNCHRO_TIMEOUT3)return(FPGA_SYNCHRO_ERROR3);
|
||||
|
||||
// Return the programmed clock_out_delay value
|
||||
return ((unsigned int)clk_out_delay_mean);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Enable CAP to FPGA clock, and configure pads - CAP9 RevB
|
||||
//------------------------------------------------------------------------------
|
||||
void init_mpbs_revB(volatile unsigned int* mpbs,char pun,char lp,char sup)
|
||||
{
|
||||
//AT91PS_CCFG pCCFG = (AT91PS_CCFG) AT91C_BASE_CCFG;
|
||||
//pCCFG->CCFG_MPBS0 |= (1<<31) | (1<<16) | (1<<24);
|
||||
unsigned int value;
|
||||
|
||||
if (mpbs!=MPBS0 && mpbs!=MPBS1 && mpbs!=MPBS2 && mpbs!=MPBS3)
|
||||
return;
|
||||
value = *mpbs | MPBS_ENABLE_BIT;
|
||||
|
||||
if (pun==PULLUP_ON) value&= ~(MPIOB_PUN_BIT|MPIOA_PUN_BIT);
|
||||
else if (pun==PULLUP_OFF) value|= (MPIOB_PUN_BIT|MPIOA_PUN_BIT);
|
||||
|
||||
if (lp==LOWPOWER_ON) value|= (MPIOB_LP_BIT|MPIOA_LP_BIT);
|
||||
else if(lp==LOWPOWER_OFF)value&= ~(MPIOB_LP_BIT|MPIOA_LP_BIT);
|
||||
|
||||
if (sup==SUPPLY_33) value|= (MPIOB_SUP_BIT|MPIOA_SUP_BIT);
|
||||
else if(sup==SUPPLY_18)value&= ~(MPIOB_SUP_BIT|MPIOA_SUP_BIT);
|
||||
|
||||
*mpbs = value;
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Wait specified number of slow clock periods (30.52uS if external 32KHz)
|
||||
//------------------------------------------------------------------------------
|
||||
void wait_slck_periods(int periods)
|
||||
{
|
||||
RTT_SetPrescaler(AT91C_BASE_RTTC, 1);
|
||||
while(RTT_GetTime(AT91C_BASE_RTTC)!=periods);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Wait for correct FPGA configuration (used after POR)
|
||||
//------------------------------------------------------------------------------
|
||||
void wait_for_FPGA_config()
|
||||
{
|
||||
int i;
|
||||
for(i=0;i<POWER_ON_TEMPO;++i);
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Wait for correct FPGA configuration (used after POR) / CAP9S3-DKZ
|
||||
//------------------------------------------------------------------------------
|
||||
void wait_for_FPGA_config_CAP9S3()
|
||||
{
|
||||
PIO_Configure(&pinPC13, 1);
|
||||
while(!PIO_Get(&pinPC13)); // Wait for config_done
|
||||
wait_slck_periods(4); // Wait 100us more for user mode
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FPGA pattern checking
|
||||
//------------------------------------------------------------------------------
|
||||
unsigned int search_last_match()
|
||||
{
|
||||
unsigned int clkin_delay;
|
||||
|
||||
clkin_delay = (DELAY_CTRL_REG >> 16)&(0xFF);
|
||||
while (fpga_pattern_ok() && (clkin_delay++ < master_cnt_hold))
|
||||
DELAY_CTRL_REG=(clkin_delay << 16)|0x1;
|
||||
|
||||
return clkin_delay;
|
||||
}
|
||||
|
||||
unsigned int search_first_match()
|
||||
{
|
||||
unsigned int clkin_delay;
|
||||
|
||||
clkin_delay = (DELAY_CTRL_REG >> 16)&(0xFF);
|
||||
while (!fpga_pattern_ok() && (clkin_delay++ < master_cnt_hold))
|
||||
DELAY_CTRL_REG=(clkin_delay << 16)|0x1;
|
||||
|
||||
return clkin_delay;
|
||||
}
|
||||
|
||||
int fpga_pattern_ok()
|
||||
{
|
||||
return((CYCLE_IDX_RESP_R_LSB_REG == CYCLE_IDX_RESP_F_LSB_REG)&&(CYCLE_IDX_RESP_R_MSB_REG == ~CYCLE_IDX_RESP_F_MSB_REG));
|
||||
}
|
||||
|
|
@ -0,0 +1,152 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef FPGA_INIT_H
|
||||
#define FPGA_INIT_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
// PAD configuration //////////////////////////////////////////////////////////
|
||||
#define MPIO_LP LOWPOWER_ON
|
||||
|
||||
/*
|
||||
#ifdef MPIO18
|
||||
#define MPIO_SUPPLY SUPPLY_18
|
||||
#else
|
||||
#define MPIO_SUPPLY SUPPLY_33
|
||||
#endif
|
||||
*/
|
||||
#define MPIO_SUPPLY SUPPLY_33
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CAP9 Part identification //////////////////////////////////////////
|
||||
#define EXTENDED_CHIP_ID_REG *((volatile unsigned int*)0xFFFFEE44)
|
||||
#define NOT_A_DEV_CHIP_ERROR 0xCACAB0F0
|
||||
#define CAP9_CHECK_REVISION_REG *((volatile unsigned int*)0xFFFFFCFC)
|
||||
#define REV_C_CHECK_VALUE 0x00000601
|
||||
#define REV_B_CHECK_VALUE 0x00000399
|
||||
#define NEW_IF 0
|
||||
#define OLD_IF 1
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define RSTC_SR_REG *((volatile unsigned int*)0xFFFFFD04)
|
||||
#define POWER_ON_TEMPO 0x00FFFFFF
|
||||
|
||||
#define __FPGA_IF_TYPE_DIV5
|
||||
// #define __FPGA_IF_TYPE_DIV3
|
||||
#define CLK_OUT_DELAY_MIN 28
|
||||
#define CLK_OUT_DELAY_MAX 50
|
||||
|
||||
#define FPGA_SYNCHRO_TIMEOUT1 180 // max iteration number for first clk_out_delay match value research
|
||||
#define FPGA_SYNCHRO_TIMEOUT2 180 // max iteration number for last clk_out_delay match value research
|
||||
#define FPGA_SYNCHRO_TIMEOUT3 10 // max iteration number for cycle index match value
|
||||
|
||||
#define FPGA_SYNCHRO_ERROR1 0xCACAB0F1 // timeout occured for first clk_out_delay match value research
|
||||
#define FPGA_SYNCHRO_ERROR2 0xCACAB0F2 // timeout occured for last clk_out_delay match value research
|
||||
#define FPGA_SYNCHRO_ERROR3 0xCACAB0F3 // timeout occured for cycle index match value
|
||||
|
||||
// CAP9 MP Block user interface registers /////////////////////////////////////
|
||||
#define MPBLOCK_USER_INTERFACE_BASE_ADDR (char*)0xFDF00000
|
||||
#define INIT_CMD_REG_OFFSET 0x00
|
||||
#define INIT_ARG_REG_OFFSET 0x04
|
||||
#define FPGA_IF_TYPE_REG_OFFSET 0x08
|
||||
#define CYCLE_IDX_RESP_R_LSB_REG_OFFSET 0x10
|
||||
#define CYCLE_IDX_RESP_R_MSB_REG_OFFSET 0x14
|
||||
#define CYCLE_IDX_RESP_F_LSB_REG_OFFSET 0x18
|
||||
#define CYCLE_IDX_RESP_F_MSB_REG_OFFSET 0x1C
|
||||
#define DELAY_CTRL_REG_OFFSET 0x20
|
||||
#define DELAY_STATUS_REG_OFFSET 0x24
|
||||
#define CONFIG_INIT_REG_OFFSET 0x28
|
||||
#define LOCK_IPS_KEY1_REG_OFFSET 0x30
|
||||
#define LOCK_IPS_KEY2_REG_OFFSET 0x34
|
||||
#define LOCK_IPS_KEY3_REG_OFFSET 0x38
|
||||
#define LOCK_IPS_KEY4_REG_OFFSET 0x3C
|
||||
#define UNLOCK_IPS_REG_OFFSET 0x40
|
||||
|
||||
#define INIT_CMD_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+INIT_CMD_REG_OFFSET))
|
||||
#define INIT_ARG_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+INIT_ARG_REG_OFFSET))
|
||||
#define FPGA_IF_TYPE_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+FPGA_IF_TYPE_REG_OFFSET))
|
||||
#define CYCLE_IDX_RESP_R_LSB_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+CYCLE_IDX_RESP_R_LSB_REG_OFFSET))
|
||||
#define CYCLE_IDX_RESP_R_MSB_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+CYCLE_IDX_RESP_R_MSB_REG_OFFSET))
|
||||
#define CYCLE_IDX_RESP_F_LSB_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+CYCLE_IDX_RESP_F_LSB_REG_OFFSET))
|
||||
#define CYCLE_IDX_RESP_F_MSB_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+CYCLE_IDX_RESP_F_MSB_REG_OFFSET))
|
||||
#define DELAY_CTRL_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+DELAY_CTRL_REG_OFFSET))
|
||||
#define DELAY_STATUS_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+DELAY_STATUS_REG_OFFSET))
|
||||
#define CONFIG_INIT_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+CONFIG_INIT_REG_OFFSET))
|
||||
#define LOCK_IPS_KEY1_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+LOCK_IPS_KEY1_REG_OFFSET))
|
||||
#define LOCK_IPS_KEY2_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+LOCK_IPS_KEY2_REG_OFFSET))
|
||||
#define LOCK_IPS_KEY3_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+LOCK_IPS_KEY3_REG_OFFSET))
|
||||
#define LOCK_IPS_KEY4_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+LOCK_IPS_KEY4_REG_OFFSET))
|
||||
#define UNLOCK_IPS_REG *((volatile unsigned int*)(MPBLOCK_USER_INTERFACE_BASE_ADDR+UNLOCK_IPS_REG_OFFSET))
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// CAP9 chip configuration user interface /////////////////////////////////////
|
||||
#define CCF_INTERFACE_BASE_ADDR (char*)0xFFFFEA00
|
||||
#define MPBS0_SFR_OFFSET 0x0114
|
||||
#define MPBS1_SFR_OFFSET 0x011C
|
||||
#define EBI_CSA_OFFSET 0x0120
|
||||
#define MPBS2_SFR_OFFSET 0x012C
|
||||
#define MPBS3_SFR_OFFSET 0x0130
|
||||
|
||||
#define MPBS_ENABLE_BIT 0x80000000
|
||||
#define MPIOB_PUN_BIT 0x04000000
|
||||
#define MPIOB_LP_BIT 0x02000000
|
||||
#define MPIOB_SUP_BIT 0x01000000
|
||||
#define MPIOA_PUN_BIT 0x00040000
|
||||
#define MPIOA_LP_BIT 0x00020000
|
||||
#define MPIOA_SUP_BIT 0x00010000
|
||||
|
||||
#define MPBS0_SFR_REG *((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS0_SFR_OFFSET))
|
||||
#define MPBS1_SFR_REG *((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS1_SFR_OFFSET))
|
||||
#define EBI_CSA_REG *((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+EBI_CSA_OFFSET))
|
||||
#define MPBS2_SFR_REG *((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS2_SFR_OFFSET))
|
||||
#define MPBS3_SFR_REG *((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS3_SFR_OFFSET))
|
||||
|
||||
#define MPBS0 ((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS0_SFR_OFFSET))
|
||||
#define MPBS1 ((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS1_SFR_OFFSET))
|
||||
#define MPBS2 ((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS2_SFR_OFFSET))
|
||||
#define MPBS3 ((volatile unsigned int*)(CCF_INTERFACE_BASE_ADDR+MPBS3_SFR_OFFSET))
|
||||
#define PULLUP_ON 1
|
||||
#define PULLUP_OFF 2
|
||||
#define LOWPOWER_ON 3
|
||||
#define LOWPOWER_OFF 4
|
||||
#define SUPPLY_33 33
|
||||
#define SUPPLY_18 18
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
extern unsigned int BOARD_InitMPBlock(unsigned char mode);
|
||||
|
||||
|
||||
#endif // FPGA_INIT_H
|
|
@ -0,0 +1,347 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
#include "board_memories.h"
|
||||
#include <pio/pio.h>
|
||||
#include <utility/trace.h>
|
||||
#include <pmc/pmc.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
/*
|
||||
Constants: Clock and PLL settings
|
||||
|
||||
BOARD_OSCOUNT - Startup time of main oscillator (in number of slow clock
|
||||
ticks).
|
||||
BOARD_USBDIV - USB PLL divisor value to obtain a 48MHz clock.
|
||||
BOARD_CKGR_PLL - PLL frequency range.
|
||||
BOARD_PLLCOUNT - PLL startup time (in number of slow clock ticks).
|
||||
BOARD_MUL - PLL MUL value.
|
||||
BOARD_DIV - PLL DIV value.
|
||||
BOARD_PRESCALER - Master clock prescaler value.
|
||||
*/
|
||||
#define BOARD_OSCOUNT (AT91C_CKGR_OSCOUNT & (64 << 8))
|
||||
|
||||
#define BOARD_CKGR_PLLA (AT91C_CKGR_SRCA | AT91C_CKGR_OUTA_2)
|
||||
#define BOARD_PLLACOUNT (63 << 8) // maximum
|
||||
#define BOARD_MULA (AT91C_CKGR_MULA & (49 << 16))
|
||||
#define BOARD_DIVA (AT91C_CKGR_DIVA & 3)
|
||||
|
||||
#define BOARD_USBDIV AT91C_CKGR_USBDIV_2
|
||||
#define BOARD_CKGR_PLLB AT91C_CKGR_OUTB_0
|
||||
#define BOARD_PLLBCOUNT BOARD_PLLACOUNT
|
||||
#define BOARD_MULB (175 << 16)
|
||||
#define BOARD_DIVB 15
|
||||
|
||||
#define BOARD_PRESCALER AT91C_PMC_MDIV_2
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
/// Default spurious interrupt handler. Infinite loop.
|
||||
//------------------------------------------------------------------------------
|
||||
void defaultSpuriousHandler( void )
|
||||
{
|
||||
//while (1);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Default handler for fast interrupt requests. Infinite loop.
|
||||
//------------------------------------------------------------------------------
|
||||
void defaultFiqHandler( void )
|
||||
{
|
||||
while (1);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Default handler for standard interrupt requests. Infinite loop.
|
||||
//------------------------------------------------------------------------------
|
||||
void defaultIrqHandler( void )
|
||||
{
|
||||
while (1);
|
||||
}
|
||||
|
||||
|
||||
/// Slave address of AT73C223 chips.
|
||||
#define AT73C223_SLAVEADDRESS_U4 0x48 // 1001000
|
||||
#define AT73C223_SLAVEADDRESS_U5 0x49 // 1001001
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize AT73C224
|
||||
//------------------------------------------------------------------------------
|
||||
static void BOARD_AT73C224_initialize(void)
|
||||
{
|
||||
/// configure Pio pins
|
||||
static const Pin pinTWI[] = {PINS_TWI};
|
||||
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_TWI;
|
||||
PIO_Configure(pinTWI, 1);
|
||||
|
||||
// Reset the TWI
|
||||
AT91C_BASE_TWI->TWI_CR = AT91C_TWI_SWRST;
|
||||
// Set master mode
|
||||
AT91C_BASE_TWI->TWI_CR = AT91C_TWI_MSEN;
|
||||
// Set Clock Waveform Generator Register
|
||||
// MCK = 100000000
|
||||
// TWCK = 400000
|
||||
AT91C_BASE_TWI->TWI_CWGR = 0x00007A7A;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Read data from AT73C224
|
||||
//------------------------------------------------------------------------------
|
||||
static void BOARD_AT73C224_Read(
|
||||
unsigned char *pByte,
|
||||
unsigned char registerAddress,
|
||||
unsigned char address
|
||||
)
|
||||
{
|
||||
// Set STOP signal if only one byte is sent
|
||||
//--------------------------------------------------------------------------
|
||||
AT91C_BASE_TWI->TWI_CR = AT91C_TWI_STOP;
|
||||
|
||||
// Start read
|
||||
//--------------------------------------------------------------------------
|
||||
// Set slave address and number of internal address bytes
|
||||
AT91C_BASE_TWI->TWI_MMR = (1 << 8) | AT91C_TWI_MREAD | (address << 16);
|
||||
// Set internal address bytes
|
||||
AT91C_BASE_TWI->TWI_IADR = registerAddress;
|
||||
// Send START condition
|
||||
AT91C_BASE_TWI->TWI_CR = AT91C_TWI_START;
|
||||
|
||||
// Read all bytes, setting STOP before the last byte
|
||||
//--------------------------------------------------------------------------
|
||||
AT91C_BASE_TWI->TWI_CR = AT91C_TWI_STOP;
|
||||
|
||||
// Wait for byte then read and store it
|
||||
//--------------------------------------------------------------------------
|
||||
while (! ((AT91C_BASE_TWI->TWI_SR & AT91C_TWI_RXRDY) == AT91C_TWI_RXRDY)) ;
|
||||
//(unsigned char)*buffer = AT91C_BASE_TWI->TWI_RHR;
|
||||
*pByte = AT91C_BASE_TWI->TWI_RHR;
|
||||
|
||||
// Wait for transfer to be complete
|
||||
//--------------------------------------------------------------------------
|
||||
while (! ((AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXCOMP_MASTER) == AT91C_TWI_TXCOMP_MASTER));
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Write data to AT73C224
|
||||
//------------------------------------------------------------------------------
|
||||
static void BOARD_AT73C224_Write(
|
||||
unsigned char byte,
|
||||
unsigned char registerAddress,
|
||||
unsigned char address
|
||||
)
|
||||
{
|
||||
// Set slave address and number of internal address bytes
|
||||
AT91C_BASE_TWI->TWI_MMR = (1 << 8) | (address << 16);
|
||||
// Set internal address bytes
|
||||
AT91C_BASE_TWI->TWI_IADR = registerAddress;
|
||||
// Write the byte
|
||||
AT91C_BASE_TWI->TWI_THR = byte;
|
||||
|
||||
// Wait for transfer to be complete
|
||||
while (! ((AT91C_BASE_TWI->TWI_SR & AT91C_TWI_TXCOMP_MASTER) == AT91C_TWI_TXCOMP_MASTER));
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Power configuration
|
||||
//------------------------------------------------------------------------------
|
||||
static unsigned char configure_AT73C224(void)
|
||||
{
|
||||
unsigned char buff;
|
||||
|
||||
TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
|
||||
//TRACE_INFO("configure_AT73C224\n\r");
|
||||
|
||||
BOARD_AT73C224_initialize();
|
||||
|
||||
// Check that we are communicating with the good device
|
||||
BOARD_AT73C224_Read(&buff, 0x01, AT73C223_SLAVEADDRESS_U4);
|
||||
//TRACE_INFO("device adresse = 0x%X\n\r", buff);
|
||||
if(buff != 0x48) {
|
||||
|
||||
TRACE_ERROR("Wrong device adressed\n\r");
|
||||
return 0;
|
||||
}
|
||||
// Check that the BUCK default voltage is 0x09 (1.8V)
|
||||
BOARD_AT73C224_Read(&buff, 0x15, AT73C223_SLAVEADDRESS_U4); // BCK_VOLT : 0x15 ;
|
||||
//TRACE_INFO("BCK_VOLT = 0x%X\n\r", buff);
|
||||
if(buff != 0x09) {
|
||||
|
||||
TRACE_ERROR("Wrong default output voltage\r\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Check that the BUCK converter is started
|
||||
BOARD_AT73C224_Read(&buff, 0x13, AT73C223_SLAVEADDRESS_U4); // BCK_CTRL : 0x13 ;
|
||||
//TRACE_INFO("BCK_CTRL = 0x%X\n\r", buff);
|
||||
if(buff != 0x01) {
|
||||
|
||||
TRACE_ERROR("BUCK converter is started\n\r");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Check that all interrupts are masked
|
||||
BOARD_AT73C224_Read(&buff, 0x32, AT73C223_SLAVEADDRESS_U4); // IRQ_MSK : 0x32 ;
|
||||
//TRACE_INFO("IRQ_MSK = 0x%X\n\r", buff);
|
||||
if(buff != 0x00) {
|
||||
|
||||
TRACE_ERROR("not all interrupts are masked\n\r");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Check that the boost output voltage is configured in 5V mode
|
||||
BOARD_AT73C224_Read(&buff, 0x12, AT73C223_SLAVEADDRESS_U4); // BST_VOLT : 0x12 ;
|
||||
//TRACE_INFO("BST_VOLT = 0x%X\n\r", buff);
|
||||
// resut: BST_VOLT = 0x28
|
||||
|
||||
// Check that the current limitation is not too low
|
||||
BOARD_AT73C224_Read(&buff, 0x11, AT73C223_SLAVEADDRESS_U4); // BST_CFG : 0x11 ;
|
||||
//TRACE_INFO("BST_CFG = 0x%X\n\r", buff);
|
||||
// result: BST_CFG = 0x1B
|
||||
if(buff < 0x01) {
|
||||
|
||||
TRACE_ERROR("Too low current limitation\n\r");
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Setting the ramp for optimal operation for the application CAP
|
||||
BOARD_AT73C224_Write(0x40, 0x72, AT73C223_SLAVEADDRESS_U4); // RTRIM : 0x72 ;
|
||||
|
||||
// 0x0B @ 0x11 : on 2 chips
|
||||
BOARD_AT73C224_Write(0x0B, 0x11, AT73C223_SLAVEADDRESS_U4);
|
||||
BOARD_AT73C224_Write(0x0B, 0x11, AT73C223_SLAVEADDRESS_U5);
|
||||
|
||||
// Passage of Buck in PWM mode
|
||||
// Write 0xD8 @ 0x14
|
||||
BOARD_AT73C224_Write(0xD8, 0x14, AT73C223_SLAVEADDRESS_U4);
|
||||
|
||||
// Setting the ramp for optimal operation for the application CAP
|
||||
BOARD_AT73C224_Write(0x40, 0x72, AT73C223_SLAVEADDRESS_U5); // RTRIM : 0x72 ;
|
||||
|
||||
// Passage of Buck in PWM mode
|
||||
// Write 0xD8 @ 0x14
|
||||
BOARD_AT73C224_Write(0xD8, 0x14, AT73C223_SLAVEADDRESS_U5);
|
||||
|
||||
// Init for USB Host
|
||||
/*
|
||||
// At the start-up, it is recommended to put 1Amp over current threshold
|
||||
// in order not to generate a reset of the product.
|
||||
BOARD_AT73C224_Write(0x01, 0x11, AT73C223_SLAVEADDRESS_U4);
|
||||
|
||||
// setting VBOOST = 5V
|
||||
BOARD_AT73C224_Write(0x28, 0x12, AT73C223_SLAVEADDRESS_U4);
|
||||
|
||||
// Start VBOOST
|
||||
BOARD_AT73C224_Write(0x01, 0x10, AT73C223_SLAVEADDRESS_U4);
|
||||
|
||||
// put 6Amp over current threshold.
|
||||
BOARD_AT73C224_Write(0x0B, 0x11, AT73C223_SLAVEADDRESS_U4);
|
||||
*/
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Performs the low-level initialization of the chip.
|
||||
//------------------------------------------------------------------------------
|
||||
void LowLevelInit( void )
|
||||
{
|
||||
unsigned char i;
|
||||
|
||||
// Initialize main oscillator
|
||||
AT91C_BASE_PMC->PMC_MOR = BOARD_OSCOUNT | AT91C_CKGR_MOSCEN;
|
||||
// Wait the main oscillator stabilization
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MOSCS));
|
||||
|
||||
// Initialize PLLA at 200MHz
|
||||
AT91C_BASE_PMC->PMC_PLLAR = BOARD_CKGR_PLLA
|
||||
| BOARD_PLLACOUNT
|
||||
| BOARD_MULA
|
||||
| BOARD_DIVA;
|
||||
// Wait the PLLA locking
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_LOCKA));
|
||||
|
||||
// Wait for the master clock if it was already initialized
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
|
||||
|
||||
// Set Master Clock Division only (before select the clock)
|
||||
// Processor clock = PLLA (200 MHz)
|
||||
// Master clock = PLLA / 2 (100 MHz)
|
||||
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_SLOW_CLK | AT91C_PMC_PRES_CLK | AT91C_PMC_MDIV_2;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
|
||||
|
||||
// Select PLLA
|
||||
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_CSS_PLLA_CLK | AT91C_PMC_PRES_CLK | AT91C_PMC_MDIV_2;
|
||||
while (!(AT91C_BASE_PMC->PMC_SR & AT91C_PMC_MCKRDY));
|
||||
|
||||
/* Initialize AIC
|
||||
****************/
|
||||
AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF;
|
||||
AT91C_BASE_AIC->AIC_SVR[0] = (unsigned int) defaultFiqHandler;
|
||||
for (i = 1; i < 31; i++) {
|
||||
|
||||
AT91C_BASE_AIC->AIC_SVR[i] = (unsigned int) defaultIrqHandler;
|
||||
}
|
||||
AT91C_BASE_AIC->AIC_SPU = (unsigned int) defaultSpuriousHandler;
|
||||
|
||||
// Unstack nested interrupts
|
||||
for (i = 0; i < 8 ; i++) {
|
||||
|
||||
AT91C_BASE_AIC->AIC_EOICR = 0;
|
||||
}
|
||||
|
||||
/* Watchdog initialization
|
||||
*************************/
|
||||
AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
|
||||
|
||||
/* Remap
|
||||
*******/
|
||||
BOARD_RemapRam();
|
||||
|
||||
// Disable RTT and PIT interrupts (potential problem when program A
|
||||
// configures RTT, then program B wants to use PIT only, interrupts
|
||||
// from the RTT will still occur since they both use AT91C_ID_SYS)
|
||||
AT91C_BASE_RTTC->RTTC_RTMR &= ~(AT91C_RTTC_ALMIEN | AT91C_RTTC_RTTINCIEN);
|
||||
AT91C_BASE_PITC->PITC_PIMR &= ~AT91C_PITC_PITIEN;
|
||||
|
||||
configure_AT73C224();
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
///
|
||||
/// !Purpose
|
||||
///
|
||||
/// Provides the low-level initialization function that gets called on chip
|
||||
/// startup.
|
||||
///
|
||||
/// !Usage
|
||||
///
|
||||
/// LowLevelInit() is called in #board_cstartup.S#.
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_LOWLEVEL_H
|
||||
#define BOARD_LOWLEVEL_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
extern void LowLevelInit(void);
|
||||
|
||||
#endif // BOARD_LOWLEVEL_H
|
||||
|
|
@ -0,0 +1,255 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/*
|
||||
Title: Memories implementation
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include <board.h>
|
||||
#include <pio/pio.h>
|
||||
#include "board_memories.h"
|
||||
|
||||
/*
|
||||
Macros:
|
||||
READ - Reads a register value. Useful to add trace information to read
|
||||
accesses.
|
||||
WRITE - Writes data in a register. Useful to add trace information to
|
||||
write accesses.
|
||||
*/
|
||||
#define READ(peripheral, register) (peripheral->register)
|
||||
#define WRITE(peripheral, register, value) (peripheral->register = value)
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Use in SDRAM and DDRAM configguration
|
||||
//------------------------------------------------------------------------------
|
||||
void sleep_time(unsigned int timeval)
|
||||
{
|
||||
unsigned int i;
|
||||
for( i=0; i<timeval; i++);
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize Vdd EBI external memory
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureVddMemSel(unsigned char VddMemSel)
|
||||
{
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA &= ~AT91C_EBI_OSMODE;
|
||||
|
||||
if(VddMemSel == VDDMEMSEL_3V3)
|
||||
{
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA |= AT91C_EBI_OSALLN1;
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA |= AT91C_EBI_OSALLN0;
|
||||
}
|
||||
else
|
||||
{
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA &= ~AT91C_EBI_OSALLN1;
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA |= AT91C_EBI_OSALLN0;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Changes the mapping of the chip so that the remap area mirrors the
|
||||
/// internal ROM or the EBI CS0.
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_RemapRom()
|
||||
{
|
||||
WRITE(AT91C_BASE_MATRIX, MATRIX_MRCR, 0);
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Changes the mapping of the chip so that the remap area mirrors the
|
||||
/// internal RAM.
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_RemapRam()
|
||||
{
|
||||
WRITE(AT91C_BASE_MATRIX, MATRIX_MRCR, (AT91C_MATRIX_RCA926I | AT91C_MATRIX_RCA926D));
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize and configure the SDRAM
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureSdram(unsigned char busWidth)
|
||||
{
|
||||
static const Pin pinsSdram[] = {PINS_SDRAM};
|
||||
volatile unsigned int *pSdram = (unsigned int *) AT91C_EBI_SDRAM;
|
||||
unsigned short sdrc_dbw = 0;
|
||||
|
||||
switch (busWidth) {
|
||||
case 16:
|
||||
sdrc_dbw = AT91C_B16MODE_16_BITS;
|
||||
break;
|
||||
|
||||
case 32:
|
||||
default:
|
||||
sdrc_dbw = AT91C_B16MODE_32_BITS;
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
// Enable corresponding PIOs
|
||||
PIO_Configure(pinsSdram, 1);
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MDR , AT91C_MD_SDR_SDRAM
|
||||
| sdrc_dbw); // SDRAM type 3.3V
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_CR , AT91C_NC_DDR10_SDR9
|
||||
| AT91C_NR_13
|
||||
| AT91C_CAS_3); // row = 13, column = 9 SDRAM CAS = 3
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_LPR , 0x00000000); // Low power register => Low-power is inhibited // No define
|
||||
|
||||
sleep_time(50000); // --------- WAIT ---------
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_NOP_CMD); // NOP command
|
||||
pSdram[0] = 0x00000000; // Dummy read to access SDRAM : validate preceeding command
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_NOP_CMD); // NOP command
|
||||
pSdram[0] = 0x00000000; // Dummy read to access SDRAM : validate preceeding command
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_NOP_CMD); // NOP command
|
||||
pSdram[0] = 0x00000000; // Dummy read to access SDRAM : validate preceeding command
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_PRCGALL_CMD); // Precharge All Banks command
|
||||
pSdram[0] = 0x00000000; // Dummy read to access SDRAM : validate preceeding command
|
||||
|
||||
sleep_time(50000); // --------- WAIT ---------
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_RFSH_CMD); // AutoRefresh command
|
||||
pSdram[0] = 0x00000000; // Dummy read to access SDRAM : validate preceeding command
|
||||
|
||||
sleep_time(50000); // --------- WAIT ---------
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_RFSH_CMD); // AutoRefresh command
|
||||
pSdram[0] = 0x00000000; // Dummy read to access SDRAM : validate preceeding command
|
||||
|
||||
sleep_time(50000); // --------- WAIT ---------
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_LMR_CMD); // Set MR JEDEC compliant : Load mode Register command
|
||||
pSdram[19] = 0x5a5a5b5b; // Perform LMR burst=1, lat=2
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_MR, AT91C_MODE_NORMAL_CMD); // Set Normal mode : Any access to the DDRSDRAMC is decoded normally
|
||||
pSdram[0] = 0x00000000; // Dummy read to access SDRAM : validate preceeding command
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_RTR, 781); // Set Refresh Timer (ex: ((64 x 10^-3)/8192) x 100 x 10^6 ) => 781 for 100 MHz
|
||||
|
||||
WRITE(AT91C_BASE_SDDRC, SDDRC_HS, AT91C_OVL); // High speed register : Optimization is disabled
|
||||
|
||||
sleep_time(50000); // --------- WAIT ---------
|
||||
}
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Initialize and configure the DDRAM
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureDdram(
|
||||
unsigned char ddrModel,
|
||||
unsigned char busWidth
|
||||
)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Configures the EBI for NandFlash access at 100MHz.
|
||||
/// \Param busWidth Bus width
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNandFlash(unsigned char busWidth)
|
||||
{
|
||||
// Configure EBI
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA |= AT91C_EBI_CS3A_SM;
|
||||
|
||||
// Configure SMC
|
||||
|
||||
// Configure SMC
|
||||
AT91C_BASE_SMC->SMC_SETUP3 = 0x00010001;
|
||||
AT91C_BASE_SMC->SMC_PULSE3 = 0x03030303;
|
||||
AT91C_BASE_SMC->SMC_CYCLE3 = 0x00050005;
|
||||
AT91C_BASE_SMC->SMC_CTRL3 = 0x00020003;
|
||||
|
||||
if (busWidth == 8) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
else if (busWidth == 32) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Configures the EBI for NandFlash access at 48MHz.
|
||||
/// \Param busWidth Bus width
|
||||
//------------------------------------------------------------------------------
|
||||
void BOARD_ConfigureNandFlash48MHz(unsigned char busWidth)
|
||||
{
|
||||
// Configure EBI
|
||||
AT91C_BASE_CCFG->CCFG_EBICSA |= AT91C_EBI_CS3A_SM;
|
||||
|
||||
// Configure SMC
|
||||
AT91C_BASE_SMC->SMC_SETUP3 = 0x00010001;
|
||||
AT91C_BASE_SMC->SMC_PULSE3 = 0x04030302;
|
||||
AT91C_BASE_SMC->SMC_CYCLE3 = 0x00070004;
|
||||
AT91C_BASE_SMC->SMC_CTRL3 = (AT91C_SMC_READMODE
|
||||
| AT91C_SMC_WRITEMODE
|
||||
| AT91C_SMC_NWAITM_NWAIT_DISABLE
|
||||
| ((0x1 << 16) & AT91C_SMC_TDF));
|
||||
|
||||
if (busWidth == 8) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_EIGTH_BITS;
|
||||
}
|
||||
else if (busWidth == 16) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_SIXTEEN_BITS;
|
||||
}
|
||||
else if (busWidth == 32) {
|
||||
|
||||
AT91C_BASE_SMC->SMC_CTRL3 |= AT91C_SMC_DBW_WIDTH_THIRTY_TWO_BITS;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,58 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef BOARD_MEMORIES_H
|
||||
#define BOARD_MEMORIES_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Definitions
|
||||
//------------------------------------------------------------------------------
|
||||
#define VDDMEMSEL_1V8 0 // Memories are 1.8V powered
|
||||
#define VDDMEMSEL_3V3 1 // Memories are 3.3V powered.
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
extern void BOARD_RemapRom(void);
|
||||
|
||||
extern void BOARD_RemapRam(void);
|
||||
|
||||
extern void BOARD_ConfigureVddMemSel(unsigned char VddMemSel);
|
||||
|
||||
extern void BOARD_ConfigureSdram(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureDdram(unsigned char ddrModel, unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNandFlash(unsigned char busWidth);
|
||||
|
||||
extern void BOARD_ConfigureNandFlash48MHz(unsigned char busWidth);
|
||||
|
||||
|
||||
#endif //#ifndef BOARD_MEMORIES_H
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Headers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#include "board.h"
|
||||
#include <pmc/pmc.h>
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal definitions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Internal functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Put the CPU in IDLE mode with CP15
|
||||
//------------------------------------------------------------------------------
|
||||
void LowPowerMode(void)
|
||||
{
|
||||
PMC_CPUInIdleMode();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// Returns to normal mode automatically
|
||||
//------------------------------------------------------------------------------
|
||||
void NormalPowerMode(void)
|
||||
{
|
||||
}
|
|
@ -0,0 +1,50 @@
|
|||
/* ----------------------------------------------------------------------------
|
||||
* ATMEL Microcontroller Software Support
|
||||
* ----------------------------------------------------------------------------
|
||||
* Copyright (c) 2008, Atmel Corporation
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the disclaimer below.
|
||||
*
|
||||
* Atmel's name may not be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
||||
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
* ----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
/// \unit
|
||||
/// !Purpose
|
||||
///
|
||||
///
|
||||
/// !Usage
|
||||
///
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
#ifndef BOARD_POWERMODE_H
|
||||
#define BOARD_POWERMODE_H
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Exported functions
|
||||
//------------------------------------------------------------------------------
|
||||
extern void LowPowerMode(void);
|
||||
|
||||
extern void NormalPowerMode(void);
|
||||
|
||||
#endif //#ifndef BOARD_MEMORIES_H
|
||||
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue