c语言自定义寄存器操作的一些方法
来源:互联网 发布:淘客联盟和淘宝联盟 编辑:程序博客网 时间:2024/05/29 17:15
1 寄存器地址的定义:
#define UART_BASE_ADRS (0x10000000) /* 串口的基地址 */
#define UART_RHR *(volatile unsigned char *)(UART_BASE_ADRS + 0) /* 数据接受寄存器 */
#define UART_THR *(volatile unsigned char *)(UART_BASE_ADRS + 0) /* 数据发送寄存器 */
2 寄存器读写操作:
UART_THR = ch; /* 发送数据 */
ch = UART_RHR; /* 接收数据 */
也可采用定义带参数宏实现
#define WRITE_REG(addr, ch) *(volatile unsigned char *)(addr) = ch
#define READ_REG(addr, ch) ch = *(volatile unsigned char *)(addr)
3 对寄存器相应位的操作方法:
定义寄存器
#define UART_LCR *(volatile unsigned char *)(UART_BASE_ADRS + 3) /* 线控制寄存器 */
定义寄存器相应位的值
#define CHAR_LEN_5 0x00
#define CHAR_LEN_6 0x01
#define CHAR_LEN_7 0x02
#define CHAR_LEN_8 0x03 /* 8 data bit */
#define LCR_STB 0x04 /* Stop bit control */
#define ONE_STOP 0x00 /* One stop bit! */
#define LCR_PEN 0x08 /* Parity Enable */
#define PARITY_NONE 0x00
#define LCR_EPS 0x10 /* Even Parity Select */
#define LCR_SP 0x20 /* Force Parity */
#define LCR_SBRK 0x40 /* Start Break */
#define LCR_DLAB 0x80 /* Divisor Latch Access Bit */
定义寄存器相应位的值另一种方法
#define CHAR_LEN_5 0<<0
#define CHAR_LEN_6 1<<0
#define CHAR_LEN_7 1<<1
#define CHAR_LEN_8 (1<<0)|(1<<1) /* 8 data bit */
#define LCR_STB 1<<2 /* Stop bit control */
#define ONE_STOP 0<<2 /* One stop bit! */
#define LCR_PEN 1<<3 /* Parity Enable */
#define PARITY_NONE 0<<3
#define LCR_EPS 1<<4 /* Even Parity Select */
#define LCR_SP 1<<5 /* Force Parity */
#define LCR_SBRK 1<<6 /* Start Break */
#define LCR_DLAB 1<<7 /* Divisor Latch Access Bit */
对寄存器操作只需对相应位或赋值
UART_LCR = CHAR_LEN_8 | ONE_STOP | PARITY_NONE; /* 设置 8位数据位,1位停止位,无校验位 */
4 对寄存器某一位置位与清零
对某一寄存器第7位置位
XX_CRTL |= 1<<7;
XX_CRTL &= ~(1<<7);
UART_LCR |= LCR_DLAB; /* 时钟分频器锁存使能 */
UART_LCR &= ~(LCR_DLAB); /* 禁止时钟分频器锁存 */
5 判断寄存器某一位是否置位或为0的方法
#define UART_LSR *(volatile unsigned char *)(UART_BASE_ADRS + 5) /* 线状态寄存器 */
#define LSR_DR 1<<0 /* Data Ready */
当UART_LSR的第0位为1时结束循环
while (!(UART_LSR & LSR_DR)) /* 等待数据接收完 */
#define UART_BASE_ADRS (0x10000000) /* 串口的基地址 */
#define UART_RHR *(volatile unsigned char *)(UART_BASE_ADRS + 0) /* 数据接受寄存器 */
#define UART_THR *(volatile unsigned char *)(UART_BASE_ADRS + 0) /* 数据发送寄存器 */
2 寄存器读写操作:
UART_THR = ch; /* 发送数据 */
ch = UART_RHR; /* 接收数据 */
也可采用定义带参数宏实现
#define WRITE_REG(addr, ch) *(volatile unsigned char *)(addr) = ch
#define READ_REG(addr, ch) ch = *(volatile unsigned char *)(addr)
3 对寄存器相应位的操作方法:
定义寄存器
#define UART_LCR *(volatile unsigned char *)(UART_BASE_ADRS + 3) /* 线控制寄存器 */
定义寄存器相应位的值
#define CHAR_LEN_5 0x00
#define CHAR_LEN_6 0x01
#define CHAR_LEN_7 0x02
#define CHAR_LEN_8 0x03 /* 8 data bit */
#define LCR_STB 0x04 /* Stop bit control */
#define ONE_STOP 0x00 /* One stop bit! */
#define LCR_PEN 0x08 /* Parity Enable */
#define PARITY_NONE 0x00
#define LCR_EPS 0x10 /* Even Parity Select */
#define LCR_SP 0x20 /* Force Parity */
#define LCR_SBRK 0x40 /* Start Break */
#define LCR_DLAB 0x80 /* Divisor Latch Access Bit */
定义寄存器相应位的值另一种方法
#define CHAR_LEN_5 0<<0
#define CHAR_LEN_6 1<<0
#define CHAR_LEN_7 1<<1
#define CHAR_LEN_8 (1<<0)|(1<<1) /* 8 data bit */
#define LCR_STB 1<<2 /* Stop bit control */
#define ONE_STOP 0<<2 /* One stop bit! */
#define LCR_PEN 1<<3 /* Parity Enable */
#define PARITY_NONE 0<<3
#define LCR_EPS 1<<4 /* Even Parity Select */
#define LCR_SP 1<<5 /* Force Parity */
#define LCR_SBRK 1<<6 /* Start Break */
#define LCR_DLAB 1<<7 /* Divisor Latch Access Bit */
对寄存器操作只需对相应位或赋值
UART_LCR = CHAR_LEN_8 | ONE_STOP | PARITY_NONE; /* 设置 8位数据位,1位停止位,无校验位 */
4 对寄存器某一位置位与清零
对某一寄存器第7位置位
XX_CRTL |= 1<<7;
XX_CRTL &= ~(1<<7);
UART_LCR |= LCR_DLAB; /* 时钟分频器锁存使能 */
UART_LCR &= ~(LCR_DLAB); /* 禁止时钟分频器锁存 */
5 判断寄存器某一位是否置位或为0的方法
#define UART_LSR *(volatile unsigned char *)(UART_BASE_ADRS + 5) /* 线状态寄存器 */
#define LSR_DR 1<<0 /* Data Ready */
当UART_LSR的第0位为1时结束循环
while (!(UART_LSR & LSR_DR)) /* 等待数据接收完 */
- C语言自定义寄存器操作的一些方法
- C语言自定义寄存器操作的一些方法
- c语言自定义寄存器操作的一些方法
- 关于寄存器操作的一些常用方法
- 使用C语言操作DSP的寄存器
- 寄存器的一些操作
- 嵌入式寄存器操作-----C语言位操作的学习
- 嵌入式寄存器操作-----C语言位操作的学习
- 寄存器操作的方法
- c语言自定义方法实现字符串的7个操作
- C语言 链表的一些操作
- c语言位操作的一些注意事项
- C语言的一些简单操作
- C语言单链表的一些操作
- C语言中单链表的一些操作
- C语言的一些排序方法
- 对寄存器操作的通用方法总结
- 内核中操作寄存器的方法
- 邮箱手机年龄验证
- wince6.0编译环境一二三(转摘) .
- 使用GridView将数据导入或导出Excel中
- 【图解】Linux下C程序进程地址空间布局 .
- 表达式求值
- c语言自定义寄存器操作的一些方法
- Web简介和Tomcat安装
- Git权威指南-git的好文章
- Android开发者必须深入学习的10个应用开源项目
- 安装intel wifi link 5100 AG无线网卡驱动程序,mac80211-10.0.4子系统的readme文件翻译
- ORACLE参数与提示详解(一)
- 密码修改时发送通知-Facebook安全策略之一
- 用户空间使用Linux数据结构之红黑树(2)
- 安装windows server 2003 datacenter 的 sp2时出现id\syssetup.inf文件找不到无法安装问题的解决方法