Freescale P4080 I2C 驱动分析

本文介绍了Freescale P4080处理器中的I2C控制器,该设备在嵌入式网络应用中广泛用作master。文章通过结构图详细阐述了I2C控制器的寄存器配置,并展示了如何根据文档和定义的基地址来编写驱动代码,以结构体描述I2C控制器,并实现速度配置和reset功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 Freescale P4080是一款8核心网络处理器,功能强大,外设齐全,基于powerpc e500 core。在嵌入式网络应用上被广泛使用。

今天只讨论P4080的I2C部分。

P4080片上集成了4个I2C 控制器,在我们的应用中,这4个I2C Controller 都是作为master来使用。

先来一张I2C 控制器的结构图

这张图描述了一I2C 控制器应该有的寄存器,描述了各寄存器应有的功能。

其实,实现I2C驱动的关键就在于按照文档进行配置这些寄存器。不单是I2C,大部分驱动程序都是这样,比如DDR,SPI,DMA等都是按照文档,

提供一个接口(函数)来访问硬件,这就是所谓的驱动啦。

来看一下p4080上是怎么规定这么资源(registers)的地址的

规定了各I2C控制器的基地址,以及各控制器中的寄存器偏移。我们要按照这个地址进行组织代码,写一个结构体进行

描述I2C控制器,下面的结构体来自freescale

typedef struct fsl_i2c {

    u8 adr;     /* I2C slave address */
    u8 res0[3];
#define I2C_ADR     0xFE
#define I2C_ADR_SHIFT   1
#define I2C_ADR_RES ~(I2C_ADR)

    u8 fdr;     /* I2C frequency divider register */
    u8 res1[3];
#define IC2_FDR     0x3F
#define IC2_FDR_SHIFT   0
#define IC2_FDR_RES ~(IC2_FDR)

    u8 cr;      /* I2C control redister */
    u8 res2[3];
#define I2C_CR_MEN  0x80
#define I2C_CR_MIEN 0x40
#define I2C_CR_MSTA 0x20
#define I2C_CR_MTX  0x10
#define I2C_CR_TXAK 0x08
#define I2C_CR_RSTA 0x04
#define I2C_CR_BCST 0x01

    u8 sr;      /* I2C status register */
    u8 res3[3];
#define I2C_SR_MCF  0x80
#define I2C_SR_MAAS 0x40
#de
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值