Added clock tree management for ATSAMA5D2 (Still uncomplete)
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@10361 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
5c29264cca
commit
99dc081e54
|
@ -6,7 +6,7 @@
|
||||||
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="false"/>
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.doReset" value="false"/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageFileName" value=""/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.imageOffset" value=""/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value="mon reg cpsr = 0xd3 set *0xF8048000 = 0xA5000004 set *0x00A00100 = 0 set *0xF8048044 = 0x00008000 mon cp15 1 0 0 0 = 0x00C50078 set *0xF0014004 = 0x4 set *0xF0014014 = 1<<13 "/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.initCommands" value="mon reg cpsr = 0xd3 set *0xF8048000 = 0xA5000004 set *0x00A00100 = 0 set *0xF8048044 = 0x00008000 mon cp15 1 0 0 0 = 0x00C50078 set *0xF0014004 = 0x4 set *0xF0014014 = 1<<13 "/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.ipAddress" value="localhost"/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="Generic TCP/IP"/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.jtagDevice" value="Generic TCP/IP"/>
|
||||||
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.loadImage" value="true"/>
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setPcRegister" value="false"/>
|
||||||
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="true"/>
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setResume" value="true"/>
|
||||||
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.setStopAt" value="true"/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="Reset_Handler"/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.stopAt" value="sama_clock_init"/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsFileName" value=""/>
|
||||||
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
|
<stringAttribute key="org.eclipse.cdt.debug.gdbjtag.core.symbolsOffset" value=""/>
|
||||||
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
|
<booleanAttribute key="org.eclipse.cdt.debug.gdbjtag.core.useFileForImage" value="false"/>
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
|
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
|
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
|
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><contentList/>"/>
|
<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><contentList><content id="null-sama_clock_init-(format)" val="4"/></contentList>"/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <globalVariableList/> "/>
|
<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <globalVariableList/> "/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList/> "/>
|
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList/> "/>
|
||||||
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="./build/ch.elf"/>
|
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="./build/ch.elf"/>
|
||||||
|
|
|
@ -14,9 +14,8 @@
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
|
#include "hal.h"
|
||||||
|
|
||||||
static uint32_t counter = 0;
|
static uint32_t counter = 0;
|
||||||
/*
|
/*
|
||||||
|
@ -24,6 +23,14 @@ static uint32_t counter = 0;
|
||||||
*/
|
*/
|
||||||
int main(void) {
|
int main(void) {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* System initializations.
|
||||||
|
* - HAL initialization, this also initializes the configured device drivers
|
||||||
|
* and performs the board-specific initializations.
|
||||||
|
* - Kernel initialization, the main() function becomes a thread and the
|
||||||
|
* RTOS is active.
|
||||||
|
*/
|
||||||
|
halInit();
|
||||||
chSysInit();
|
chSysInit();
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|
|
@ -22,9 +22,14 @@
|
||||||
/*
|
/*
|
||||||
* HAL driver system settings.
|
* HAL driver system settings.
|
||||||
*/
|
*/
|
||||||
#define SAMA_NO_INIT FALSE
|
#define SAMA_NO_INIT TRUE
|
||||||
#define SAMA_MOSCRC_ENABLED TRUE
|
#define SAMA_MOSCRC_ENABLED TRUE
|
||||||
#define SAMA_MOSCXT_ENABLED TRUE
|
#define SAMA_MOSCXT_ENABLED FALSE
|
||||||
#define SAMA_MOSC_SEL SAMA_MOSC_MOSCRC
|
#define SAMA_MOSC_SEL SAMA_MOSC_MOSCRC
|
||||||
#define SAMA_OSC_SEL SAMA_OSC_OSCRC
|
#define SAMA_OSC_SEL SAMA_OSC_OSCXT
|
||||||
|
#define SAMA_MCK_SEL SAMA_MCK_PLLA_CLK
|
||||||
|
#define SAMA_MCK_PRES SAMA_MCK_PRE_DIV2
|
||||||
|
#define SAMA_MCK_MDIV SAMA_MCK_MDIV_DIV1
|
||||||
|
#define SAMA_PLLA_MUL_VALUE 83
|
||||||
|
#define SAMA_PLLADIV2_EN FALSE
|
||||||
#endif /* MCUCONF_H */
|
#endif /* MCUCONF_H */
|
||||||
|
|
|
@ -25,3 +25,10 @@ void __early_init(void) {
|
||||||
|
|
||||||
sama_clock_init();
|
sama_clock_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Board-specific initialization code.
|
||||||
|
* @todo Add your board-specific code, if any.
|
||||||
|
*/
|
||||||
|
void boardInit(void) {
|
||||||
|
}
|
||||||
|
|
|
@ -28,6 +28,11 @@
|
||||||
/* Driver local definitions. */
|
/* Driver local definitions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
#define SAMA_MOR_ONE (1 << 5)
|
||||||
|
#define SAMA_MOR_MOSCXTST CKGR_MOR_MOSCXTST(0xFF)
|
||||||
|
|
||||||
|
#define SAMA_PLLA_ONE (1 << 29)
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Driver exported variables. */
|
/* Driver exported variables. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -68,6 +73,81 @@ void hal_lld_init(void) {
|
||||||
*/
|
*/
|
||||||
void sama_clock_init(void) {
|
void sama_clock_init(void) {
|
||||||
#if !SAMA_NO_INIT
|
#if !SAMA_NO_INIT
|
||||||
|
/* Setting Slow clock source. */
|
||||||
|
SCKC->SCKC_CR = SAMA_OSC_SEL;
|
||||||
|
|
||||||
|
/* Disabling PMC write protection. */
|
||||||
|
PMC->PMC_WPMR = PMC_WPMR_WPKEY_PASSWD | PMC_WPMR_WPEN;
|
||||||
|
PMC->PMC_WPMR = PMC_WPMR_WPKEY_PASSWD;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Main oscillator configuration block.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
/* Switching on RC. */
|
||||||
|
uint32_t mor = SAMA_MOR_ONE | CKGR_MOR_KEY_PASSWD | CKGR_MOR_MOSCRCEN;
|
||||||
|
PMC->CKGR_MOR |= mor;
|
||||||
|
while (!(PMC->PMC_SR & PMC_SR_MOSCRCS))
|
||||||
|
; /* Waits until MOSCRC is stable.*/
|
||||||
|
|
||||||
|
#if SAMA_MOSCXT_ENABLED
|
||||||
|
uint32_t mor = SAMA_MOR_ONE | CKGR_MOR_KEY_PASSWD | CKGR_MOR_MOSCXTEN;
|
||||||
|
PMC->CKGR_MOR |= mor;
|
||||||
|
while (!(PMC->PMC_SR & PMC_SR_MOSCXTS))
|
||||||
|
; /* Waits until MOSCXT is stable.*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Switching MOC source. */
|
||||||
|
mor = SAMA_MOR_ONE | SAMA_MOR_MOSCXTST | CKGR_MOR_KEY_PASSWD |
|
||||||
|
CKGR_MOR_MOSCRCEN;
|
||||||
|
#if SAMA_MOSCXT_ENABLED
|
||||||
|
mor |= CKGR_MOR_MOSCXTEN;
|
||||||
|
#endif
|
||||||
|
mor |= SAMA_MOSC_SEL;
|
||||||
|
PMC->CKGR_MOR = mor;
|
||||||
|
|
||||||
|
/* Disabling unused sources. */
|
||||||
|
#if !SAMA_MOSCXT_ENABLED
|
||||||
|
PMC->CKGR_MOR &= ~ CKGR_MOR_MOSCXTEN;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !SAMA_MOSCRC_ENABLED
|
||||||
|
PMC->CKGR_MOR &= ~ CKGR_MOR_MOSCRCEN;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PLLA configuration block.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
uint32_t pllar = SAMA_PLLA_ONE;
|
||||||
|
#if SAMA_ACTIVATE_PLLA
|
||||||
|
pllar |= CKGR_PLLAR_DIVA_BYPASS | SAMA_PLLA_MUL;
|
||||||
|
#endif
|
||||||
|
PMC->CKGR_PLLAR = pllar; /* Writing PLLA register. */
|
||||||
|
|
||||||
|
#if SAMA_ACTIVATE_PLLA
|
||||||
|
while (!(PMC->PMC_SR & PMC_SR_LOCKA))
|
||||||
|
; /* Waits until PLLA is locked. */
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Master clock configuration block.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
uint32_t mckr = SAMA_MCK_PRES | SAMA_MCK_MDIV | SAMA_MCK_SEL;
|
||||||
|
#if SAMA_PLLADIV2_EN
|
||||||
|
mckr |= PMC_MCKR_PLLADIV2;
|
||||||
|
#endif
|
||||||
|
PMC->PMC_MCKR = mckr;
|
||||||
|
|
||||||
|
while (!(PMC->PMC_SR & PMC_SR_MCKRDY))
|
||||||
|
; /* Waits until MCK is stable. */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Enabling write protection. */
|
||||||
|
PMC->PMC_WPMR = PMC_WPMR_WPKEY_PASSWD | PMC_WPMR_WPEN;
|
||||||
|
|
||||||
#endif /* !SAMA_NO_INIT */
|
#endif /* !SAMA_NO_INIT */
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,8 +15,15 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file hal_lld.h
|
* @file SAMA5D2x/hal_lld.h
|
||||||
* @brief PLATFORM HAL subsystem low level driver header.
|
* @brief SAMA5D2x HAL subsystem low level driver header.
|
||||||
|
* @pre This module requires the following macros to be defined in the
|
||||||
|
* @p board.h file:
|
||||||
|
* - SAMA_MOSCXTCLK.
|
||||||
|
* .
|
||||||
|
* One of the following macros must also be defined:
|
||||||
|
* - SAMA5D21, SAMA5D22, SAMA5D23, SAMA5D24, SAMA5D25, SAMA5D26,
|
||||||
|
* SAMA5D27, SAMA5D28.
|
||||||
*
|
*
|
||||||
* @addtogroup HAL
|
* @addtogroup HAL
|
||||||
* @{
|
* @{
|
||||||
|
@ -137,24 +144,49 @@
|
||||||
* @name Internal clock sources
|
* @name Internal clock sources
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define SAMA_MOSCRCCLK 12000000 /**< RC Main oscillator clock. */
|
#define SAMA_MOSCRCCLK 12000000 /**< RC Main oscillator clock. */
|
||||||
#define SAMA_OSCRCCLK 32000 /**< RC Slow oscillator clock. */
|
#define SAMA_OSCRCCLK 32000 /**< RC Slow oscillator clock. */
|
||||||
/** @} */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @name PCM_MOR register bits definitions
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define SAMA_MOSC_MOSCRC (0 << 24) /**< MCK source is MOSCRC. */
|
|
||||||
#define SAMA_MOSC_MOSCXT (1 << 24) /**< MCK source is MOSCXT. */
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @name SCK_CR register bits definitions
|
* @name SCK_CR register bits definitions
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
#define SAMA_OSC_OSCRC (0 << 3) /**< MCK source is MOSCRC. */
|
#define SAMA_OSC_OSCRC (0 << 3) /**< Slow Clock source MOSCRC. */
|
||||||
#define SAMA_OSC_OSCXT (1 << 3) /**< MCK source is MOSCXT. */
|
#define SAMA_OSC_OSCXT (1 << 3) /**< Slow Clock source MOSCXT. */
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name PCM_MOR register bits definitions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define SAMA_MOSC_MOSCRC (0 << 24) /**< Main Clock source MOSCRC. */
|
||||||
|
#define SAMA_MOSC_MOSCXT (1 << 24) /**< Main Clock source MOSCXT. */
|
||||||
|
/** @} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @name PCM_MCR register bits definitions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define SAMA_MCK_SLOW_CLK (0 << 0) /**< MCK source is Slow Clock. */
|
||||||
|
#define SAMA_MCK_MAIN_CLK (1 << 0) /**< MCK source is Main Clock. */
|
||||||
|
#define SAMA_MCK_PLLA_CLK (2 << 0) /**< MCK source is PLLA Clock. */
|
||||||
|
#define SAMA_MCK_UPLL_CLK (3 << 0) /**< MCK source is UPLL Clock. */
|
||||||
|
|
||||||
|
#define SAMA_MCK_PRE_DIV1 (0 << 4) /**< MCK not prescaled. */
|
||||||
|
#define SAMA_MCK_PRE_DIV2 (1 << 4) /**< MCK prescaled by 2. */
|
||||||
|
#define SAMA_MCK_PRE_DIV4 (2 << 4) /**< MCK prescaled by 4. */
|
||||||
|
#define SAMA_MCK_PRE_DIV8 (3 << 4) /**< MCK prescaled by 8. */
|
||||||
|
#define SAMA_MCK_PRE_DIV16 (4 << 4) /**< MCK prescaled by 16. */
|
||||||
|
#define SAMA_MCK_PRE_DIV32 (5 << 4) /**< MCK prescaled by 32. */
|
||||||
|
#define SAMA_MCK_PRE_DIV64 (6 << 4) /**< MCK prescaled by 64. */
|
||||||
|
|
||||||
|
#define SAMA_MCK_MDIV_DIV1 (0 << 8) /**< MCK is not divided. */
|
||||||
|
#define SAMA_MCK_MDIV_DIV2 (1 << 8) /**< MCK is divided by 2. */
|
||||||
|
#define SAMA_MCK_MDIV_DIV3 (3 << 8) /**< MCK is divided by 3. */
|
||||||
|
#define SAMA_MCK_MDIV_DIV4 (2 << 8) /**< MCK is divided by 4. */
|
||||||
|
|
||||||
|
#define SAMA_MCK_PLLADIV2 (1 << 12) /**< PLLA is divided by 2. */
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -183,7 +215,7 @@
|
||||||
* @brief Enables or disables the MOSCXT clock source.
|
* @brief Enables or disables the MOSCXT clock source.
|
||||||
*/
|
*/
|
||||||
#if !defined(SAMA_MOSCXT_ENABLED) || defined(__DOXYGEN__)
|
#if !defined(SAMA_MOSCXT_ENABLED) || defined(__DOXYGEN__)
|
||||||
#define SAMA_MOSCXT_ENABLED TRUE
|
#define SAMA_MOSCXT_ENABLED FALSE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -199,6 +231,41 @@
|
||||||
#if !defined(SAMA_OSC_SEL) || defined(__DOXYGEN__)
|
#if !defined(SAMA_OSC_SEL) || defined(__DOXYGEN__)
|
||||||
#define SAMA_OSC_SEL SAMA_OSC_OSCRC
|
#define SAMA_OSC_SEL SAMA_OSC_OSCRC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Master clock source selection.
|
||||||
|
*/
|
||||||
|
#if !defined(SAMA_MCK_SEL) || defined(__DOXYGEN__)
|
||||||
|
#define SAMA_MCK_SEL SAMA_MCK_PLLA_CLK
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Master clock prescaler.
|
||||||
|
*/
|
||||||
|
#if !defined(SAMA_MCK_PRES) || defined(__DOXYGEN__)
|
||||||
|
#define SAMA_MCK_PRES SAMA_MCK_PRE_DIV2
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Master clock divider.
|
||||||
|
*/
|
||||||
|
#if !defined(SAMA_MCK_MDIV) || defined(__DOXYGEN__)
|
||||||
|
#define SAMA_MCK_MDIV SAMA_MCK_MDIV_DIV1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief PLLA clock multiplier.
|
||||||
|
*/
|
||||||
|
#if !defined(SAMA_PLLA_MUL_VALUE) || defined(__DOXYGEN__)
|
||||||
|
#define SAMA_PLLA_MUL_VALUE 83
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief PLLADIV2 clock divider.
|
||||||
|
*/
|
||||||
|
#if !defined(SAMA_PLLADIV2_EN) || defined(__DOXYGEN__)
|
||||||
|
#define SAMA_PLLADIV2_EN FALSE
|
||||||
|
#endif
|
||||||
/** @} */
|
/** @} */
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -212,6 +279,85 @@
|
||||||
#error "Using a wrong mcuconf.h file, SAMA5D2x_MCUCONF not defined"
|
#error "Using a wrong mcuconf.h file, SAMA5D2x_MCUCONF not defined"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief MAIN clock value.
|
||||||
|
*/
|
||||||
|
/* Main oscillator is fed by internal RC. */
|
||||||
|
#if (SAMA_MOSC_SEL == SAMA_MOSC_MOSCRC) || defined(__DOXYGEN__)
|
||||||
|
#if !SAMA_MOSCRC_ENABLED
|
||||||
|
#error "Internal RC oscillator disabled (required by SAMA_MOSC_SEL)."
|
||||||
|
#endif
|
||||||
|
#define SAMA_MAIN_CLK SAMA_MOSCRCCLK
|
||||||
|
|
||||||
|
/* Main oscillator is fed by external XTAL. */
|
||||||
|
#elif (SAMA_MOSC_SEL == SAMA_MOSC_MOSCXT)
|
||||||
|
#if !SAMA_MOSCXT_ENABLED
|
||||||
|
#error "External crystal oscillator disabled (required by SAMA_MOSC_SEL)."
|
||||||
|
#endif
|
||||||
|
#define SAMA_MAIN_CLK SAMA_MOSCXTCLK
|
||||||
|
/* Checks on external crystal range. */
|
||||||
|
#if (SAMA_MOSCXTCLK > SAMA_MOSCXTCLK_MAX) || \
|
||||||
|
(SAMA_MOSCXTCLK < SAMA_MOSCXTCLK_MIN)
|
||||||
|
#error "External crystal oscillator out of range."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Unallowed condition. */
|
||||||
|
#else
|
||||||
|
#error "Wrong SAMA_MOSC_SEL value."
|
||||||
|
#endif /* SAMA_MOSCXTCLK */
|
||||||
|
|
||||||
|
#if (SAMA_MCK_SEL == SAMA_MCK_PLLA_CLK) || defined(__DOXYGEN__)
|
||||||
|
#define SAMA_ACTIVATE_PLLA TRUE
|
||||||
|
#else
|
||||||
|
#define SAMA_ACTIVATE_PLLA FALSE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief PLLAMUL field.
|
||||||
|
*/
|
||||||
|
#if ((SAMA_PLLA_MUL_VALUE >= 1) && (SAMA_PLLA_MUL_VALUE <= 127)) || \
|
||||||
|
defined(__DOXYGEN__)
|
||||||
|
#define SAMA_PLLA_MUL ((SAMA_PLLA_MUL_VALUE + 1) << 18)
|
||||||
|
#else
|
||||||
|
#error "invalid SAMA_PLLA_MUL_VALUE value specified"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief PLLA input clock frequency.
|
||||||
|
* @todo Condider to add DIVA to this. On SAMA5D27 DIVA is a nonsense since
|
||||||
|
* it could be only 1 or 0 whereas 0 means PLLA disabled. This could
|
||||||
|
* be useful for other chip beloging to this family
|
||||||
|
*/
|
||||||
|
#define SAMA_PLLACLKIN SAMA_MAIN_CLK
|
||||||
|
|
||||||
|
/* PLLA input frequency range check.*/
|
||||||
|
#if (SAMA_PLLACLKIN < SAMA_PLLIN_MIN) || (SAMA_PLLACLKIN > SAMA_PLLIN_MAX)
|
||||||
|
#error "SAMA_PLLACLKIN out of range"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief PLLA output clock frequency.
|
||||||
|
*/
|
||||||
|
#define SAMA_PLLACLKOUT (SAMA_MAIN_CLK * SAMA_PLLA_MUL_VALUE)
|
||||||
|
|
||||||
|
/* PLLA output frequency range check.*/
|
||||||
|
#if (SAMA_PLLACLKOUT < SAMA_PLLOUT_MIN) || (SAMA_PLLACLKOUT > SAMA_PLLOUT_MAX)
|
||||||
|
#error "SAMA_PLLACLKOUT out of range"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief PLLADIV2 divider value.
|
||||||
|
*/
|
||||||
|
#if SAMA_PLLADIV2_EN || defined(__DOXYGEN__)
|
||||||
|
#define SAMA_PLLADIV2 SAMA_MCK_PLLADIV2
|
||||||
|
#else
|
||||||
|
#define SAMA_PLLADIV 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (SAMA_MCK_MDIV == SAMA_MCK_MDIV_DIV3) && !SAMA_PLLADIV2_EN
|
||||||
|
#error "PLLADIV2 must be always enabled when Main Clock Divider is 3"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Driver data structures and types. */
|
/* Driver data structures and types. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Required platform files.
|
# Required platform files.
|
||||||
# TODO add $(CHIBIOS)/os/hal/ports/common/ARMCAx/aic.c
|
# TODO add $(CHIBIOS)/os/hal/ports/common/ARMCAx/aic.c
|
||||||
PLATFORMSRC := $(CHIBIOS)/os/hal/ports/SAMA/SAMA5D2x/hal_lld.c
|
PLATFORMSRC := $(CHIBIOS)/os/hal/ports/SAMA/SAMA5D2x/hal_lld.c \
|
||||||
|
$(CHIBIOS)/os/hal/ports/SAMA/SAMA5D2x/hal_st_lld.c
|
||||||
# TODO add $(CHIBIOS)/os/hal/ports/common/ARMCAx
|
# TODO add $(CHIBIOS)/os/hal/ports/common/ARMCAx
|
||||||
# Required include directories.
|
# Required include directories.
|
||||||
PLATFORMINC := $(CHIBIOS)/os/hal/ports/SAMA/SAMA5D2x
|
PLATFORMINC := $(CHIBIOS)/os/hal/ports/SAMA/SAMA5D2x
|
||||||
|
|
Loading…
Reference in New Issue