精华内容
下载资源
问答
  • linux所有的外部设备都是通过各种bus总线与cpu通信,常见的bus有pci,usb,i2c,isa,mca,sbus,platform,spi等,所有的外部设备终端都有一个bus控制器,cpu通过bus与各种控制器通信,而不同的控制器需要不同的驱动,总线...

    linux所有的外部设备都是通过各种bus总线与cpu通信,常见的bus有pci,usb,i2c,isa,mca,sbus,platform,spi等,所有的外部设备终端都有一个bus控制器,cpu通过bus与各种控制器通信,而不同的控制器需要不同的驱动,总线就负责管理各种设备与驱动。
    下面我们以usb总线为例分析下bus总线的与设备驱动的关系
    一.linux启动时候首先注册一个usb总线设备
    subsys_initcall(usb_init)-> // kernel/drivers/usb/core/usb.c
    __init usb_init(void) ->
    bus_register(struct bus_type *bus) -> kernel\drivers\base\bus.c

                struct subsys_private *priv;                         //分配一个struct subsys_private结构体
                priv->bus = bus;
                bus->p = priv;
                bus_create_file(bus, &bus_attr_uevent);           //sys/bus/usb/下创建uevent节点
                add_probe_files(bus);                                       //sys/bus/usb/下创建drivers_autoprobe   drivers_probe节点
                bus_add_groups(bus, bus->bus_groups);        //sys/bus/usb/下创建多个节点
    

    这样一个usb设备总线设备就注册好了。usb总线设备本身也需要驱动,下面分析usb总线驱动加载流程
    二.把总线驱动添加到总线上去

       subsys_initcall(usb_init)->         // kernel/drivers/usb/core/usb.c
                __init usb_init(void) ->       
                     usb_register_device_driver->    Y:\kernel\drivers\usb\core\driver.c  这里面传递了一个usb父驱动usb_generic_driver,所有usb设备插入都要用次驱动进行设备枚举,并设置了总线类型为new_udriver->drvwrap.driver.bus =                         &usb_bus_type;
            driver_register->   
                    bus_add_driver(drv);         Y:\kernel\drivers\base\driver.c  //把驱动添加到总线上去
                                    bus = bus_get(drv->bus);      //获取上面设置的总线
    

    klist_init(&priv->klist_devices, NULL, NULL); 初始化并插入bus驱动链表
    priv->driver = drv;
    drv->p = priv;
    priv->kobj.kset = bus->p->drivers_kset;
    error = kobject_init_and_add(&priv->kobj, &driver_ktype, NULL,
    “%s”, drv->name);
    三.普通usb设备-usb接口
    1.usb最小通信单位是端点,一个接口有若干个端点,一个配置有若干个接口,平时写usb驱动就是接口驱动
    usb_register_driver-> 注册一个usb接口驱动 kernel\drivers\usb\core\driver.c
    driver_register
    bus_add_driver(drv); kernel\drivers\base\driver.c //把驱动添加到总线上去
    bus = bus_get(drv->bus); //获取上面设置的总线
    klist_init(&priv->klist_devices, NULL, NULL); 初始化并插入bus驱动链表
    这里分析了usb驱动添加到总线的过程
    2.分析下usb设备添加到总线的过程
    linux内核启动的时候注册了hub事件不停的查询usb设备的插入
    hub_probe -> Y:\kernel\drivers\usb\core\hub.c
    hub_event->
    ->port_event
    hub_port_connect_change->
    ->hub_port_connect
    ->usb_new_device
    ->device_add Y:\kernel\drivers\base\core.c
    bus_add_device //就在这里usb设备添加到usb总线上

    通过上面的分析,我们知道usb设备的驱动与设备都是挂在总线上,每次插入一个新设备就会从总线上查找相应的符合的驱动,一旦找到相应的驱动,设备就处于可使用状态。通过上述分析,我们可以自己开发一个usb设备从而添加相应的设备驱动。以此类推,平台设备也是这个原理。

    展开全文
  • localbus总线

    2021-02-25 23:53:52
    Local Bus总线又称为CPU总线,根据高低位地址线序的差异,又可分为Motorola CPU总线和Intel CPU总线。古老的CS51单片机就是Intel CPU总线的典型代表,而我们常用的Power PC就是Motorola CPU总线架构,它是从60X总线...

    一、介绍

    Local Bus总线又称为CPU总线,根据高低位地址线序的差异,又可分为Motorola CPU总线和Intel CPU总线。古老的CS51单片机就是Intel CPU总线的典型代表,而我们常用的Power PC就是Motorola CPU总线架构,它是从60X总线衍变过来的(60X总线支持64、32、16、8四种可选位宽模式),由于Local Bus总线是直接从60X总线上通过桥片分出来的,所以它和60X总线是同步同频的,进行数据数据读写时与60X总线共享带宽,不需要内核提供额外的处理。如下图所示:

     

    二、特性

    2.1数据/地址线复用

    Device Bus(数据/地址复用总线)解复用后的Device Bus叫Local Bus(CPU总线)。

    ​ Device Bus总线一般采用数据/地址线复用的形式,通常为32位宽,使用时需要将总线的数据和地址分离出来再分别接到目标器件的数据和地址端口,如连接到低速设备时还需要通过Buffer起来来进行驱动和隔离。在早期的设计中,通过用信号锁存器来分离总线中的数据和地址(如经典锁存器SN74LVC16373),不过现在基本上都是通过逻辑器件CPLD来进行解复用的。利用锁存器373对Device Bus总线数据/地址解复用原理如下图所示。

     

    在上图中,L_ALE是地址锁存信号,低电平有效,当L_ALE出现一个低电平脉冲时,锁存器的输入端口对LAD[31:0]信号进行采样、锁存并从输出端口输出,直到下一个L_ALE低电平脉冲到来时,其输出状态才发生改变,Device Bus总线在输出地址信号时,将L_ALE信号驱动为低电平,输出数据信号时,将L_ALE驱动为高电平,锁存器正式利用这个特点轻松实现Device Bus总线上数据和地址的分离。


    2.2同步模式和异步模式

    Local Bus总线上的数据读写分为同步模式和异步模式。在同步模式下,需要一个外部时钟信号供接收端和发送端共用,利用时钟信号的上升沿对数据进行采样,SDRAM、SSRAM等高速信号使用同步模式;异步传输模式下,不使用时钟信号对数据进行采样(芯片内部还是需要有系统参考时钟来产生时序的),而是利用片选信号CS、写使能信号WE和读使能信号OE对数据进行采样,使用异步模式的器件有FLASH、BOOTROM等。
     

    参考:

    https://blog.csdn.net/sinat_36544290/article/details/104519085?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242

    https://blog.csdn.net/tclxdd/article/details/104729405/?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-6&spm=1001.2101.3001.4242

     

    展开全文
  • 6.FPGA在LocalBus总线上扩片选应用 7.实现对FPGA内部逻辑块的控制 1.SRAM及工作原理介绍 sram是英文static ram的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。 对于...

    视频讲解地址:

    B站讲解视频https://www.bilibili.com/video/BV1DL4y1p7Hu/icon-default.png?t=LA92https://www.bilibili.com/video/BV1DL4y1p7Hu/

    • 1.SRAM及工作原理介绍
    • 2.DSP6713的LocalBus
    • 3.FPGA对EMIF的时序译码
    • 4.DSP6713的操作外设1
    • 5.DSP6713的操作外设2
    • 6.FPGA在LocalBus总线上扩片选应用
    • 7.实现对FPGA内部逻辑块的控制

    • 1.SRAM及工作原理介绍

    sram是英文static ram的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。

    对于处理器。它通过地址总线发出一个具有22位二进制数字的地址编码--当中11位是行地址,另外11位是列地址,这是通过RAM地址接口进行分离的。行地址解码器(row decoder)将会首先确定行地址,然后列地址解码器(column decoder)将会确定列地址,这样就能确定唯一的存储数据的位置,然后该数据就会通过RAM数据接口将数据传到数据总线。

    另外,须要注意的是,RAM内部存储信息的矩阵并非一个正方形的,也就是行和列的数目不是同样的。

    引用网址:FPGA第一篇:SRAM工作原理 - yjbjingcha - 博客园

    以cypress公司的静态存储器CY7C1041B为例:

    内部的逻辑框图:

    其中I/O0~15是通常意义上的数据总线DATA0~15。

    真值表

    写时序:

    读时序:

     

    • 2.DSP6713的LocalBus

    TMS320C6713 DSP是美国TI推出的C6000系列DSP芯片的一款,它是32位高速浮点型DSP,时钟最高频率为200MHz。

    外设资源为:

     

    由于外设资源较少,且McxSP的接口有些时序并不标准,故多采用DSP6713+FPGA的方式扩展外设接口。

     

    通过DSP6713的EMIF访问外部的SRAM的接线框图:

    DSP6713通过EMIF发出的写时序:

    DSP6713通过EMIF发出读时序:

    DSP是怎么通过EMIF总线来读写外部的数据呢?

    其实非常简单,对于应用层来说,只需要调用read、write函数,就可以通过EMIF总线发出上面的波形,外设设备比如FPGA,通过译时序,就可以实现让DSP读写自己的寄存器。

    • 3.FPGA对EMIF的时序译码

    直接看程序,其实就是按DSP的时序来译码的。

    那么DSP是怎么来往S_reg1、S_reg2里写数据的呢?又怎么从指定地址中把数据读上来呢?

    首先我们要明确一件事情,DSP是如何控制片选的,因为DSP往地址线上输出地址我们好理解,那片选又不是地址线,DSP怎么去控制不同的片选呢?

    那么DSP程序如果要往S_reg1、S_reg2里写数据,那么DSP就执行如下命令就行:

    write8(0xa000 4000,0x55); //往S_reg1写数据0x55

    write8(0xa000 4001, 0xaa); //往S_reg2写数据0xaa

    从FPGA里读取数据,就执行如下命令:

    data=read8(0xb00c c000); //从寄存器读数据数据存入data中

    注:这里write8 read8只是示例,正常write8 read8是读写8位数据的意思,read8是无法读16位数据的,要用read16,这里只是为了和操作SRAM的程序保持一致,便于理解,表示下dsp应用上的读写操作。

    • 4.DSP6713的操作外设1

    DSP6713有4个片选,CS0~3,其中CS0是主要用于连接SDRAM,CS1用于连外部Flash,只剩下CS2、CS3两个片选了。

    那么现在就有个问题,如果DSP6713对外不接FPGA,要接两个外设设备的话,最直接的方法就是一个片选带一个外设,比如接两个串口控制器82C52,那么就片选2接一个82c52,片选3接一个82c52。

    82c52的内部逻辑框图:

    DSP的接线方法:

    那么新的问题来了,如果要再加两个82C52,共4个82C52的话,线要怎么接呢?片选不够了呀,尴尬。

    这个时候数电中讲的一款芯片可以帮助我们,就是3-8译码器74HC138。

    74HC138译码器可接受3位二进制加权地址输入(A0,A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。啥功能,直接看真值表就得了。

    说白了,这个芯片就是16进制转10进制的一个转换芯片。

    比如,16进制数是0x3,它的10进制值是3,那么就是Y3选中。

    那么我们就靠这个芯片可以实现接4个82C52的功能了,怎么接呢?把DSP用不到的地址线接到3-8译码器的二进制输入端上(我们默认控制端E3、E2、E1是使能的)。

     

    DSP的A6-A4接到了74HC138的A2-A0上,那么DSP要选中不同的82C52,那怎么操作呢?

    靠地址来区分。

    4片82C52分别接到了Y0、Y1、Y3、Y5上,那么对应的74HC138的A2-A0选通分别为000、001、011、101。

    则对应DSP的地址为 0 00xx、0 01xx、0 11xx、1 01xx。(这里要注意,DSP的最低位为A2,不是A0,这个原因先不要去管,也就是把管脚A2当作软件上的A0)。

    所以我们以选通“2”号82C52为例,看往里写数据软件怎么操作。

    很简单,因为我们没有用到片选,所以write(0xa000 000c) 或者write(0xb000 000c)都可以操作到“2”号82C52的第0个寄存器

    write(0xa000 000d) 或者write(0xb000 000d)都可以操作到“2”号82C52的第1个寄存器

    以此类推。

    • 5.DSP6713的操作外设2

    在上面的基础上,我们上面使用的是4个82C52实现了4串口功能,现在有一个XR16C854可以一个芯片实现4串口功能。

        

     

     

    可以发现这个芯片的地址线有3根,是A2-A0,延续4路82C52的图的话我们发现一个问题。

    我们看原解法

    芯片

    74HC138 A2-A0

    82C52 A1-A0

    占线

    DSP A6-A4

    DSP A3-A2

    线数

    3

    2

    要还用这种接法

    芯片

    74HC138 A2-A0

    XR16C854 A2-A0

    结论,A4冲突,不能用

    占线

    DSP A6-A4

    DSP A4-A2

    线数

    3

    3

    XR16C854得占3个线,也就是得占到DSP的A4、A3、A2了。多了一个A4。

    和原来分给74HC138的A4冲突了。

    所以要改74HC138的线,往上提一根。

    芯片

    74HC138 A2-A0

    XR16C854 A2-A0

    结论:可以实现功能。

    占线

    DSP A7-A5

    DSP A4-A2

    线数

    3

    3

    这就说明一个问题,我们用于分片选的地址线,不能是太低位的线,否则很有可能出现和外设芯片占用地址线冲突的情况。

    因此,一般我们用于片选的地址线都从最高选。

    即推荐的接线方式

    芯片

    74HC138 A2-A0

    XR16C854 A2-A0

    结论:推荐。

    占线

    DSP A21-A19

    DSP A4-A2

    线数

    3

    3

    • 6.FPGA在LocalBus总线上扩片选应用

    最终,我们落脚到了FPGA,谨记一句话,只要数字芯片能实现的,FPGA都是能实现的。

    所以,上面我们使用74HC138做的通过DSP高位地址扩展片选的功能,我们可以使用FPGA实现。我们最简单的方式就是先计算我们需要扩展几个片选,比如16个片选,那么4位地址线就可以区分出来,那么使用FPGA做一个4-16译码器就行了。接线上也很简单。

    下面犯懒了,还是以3-8的来表示吧。

    那么FPGA上的程序咋写嘞?

    这就实现了对片选的译码。是不是非常简单。

    • 7.实现对FPGA内部逻辑块的控制

    还是那句话,只要数字芯片能实现的,FPGA都是能实现的。

    那么,我们是不是可以把82C52做到FPGA内,当然是可以的。

    那么我们的图变成了什么呢?

    那么我们就直接在门阵中做一个串口模块就好了,这个模块这里就不讲了,不是今天的主题,咱们就认为现在门阵已经有这么一个模块。

    这里展示下模块的一些功能:

    可以看出,和82C52的芯片接口其实一样的。有片选、读写、地址、数据。

    我们下面就把门阵代码直接放上来看吧,这里以操作“0”号串口模块为例。

    把这里的模块调用4次,把s_sys_addr(21 downto 20)分不同的地址,即00、01、10、11,就行了。

    展开全文
  • 2.0是通过创建一个空的Vue来作为总线 Vue3.0中使用emit来注册 bus.emit(‘事件’,参数) Vue3.0中使用on来监听,bus.on(‘taskLrowClick’, (e)=>{ console.log(e);其他的逻辑操作 }) emit和on是成对出现的,一个...

    Vue3.0集成Bus
    Vue到3.0之后的Bus的方式变成了使用mitt。2.0是通过创建一个空的Vue来作为总线
    Vue3.0中使用emit来注册 bus.emit(‘事件’,参数)
    Vue3.0中使用on来监听,bus.on(‘taskLrowClick’, (e)=>{ console.log(e);其他的逻辑操作 })
    emit和on是成对出现的,一个发起,一个接收,并且接收方可以是多个组件,只要第一个参数匹配,都可以接收到
     

    3.0,,2.0

    3.0,,2.0 

      3.0,,2.0

     

     参考链接:https://blog.csdn.net/weixin_49203377/article/details/116756282

     

     

     

     

     

     

     

     

     

    展开全文
  • vue3 使用Bus总线

    2021-06-09 18:32:46
    ts +vue3 1. main.ts 引入 import mitt from "mitt" app.config.globalProperties.$bus = mitt(); 2.在传数据里 ...const bus = $this.$bus as Emitter; //排序 const sortFun = (sortCase:
  • can-bus总线是什么意思?

    千次阅读 2021-01-14 03:45:47
    展开全部CANBus系统通过相应的CAN接口连接工业设备(如限位开关、光电62616964757a686964616fe58685e5aeb931333433623735传感器、管道阀门、电机启动器、过程传感器、变频器、显示板、PLC和PCI工作站等)构成低成本...
  • 选中线条栏中的BUS WIRE 进行绘画 在绘画时注意连线的区别: 前者是两条线连接上,实际上并未通过总线连接,后者有引脚点的才是通过总线连接。使用时建议分隔使用。
  • 在react的学习中,是不是非常愉快,因为react的社区化,我们可以自己添加许多自己想要的功能,在Vue中关于组件传值,有一个非常好用的工具叫做bus总线(官方封装好的)!组件之间可以用统一的语法去相互传递数据,而在...
  • vue3.0中使用bus总线

    千次阅读 2021-05-13 16:45:51
    2.0是通过创建一个空的Vue来作为总线 Vue3.0中使用emit来注册 bus.emit(‘事件’,参数) Vue3.0中使用on来监听,bus.on(‘taskLrowClick’, (e)=>{ console.log(e);其他的逻辑操作 }) emit和on是成对出现的,一个...
  • (1)在src中新建一个Bus.js的文件,然后导出一个空的vue实例 ​ (2)在传输数据的一方引入Bus.js 然后通过Bus.e m i t ( “ 事 件 名 ” , " 参 数 " )来 派 发 事 件 ,数据是以emit()的参 数形式来传递 ​。 (3...
  • Vue BUS总线

    2020-12-22 10:27:44
    Vue Bus 总线 作用:在vue中实现非父子组件之间通信。 场景:bus适合小项目、数据被更少组件使用,或者数据量少的项目。 本质:实际上是一个发布订阅者模式的使用,利用 vue 的自定义事件机制,在触发时通过 $emit ...
  • vue Bus总线

    2021-09-26 11:20:39
    **子 → 父:bus事件总线 / vuex; ** 兄弟组件:bus事件总线 / vuex; 兄弟组件:bus事件总线 / vuex; 1、创建事件总线 创建一个名为 bus.js 的JS文件 import Vue from 'vue'; export default new Vue(); 或者直接在...
  • this.$nextTick(function () { //解决第一次监听不到数据 eventBus.$emit("detailsType", this.details); eventBus.$emit("details", val); });
  • vue之bus总线的简单使用vue之bus总线的简单使用 vue之bus总线的简单使用 场景描述: A组件中包括B,C组件,而B组件中包括D组件,这时如果D组件想要在A组件中触发C组件的方法怎么办呢? 当然方案是有的,用状态管理...
  • vue项目中的父传子和子传父一、父传子父组件子组件二、子传父子组件父组件三、bus总线在src下创建一个bus.jsC组件B组件props类型 一、父传子 父组件通过自定义属性向子组件传值 子组件通过props接受传递过来的值 ...
  • vue的bus总线

    2021-07-09 16:28:53
    1.安装bus npm install vue-bus 2.main.js引入bus import VueBus from 'vue-bus'; Vue.use(VueBus); 3.触发事件 this.$bus.emit("setting", 9); 4.监听事件 created() { this.$bus.on("setting", (data) =>...
  • 前言 当我们的分布式配置中心值修改了,那么我们的客户端在获取的时候也需要修改,如果是一些db等配置信息在内存中使用,配置中心修改之后不能实时同步到内存中,而...第二种解决办法就是使用Bus消息总线自动刷新。 Sp
  • Bus消息总线

    2021-05-17 22:48:12
    ConfigClient实例都监听MQ中同一个topic(默认是SpringCloudBus)。当一个服务刷新数据的时候。它会将这个信息放入到Topic中,这样其它监听同一个Topic的服务就能够得到通知,然后去更新自身的配置
  • 问题:路由切换后,事件总线的方法被多次执行。 解决:在beforeDetory钩子里使用$off解绑事件。...经过我的多次排查,发现Vue上的bus总线的事件绑定方法被多次执行,而我却找不到解决的头绪… 我使用vue-router路由、
  • Spring Cloud Bus消息总线

    2021-05-01 13:08:23
    目录Bus简介RabbitMQ环境配置Spring Cloud Bus 动态刷新全局广播Spring Cloud Bus 动态刷新定点通知 Bus简介 什么是总线? 在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统...
  • 总线Bus

    千次阅读 2021-02-05 11:52:35
    总线Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束,按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制...
  • linux之i2c bus总线读写

    2021-01-22 20:00:52
    i2cs设备,无需单独编写驱动,可以直接在应用程序中操作i2c bus总线,进行读写。 #include <sys/types.h> #include <string.h> #include <sys/stat.h> #include <fcntl.h> #include <...
  • BUS总线-Sky课程总结

    2021-10-06 11:28:55
    非原创,是sky的bus课程,这里做一下归纳,方便大家回顾。 1.内容 (1)DDR的行为 (2)Cache的行为 (3)on-chip总线数据传输原理 (4)APB总线介绍 (5)AHB总线介绍 (6)AHB/AXI总线对比 (7)Bus-Arbiter/Bus-...
  • SpringCloud Bus 消息总线

    千次阅读 2021-03-13 16:02:22
    二、什么是总线?三、动态刷新全局广播注意:必须先具备良好的RabbitMQ环境演示广播效果,增加复杂度,再以3355为模板再制作一个33661、新建cloud-config-client-33661)POMcloud2020...
  • 毫米波雷达是汽车自动驾驶的必备传感器之一,其通过CAN总线与车载ECU通信。然而,由于汽车在行驶过程中,汽车内部的电磁环境极其恶劣,容易产生大量的电磁干扰,CAN总线收发器也极其容易受到浪涌和静电的损坏。为此...
  • 文章目录前言一、bus总线分析二、源码实例分析三、实验结果 前言 本文基于S3C2440开发板。 一、bus总线分析 bus总线是一条虚拟总线,其实就是一种机制,把驱动程序进行封装,变得更容易移植和修改,linux内核提供这种...
  • SpringCloud系列之服务总线(Bus)

    千次阅读 2021-02-17 19:27:35
    1、概述 在学习完Config之后,我们发现了一个问题就是每当配置中心配置发生变化以后,都需要将每个微服务重新启动一遍,这样对于...那就是使用Spring Cloud Bus配合Spring Cloud Config使用实现动态刷新配置 Spring
  • 背景 在使用Vue做后台管理系统的过程中,需要实现组件间的参数传递。Bus方式非常简洁方便,却遇到...2.0是通过创建一个空的Vue来作为总线。 使用emit来注册,emitt("type","event");,可以先这样理解:第一个参数可.
  • Vue中$bus事件总线

    2021-07-09 09:13:19
    1、在 main.js 中将 $bus 绑定到 vue 原型上 Vue.prototype.$bus=new Vue() 2、在需要传递信息的组件上将一个方法发射出去,并需要在某个条件激活这个方法 <div @click="busclick"> </div> methods...
  • platform bus初始化过程,即平台总线的建立过程。 tart_kernel() -->rest_init() //start_kernel函数最后调用的一个函数 -->kernel_thread(kernel_init) //创建系统进程 -->kernel_init() -->do_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 77,729
精华内容 31,091
关键字:

bus总线