реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ATMEL ATSAM3N4C Proteus Clock_init
Andreyy
сообщение Nov 1 2015, 18:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 40
Регистрация: 29-05-08
Пользователь №: 37 929



Здравствуйте, исп. Atmel Studio 6.2 , мк ATSAM3N4C
Создаю через меню проект Example Project - FREERTOS_PERIPHERAL_CONTROL
Компилирует все нормально, однако в протеусе стопорится на inlin'e osc_enable http://postimg.org/image/7m3zpqo3v/full/
osc_enable применяется только в sysclk.c и pll.h:
CONFIG_SYSCLK_SOURCE дефайнится в 2 местах :conf_clock.h #define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_PLLACK(там же #define CONFIG_SYSCLK_PRES SYSCLK_PRES_2 #define CONFIG_PLL0_SOURCE PLL_SRC_MAINCK_XTAL #define CONFIG_PLL0_MUL 8 #define CONFIG_PLL0_DIV 1) и sysclk.h : #ifndef CONFIG_SYSCLK_SOURCE # define CONFIG_SYSCLK_SOURCE SYSCLK_SRC_MAINCK_4M_RC #endif .
Код
[u]sysclk.c[/u]
void sysclk_init(void)   //Вызывается из мейна
{/* Set flash wait state to max in case the below clock switching. */
    system_init_flash(CHIP_FREQ_CPU_MAX);
/* Config system clock setting */
    if (CONFIG_SYSCLK_SOURCE == SYSCLK_SRC_SLCK_RC) {
        osc_enable(OSC_SLCK_32K_RC);
        osc_wait_ready(OSC_SLCK_32K_RC);
        pmc_switch_mck_to_sclk(CONFIG_SYSCLK_PRES);
    }
    .................
        else if (CONFIG_SYSCLK_SOURCE == SYSCLK_SRC_MAINCK_XTAL) {
        osc_enable(OSC_MAINCK_XTAL);
        osc_wait_ready(OSC_MAINCK_XTAL);
        pmc_switch_mck_to_mainck(CONFIG_SYSCLK_PRES);
    }

    else if (CONFIG_SYSCLK_SOURCE == SYSCLK_SRC_MAINCK_BYPASS) {
        osc_enable(OSC_MAINCK_BYPASS);
        osc_wait_ready(OSC_MAINCK_BYPASS);
        pmc_switch_mck_to_mainck(CONFIG_SYSCLK_PRES);
    }

#ifdef CONFIG_PLL0_SOURCE
    else if (CONFIG_SYSCLK_SOURCE == SYSCLK_SRC_PLLACK) {
        struct pll_config pllcfg;

        [b]pll_enable_source[/b](CONFIG_PLL0_SOURCE); // PLL0_SOURCE -> #define OSC_MAINCK_XTAL   6
        pll_config_defaults(&pllcfg, 0);
        pll_enable(&pllcfg, 0);
        pll_wait_for_lock(0);
        pmc_switch_mck_to_pllack(CONFIG_SYSCLK_PRES);
    }
#endif
       /* Update the SystemFrequency variable */
    SystemCoreClockUpdate();
       /* Set a flash wait state depending on the new cpu frequency */
    system_init_flash(sysclk_get_cpu_hz());
....
}
[u]pll.h[/u]
static inline void [b]pll_enable_source[/b](enum pll_source e_src)
{
    switch (e_src) {
    case PLL_SRC_MAINCK_4M_RC:
    case PLL_SRC_MAINCK_8M_RC:
    case PLL_SRC_MAINCK_12M_RC:
    case PLL_SRC_MAINCK_XTAL:
    case PLL_SRC_MAINCK_BYPASS:
        [b]osc_enable(e_src);[/b]   //e_src=6
        osc_wait_ready(e_src);
        break;

    default:
        Assert(false);
        break;
            }
}


Код
[b]osc.h[/b]
static inline void [b]osc_enable[/b](uint32_t ul_id)  
{
    switch (ul_id) {
    case OSC_SLCK_32K_RC:
        break;
    ....
    case OSC_MAINCK_12M_RC:
        pmc_switch_mainck_to_fastrc(CKGR_MOR_MOSCRCF_12_MHz);
        break;

    case OSC_MAINCK_XTAL:
        [b]pmc_switch_mainck_to_xtal[/b](PMC_OSC_XTAL,         <--- !!Стопорится здесь!!!
            pmc_us_to_moscxtst(BOARD_OSC_STARTUP_US,
                OSC_SLCK_32K_RC_HZ));
        break;

    case OSC_MAINCK_BYPASS:
        [b]pmc_switch_mainck_to_xtal[/b](PMC_OSC_BYPASS,    // define osc_bypass=0  
            [b]pmc_us_to_moscxtst[/b](BOARD_OSC_STARTUP_US,  // define BOARD_OSC_STARTUP_US 15625UL
                OSC_SLCK_32K_RC_HZ));                           // define OSC_SLCK_32K_RC_HZ      32000UL
        break;
    }
}
#define [b]pmc_us_to_moscxtst[/b](startup_us, slowck_freq)      \
    ((startup_us * slowck_freq / 8 / 1000000) < 0x100 ?  \
        (startup_us * slowck_freq / 8 / 1000000) : 0xFF)

[b]pmc.c[/b]
void [b]pmc_switch_mainck_to_xtal[/b](uint32_t ul_bypass,
        uint32_t ul_xtal_startup_time)
{
    /* Enable Main Xtal oscillator */
    if (ul_bypass) {
....
    } else {        PMC->CKGR_MOR = (PMC->CKGR_MOR & ~CKGR_MOR_MOSCXTBY) |
                CKGR_MOR_KEY_PASSWD | CKGR_MOR_MOSCXTEN |
                CKGR_MOR_MOSCXTST(ul_xtal_startup_time);
        /* Wait the Xtal to stabilize */
        while (!(PMC->PMC_SR & PMC_SR_MOSCXTS));
        PMC->CKGR_MOR |= CKGR_MOR_KEY_PASSWD | CKGR_MOR_MOSCSEL;
    }
}


Подскажите пожалуйста в чем может быть проблема.

Сообщение отредактировал Andreyy - Nov 1 2015, 18:47
Прикрепленные файлы
Прикрепленный файл  FREERTOS_PERIPHERAL_CONTROL_ORIGINAL.rar ( 2.58 мегабайт ) Кол-во скачиваний: 2
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016