📄 at91_usart.h
字号:
/*
* at91_usart.h
*
* author: Kexin (kexin28@126.com) Tel:+8613714451195
* date: 2007-11-27
*/
#ifndef __AT91_USART_H
#define __AT91_USART_H
/*
******************* AT91x40 ********************
*/
#define ARM_CLK (32768000)
#define UART_CLOCK (ARM_CLK/16)
#define AT91_USART_CNT 2
#define AT91_USART0_BASE (0xfffd0000)
#define AT91_USART1_BASE (0xfffcc000)
struct at91_usarts{
unsigned long cr; // control
unsigned long mr; // mode
unsigned long ier; // interrupt enable
unsigned long idr; // interrupt disable
unsigned long imr; // interrupt mask
unsigned long csr; // channel status
unsigned long rhr; // receive holding
unsigned long thr; // tramsmit holding
unsigned long brgr; // 波特率发生器寄存器
unsigned long rtor; // rx time-out
unsigned long ttgr; // 发送器时间保障寄存器
unsigned long reserved;
unsigned long rpr; // rx pointer
unsigned long rcr; // rx counter
unsigned long tpr; // tx pointer
unsigned long tcr; // tx counter
};
/* USART control register*/
#define US_SENDA (1<<12) //发送地址。只适用于多点模式,发送写入US_THR 的下一个字符并将地址位置位。
#define US_STTO (1<<11) //启动超时。在超时计数器计数前等待一个字符。
#define US_STPBRK (1<<10) //停止间断.最少一字符时间且发送高电平达12比特周期后停止间断发送。若间断已发送则无效。
#define US_STTBRK (1<<9) //启动间断.在US_THR 中有字符且发送移位寄存器中字符已发送后,开始发送间断。若间断已发送则无效。
#define US_RSTSTA (1<<8) //US_CSR 寄存器中状态位PARE、FRAME、OVRE 与RXBRK 复位.
#define US_TXDIS (1<<7) //禁用发送器
#define US_TXEN (1<<6) //发送器使能
#define US_RXDIS (1<<5) //禁用接收器
#define US_RXEN (1<<4) //接收器使能
#define US_RSTTX (1<<3) //发送器复位
#define US_RSTRX (1<<2) //接收器复位
/* USART mode register */
#define US_OVER (1<<19) //重采样模式:0--16倍重采样 1--8倍重采样
#define US_CLKO (1<<18) //时钟输出选择:0--USART不驱动SCK引脚 1--若USCLKS未选择外部时钟SCK,USART 驱动SCK引脚
#define US_MODE9 (1<<17) //9位字符长度:0--CHRL定义字符长度 1--9位字符长度
#define US_CHMODE(x) (x<<14& 0xc000) //通道模式:00--普通模式 01--自动回应。接收器输入与TXD引脚连接。
#define US_NBSTOP(x) (x<<12& 0x3000) //停止位数:00--1个停止位 10--2个停止位
#define US_PAR(x) (x<<9 & 0x0e00) //检验类型:000--偶检验 001--奇检验 10x--无检验
#define US_SYNC(x) (x<<8 & 0x0100) //0--USART工作在异步模式下 1--USART工作在同步模式下
#define US_CHRL(x) (x<<6 & 0x00c0) //字符长度:00--5位 11--8位
#define US_USCLKS(x) (x<<4 & 0x0030) //时钟选择:00--MCK 01--MCK/DIV 10--保留
#define US_USMODE(x) (x & 0x07) //USART 模式:000--普通
/* USART interrupts enable/disable/mask and status register */
#define US_DMSI (1<<10) //迭代中断使能
#define US_TXEMPTY (1<<9) //TXEMPTY中断使能
#define US_TIMEOUT (1<<8) //超时中断使能
#define US_PARE (1<<7) //奇偶错误中断使能
#define US_FRAME (1<<6) //帧错误中断使能
#define US_OVRE (1<<5) //溢出错误中断使能
#define US_ENDTX (1<<4) //发送结束中断使能
#define US_ENDRX (1<<3) //接收结束中断使能
#define US_RXBRK (1<<2) //接收器间断中断使能
#define US_TXRDY (1<<1) //TXRDY中断使能
#define US_RXRDY (1) //RXRDY中断使能
void at91_init_usart(void);
int printf(char *p);
#endif __AT91_USART_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -