博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
嵌入式实验 2
阅读量:4561 次
发布时间:2019-06-08

本文共 1205 字,大约阅读时间需要 4 分钟。

1:

 关于用C语言操作寄存器的问题:

  有一个例子写的不错:

s2440IOP->GPGCON &= ~(3 < < 8); 

是对这个寄存器的bit[8]和bit[11]置零。
s2440IOP->GPGCON |= (1 < < 8);
是对这个寄存器的bit[8]置1。
s2440IOP->GPGDAT |= (1 < < 4); 
是对这个寄存器的bit[4]置1。
以此类推,其实这是典型的先读后写操作,就是因为某些寄存器里我们有时候只需要改变某一位或某几位而不能动其他的位,所以才这样用。
至于(1 < < 8) 和(1 < < 4)这样的写法一目了然,一眼就能看出来是在对第几位进行操作,纯粹是为了阅读方便。

2:  贴一段自己操作串口寄存器的代码吧 好好学学 不难的

#define UART_BASE_ADRS (0x100000000)

#define UART_RHR *(volatile unsigned char*)(UART_BASE_ADRS+0)
#define UART_THR *(volatile unsigned char*)(UART_BASE_ADRS+0)
#define WRITE_REG(addr,ch)*(volatile unsigned char*)(addr) = ch
#define READ_REG(addr,ch) ch=*(volatile unsigned char*)(addr)
#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
#define LCR_STB 0x04
#define ONE_STOP 0x00
#define LCR_PEN 0x08
#define PARITY_NONE 0x00
#define LCR_EPS 0x10
#define LCR_SP 0x20
#define LCR_SBRK 0x40
#define LCR_DLAB 0x80
int main()
{
    UART_LCR = CHAR_LEN_8|ONE_STOP|PARITY_NONE;   //对给定位进行赋值
    XX_CRTL |= 1<<7;                              // 对第八位赋值为1
    XX_CRTL &= ~(1<<7);                        // 对第八位清零
    UART_LCR |= LCR_DLAB;                
    UART_LCR &=~(LCR_DLAB);
}

转载于:https://www.cnblogs.com/wangshuai901/archive/2011/09/27/2193353.html

你可能感兴趣的文章
Xcode 9,真机测试,App installation failed
查看>>
zabbix-mysql迁移分离
查看>>
jQuery调用WCF 说明
查看>>
算法第5章作业
查看>>
7.9 练习
查看>>
基于ArcGIS JS API的在线专题地图实现
查看>>
learnByWork
查看>>
Unity3D热更新之LuaFramework篇[04]--自定义UI监听方法
查看>>
lua 函数
查看>>
Git的基本命令
查看>>
四平方和
查看>>
第十八周 12.27-1.2
查看>>
Linux平台下java程序员的基本功(七)
查看>>
C# IP地址字符串和数值转换
查看>>
TCHAR和CHAR类型的互转
查看>>
Java Collection framework
查看>>
[Deep Learning] 神经网络基础【转】
查看>>
ActiveMQ Queue vs Topic vs VirtualTopic
查看>>
ShareObject 数据存储
查看>>
常用界面布局
查看>>