手中有一块SAM4N的开发板。ASF库又十分丰富。不是一天两天能游刃有余的。为了不让板子吃灰。
特来跑一下例程。我想这些例程跑完,也对ASF库理解的差不多了。
今天跑第一个例程,ADC enhanced resolution
例程调入也非常简单,首先打开studio6.2。只要插上开发板,则自动跳出界面。
这时可直接打开例程。
以下是调入时问的同意不同意协议许可之类:当然同意。
例程给出的所有时钟配置,串口配置,都在config子目录下边。
以下是时钟配置:
- #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 */
上边可以看出,系统时钟是用了PLL时钟,且时钟源为内部高速8MHZ。加上分频系数2经过倍频25得到的系统时钟为100MHZ
可见以后的例程没有特殊要求都运行在这个频率下边。
一些串口和LED及按键配置都在board_init()里初始化,在conf_board.h配置,
本例中的串口就在conf_board.h中有配置:
#define CONF_BOARD_UART_CONSOLE
在初始化函数中会把PA9 PA10分配给串口。
在conf_uart_serial.h中指定的速率:
- #ifndef CONF_USART_SERIAL_H
- #define CONF_USART_SERIAL_H
- /** UART Interface */
- #define CONF_UART CONSOLE_UART
- /** Baudrate setting */
- #define CONF_UART_BAUDRATE 115200
- /** Parity setting */
- #define CONF_UART_PARITY UART_MR_PAR_NO
- #endif/* CONF_USART_SERIAL_H_INCLUDED */
在主程序中声明:
- /**
- * \brief Configure UART console.
- */
- static void configure_console(void)
- {
- const usart_serial_options_t uart_serial_options = {
- .baudrate = CONF_UART_BAUDRATE,
- #ifdef CONF_UART_CHAR_LENGTH
- .charlength = CONF_UART_CHAR_LENGTH,
- #endif
- .paritytype = CONF_UART_PARITY,
- #ifdef CONF_UART_STOP_BITS
- .stopbits = CONF_UART_STOP_BITS,
- #endif
- };
- /* Configure console UART. */
- sysclk_enable_peripheral_clock(CONSOLE_UART_ID);
- stdio_serial_init(CONF_UART, &uart_serial_options);
- }
这样速率就到了115200 无效验位,
这时打开SecureCRT软件就可以观察到结果了:
以下是8位结果:
以下是16位结果:
可见两个结果都一样。
|