打印
[AVR单片机]

请高手帮我看看这段程序,感觉内存映射变量很神奇

[复制链接]
1063|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shenjiansyu|  楼主 | 2014-7-5 16:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//declare memory mapped variables   声明内存映射变量

#define COM_RHR (*(volatile unsigned char *)0x8000)
#define COM_THR (*(volatile unsigned char *)0x8000)
#define COM_IER (*(volatile unsigned char *)0x8001)
#define COM_DLL (*(volatile unsigned char *)0x8000)
#define COM_DLM (*(volatile unsigned char *)0x8001)
#define COM_ISR (*(volatile unsigned char *)0x8002)
#define COM_FCR (*(volatile unsigned char *)0x8002)
#define COM_LCR (*(volatile unsigned char *)0x8003)
#define COM_MCR (*(volatile unsigned char *)0x8004)
#define COM_LSR (*(volatile unsigned char *)0x8005)
#define COM_MSR (*(volatile unsigned char *)0x8006)
#define COM_SPR (*(volatile unsigned char *)0x8007)



void init_COM(void)
{
    COM_LCR=0x80;//LCR-bit7=1,配置波特率。
           COM_DLL=0x01;//0x01:baud=115.2K.

         COM_DLM=0x00;
         COM_LCR=0x07;//8 bit数据,无校验,2bit停止位。0000 0111

//         COM_FCR=0x0f;//使用FIFO,RX FIFO trigger level=1.(=14时通信出错)
//         COM_FCR=0x4f;
//         COM_MCR=0x02;
         COM_FCR=0;
         COM_MCR=0;
         COM_IER=0b00000101;//modify by weizl at 2005-03-17.
}

相关帖子

沙发
yubsh| | 2014-7-7 09:43 | 只看该作者
记住背下来吧,也没什么好辙。

使用特权

评论回复
板凳
shenjiansyu|  楼主 | 2014-7-7 16:40 | 只看该作者
我是想请高手告诉我,在教科书里设置串口通信波特率是对固定的寄存器进行编程实现,为什么这个案例中的波特率可以采用内存映射变量实现,这里面的原理是什么?谢谢老师指点

使用特权

评论回复
地板
john_lee| | 2014-7-7 22:38 | 只看该作者
教科书里讲的所谓“固定寄存器”,本质上就是你看到的这种“存储映像”,没什么“神奇”的。

使用特权

评论回复
5
shenjiansyu|  楼主 | 2014-7-8 08:52 | 只看该作者
李老师,关键是如何得知教科书里讲的所谓“固定寄存器”对应哪个存储映像?谢谢

使用特权

评论回复
6
ayb_ice| | 2014-7-8 16:43 | 只看该作者
不就是个寄存器吗

寄存器本质是就是个内存映射

使用特权

评论回复
7
john_lee| | 2014-7-11 00:53 | 只看该作者
shenjiansyu 发表于 2014-7-8 08:52
李老师,关键是如何得知教科书里讲的所谓“固定寄存器”对应哪个存储映像?谢谢 ...

地址译码啊!

译码后得到一根选通信号,允许写信号(WR)控制D触发器的CP端,数据线的信号连到D触发器的输入端,当WR发出下降沿信号时,数据线的数据就被触发器保持了。

使用特权

评论回复
8
shenjiansyu|  楼主 | 2014-7-18 09:58 | 只看该作者
哎,我自己结贴吧。谢谢各位大仙

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝