标签: ioports

GPIO如何映射到内存中?

我最近正在浏览pi2的GPIO驱动程序,我发现用户空间pi2 GPIO lib(如python的RPi.GPIO 0.5.11)/dev/mem用于BCM2708(从0x20000000开始,GPIO从0x200000开始相对)来mmap用户空间内存区域为了处理GPIO.但是我drivers/gpio在linux中发现源码树是专门为处理而设计的/sys/class/gpio/*.我发现没有像I/O端口映射喜欢request_io_region__io_remap.我的问题是BCM2708的GPIO如何映射到内存中?还有其他司机吗?我可以通过R&W来处理GPIO /sys/class/gpio/*吗?

mmap linux-device-driver gpio ioports raspberry-pi2

6
推荐指数
1
解决办法
5484
查看次数

访问 PIT (?) IO 端口 44h 和 46h - 这些端口有什么作用?

我正在反汇编 MS-DOS .com 应用程序并遇到一些我不明白的端口访问。更准确地说,通过该IN指令,从以下端口读取值。

40h
44h
46h
Run Code Online (Sandbox Code Playgroud)

此处找到的文档提到端口40h-47h属于“可编程间隔计时器”,但详细信息仅在端口上详细说明40h-43h

从反汇编的上下文中,我猜想输入然后用作伪随机数。

我还发现这个参考(德语)没有提到其他 4 个端口。有没有人知道这些端口的确切功能,最好有参考?

编辑:为了提供更多上下文,反汇编的应用程序部分如下所示。

in  al, 46h
mov cl, 03h
div cl
mov bl, ah

in  al, 44h
div cl
mov bh, ah

mov dx, 40h
in  al, dx
div cl
Run Code Online (Sandbox Code Playgroud)

应用就是这种微小的效果;读取值用于将 VGA 调色板 RGB 值设置为最好的颜色,最坏的情况下有趣。

x86 assembly dos ioports x86-16

5
推荐指数
1
解决办法
92
查看次数

打开键盘 LED 灯

我得到了一些代码来分析。此代码启用键盘上的 numLock 和scrollLock LED。我理解这段代码的大部分,但是我不理解循环部分(0104)。我知道这是为了等待输入缓冲区为空。但有必要吗?如果没有这部分,代码也可以正常工作。

0100: MOV AL, ED
0102: OUT 60, AL
0104: IN  AL, 64
0106: TEST AL, 02
0108: JNZ 0104
010A: MOV AL, 03
010C: OUT 60, AL
Run Code Online (Sandbox Code Playgroud)

keyboard x86 assembly ioports x86-16

5
推荐指数
1
解决办法
467
查看次数

REP INSB 可以中断吗?

REP INSB假设我在普通优先级线程中从用户模式长时间读取 PCI 设备寄存器。在执行期间,以下哪些情况可以发生,哪些情况不能发生:

  1. 中断(其他内核)
  2. 中断(同一核心)
  3. PCI 访问(其他内核)
  4. PCI 访问(相同核心 - 中断和/或不同线程)
  5. 同一核心上的上下文切换

如果答案取决于它,则假设有一个相当现代的处理器。感兴趣的是 Atom 和 Core i3。

x86 assembly interrupt ioports

4
推荐指数
1
解决办法
194
查看次数

如何在 GNU 汇编器中使用 ins 指令

如何ins在 GNU 汇编器中使用 x86指令?指令参考建议的语法INS m8/16/32, DX,例如m16(我假设)是任何 16 位通用寄存器,其唯一目的是表示是否应该读取字节/字/双字,对吗?

现在,不幸的是,as拒绝ins %ax,%dxError: operand type mismatch for 'ins',这是为什么呢?

作为记录,我知道我可以简单地使用insb等,但我通过 C++ 程序中的内联汇编调用此指令,要读取的输入的大小取决于模板参数(编译时的字符串处理不是很实际的)。

编辑:这是我现在所拥有的,供参考(我不太喜欢宏)

#define INS(T) \
  __asm__ __volatile__("repne \n\t" \
                       "ins" T \
                       : "=D" (dest), "=c" (count) \
                       : "d" (port), "0" (dest), "1" (count) \
                       : "memory", "cc")

template<typename T>
void ins(uint16_t port, uint32_t dest, uint32_t count);

template<>
void ins<uint8_t>(uint16_t port, uint32_t dest, uint32_t count)
{ INS("b"); } …
Run Code Online (Sandbox Code Playgroud)

x86 g++ inline-assembly att ioports

3
推荐指数
1
解决办法
201
查看次数

字大小的 OUT 到字节 IO 寄存器?使用旧 VGA 代码中的指令设置序列控制器寄存器

我无法理解如何使用一些旧的 VGA 代码在此示例中设置序列控制器寄存器:

 mov     dx,SC_INDEX
 mov     ax,0604h
 out     dx,ax   ;disable chain4 mode
Run Code Online (Sandbox Code Playgroud)

该示例来自 Michael Abrash 的 VGA 书籍:https : //www.phatcode.net/res/224/files/html/ch47/47-02.html

根据描述,他想设置索引 4 处的内存模式寄存器。他想禁用位索引 3 处的 chain4(全部根据 Richard F. Ferraro 编写的 EGA、VGA 和超级 VGA 卡的程序员指南)。

我不明白为什么他将 2 个字节 06 和 04 放入 ax 和out它们。输出寄存器只有一个字节,他没有明确设置寄存器的索引以进行寻址。是不是发生了一些我不明白的魔法?

x86 assembly vga ioports

3
推荐指数
1
解决办法
44
查看次数