如果开发板的B端口的端口控制寄存器的地址为0x56000010,数据寄存器的地址为0x56000014 那我在linux 驱动程序了 能不能这样进行映射: void __iomem *base_addr; #define GPB_BASE_ADD 0x56000010 #define rGPBCON (*(volatile unsigned long*)base_addr +0x00) #define rGPBDAT (*(volatile unsigned long*)base_addr + 0x04) base_add = ioremp(GPB_BASE_ADD,0x10); 然后通过iowrite与ioread类函数对rGPBCON与rGPBDAT进行...
by 0o龙i魂o0 - 嵌入式开发 - 2010-08-16 21:44:25 阅读(2296) 回复(0)
linux下如何读写PCI寄存器? 我用程序获取的值全是0B:[code] #define PCI_ENABLE 0x80000000 #define PCI_BASE_ADDR 0xCF8 #define PCI_BASE_DATA 0xCFC BYTE GetPCIByte(BYTE bBus,BYTE bDev,BYT bFunc,BYTE bReg) { DWORD dwAddr = PCI_ENABLE | (((DWORD)bBus)<<16) | (((DWORD)bDev)<<11) | (((DWORD)bFunc)<<8) | (((DWORD)bReg)&0xFC) BYTE bValue; int fd=open("/dev/port",O_RDWR); lseek(fd,PC...
经过一两天的摸索,基本上对在linux控制硬件有了个初步的认识:在linux下控制硬件和在无操作系统下控制硬件的不同主要在于硬件的地址不一样,在linux下要使用va(虚拟地址),而在无操作系统下可以直接使用硬件的pa(物理地址)。 在linux-2.6.8.1/include/asm-arm/arch-s3c2410/map.h中定义了大部分硬件的物理地址和他们的虚拟地址。 现以gpio F为例说明,gpio 的pa 基址(ba)为0x56000000,GPFCON pa为0x56000050 即:可见偏移量...
s3c2410x的GPHCON寄存器控制着H端口的端口复用配置信息.默认的信息是nRTS0,nCTS0,TXD0,RXD0,TXD1,RXD1,TXD2,RXD2,也就是说我要完整的用到串口2不是件容易的事情了,在2410的datasheet里面看到串口3的RXD2和TXD2可以复用为串口2的nRTS1和nCTS1,但是需要修改寄存器GPHCON的值。 我搜了一下在vivi和内核包里面都有这个寄存器的配置信息。 思考如何修改中.........
s3c2410x的GPHCON寄存器控制着H端口的端口复用配置信息.默认的信息是nRTS0,nCTS0,TXD0,RXD0,TXD1,RXD1,TXD2,RXD2,也就是说我要完整的用到串口2不是件容易的事情了,在2410的datasheet里面看到串口3的RXD2和TXD2可以复用为串口2的nRTS1和nCTS1,但是需要修改寄存器GPHCON的值。 我搜了一下在vivi和内核包里面都有这个寄存器的配置信息。 思考如何修改中.........
X64 linux应用程序的调用约定我找到了,网上可以下载到AMD64 SYS-V ABI 如果是在linux内核里呢?我记得LDD3说不要在内核模块中使用浮点寄存器,因为内核线程切换时不维护浮点堆栈 完整的linux X64内核ABI应该去哪里找呢?能够在内核源码目录中找到吗?
本帖最后由 walterpeng 于 2011-12-21 10:48 编辑 ARM linux系统驱动的A/D转换控制寄存器设置有一段代码为: //检测Enable start位是否为低电平 while (rADCCON & 0x1); //检查ECFLG位是否为高电平,为高电平时表示转换结束 while (!(rADCCON & 0x8000)) //返回转换结果 return ((int) rADCDAT0 & 0x3ff) 请问一下,while (!(rADCCON & 0x8000))中的表达式!(rADCCON & 0x8000)该如何理解? (注:ECFLG位--为1表示A/D转换结束...
情况是这样的,有些复杂{:3_195:} 之前有段代码,结构大概如下[code] void f() { char buffer[SIZE]; char* p = buffer; .... p += some_value; if (p > buffer + SIZE) { return; } do_some_thing(*p); } [/code]程序之前是运行在32位的FreeBSD下面的,这个程序运行一切正常,后来把程序弄到64位FreeBSD的32位兼容模式下运行,程序出现段错误(同一个可执行程序,没有重新编译),问题出在do_some_thing(*p)那...
如 下图(这是芯片datasheet 上的图片)所示 寄存器: GPOUTR 的地址是 OXC8004000 我想读 该寄存器中的值, 我是把驱动编译成内核模块的形式加载到 linux 中 insmod 的时候出错了, 我是新手,请大家指教, 是不是 GPIO 寄存器不能这样直接访问,那该如何访问呢? 还有,我想让 嵌入式 的 linux 启动的时候运行一个程序,该如何做。 谢谢 个位了 ! [ 本帖最后由 daoshuailx 于 2010-1-19 16:17 编辑 ]
平台是MPC8280 ,linux2.4内核 需要写一个定时中断的小测试程序,分驱动层和app层 仔细阅读了手册关于定时器的章节,但英文很烂,许多地方还是不太明了 希望有高手能给指点一下 Timer mode Register Timer reference Register Timer Capture Register Timer Counters Register Timer Event Register 这几个寄存器的具体作用是什么,就实现简单的定时中断功能,是否只需要设置Counter和mode register 找了一些关于定时器的资料,一...
紧急求助,gpio口模拟spi读数据的问题,写数据都没问题了,读00h的数据输出的都是1,不知道怎么回事 gpio定义和spi的都不说了,写寄存器没有问题,读寄存器到底怎么回事呢?请大虾帮忙看看 /*这是写寄存器的代码段*/ static void gpio_lcd_emuspi_write_one_para(unsigned short addr, unsigned short para) { unsigned int i; int j; i = addr | 0x700000; gpio_direction_output(spi_cs, 0); /*udelay(4);*/ for (j = 0...