qemu:gpio使用

devtools/2024/9/23 22:40:33/

文章目录

  • 定义gpio_in
    • 定义
    • 使用
    • 验证
  • 定义gpio_out
    • 结构体添加irq
    • 初始化irq
    • 定义
    • 使用
  • 将gpio_in与gpio_out联合起来
    • 定义
    • 使用

定义gpio_in

qdev_init_gpio_in_named
qdev_get_gpio_in_named

定义

/*** qdev_init_gpio_in_named() - create an array of input GPIO lines* @dev: device to add array to* @handler: a &typedef qemu_irq_handler function to call when GPIO is set* @name: Name of the GPIO input (must be unique for this device)* @n: Number of GPIO lines in this input set** Like qdev_init_gpio_in_named_with_opaque(), but the opaque pointer* passed to the handler is @dev (which is the most commonly desired behaviour).*/
static inline void qdev_init_gpio_in_named(DeviceState *dev,qemu_irq_handler handler,const char *name, int n)

使用

qdev_init_gpio_in_named(DEVICE(obj), FUNCTION_PROCESS_GPIO_PIN_IN(3,11), "gpio_pin_in_3_11", 1);DEVICE(obj)FUNCTION_PROCESS_GPIO_PIN_IN(3,11):handler函数
"gpio_pin_in_3_11":引脚名称
1:此引脚线个数

验证

进入到monitor模式 telnet 127.0.0.1 12345
查看设备信息 info qtree

  dev: dev01, id ""gpio-in "gpio_pin_in_4_25" 1gpio-in "gpio_pin_in_4_24" 1gpio-in "gpio_pin_in_3_20" 1gpio-in "gpio_pin_in_3_11" 1mmio 0000000025040000/0000000000010000

定义gpio_out

结构体添加irq

typedef struct  {SysBusDevice parent_obj;MemoryRegion iomem;qemu_irq irq_out[32];
} ;

初始化irq

sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq_out[i]);

定义

/*** qdev_init_gpio_out_named: create an array of named output GPIO lines* @dev: Device to create output GPIOs for* @pins: Pointer to qemu_irq or qemu_irq array for the GPIO lines* @name: Name to give this array of GPIO lines* @n: Number of GPIO lines to create** Like qdev_init_gpio_out(), but creates an array of GPIO output lines* with a name. Code using the device can then connect these GPIO lines* using qdev_connect_gpio_out_named().*/
void qdev_init_gpio_out_named(DeviceState *dev, qemu_irq *pins,const char *name, int n);

使用

qdev_init_gpio_out_named(dev, &s->irq_out[11], "gpio_pinout_3_11", 1);

将gpio_in与gpio_out联合起来

定义

/*** qdev_connect_gpio_out_named: Connect one of a device's named output*                              GPIO lines* @dev: Device whose GPIO to connect* @name: Name of the output GPIO array* @n: Number of the anonymous output GPIO line (which must be in range)* @input_pin: qemu_irq to connect the output line to** For anonymous output GPIO lines, use qdev_connect_gpio_out().*/
void qdev_connect_gpio_out_named(DeviceState *dev, const char *name, int n,qemu_irq input_pin);

使用

qdev_connect_gpio_out_named(gpio_out_dev, "gpio_pinout_3_11", 0, qdev_get_gpio_in_named(gpio_in_dev, "gpio_pin_in_3_11", 0));gpio_out_dev:gpio线输出的设备,对接irq
"gpio_pinout_3_11":gpio线输出线的名字
0:gpio线输出线的indexgpio_in_dev:gpio线输入的设备,对接handler函数
"gpio_pin_in_3_11":gpio线输入线的名字
0:gpio线输入线的index

http://www.ppmy.cn/devtools/99379.html

相关文章

Elasticsearch(面试篇)

目录 Elasticsearch的倒排索引是什么? 详细描述一下Elasticsearch更新和删除文档的过程 描述一下Elasticsearch搜索的过程 兄弟们一起加油 ! ! ! Elasticsearch的倒排索引是什么? 传统我们索引通过文章&#xff0c…

系统应用工程师

文章目录 系统应用工程师在芯片领域中的角色和职责系统应用工程师的具体工作系统应用工程师的存在价值系统应用工程师的重要性系统应用工程师不明显存在于产品线上的原因系统应用工程师与架构师的区别系统应用工程师未来发展系统应用工程师产品线地位系统应用工程师需要具备的能…

【每日一题 | 数据结构 | 树的转换与遍历】

重要知识点讲解 考研中只会涉及到两种树的存储,一是二叉树的存储方式,二是一般树的存储方式。二叉树的存储方式,主要有两种: 链表存储:定义一个结构体,包含数据和左右节点的指针,指针将多个节点…

安装torchvision==0.5.0

安装pytorch 1.4 但是在当前配置的镜像源中找不到 torchvision0.5.0 这个版本的包。 直接找资源下载 网址添加链接描述 直接运行该命令,成功。 然后重复运行上面的命令就可以了 # CUDA 9.2 conda install pytorch1.4.0 torchvision0.5.0 cudatoolkit9.2 -c pyto…

[数据集][目标检测]电力场景输电线导线散股检测数据集VOC+YOLO格式3890张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3890 标注数量(xml文件个数):3890 标注数量(txt文件个数):3890 标注…

稀土阻燃协效剂在木质地板中的应用

木质地板作为一种天然材料,非常容易燃烧,因此需要采取措施来增强其阻燃性能。稀土阻燃协效剂基于稀土4f电子层结构带来的特有属性,在聚合物材料燃烧时可催化酯化成炭,迅速在高分子表面形成致密连续的碳层,隔绝聚合物材料内部的可燃性气体与氧…

【ARM+Codesys 客户案例 】 基于RK3568/A40i/STM32+CODESYS在工厂自动化中的应用:铆接机

应用:铆接机: 连接、压入和焊接工艺中,铆接机的加工过程控制 Berghof向德国Wener Krayer公司提供铆接机的显控一体控制器,该控制器有强大的I/O扩展功能。使用该控制器,可以显著减少铆接过程中的失误率或次品率。其体积…

SOMEIP_ETS_061: Sending_two_SOMEIP_Messages_in_a_row

测试目的: 验证设备(DUT)能够处理在单个UDP数据包中发送的多个SOME/IP消息,并对所有这些SOME/IP消息给出正确的响应。 描述 本测试用例旨在检查DUT在接收到一个包含多个SOME/IP消息的UDP数据包时,是否能够对所有包含…