嵌入式linux之SPI控制器驱动

这篇文章粗略的浏览一下linux的SPI控制器驱动,我们知道SPI的device和driver是通过虚拟总线联系在一起的,但在spi_driver中有个spi控制器,这个控制器是怎么回事呢?spi控制器当然也可以看成一种设备,既然是设备那肯定有相应的驱动,设备和驱动想要匹配工作,那必然有总线连接喽,没错,spi控制器也是通过linux驱动最通用的模式platform总线来连接的。废话不多说,直接看代码:
先从板级初始化开始:文件:board-am335xevm.c

开始是个这么东东,内核板级初始化
MACHINE_START(AM335XEVM, “am335xevm”)
/* Maintainer: Texas Instruments */
.atag_offset = 0x100,
.map_io = am335x_evm_map_io,
.init_early = am33xx_init_early,
.init_irq = ti81xx_init_irq,
.handle_irq = omap3_intc_handle_irq,
.timer = &omap3_am33xx_timer,
.init_machine = am335x_evm_init,
MACHINE_END

上面代码的含义就不逐项解释了,我们需要从am33xx_init_early开始找有关spi的东西,这个函数在io.c文件中:
void __init am33xx_init_early(void)
{
omap2_set_globals_am33xx();
omap3xxx_check_revision();
am33xx_check_features();
omap_common_init_early();
am33xx_voltagedomains_init();
omap44xx_prminst_init();
am33xx_powerdomains_init();
omap44xx_cminst_init();
am33xx_clockdomains_init();
am33xx_hwmod_init();
omap_hwmod_init_postsetup();
omap3xxx_clk_init();
}

这段代码包含了好多的早期初始化,其中有个am33xx_hwmod_init();这才是我们需要的,它的定义在omap_hwmod_33xx_data.c中:
int __init am33xx_hwmod_init(void)
{
return omap_hwmod_register(am33xx_hwmods);
}

继续看它调用函数注册的结构体:
static __initdata struct omap_hwmod am33xx_hwmods[] = {
/
l3 class */
&am33xx_l3_instr_hwmod,
&am33xx_l3_main_hwmod,

&am33xx_spi0_hwmod,
&am33xx_spi1_hwmod,

}

可以看到这里有两个SPI相关的结构体,取其中一个看看都定义了什么,omap_hwmod结构体描述了一个硬件模块:
static struct omap_hwmod am33xx_spi1_hwmod = {
.name = “spi1”, //名称
.class = &am33xx_spi_hwmod_class, 指向一个omap_hwmod_class IP块
.clkdm_name = “l4ls_clkdm”, 这个应该是个主时钟名字吧,没仔细研究
.mpu_irqs = am33xx_spi1_irqs, ///SPI1使用的处理器中断资源
.main_clk = “spi1_fck”, spi使用的时钟名字
.sdma_reqs = am33xx_mcspi1_edma_reqs, //DMA相关的资源
.prcm = { 电源和时钟管理相关
.omap4 = {
.clkctrl_offs = AM33XX_CM_PER_SPI1_CLKCTRL_OFFSET,
.modulemode = MODULEMODE_SWCTRL,
},
},
.dev_attr = &mcspi_attrib, //设备属性
.slaves = a

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值