一种AMP系统双核共用I2C接口的方法、存储介质及智能终端与流程

文档序号:21545450发布日期:2020-07-17 17:54阅读:259来源:国知局
一种AMP系统双核共用I2C接口的方法、存储介质及智能终端与流程

本发明涉及计算机领域,特别涉及一种amp系统双核共用i2c接口的方法、存储介质及智能终端。



背景技术:

在嵌入式多核系统领域,存在两种技术,一是amp(asymmetricmulti-processing)非对称多处理,另外一种是smp(symmetricmultiprocessing)对称多处理。smp系统上的每个cpu共享系统所有资源,包括串口在内,smp系统只要一个控制台就够了。而amp每个cpu有独立的运行代码,任务的调度也是独立的,对整个系统资源的访问也是互斥的,每个cpu上运行的操作系统(os)甚至完全不一样。

一个硬件cpu上的两个内核,各自运行自己的操作系统和应用软件。i2c接口在嵌入式cpu上广泛使用,一般用来访问实时时间芯片(rtc),温度传感器,eeprom,其他i2c协议的专用芯片。一个i2c主设备可以访问多个从设备,只需不同的i2c设备地址即可,如图1所示。

在双核amp系统上,为了cpu负载均衡,对i2c接口的多个从设备访问也会分工,例如主核cpu访问rtc芯片,从核cpu访问eerpom(带电可擦可编程只读存储器)芯片。但是i2c接口是独享设备,不可能双核cpu都利用其访问从设备,这样没有互斥会造成i2c时序混乱,主从核访问都会失败。

为了解决amp下两个cpu内核访问不同i2c外设的问题,人们通常用到的方法是主核直接控制i2c接口,从核只能通过主核间接访问,并将访问的结果通过主从消息反馈给从核。这种方法,需要拷贝多次内存,性能较差。如图1所示,此种方法主核与从核均需要拷贝一次,才能将从核要写的数据传到主核并写入eerpom,或者主核将eeprom数据读出来,拷贝到主从核共享内存,从核再从共享内存拷贝到应用程序。还有一个明显的问题是,主从核共享内存大小非常有限,如果从核要读写入几十mb的flash数据,就要长时间占用主从核共享内存,其他应用可能会异常。

因此,现有技术还有待于改进和发展。



技术实现要素:

鉴于上述现有技术的不足,本发明的目的在于提供一种amp系统双核共用i2c接口的方法、存储介质及智能终端,旨在解决现有技术在实现amp系统双核共用i2c接口的时候需要拷贝多次内存,导致amp系统运行性能较差且易出现运行异常的问题。

本发明的技术方案如下:

一种amp系统双核共用i2c接口的方法,其中,包括步骤:

将i2c接口的驱动设置在amp系统的主核上,所述amp系统包括主核和从核;

对所述amp系统内预设的全局变量值m_i2cswitch进行实时监测,若所述全局变量值m_i2cswitch=0,则标志所述主核直接访问所述i2c接口;若所述全局变量值m_i2cswitch=1,则所述主核接收从核的i2c命令请求,并发起对i2c接口的访问并将结果反馈给所述从核。

所述amp系统双核共用i2c接口的方法,其中,若所述全局变量值m_i2cswitch=1,则所述主核接收从核的i2c命令请求,并发起对i2c接口的访问并将结果反馈给所述从核的步骤包括:

预先在所述主核中创建一个用于接收所述从核i2c命令请求的任务;

若所述全局变量值m_i2cswitch=1,则所述主核读取所述从核发出的i2c命令请求,并根据所述i2c命令请求发起对i2c接口的访问并将结果反馈给所述从核。

所述amp系统双核共用i2c接口的方法,其中,还包括步骤:

当所述从核写入内容至i2c接口时,对所述全局变量值m_i2cswitch进行实时监测;

若监测到所述全局变量值m_i2cswitch=0,则直接返回失败,禁止从核写入内容至i2c接口;

若监测到所述全局变量值m_i2cswitch=1,则将从核的待写入内容发送给主核,通过所述主核将所述待写入内容写入所述i2c接口。

所述amp系统双核共用i2c接口的方法,其中,所述若监测到所述全局变量值m_i2cswitch=1,则将从核的写入内容发送给主核,通过所述主核将所述待写入内容写入所述i2c接口的步骤包括:

若监测到所述全局变量值m_i2cswitch=1,所述从核构造i2c写入命令并通过核间通讯将所述i2c写入命令发送给所述主核;

启动第一dma通道将所述待写入内容从从核的发送缓冲区输送到主核的发送缓冲区;

所述主核执行所述i2c写入命令将所述从核的待写入内容写入所述i2c接口。

所述amp系统双核共用i2c接口的方法,其中,所述启动第一dma通道将所述待写入内容从从核的发送缓冲区输送到主核的发送缓冲区的步骤之前还包括:

预先定义从核的发送缓冲区物理内存地址为volatilechar*m_slaveri2ctxbuf=1023m;从核的接收缓区物理内存地址为volatilechar*m_slaveri2crxbuf=1023.5m;主核的发送缓冲区物理内存地址为volatilechar*m_masteri2ctxbuf=510m;主核的接收缓冲区物理内存地址为volatilechar*m_masteri2crxbuf=510.5m。

所述amp系统双核共用i2c接口的方法,其中,还包括步骤:

当所述从核读取所述i2c接口的输入内容时,对所述全局变量值m_i2cswitch进行实时监测;

若监测到所述全局变量值m_i2cswitch=0,则直接返回失败,禁止从核读取所述i2c接口的输入内容;

若监测到所述全局变量值m_i2cswitch=1,则通过主核将所述i2c接口的输入内容传输给所述从核。

所述amp系统共用i2c接口的方法,其中,所述若监测到所述全局变量值m_i2cswitch=1,则通过主核将所述i2c接口的输入内容传输给所述从核的步骤包括:

若监测到所述全局变量值m_i2cswitch=1,所述从核构造i2c读取命令并通过核间通讯将所述i2c读取命令发送给所述主核;

所述主核执行所述i2c读取命令,通过第二dma通道将所述i2c接口的输入内容从主核的接收缓冲区输送到从核的接收缓冲区。

一种存储介质,其中,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现本发明所述双核amp系统共用i2c接口的方法中的步骤。

一种智能终端,其中,包括处理器、存储器及通信总线;所述存储器上存储有可被所述处理器执行的计算机可读程序;

所述通信总线实现处理器和存储器之间的连接通信;

所述处理器执行所述计算机可读程序时实现本发明所述双核amp系统共用i2c接口的方法中的步骤。

所述的智能终端,其中,所述智能终端为计算机、手机和平板中的一种或多种。

有益效果:本发明提供一种amp系统双核共用i2c接口的方法,通过将i2c接口的驱动设置在amp系统的主核上;对所述amp系统内预设的全局变量值m_i2cswitch进行实时监测,若所述全局变量值m_i2cswitch=0,则标志所述主核直接访问所述i2c接口;若所述全局变量值m_i2cswitch=1,则所述主核接收从核的i2c命令请求,并发起对i2c接口的访问并将结果反馈给所述从核。本发明在实现amp系统双核共用i2c接口的时候不需要拷贝多次内存,且其amp系统运行性能稳定且。

附图说明

图1为现有amp系统双核共用i2c接口的原理图。

图2为本发明一种amp系统双核共用i2c接口的方法较佳实施例的第一流程图。

图3为本发明amp系统双核共用i2c接口的原理图。

图4为一种amp系统双核共用i2c接口的方法较佳实施例的第二流程图。

图5为从核写eeprom的流程图。

图6为从核读eeprom的流程图。

图7为本发明一种智能终端的原理框图。

具体实施方式

本发明提供一种amp系统双核共用i2c接口的方法、存储介质及智能终端,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。

本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。

请参阅图2,图2为本发明提供的一种amp系统双核共用i2c接口的方法较佳实施例的流程图,如图所示,其包括步骤:

s10、将i2c接口的驱动设置在amp系统的主核上,所述amp系统包括主核和从核;

s20、对所述amp系统内预设的全局变量值m_i2cswitch进行实时监测,若所述全局变量值m_i2cswitch=0,则标志所述主核直接访问所述i2c接口;若所述全局变量值m_i2cswitch=1,则所述主核接收从核的i2c命令请求,并发起对i2c接口的访问并将结果反馈给所述从核。

具体来讲,如图3所示,以在所述i2c接口下面挂载eeprom和rtc两个从设备为例,所述i2c接口的驱动设置在所述主核上,所述主核可以通过所述i2c接口直接访问所述eeprom和rtc设备,所述从核不控制所述i2c接口,不能直接访问所述述eeprom和rtc设备。本实施例将从核划分成两块固定地址的内容用于存放收发数据,同时这两块内存地址,主核是知道的,但是不能访问;同样将主核划分成两块固定地址的内存用于存放收发数据,同时这两块内存地址,从核是知道的,但是不能访问;主核划分两块固定地址的内存,用于存放收发数据。如果所述从核要写i2c设备,会通过第一dma通道从核中的发送缓冲区的数据传递到主核的发送缓冲区;如果从核要读i2c设备,则所述主核将i2c读取的结果通过第二dma通道传输给从核。本实施例预先在amp系统内设置一个全局变量m_i2cswitch,通过对所述全局变量值m_i2cswitch进行实时监测,若所述全局变量值m_i2cswitch=0,则标志所述主核直接访问所述i2c接口;若所述全局变量值m_i2cswitch=1,则所述主核接收从核的i2c命令请求,并发起对i2c接口的访问并将结果反馈给所述从核。

在一些具体的实施方式中,预先定义从核的发送缓冲区物理内存地址为volatilechar*m_slaveri2ctxbuf=1023m;从核的接收缓区物理内存地址为volatilechar*m_slaveri2crxbuf=1023.5m;主核的发送缓冲区物理内存地址为volatilechar*m_masteri2ctxbuf=510m;主核的接收缓冲区物理内存地址为volatilechar*m_masteri2crxbuf=510.5m;设定所述接收缓冲区和发送缓冲区的最大长度为128字节。

在一些实施方式中,预先在所述主核中创建一个用于接收所述从核i2c命令请求的任务;若所述全局变量值m_i2cswitch=1,则所述主核读取所述从核发出的i2c命令请求,并根据所述i2c命令请求发起对i2c接口的访问并将结果反馈给所述从核。具体来讲,如图4所示,每隔10毫秒对全局变量值m_i2cswitch进行监测一次,所述如果m_i2cswitch=0,则表示当前处理主核的i2c请求,从核的请求忽略掉;如果全局变量值m_i2cswitch=1时,通过主从通讯接口,读取从核发来的i2c访问命令,如果收到了从核的i2c写入请求,则通过i2c_write接口,将m_masteri2ctxbuf缓冲区中数据写入eeprom中,并通过主从通讯接口,发送i2c_write的结果发送给从核;如果收到了从核的i2c读请求,则通过i2c_read接口,将数据读取到m_masteri2crxbuf缓冲区中,通过第二dma通道将m_masteri2crxbuf缓冲区中的数据传输给从核m_slaveri2crxbuf,并通过主从通讯接口,发送i2c_read的结果发送给从核。

在一些实施方式中,当所述从核写入内容至i2c接口时,对所述全局变量值m_i2cswitch进行实时监测;若监测到所述全局变量值m_i2cswitch=0,则直接返回失败,禁止从核写入内容至i2c接口;若监测到所述全局变量值m_i2cswitch=1,所述从核构造i2c写入命令并通过核间通讯将所述i2c写入命令发送给所述主核;启动第一dma通道将所述待写入内容从从核的发送缓冲区输送到主核的发送缓冲区;所述主核执行所述i2c写入命令将所述从核的待写入内容写入所述i2c接口。

具体来讲,如图5所示,当所述从核需要写入内容至eeprom时,对所述全局变量值m_i2cswitch进行实时监测,如果m_i2cswitch=0,表示i2c驱动在被主核使用,直接返回失败;若监测到所述全局变量值m_i2cswitch=1,则所述从核构造i2c写入命令,包含eerpom的i2c设备地址,该命令和实际使用的芯片有关系,命令的内容和个数是不尽相同的,接着用核间通讯将该所述i2c写入命令发送给主核,将要写入eeprom的内容先放到从核的发送缓冲区中,然后设置所述第一dma通道的参数,通过第一dma通道将所述待写入内容输送的主核的发送缓冲区,所述主核执行i2c写入命令后,将执行的结果通过主从通讯发送给从核,返回i2c写结果。

在一些实施方式中,当所述从核读取所述i2c接口的输入内容时,对所述全局变量值m_i2cswitch进行实时监测;若监测到所述全局变量值m_i2cswitch=0,则直接返回失败,禁止从核读取所述i2c接口的输入内容;若监测到所述全局变量值m_i2cswitch=1,所述从核构造i2c读取命令并通过核间通讯将所述i2c读取命令发送给所述主核;所述主核执行所述i2c读取命令,通过第二dma通道将所述i2c接口的输入内容从主核的接收缓冲区输送到从核的接收缓冲区。

具体来讲,如图6所示,当所述从核读取eeprom的内容时,对所述全局变量值m_i2cswitch进行实时监测,如果m_i2cswitch=0,表示spi驱动在被主核使用,直接返回失败;若监测到所述全局变量值m_i2cswitch=1,则所述从核构造i2c读取命令,包含eerpom的i2c设备地址,该命令和实际使用的芯片有关系,命令的内容和个数是不尽相同的,接着用核间通讯将所述i2c读取命令发送给主核,主核收到该命令后,执行i2c读操作,如果执行成功,则通过主从通讯接口将成功返回给主核,否则返回失败给从核;如果主核i2c命令执行成功了,会将读取的数据通过第二dma通道传输到从核本地的接收缓冲区,返回成功。

基于上述一种双核amp系统共用i2c接口的方法,本发明还提供存储介质,其中,所述存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现本发明所述双核amp系统共用i2c接口的方法中的步骤。

基于上述一种双核amp系统共用i2c接口的方法,本实施例还提供一种智能终端,如图7所示,其包括至少一个处理器(processor)20;显示屏21;以及存储器(memory)22,还可以包括通信接口(communicationsinterface)23和总线24。其中,处理器20、显示屏21、存储器22和通信接口23可以通过总线24完成相互间的通信。显示屏21设置为显示初始设置模式中预设的用户引导界面。通信接口23可以传输信息。处理器20可以调用存储器22中的逻辑指令,以执行上述实施例中的方法。

此外,上述的存储器22中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个存储介质中。

存储器22作为一种存储介质,可设置为存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序指令或模块。处理器20通过运行存储在存储器22中的软件程序、指令或模块,从而执行功能应用以及数据处理,即实现上述实施例中的方法。

存储器22可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器。例如,u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态存储介质。

此外,上述存储介质以及移动终端中的多条指令处理器加载并执行的具体过程在上述方法中已经详细说明,在这里就不再一一陈述。

在一些实施方式中,所述智能终端为计算机、广告机、电视、电脑、手机或平板中的一种,但不限于此。

综上所述,本发明提供一种amp系统双核共用i2c接口的方法,通过将i2c接口的驱动设置在amp系统的主核上;对所述amp系统内预设的全局变量值m_i2cswitch进行实时监测,若所述全局变量值m_i2cswitch=0,则标志所述主核直接访问所述i2c接口;若所述全局变量值m_i2cswitch=1,则所述主核接收从核的i2c命令请求,并发起对i2c接口的访问并将结果反馈给所述从核。本发明在实现amp系统双核共用i2c接口的时候不需要拷贝多次内存,且其amp系统运行性能稳定。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1