张永春 发表于 2014-7-18 14:17:30

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

//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.}

丁文明 发表于 2014-7-18 14:22:38

记住背下来吧,也没什么好辙。

张永春 发表于 2014-7-18 14:24:44

我是想请高手告诉我,在教科书里设置串口通信波特率是对固定的寄存器进行编程实现,为什么这个案例中的波特率可以采用内存映射变量实现,这里面的原理是什么?谢谢老师指点

黄玉东 发表于 2014-7-18 14:32:05

教科书里讲的所谓“固定寄存器”,本质上就是你看到的这种“存储映像”,没什么“神奇”的。

黄金田 发表于 2014-7-18 14:34:47

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

张永春 发表于 2014-7-18 14:37:41

老师,关键是如何得知教科书里讲的所谓“固定寄存器”对应哪个存储映像?谢谢
页: [1]
查看完整版本: 请高手帮我看看这段程序,感觉内存映射变量很神奇