。Calculate_baud_value 函数用来做这个操作。 。System_gclk_chan_get_hz(SERCOM3_GCLK_ID_CORE)函数将返回SERCOM3产生时钟频率。 。CTRLA寄存器用来配置数据传输顺序,TxD和RxD管脚,采样速率,运行在待机模式,USART时钟选择。在上边的功能中数据顺序为MSB,SERCOM PAD[1]用做RxD线,SERCOM PAD[0]用做TxD线,16倍过采样被使用,在所有休眠模式中通用时钟使能,内部时钟用于USART。 。CTRLB寄存器用来配置字符长度和传输接收使能。在上面的功能中字符为8位并且需要应用接收和发送,所以发送和接收使能。 。每个外设被检测的中断线连到Cortex M0+核的中断相量控制器 。在上面功能中SERCOM3中断请求线(IRQ-12)被使能 。中断设置寄存器用来使能所需的中断。在上面功能中RXC-接收完成中断被设置。这个数据通过EDBG在PC终端上被接收。所以一但接收数据,中断将被触发并通知CPU。 。CTRLA,CTRLB,和波特率寄存器只可以在USART禁止时写,因为这些寄存器都使能保护。所以一但这些寄存器被配置,USART就被使能。 。处理CLK_SERCOMx_APB和GCLK_SERCOMx_CORE之间的非同步,一个寄存器必须当访问时同步。CTRLA寄存器是写同步的所以它需要检测同步尽快信号 4.2.5 外扩USART时钟初使化 SAM D21 Xplained Pro 同另一个SAM D21 Xplained Pro 板子通讯通过EXT2连接口。 SERCOM2线连接到EXT2连接口。改变SERCOM2的核心时钟将使用于应用程序中。 /* External connector(SERCOM2) UART bus and generic clock initialization */ void ext_usart_clock_init(void) { struct system_gclk_chan_config gclk_chan_conf; uint32_t gclk_index = SERCOM2_GCLK_ID_CORE; /* Turn on module in PM */ system_apb_clock_set_mask(SYSTEM_CLOCK_APB_APBC, PM_APBCMASK_SERCOM2); /* 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); }
|