本帖最后由 ddllxxrr 于 2016-3-25 09:39 编辑
4.4 硬件握手配置 USART特性是有一个外带握手的流量控制机制,通过远程设备控制RTS和CTS管脚实现,如下表所示:
在这个应用中,只有EXT2 SERCOM2将被使用。在这个演示中定义的数据0xAA将被通过SAM D21 Xplained Pro板握手协议发送。 下面这节同基本配置相同但增加了硬件流控制信号线和一些执行代码改变。只是改变在下面解释。在EXT2 SERCOM代码,硬件流控制信号线需要被配置为如下:
/* By setting the DORD bit LSB is transmitted first and setting the RXPO bit as 1 correspond-ing SERCOM PAD[1] will be used for data reception RXD, PAD[0] will be used as TxD pin, PAD[2] as RTS pin,PAD[3] as CTS signal pin by setting TXPO bit as 2,16x over-sampling is selected by setting the SAMPR bit as 0,Generic clock is enabled in all sleep modes by setting RUNSTDBY bit as 1,USART clock mode is selected as USART with internal clock by setting MODE bit into 1. */ SERCOM2->USART.CTRLA.reg = SERCOM_USART_CTRLA_DORD | SERCOM_USART_CTRLA_RXPO(0x1) | SERCOM_USART_CTRLA_TXPO(0x2) | SERCOM_USART_CTRLA_SAMPR(0x0)| SERCOM_USART_CTRLA_RUNSTDBY | SERCOM_USART_CTRLA_MODE_USART_INT_CLK ;
注意:第1板的RTS信号应连接到第二板子的CTS信号线,第一板的CTS应被连接到第二板的RTS信号线。 。DRE位-在INTENSET寄存器中的数据寄存器空标志。 SERCOM2->USART.INTENSET.reg = SERCOM_USART_INTENSET_DRE; 4.4.2 SERCOM中断 void SERCOM2_Handler() { if (SERCOM2->USART.INTFLAG.bit.DRE) { SERCOM2->USART.DATA.reg = ext_tx_data; } }
DRE中断只有在RTS和CTS线是低时将被置位。在应用开始期间,RTS和fCTS线将被拉低,因此控制将服务中断处理程序SERCOM2_Handler。 在处理程序中,DRE标志被检查设置状态,定义的0xAA将被写到数据寄存器。现在两个板子将都发0xAA数据。然后硬件控制信号线将被置高状况并在主函数中控制。 int main (void) { system_init(); delay_init(); ext_usart_clock_init(); ext_usart_pin_init(); ext_usart_init(); while(1) { delay_ms(1); if (SERCOM2->USART.INTFLAG.bit.RXC) ext_rx_data = SERCOM2->USART.DATA.reg; } } 在主函数中,将检查RXC标志的状态,接收的数据将被写到变量ext_rx_data中。当控制信号处于低状态SERCOM2处理又被处于服务状态。 注意:这个应用程序的功能只能通过捕获示波器检查串口线。
|