一种ARM架构下的LPC总线转并口方法及系统与流程

未命名 10-08 阅读:89 评论:0

一种arm架构下的lpc总线转并口方法及系统
技术领域
1.本发明涉及计算机领域,尤其涉及一种arm架构下的lpc总线转并口方法及系统。


背景技术:

2.目前嵌入式系统的处理器大多采用arm架构,在具体的使用过程中,一些开发者对于lpc转并口提出了需求,但是目前通用parport驱动只支持pcie/usb转并口,暂未支持lpc转并口,导致驱动加载后无法正常工作。


技术实现要素:

3.本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种arm架构下的lpc总线转并口方法及系统,使得parport驱动保持pcie/usb转并口原生的处理逻辑,并且新增了lpc转并口的功能。
4.为解决上述技术问题,本发明提出的技术方案为:一种arm架构下的lpc总线转并口方法,包括以下步骤:重定义寄存器读写函数,使得重定义的寄存器读写函数根据架构类型与转并口的类型选择i/o读写函数或者内存读写函数读写并口设备的寄存器;parport驱动将并口寄存器读写函数替换为重定义的寄存器读写函数;判断架构类型并判断转并口的类型,若架构类型为arm架构且转并口的类型为lpc总线转并口,parport驱动使用共享lpc中断向系统注册中断。
5.进一步的,重定义的寄存器读写函数根据架构类型与转并口的类型选择i/o读写函数或者内存读写函数读写并口设备的寄存器时,包括以下步骤:判断架构类型并判断转并口的类型;若架构类型为arm架构,且转并口的类型为lpc总线转并口,用内存读写函数读写并口设备的寄存器;若架构类型为arm架构,且转并口的类型为pcie/usb转并口,用i/o读写函数读写并口设备的寄存器。
6.进一步的,判断转并口的类型时,具体包括:若预设的静态全局变量为第一值,转并口的类型为lpc总线转并口,否则转并口的类型为pcie/usb转并口。
7.进一步的,parport驱动将并口寄存器读写函数替换为重定义的寄存器读写函数之前还包括:parport驱动读取并口设备的物理地址,根据物理地址的起始地址为预设的静态全局变量赋值。
8.进一步的,根据物理地址的起始地址为预设的静态全局变量赋值时,包括:若物理地址的起始地址为第一目标值,赋值静态全局变量为第一值,所述第一目标值为lpc的基地址与并口设备地址偏移之和。
9.进一步的,重定义寄存器读写函数之前还包括:使用系统函数导出lpc中断和lpc基地址。
10.进一步的,重定义寄存器读写函数之前还包括:定义静态全局变量,设置静态全局变量的默认值,所述默认值对应的转并口的类型为pcie/usb转并口。
11.进一步的,根据物理地址的起始地址为预设的静态全局变量赋值时,包括:若物理地址的起始地址为第二目标值,保持静态全局变量为默认值,所述第二目标值为pcie的基地址与并口设备地址偏移之和。
12.进一步的,parport驱动使用共享lpc中断向系统注册中断之后还包括:parport驱动监听到并口设备产生硬件中断时,通过lpc中断通知系统内核,系统内核查询对应lpc中断号所注册的中断处理函数,调用该中断处理函数处理中断。
13.本发明还提出一种arm架构下的lpc总线转并口系统,包括计算机设备,所述计算机设备被编程或配置以执行任一所述的arm架构下的lpc总线转并口方法。
14.与现有技术相比,本发明的优点在于:本发明通过导出共享lpc中断和lpc基地址,并通过读取并口使用的物理内存地址判断是否为lpc转并口,最后通过架构和接口的判断,有效保证对并口设备寄存器的读写,并且具有较好的兼容性,既可以使用lpc转并口,也可以使用pcie/usb转并口。
附图说明
15.图1为本发明实施例的流程图。
16.图2为本发明实施例中步骤s06的具体流程图。
具体实施方式
17.以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
18.在对于本实施例的方案进行说明之前,先对于相关的概念进行介绍。
19.arm架构:arm架构,曾称进阶精简指令集机器(advanced risc machine)更早称作acorn risc machine,是一个32位精简指令集(risc)处理器架构。
20.lpc:low pin count interface,全称为“低引脚数接口”,是一个灵活的高速接口,时钟频率33mhz,只需要7~13个接口信号。
21.并口:采用并行传输方式来传输数据的接口标准。
22.为了使parport驱动同时支持pcie/usb转并口以及lpc转并口,parport驱动需要在lpc转并口的情况下,注册中断时共享lpc中断,驱动读写寄存器时兼容lpc基地址,因此我们考虑重新定义一个统一的并口设备寄存器读写函数,使得parport驱动基于lpc总线,共享lpc中断和基地址,并且兼容pcie/usb转并口。
23.如图1所示,本实施例提出一种arm架构下的lpc总线转并口方法,包括以下步骤:s01)使用系统函数导出lpc中断lpc_irq和lpc基地址lpc_base;本实施例中,通过lpc基地址+地址偏移可以找到并口设备,用于驱动读写并口设备的寄存器,lpc转并口共享lpc中断,当并口设备有硬件中断产生,系统内核查询并调用并口驱动注册的中断处理函数,导出lpc中断lpc_irq和lpc基地址lpc_base采用以下语句实现:export_symbol_gpl(lpc_irq);
export_symbol_gpl(lpc_base);s02)定义静态全局变量is_lpc,采用以下语句实现:static int is_lpc;本实施例中,头文件中定义静态全局变量,用于判断转并口类型是否为lpc转并口,静态全局变量的默认值对应非lpc转并口的类型;s03)重定义寄存器读写函数,本实施例中,重定义的寄存器读写函数首先判断架构类型是否为arm架构,采用以下语句实现:#if defined(config_arm64);再判断转并口的类型是否为lpc转并口,最后选择io读写函数或内存读写函数读写并口设备的寄存器,i/o读写函数用于pcie/usb转并口,基于pcie基地址,内存读写函数用于lpc转并口,基于lpc基地址,io读写函数与内存读写函数均用于并口驱动对底层硬件设备的读写操作,例如初始化硬件设备本实施例中,重定义的寄存器读写函数根据架构类型与转并口的类型选择i/o读写函数或者内存读写函数读写并口设备的寄存器,具体执行以下步骤:判断架构类型并判断转并口的类型;若架构类型为arm架构,且转并口的类型为lpc总线转并口,用内存读写函数读写并口设备的寄存器;若架构类型为arm架构,且转并口的类型为pcie/usb转并口,用i/o读写函数读写并口设备的寄存器。
24.本实施例中,头文件中重定义寄存器读写函数,采用以下语句实现:static __inline__ void parport_pc_write(unsigned char d, unsigned long addr){#if defined(config_arm64)if (is_lpc)writeb(d, lpc_base+addr);else#endifoutb(d, addr);}通过重定义的寄存器读写函数可以得到并口驱动需要读写的并口设备的寄存器地址。重定义的寄存器读写函数中,转并口的类型与静态全局变量is_lpc有关,若预设的静态全局变量为true,转并口的类型为lpc总线转并口,此时并口设备的寄存器地址d为lpc的基地址lpc_base+并口设备地址偏移addr,否则转并口的类型为pcie/usb转并口,此时并口设备的寄存器地址为pcie的基地址与并口设备地址偏移之和。
25.s04)parport驱动通过系统函数读取并口的物理地址,判断是否为lpc转并口,是则赋值静态全局变量is_lpc为true,具体的,parport驱动读取并口设备的物理地址,根据物理地址的起始地址为静态全局变量is_lpc赋值,若物理地址的起始地址为lpc的基地址与并口设备地址偏移之和构成的第一目标值,赋值静态全局变量is_lpc为true,若物理地
址的起始地址为pcie的基地址与并口设备地址偏移之和构成的第二目标值,保持静态全局变量为默认值。
26.例如,lpc的基地址是0x20000000,并口设备地址偏移是0x378,如果parport驱动从设备树或者dsdt文件读到的并口设备起始地址是0x20000378,并口设备的类型为lpc转并口,此时赋值静态全局变量is_lpc为true,采用以下语句实现:if (pnp_mem_start(dev, 0) == 0x20000378)is_lpc = true;s05)parport驱动将并口寄存器读写函数替换为重定义的寄存器读写函数,使得parport驱动同时支持pcie/usb转并口以及lpc转并口对并口设备寄存器的读写,采用以下语句实现:
‑ꢀ
out(d,addr);+ parport_pc_write(d,addr);此格式为打补丁格式,表示删除旧的代码-out(d,addr);,添加新的代码+ parport_pc_write(d,addr);,可以合并成一行:parport_pc_write(d,addr);s06)parport驱动注册中断前,判断架构类型并判断转并口的类型,若架构类型为arm架构且转并口的类型为lpc总线转并口,parport驱动使用共享lpc中断向系统注册中断,采用以下语句实现:#if defined(config_arm64)if (is_lpc)irq = lpc_irq;#endif。
27.步骤s06的详细流程图如图2所示,经历了以下的过程:s061)判断架构类型,若为arm架构则执行下一步;s062)获取并口物理地址pnp_mem_start,若其初始地址的值为lpc的基地址与并口设备地址偏移之和构成的第一目标值,则转并口的类型为lpc总线转并口;s063)转并口的类型为lpc总线转并口时,赋值静态全局变量is_lpc为true;s064)静态全局变量is_lpc为true时,重定义的寄存器读写函数选择内存读写函数读写并口设备的寄存器,否则选择i/o读写函数读写并口设备的寄存器;s065)静态全局变量is_lpc为true时,使用共享lpc中断向系统注册中断。
28.通过上述步骤,实现了parport驱动在arm架构下lpc总线转并口驱动功能,其中步骤s01、步骤s02、步骤03、步骤s05解决了lpc总线转并口时对底层寄存器读写,同时解决兼容pcie/usb转并口问题,步骤s04解决了对arm架构下lpc转并口的判断,步骤s06解决arm架构下lpc转并口的中断支持。
29.本实施例中,parport驱动使用共享lpc中断向系统注册中断之后,parport驱动监听并口设备产生硬件中断,parport驱动监听到并口设备产生硬件中断时,通过lpc中断通知系统内核,系统内核查询对应lpc中断号所注册的中断处理函数,调用该中断处理函数处理中断。
30.本实施例还提出一种arm架构下的lpc总线转并口系统,包括计算机设备,所述计算机设备被编程或配置以执行本实施例所述的arm架构下的lpc总线转并口方法。
31.综上所述,本发明通过对设备硬件地址判断选择i/o读写或内存地址读写解决了系统驱动对底层寄存器的统一读写访问,通过对设备硬件地址判断选择何种类型的中断解决了系统驱动对硬件中断的支持和处理,并实现了同时支持lpc转并口和pcie/usb转并口。和现有技术相比,本发明的优势在于:(1)自主可控性,一种基于arm架构lpc总线转并口驱动功能实现方法自主设计研发,具有完全的知识产权。
32.(2)实现方式的独创性,通过系统函数导出共享lpc中断和lpc基地址,通过系统函数读取并口使用的物理内存地址判断是否为lpc转并口,重写寄存器读写函数,通过架构和接口的判断,有效保证对并口设备寄存器的读写。
33.(3)兼容性好,用户既可以选择使用lpc转并口,也可以使用pcie/usb转并口,提升用户使用满意度。
34.上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。

技术特征:
1.一种arm架构下的lpc总线转并口方法,其特征在于,包括以下步骤:重定义寄存器读写函数,使得重定义的寄存器读写函数根据架构类型与转并口的类型选择i/o读写函数或者内存读写函数读写并口设备的寄存器;parport驱动将并口寄存器读写函数替换为重定义的寄存器读写函数;判断架构类型并判断转并口的类型,若架构类型为arm架构且转并口的类型为lpc总线转并口,parport驱动使用共享lpc中断向系统注册中断。2.根据权利要求1所述的arm架构下的lpc总线转并口方法,其特征在于,重定义的寄存器读写函数根据架构类型与转并口的类型选择i/o读写函数或者内存读写函数读写并口设备的寄存器时,包括以下步骤:判断架构类型并判断转并口的类型;若架构类型为arm架构,且转并口的类型为lpc总线转并口,用内存读写函数读写并口设备的寄存器;若架构类型为arm架构,且转并口的类型为pcie/usb转并口,用i/o读写函数读写并口设备的寄存器。3.根据权利要求2所述的arm架构下的lpc总线转并口方法,其特征在于,判断转并口的类型时,具体包括:若预设的静态全局变量为第一值,转并口的类型为lpc总线转并口,否则转并口的类型为pcie/usb转并口。4.根据权利要求3所述的arm架构下的lpc总线转并口方法,其特征在于,parport驱动将并口寄存器读写函数替换为重定义的寄存器读写函数之前还包括:parport驱动读取并口设备的物理地址,根据物理地址的起始地址为预设的静态全局变量赋值。5.根据权利要求4所述的arm架构下的lpc总线转并口方法,其特征在于,根据物理地址的起始地址为预设的静态全局变量赋值时,包括:若物理地址的起始地址为第一目标值,赋值静态全局变量为第一值,所述第一目标值为lpc的基地址与并口设备地址偏移之和。6.根据权利要求5所述的arm架构下的lpc总线转并口方法,其特征在于,重定义寄存器读写函数之前还包括:使用系统函数导出lpc中断和lpc基地址。7.根据权利要求4所述的arm架构下的lpc总线转并口方法,其特征在于,重定义寄存器读写函数之前还包括:定义静态全局变量,设置静态全局变量的默认值,所述默认值对应的转并口的类型为pcie/usb转并口。8.根据权利要求7所述的arm架构下的lpc总线转并口方法,其特征在于,根据物理地址的起始地址为预设的静态全局变量赋值时,包括:若物理地址的起始地址为第二目标值,保持静态全局变量为默认值,所述第二目标值为pcie的基地址与并口设备地址偏移之和。9.根据权利要求1所述的arm架构下的lpc总线转并口方法,其特征在于,parport驱动使用共享lpc中断向系统注册中断之后还包括:parport驱动监听到并口设备产生硬件中断时,通过lpc中断通知系统内核,系统内核查询对应lpc中断号所注册的中断处理函数,调用该中断处理函数处理中断。10.一种arm架构下的lpc总线转并口系统,包括计算机设备,其特征在于,所述计算机设备被编程或配置以执行权利要求1~9任一所述的arm架构下的lpc总线转并口方法。

技术总结
本发明公开了一种ARM架构下的LPC总线转并口方法及系统,方法包括以下步骤:重定义寄存器读写函数,使得重定义的寄存器读写函数根据架构类型与转并口的类型选择I/O读写函数或者内存读写函数读写并口设备的寄存器;ParPort驱动将并口寄存器读写函数替换为重定义的寄存器读写函数;判断架构类型并判断转并口的类型,若架构类型为ARM架构且转并口的类型为LPC总线转并口,ParPort驱动使用共享LPC中断向系统注册中断。本发明使得ParPort驱动保持PCIE/USB转并口原生的处理逻辑,并且新增了LPC转并口的功能。了LPC转并口的功能。了LPC转并口的功能。


技术研发人员:艾超 黄伟 胡晓英 陈章
受保护的技术使用者:麒麟软件有限公司
技术研发日:2023.08.28
技术公布日:2023/10/5
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐