4应用文档 这一章将描述SAM D21中SERCOM USART模块的不同特性,带有不同例子代码。 。SERCOM USART例子: 。基本配置 。分数波特率配置 。硬件握手配置(不适用于SAM D20) 。SOF检测和唤醒配置 注意:这章假设用户以有在SAM D21上用Atmel Studio IDE编程和调试的知识。 为了容易理解,例子将使用寄存器级的代码为进行SERCOM模块配置。然而时钟配置,使用的是ASF函数。 4.1主时钟 在SAM D21设备中,从GCLK发生器0输出的时钟将用做主时钟。通用时钟发生器0,也叫GCLK_MAIN,这个时钟回馈给电源管理用来产生同步时钟。通用时钟发生器0可以有一个SYSCTRL晶振作为它的时钟源。下列是SYSCTRL时钟源。 。XOSC 。OSCULP32K 。XOSC32K 。OSC8M 。DFLL48M 。FDPLL96M(不适用于D20设备) 应用使用OSC8M作为发生器0时钟源。下列程序在conf_clocks.h中将初始化发生器0的时钟源。 /* Configure GCLK generator 0 (Main Clock) */ # define CONF_CLOCK_GCLK_0_ENABLE true # define CONF_CLOCK_GCLK_0_RUN_IN_STANDBY false # define CONF_CLOCK_GCLK_0_CLOCK_SOURCE SYSTEM_CLOCK_SOURCE_OSC8M # define CONF_CLOCK_GCLK_0_PRESCALER 1 # define CONF_CLOCK_GCLK_0_OUTPUT_ENABLE false 4.2 基本配置 两个SAM D21 Xplained Pro板子彼此通过EXT2 连接头的SERCOM USART(TXD,RXD)连接在一起,并通过EDBG端口连到PC终端如下图所示: 基本配置段将有管脚初始化,时钟初使化,和SERCOM USART 初始化函数。下列函数被基本配置调用。 system_init() edbg_usart_clock_init() edbg_usart_pin_init() edbg_usart_init() ext_usart_clock_init() ext_usart_pin_init() ext_usart_init() 下面的章节将对每个函数详细总结。 4.2.1 系统初始化 System_init()是一个ASF函数它用来为每个conf_clock.h文件配置通用时钟和时钟源。主时钟将要被配置在段的开始部分。它也初始化SAM D21 Xplained Pro的硬件和事件系统。 4.2.2 EDBG USART 时钟初始化 SERCOM3连招商到EDBG的USART,通过它SAM D21 Xplained Pro将同PC终端应用通讯。下列函数初始化SERCOM3模块。 /* EDBG UART(SERCOM3) bus and generic clock initialization */ void edbg_usart_clock_init(void) { struct system_gclk_chan_config gclk_chan_conf; uint32_t gclk_index = SERCOM3_GCLK_ID_CORE; /* Turn on module in PM */ system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBC, PM_APBCMASK_SERCOM3); /* Turn on Generic clock for USART */ system_gclk_chan_get_config_defaults(&gclk_chan_conf); /*Default is generator 0. Other wise need to configure like below */ /* gclk_chan_conf.source_generator = GCLK_GENERATOR_1; */ system_gclk_chan_set_config(gclk_index, &gclk_chan_conf); system_gclk_chan_enable(gclk_index); } 。一个数据结构变量gclk_chan_conf被声明。这个结构用来配置SERCOM的通用时钟。 。EDBG USART被连接到SERCOM3,所以SERCOM3通用时钟”SERCOM3_GCLK_ID_CORE”和”SYSTEM_CLOCK_APB_APBC”被配置。 。通用时钟“SERCOM3_GCLK_ID_CORE”用GCLK发生器0作为源时钟(通用时钟源能根据使用者需要被改变),所以SERCOM3时钟运行在OSC8M时钟下的8MHz。 。system_gclk_chan_set_config将用来设置通用时钟通道配置。 。System_gclk_chan_enable将使能通用时钟索引”SERCOM3_GCLK_ID_CORE”
|