打印
[Atmel]

跑一下SAM4N例程(四):时钟1

[复制链接]
620|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在Atmle Studio6.2环境下,插上开发板就可自动识别。这时真接打开例程即可:



时钟配置在conf_clock.h中。


#ifndef CONF_CLOCK_H_INCLUDED
#define CONF_CLOCK_H_INCLUDED

// ===== System Clock (MCK) Source Options
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_SLCK_RC
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_SLCK_XTAL
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_SLCK_BYPASS
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_4M_RC
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_8M_RC
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_12M_RC
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_XTAL
//#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_MAINCK_BYPASS
#define CONFIG_SYSCLK_SOURCE        SYSCLK_SRC_PLLACK

// ===== System Clock (MCK) Prescaler Options   (Fmck = Fsys / (SYSCLK_PRES))
//#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_1
#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_2
//#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_4
//#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_8
//#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_16
//#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_32
//#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_64
//#define CONFIG_SYSCLK_PRES          SYSCLK_PRES_3

// ===== PLL0 (A) Options   (Fpll = (Fclk * PLL_mul) / PLL_div)
// Use mul and div effective values here.
#define CONFIG_PLL0_SOURCE          PLL_SRC_MAINCK_8M_RC
#define CONFIG_PLL0_MUL             25
#define CONFIG_PLL0_DIV             1

// ===== Target frequency (System clock)
// - Internal RC frequency: 8MHz
// - System clock source: PLLA
// - System clock prescaler: 2 (divided by 2)
// - PLLA source: 8M_RC
// - PLLA output: 8M_RC * 25 / 1
// - System clock: 8M_RC * 25 / 1 / 2 = 100MHz

#endif /* CONF_CLOCK_H_INCLUDED */

而本例中的管脚LED定义在主程的最上边

#if ((BOARD == SAM4CMP_DB) || (BOARD == SAM4CMS_DB))
#  define EXAMPLE_LED_GPIO    LED4_GPIO
#else
#  define EXAMPLE_LED_GPIO    LED0_GPIO
#endif

而延时函数用了系统滴答时钟,其中断函数也在主函数的上边:

void SysTick_Handler(void)
{
        ul_ms_ticks++;
}

而主函数只是每隔半分钟切换一下LED状态

int main(void)
{
        sysclk_init();
        board_init();

        /* Setup SysTick Timer for 1 msec interrupts */
        if (SysTick_Config(sysclk_get_cpu_hz() / 1000)) {
                while (1) {  /* Capture error */
                }
        }

        while (1) {
                ioport_toggle_pin_level(EXAMPLE_LED_GPIO);
                mdelay(500);
        }
}


相关帖子

沙发
jiang390625| | 2015-2-27 17:12 | 只看该作者
前排学习下。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2399

主题

6963

帖子

68

粉丝