当前位置:首页 > 单片机 > 单片机
[导读]本文属于第二部分。4. 主控制器驱动程序4.1 定义 platform device下列数据结构位于arch/arm/plat-s3c24XX/devs.c/*SPI(0)*/staticstructresources3c_spi0_resource[]={[0]={.start=S3C24XX_PA_SPI,.end=S3C24XX_PA_S

本文属于第二部分。

4. 主控制器驱动程序

4.1 定义 platform device

下列数据结构位于arch/arm/plat-s3c24XX/devs.c

/*SPI(0)*/

staticstructresources3c_spi0_resource[]={

[0]={

.start=S3C24XX_PA_SPI,

.end=S3C24XX_PA_SPI+0x1f,

.flags=IORESOURCE_MEM,

},

[1]={

.start=IRQ_SPI0,

.end=IRQ_SPI0,

.flags=IORESOURCE_IRQ,

}

};

staticu64s3c_device_spi0_dmamask=0xffffffffUL;

structplatform_devices3c_device_spi0={

.name="s3c2410-spi",

.id=0,

.num_resources=ARRAY_SIZE(s3c_spi0_resource),

.resource=s3c_spi0_resource,

.dev={

.dma_mask=&s3c_device_spi0_dmamask,

.coherent_dma_mask=0xffffffffUL

}

};

platform设备给出了spi0接口的寄存器地址资源以及IRQ资源。注意其设备名为s3c2410-spi。

4.2 定义platform driver

下列函数位于deivers/spi/s3c24xx.c。


MODULE_ALIAS("platform:s3c2410-spi");

staticstructplatform_drivers3c24xx_spi_driver={

.remove=__exit_p(s3c24xx_spi_remove),

.suspend=s3c24xx_spi_suspend,

.resume=s3c24xx_spi_resume,

.driver={

.name="s3c2410-spi",

.owner=THIS_MODULE,

},

};

staticint__inits3c24xx_spi_init(void)

{

returnplatform_driver_probe(&s3c24xx_spi_driver,s3c24xx_spi_probe);//设备不可热插拔,所以使用该函数,而不是platform_driver_register

}

staticvoid__exits3c24xx_spi_exit(void)

{

platform_driver_unregister(&s3c24xx_spi_driver);

}

module_init(s3c24xx_spi_init);

module_exit(s3c24xx_spi_exit);

调用了platform_driver_probe注册platform驱动,注册完成以后将会调用platform的s3c24xx_spi_probe函数。

NOTE:platform驱动的name和platform device的name是相同的。

4.2.1s3c24xx_spi_probe函数

下列函数位于deivers/spi/s3c24xx.c。


staticint__inits3c24xx_spi_probe(structplatform_device*pdev)

{

structs3c2410_spi_info*pdata;

structs3c24xx_spi*hw;

structspi_master*master;

structresource*res;

interr=0;

/*分配master结构体,其中包括s3c24xx_spi结构的内存空间,使用master.dev.driver_data指向它*/

master=spi_alloc_master(&pdev->dev,sizeof(structs3c24xx_spi));

if(master==NULL){

dev_err(&pdev->dev,"Nomemoryforspi_mastern");

err=-ENOMEM;

gotoerr_nomem;

}

/*获得s3c24xx_spi结构,并清0该结构*/

hw=spi_master_get_devdata(master);

memset(hw,0,sizeof(structs3c24xx_spi));

hw->master=spi_master_get(master);/*保存master结构体,同时增加引用计数*/

hw->pdata=pdata=pdev->dev.platform_data;/*获取s3c2410_spi_info结构体指针*/

hw->dev=&pdev->dev;/*保存platform设备的dev*/

if(pdata==NULL){

dev_err(&pdev->dev,"Noplatformdatasuppliedn");

err=-ENOENT;

gotoerr_no_pdata;

}

platform_set_drvdata(pdev,hw);/*让platform_devuce.dev.driver_data指向s3c24xx_spi*/

init_completion(&hw->done);/*初始化completion*/

/*setupthemasterstate.*//*填充master结构体的两个字段*/

master->num_chipselect=hw->pdata->num_cs;

master->bus_num=pdata->bus_num;

/*setupthestateforthebitbangdriver*//*填充bitbang字段*/

hw->bitbang.master=hw->master;

hw->bitbang.setup_transfer=s3c24xx_spi_setupxfer;

hw->bitbang.chipselect=s3c24xx_spi_chipsel;

hw->bitbang.txrx_bufs=s3c24xx_spi_txrx;

hw->bitbang.master->setup=s3c24xx_spi_setup;

dev_dbg(hw->dev,"bitbangat%pn",&hw->bitbang);

/*findandmapourresources*/

res=platform_get_resource(pdev,IORESOURCE_MEM,0);/*获取IO资源*/

if(res==NULL){

dev_err(&pdev->dev,"CannotgetIORESOURCE_MEMn");

err=-ENOENT;

gotoerr_no_iores;

}

hw->ioarea=request_mem_region(res->start,(res->end-res->start)+1,/*申请IO内存*/

pdev->name);

if(hw->ioarea==NULL){

dev_err(&pdev->dev,"Cannotreserveregionn");

err=-ENXIO;

gotoerr_no_iores;

}

hw->regs=ioremap(res->start,(res->end-res->start)+1);/*建立映射*/

if(hw->regs==NULL){

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

北京2023年9月19日 /美通社/ -- 随着教育部和科技部公布了2023年度"高等学校学科创新引智计划"(简称"111 计划")名单,湘潭大学申报的"数学学科创新引智...

关键字: 智能计算 并行计算 子系统 网络

SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。SPI是一种单主机、高速的,全双工,同步...

关键字: spi spi通信原理

北京2023年3月1日 /美通社/ -- 近日,2022-2023年度第一批中国建设工程鲁班奖(国家优质工程)榜单揭晓,共119项工程入选。其中,同方股份参与建设的横琴口岸及综合交通枢纽开发工程荣登榜单。 横...

关键字: BSP IBM 子系统 控制

德国联邦经济与气候保护部(BMWK)与软件公司QMWare和云专业公司IONOS以及斯图加特大学和弗劳恩霍夫FOKUS研究所签订合同,为德国工业建构量子计算应用平台,这是德国的首个量子云业务。该项目称为SeQenC,将运...

关键字: 量子计算 光子 处理器 子系统

在上回讲完功能安全的定义以后,"是什么" 和 "为什么" 的问题,我们已经搞懂了。接下来就要看看重点,"怎么样" 的问题。主机厂在研发一款汽车平台的初期,会基于以往大量的工程和实际经验,把整车的功能细分到不同的子系统里,...

关键字: 汽车 子系统 安全辅助

北京2022年8月26日 /美通社/ -- 引言:国家发展改革委等部门研究制定《关于加快煤矿智能化发展的指导意见》指出,到2025年,大型煤矿和灾害严重煤矿基本实现智能化,形成煤矿智能化建设技术规范与标准体系;到2035...

关键字: 智能化 AI 云计算 子系统

(全球TMT2022年7月14日讯)集成量子计算公司Quantinuum宣布与日本材料技术领先企业JSR Corporation开展全球合作,探索量子计算方法在半导体研究中的应用。这项合作将汇聚JSR世界领先的材料科学...

关键字: ANTI 量子计算 子系统 软件平台

(全球TMT2022年6月22日讯)借助IBM Planning Analytics with Watson (IBM Planning Analytics)与IBM Cognos Analytics,爱德数智为领先的...

关键字: IBM ANALYTICS PLANNING 子系统

为什么要加锁在SMP系统中,如果仅仅是需要串行地增加一个变量的值,那么使用原子操作的函数(API)就可以了。但现实中更多的场景并不会那么简单,比如需要将一个结构体A中的数据提取出来,然后格式化、解析,再添加到另一个结构体...

关键字: spi ic ck

摘 要 :为了节约油气生产的建设投资成本,提高劳动生产效率,中石油建设了规范、统一的油气生产物联网系统。文中介绍了油气生产物联网管理子系统的功能设计、系统数据架构及数据处理。该系统的持续完善与深入应用必将为转变油气田生产...

关键字: 油气生产 物联网 管理 Java 生产效率 子系统
关闭
关闭