LPC总线之:ISA总线(X-Bus总线)、EISA总线、LPC总线

        一、ISA总线

1981年IBM生产出的以Intel8088为CPU的面向个人或办公室的PC机时,同时推出了其用于PC机功能扩充的8位总线。后被国际标准化组织ISO确定为ISA总线标准。

1984年ISA总线在原来8位总线的基础上扩充出16位数据总线宽度。同时地址总线宽度也由20位扩充到24位,但仍保持原8位ISA总线的完整性。形成了现在使用的8位基本插槽加上16位扩充插槽的16位ISA总线标准。

   ISA 是8/16bit 的系统总线,最大传输速率仅为8MB/s ,但允许多个CPU 共享系统资源。由于兼容性好,它在上个世纪80年代是最广泛采用的系统总线,不过它的弱点也是显而易见的,比如传输速率过低、CPU占用率高、占用硬件中断资源等。后来在PC‘98 规范中,就开始放弃了ISA 总线,而Inte

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
LPC(Low Pin Count)总线是一种低速、低成本的系统总线,广泛应用于嵌入式系统中。下面是一个完整的LPC总线驱动程序示例,包括初始化、读写等操作: ```c #include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/ioport.h> #include <linux/io.h> #include <linux/platform_device.h> #include <linux/pci.h> // LPC总线寄存器地址 #define LPC_IO_BASE 0x80000000 #define LPC_IO_SIZE 0x1000 #define LPC_IO_REG(x) (LPC_IO_BASE + (x)) // LPC总线寄存器偏移量 #define LPC_ID 0x00 #define LPC_REV 0x08 #define LPC_CFG 0x0C #define LPC_STATUS 0x10 #define LPC_INT_EN 0x14 #define LPC_INT_STS 0x18 #define LPC_INT_ACK 0x1C #define LPC_TIM_CTRL 0x20 #define LPC_TIM_CNT 0x24 #define LPC_TIM_STS 0x28 // 初始化LPC总线 static int lpc_bus_probe(struct platform_device *pdev) { void __iomem *io_base; // 请求LPC总线地址空间 io_base = ioport_map(LPC_IO_BASE, LPC_IO_SIZE); if (!io_base) { dev_err(&pdev->dev, "failed to request io memory\n"); return -ENOMEM; } // 读取LPC ID和REV寄存器 u32 id = ioread32(LPC_IO_REG(LPC_ID)); u32 rev = ioread32(LPC_IO_REG(LPC_REV)); dev_info(&pdev->dev, "LPC ID: 0x%08x, REV: 0x%08x\n", id, rev); // 配置LPC总线 iowrite32(0x1, LPC_IO_REG(LPC_CFG)); return 0; } // 读取LPC总线寄存器 static u32 lpc_bus_read(u32 reg) { u32 val; // 读取寄存器值 val = ioread32(LPC_IO_REG(reg)); return val; } // 写入LPC总线寄存器 static void lpc_bus_write(u32 reg, u32 val) { // 写入寄存器值 iowrite32(val, LPC_IO_REG(reg)); } // 卸载LPC总线 static int lpc_bus_remove(struct platform_device *pdev) { // 释放LPC总线地址空间 ioport_unmap(LPC_IO_BASE, LPC_IO_SIZE); return 0; } // 定义LPC总线驱动结构体 static struct platform_driver lpc_bus_driver = { .driver = { .name = "lpc-bus", }, .probe = lpc_bus_probe, .remove = lpc_bus_remove, }; // 初始化模块 static int __init lpc_bus_init(void) { // 注册LPC总线驱动 return platform_driver_register(&lpc_bus_driver); } // 卸载模块 static void __exit lpc_bus_exit(void) { platform_driver_unregister(&lpc_bus_driver); } module_init(lpc_bus_init); module_exit(lpc_bus_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Your Name"); MODULE_DESCRIPTION("LPC Bus Driver"); ``` 上面的示例代码定义了一个`lpc_bus_driver`结构体,包含了LPC总线驱动的相关信息,如驱动名、初始化函数、卸载函数等。在初始化函数中,先请求LPC总线地址空间,然后读取LPC ID和REV寄存器,并配置LPC总线。在读写LPC总线寄存器的函数中,使用io系列函数来读写内存地址空间。在卸载函数中,释放LPC总线地址空间。 需要注意的是,在使用LPC总线之前,需要先在系统的设备树中添加LPC总线的节点,并在驱动程序中进行匹配。另外,LPC总线的寄存器地址和偏移量可能因不同的硬件平台而异,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NIUZI_J

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值