当前位置: 技术问答>linux和unix
请教嵌入式方面的问题
来源: 互联网 发布时间:2015-07-29
本文导语: #define rULCON0 (*(volatile unsigned *)0x50000000) //UART 0 Line control #define rUCON0 (*(volatile unsigned *)0x50000004) //UART 0 Control #define rUFCON0 (*(volatile unsigned *)0x50000008) //UART 0 FIFO control #define rUMCON0 ...
#define rULCON0 (*(volatile unsigned *)0x50000000) //UART 0 Line control
#define rUCON0 (*(volatile unsigned *)0x50000004) //UART 0 Control
#define rUFCON0 (*(volatile unsigned *)0x50000008) //UART 0 FIFO control
#define rUMCON0 (*(volatile unsigned *)0x5000000c) //UART 0 Modem control
#define rUTRSTAT0 (*(volatile unsigned *)0x50000010) //UART 0 Tx/Rx status
#define rUERSTAT0 (*(volatile unsigned *)0x50000014) //UART 0 Rx error status
#define rUFSTAT0 (*(volatile unsigned *)0x50000018) //UART 0 FIFO status
#define rUMSTAT0 (*(volatile unsigned *)0x5000001c) //UART 0 Modem status
#define rUBRDIV0 (*(volatile unsigned *)0x50000028) //UART 0 Baud rate divisor
是不是相当于设备对应于内存的地址,可以对其赋一个32位的二进制值来达到控制设备引脚的目的?
#define rUCON0 (*(volatile unsigned *)0x50000004) //UART 0 Control
#define rUFCON0 (*(volatile unsigned *)0x50000008) //UART 0 FIFO control
#define rUMCON0 (*(volatile unsigned *)0x5000000c) //UART 0 Modem control
#define rUTRSTAT0 (*(volatile unsigned *)0x50000010) //UART 0 Tx/Rx status
#define rUERSTAT0 (*(volatile unsigned *)0x50000014) //UART 0 Rx error status
#define rUFSTAT0 (*(volatile unsigned *)0x50000018) //UART 0 FIFO status
#define rUMSTAT0 (*(volatile unsigned *)0x5000001c) //UART 0 Modem status
#define rUBRDIV0 (*(volatile unsigned *)0x50000028) //UART 0 Baud rate divisor
是不是相当于设备对应于内存的地址,可以对其赋一个32位的二进制值来达到控制设备引脚的目的?
|
这个定义本身只是说明要引用这块地址的内容,并不能说明这块一定是物理地址。
在多数实现中,他代表的也应该是虚拟地址,由MMU映射到外设的寄存器。
至于volatile关键字是告诉编译器,不要对这个地址使用寄存器保存内容,每次访
问都要到内存中得到数据。
在多数实现中,他代表的也应该是虚拟地址,由MMU映射到外设的寄存器。
至于volatile关键字是告诉编译器,不要对这个地址使用寄存器保存内容,每次访
问都要到内存中得到数据。
|
那是设备的设备控制器的及寄存器的内存映象地址
|
是寄存器的地址,就象51单片机中PA寄存器的地址是90H一样,但只能在驱动层用,可以用inl(), outl()来读写, 读到的数据通过copy_to_usr()传到应用层,还是比较麻烦的。