Atmel_UART串口

Atmel_UART串口

2010-06-07 13:53:19 阅读11 评论0 字号:

    UART串口

异步模式下波特率:
当OVER=0时:BaudRate = MCK / (CD * 16)
当OVER=1时:BaudRate = MCK / (CD * 8)

同步模式下波特率:
BaudRate = MCK / CD 

ISO7816模式下波特率:
ISO7816_ClockBit Rate= ISO7816_Clock/Fi_Di_Ratio
ISO7816_Clock = MCK/CD

US_CR中的RXEN和TXEN位使能接收器或发送器
US_CR中的RSTRX和RSTTX位复位接收器或发送器
US_CR中的RXDIS和TXDIS位禁用收器或发送器
US_CR中的TXRDY位置位表示发送就绪 US_THR为空可发送数据
US_CR中的RXRDY位置位表示接收就绪 US_RHR有数据可以接收



US_CR 控制寄存器
[2]RSTRX:接收器复位
[3]RSTTX:发送器复位
[4]RXEN:接收器使能
[5]RXDIS:接收器禁用
[6]TXEN:发送器使能
[7]TXDIS:发送器禁用
[8]RSTSTA:状态位复位  值为1时US_CSR中的PARE、FRAME、OVER、RXBRK复位
[9]STTBRK:启用间断
[10]STPBRK:停止间断
[11]STTO:启用超时
[12]SENDA:发送地址 只适用于多点模式
[13]RSTIT:迭代复位
[14]RSTNACK:无应答复位  值为1时US_CSR中的NACK复位
[15]RETTO:重启超时
[16]DTREN:数据终端就绪使能  值为1时DTR引脚为0
[17]DTRDIS:数据终端就绪禁用 值为1时DTR引脚为1
[18]RTSEN:发送请求使能  值为1时RTS引脚为0
[19]RTSDIS:发送请求禁用 值为1时RTS引脚为1

US_MR模式寄存器
[0-3]USART_MODE:USART模式
[4-5]USCLKS:时钟选择  0-MCK  1-MCK/DIV  3-SCK
[6-7]CHRL:字符长度  0-5位  1-6位  2-7位  3-8位
[8]SYNC:同步模式选择  0-异步 1-同步
[9-11]PAR:检验类型  0-偶检验 1-奇检验 2-空校验 3-标志校验 
[12-13]NBSTOP:停止位数  0-1个停止位  1-1.5个停止位  2-2个停止位
[14-15]CHMODE:通道模式  0-普通模式
[16]MSBF:位次序  0-低位在先 1-高位
[17]MODE9:9位字符长度   0-CHRL定义长度
[18]CKLO:时钟输出选择
[19]OVER:重采样模式 0-16倍采样  1-8倍
[20]INACK:抑制无应答  1-不产生NACK
[21]DSNACK:连续NACK禁用
[24-26]MAX_ITERATION
[28]FILTER:红外接收线滤波器

US_IER中断使能寄存器
[0]RXRDY:RXRDY中断使能
[1]TXRDY:TXRDY中断使能
[2]RXBRK:接收器间断中断使能
[3]ENDRX:接收结束中断使能
[4]ENDTX:发送结束中断使能
[5]OVER:溢出错误中断使能
[6]FRAME:帧错误中断使能
[7]PARE:奇偶错误中断使能
[8]TIMEOUT:超时中断使能
[9]TXEMPTY:TXEMPTY中断使能
[10]ITERATION:迭代中断使能
[11]TXBUFE:缓冲器空中断使能
[12]RXBUFF:缓冲器满中断使能
[13]NACK:无应答中断使能
[16]RIIC:环指示器输入变化使能
[17]DSRIC:数据设置就绪输入变化使能
[18]DCDIC;数据载波检测输入变化中断使能
[19]CTSIC:发送输入变化xx中断使能

US_IDR中断禁用寄存器
[0]RXRDY:RXRDY中断禁用
[1]TXRDY:TXRDY中断禁用
[2]RXBRK:接收器间断中断禁用
[3]ENDRX:接收结束中断禁用
[4]ENDTX:发送结束中断禁用
[5]OVER:溢出错误中断禁用
[6]FRAME:帧错误中断禁用
[7]PARE:奇偶错误中断禁用
[8]TIMEOUT:超时中断禁用
[9]TXEMPTY:TXEMPTY中断禁用
[10]ITERATION:迭代中断禁用
[11]TXBUFE:缓冲器空中断禁用
[12]RXBUFF:缓冲器满中断禁用
[13]NACK:无应答中断禁用
[16]RIIC:环指示器输入变化禁用
[17]DSRIC:数据设置就绪输入变化禁用
[18]DCDIC;数据载波检测输入变化中断禁用
[19]CTSIC:发送输入变化xx中断禁用

US_IMR中断屏蔽寄存器
[0]RXRDY:RXRDY中断屏蔽
[1]TXRDY:TXRDY中断屏蔽
[2]RXBRK:接收器间断中断屏蔽
[3]ENDRX:接收结束中断屏蔽
[4]ENDTX:发送结束中断屏蔽
[5]OVER:溢出错误中断屏蔽
[6]FRAME:帧错误中断屏蔽
[7]PARE:奇偶错误中断屏蔽
[8]TIMEOUT:超时中断屏蔽
[9]TXEMPTY:TXEMPTY中断屏蔽
[10]ITERATION:迭代中断屏蔽
[11]TXBUFE:缓冲器空中断屏蔽
[12]RXBUFF:缓冲器满中断屏蔽
[13]NACK:无应答中断屏蔽
[16]RIIC:环指示器输入变化屏蔽
[17]DSRIC:数据设置就绪输入变化屏蔽
[18]DCDIC;数据载波检测输入变化中断屏蔽
[19]CTSIC:发送输入变化xx中断屏蔽
0-禁用  1-使能

US_CSR 通道状态寄存器
[0]RXRDY:接收器就绪  1-US_RHR有字符
[1]TXRDY:发送器就绪  0-有字符等待发送  1-US_THR无字符
[2]RXBRK:间断接收/间断结束 
[3]ENDRX:接收器传输结束
[4]ENDTX:发送器传输结束
[5]OVER:溢出错误
[6]FRAME:帧错误
[7]FARE:检验错误
[8]TIMEOUT:接收器超时
[9]TXEMPTY:发送器空
[10]ITERATION:{zd0}重复数
[11]TXBUFE:发送缓冲器空
[12]RXBUFF:接收缓冲器满
[13]NACK:无应答
[16]RIIC:环指示器输入变化标志
[17]DSRIC:数据设置就绪输入变化标志
[18]DCDIC:数据载波检测输入变化标志
[19]CTSIC:发送输入变化xx标志
[20]RI:输入映象
[21]DSR:DSR输入映象
[22]DCD:DCD输入映象
[23]CTS:CTS输入映象

US_RHR 接收保持寄存器
[0-8]RXCHR:收到的字节   RXRDY置位,接收到的{zh1}一个字符

US_THR 发送保持寄存器
[0-8]TXCHR:将发送的字符  TXRDY未置位 下一个要发送的字符

US_BRGR 波特率发送器寄存器
[0-15]CD:时钟分频器

US_RTOR 接收器超时寄存器
[0-15]TO:超时值

US_TTGR 发送器时间保障寄存器
[0-8]TG:时间保障值  TG*比特周期

US_FIDI FI DI比率寄存器
[0-10]FI_DI_RATIO:FI与DI比值

US_NER 错误数目寄存器
[0-7]NB_ERRORS:错误数目

US_IF IrDA滤波器寄存器
[0-7]IRDA_FILTER:IrDA滤波器


//-----------------------------UART测试  wang@20080607-----------------------------------
//操作流程:选择时钟--配置引脚端口--设置波特率--复位状态--配置选择串口模式--使能收发状态
//接收:判断接收是否就绪(RXRDY置位),是,接收数据
//发送:判断发送是否就绪(TXRDY置位),是,发送数据
#include "../Startup/Board.h"

int main()
{
    unsigned char c;
    *AT91C_CKGR_MOR = 0x701;//使能主振荡器和设置起振时间 
  //  *AT91C_PMC_MCKR = AT91C_PMC_CSS_MAIN_CLK; //选择主时钟   CD = 10   设 *AT91C_US0_BRGR=10
   *AT91C_PMC_MCKR = AT91C_PMC_CSS_PLL_CLK|AT91C_PMC_PRES_CLK_2;//选择PLL时钟  2分频    CD=26

    *AT91C_PMC_SCER = AT91C_CKGR_MOSCEN;//使能系统时钟寄存器的处理器时钟
    *AT91C_PMC_PCER = 1<<AT91C_ID_US0;//使能USART0时钟 
    *AT91C_US0_IDR = 0xf3fff;//禁止所有UART相关的中断 

    *AT91C_PIOA_ASR = US_RXD_PIN | US_TXD_PIN | US_RTS_PIN | US_CTS_PIN;//将I/O口分配给外围A  
    *AT91C_PIOA_BSR = AT91C_PA2_SCK0;
    *AT91C_PIOA_PDR = US_RXD_PIN | US_TXD_PIN | US_RTS_PIN | US_CTS_PIN | AT91C_PA2_SCK0;//禁止管脚的

I/O口功能



  //  *AT91C_US0_BRGR=10; //MCK=EXT_OC=18432000  CD=10  波特率为115200Hz
    *AT91C_US0_BRGR=26;//MCK=PLL=47923200  CD=26  波特率为115200Hz,AT91C_US0_BRGR为CD值
   //异步模式下波特率:当OVER=0时:BaudRate = MCK / (CD * 16)  

    *AT91C_US0_CR =  AT91C_US_RSTSTA | AT91C_US_RSTTX | AT91C_US_RSTRX ;//0x10c复位接收器、发送器和状

态位

    *AT91C_US0_MR=AT91C_US_ASYNC_MODE;//正常模式,时钟为MCK,8位长度,无校验,1位停止位, 

    *AT91C_US0_CR = AT91C_US_RXEN | AT91C_US_TXEN;//使能接收与发送

    //测试代码 只供当个字节发送  
   while(1)
   {
      if((*AT91C_US0_CSR)&AT91C_US_RXRDY)//判断接收器是否有数据   
      {
        c = *AT91C_US0_RHR;
        if((*AT91C_US0_CSR)&AT91C_US_TXRDY)//判断发送器是就绪 
        {
           *AT91C_US0_THR = c;
        }
      }
   }

}

//-----------------------------end----------------------------------



引文来源  fly511
<#--{zx1}日志--> <#--推荐日志--> <#--引用记录--> <#--相关日志--> <#--推荐日志--> <#--推荐阅读--> <#--相关文章--> <#--历史上的今天--> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构-->
郑重声明:资讯 【Atmel_UART串口】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——