[AVR单片机] 请高手帮我看看这段程序,感觉内存映射变量很神奇

[复制链接]
1299|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 | 显示全部楼层
教科书里讲的所谓“固定寄存器”,本质上就是你看到的这种“存储映像”,没什么“神奇”的。
 楼主| shenjiansyu 发表于 2014-7-8 08:52 | 显示全部楼层
李老师,关键是如何得知教科书里讲的所谓“固定寄存器”对应哪个存储映像?谢谢
ayb_ice 发表于 2014-7-8 16:43 | 显示全部楼层
不就是个寄存器吗

寄存器本质是就是个内存映射
john_lee 发表于 2014-7-11 00:53 | 显示全部楼层
shenjiansyu 发表于 2014-7-8 08:52
李老师,关键是如何得知教科书里讲的所谓“固定寄存器”对应哪个存储映像?谢谢 ...

地址译码啊!

译码后得到一根选通信号,允许写信号(WR)控制D触发器的CP端,数据线的信号连到D触发器的输入端,当WR发出下降沿信号时,数据线的数据就被触发器保持了。
 楼主| shenjiansyu 发表于 2014-7-18 09:58 | 显示全部楼层
哎,我自己结贴吧。谢谢各位大仙
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部