IIC调试中寄存器映射的问题

出现的问题:

      在IIC调试中,改好驱动后,发现寄存器写入的值和我用寄存器查看助手读出的值不一样,而且是所有的IIC的寄存器写入的值和读出的值都不一样,驱动调试陷入停顿。

 

问题的原因:

      操作寄存器不对,问题的原因在于地址映射不对,但是我查了地址映射的方法和方式和其他的寄存器映射没有差别

 

解决问题:

      在S2440.H中查看寄存器定义时发现:

 #define IIC_BASE        0xB1400000 // 54000000

#define IICFIF_PHYS     0x54000000  // physical address of IIC

typedef struct {
        unsigned int    rIICCON;
        unsigned int    rIICSTAT;
        unsigned int    rIICADD;
        unsigned int    rIICDS;
 unsigned int    rIICLC;
}IICreg;

当然,以前的寄存器映射都是映射#define IIC_BASE        0xB1400000 // 54000000这个地址

VirtualCopy((PVOID)v_pIICPregs, (PVOID)(IIC_BASE>> 8), sizeof(IICreg), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)

在IIC驱动调试中也映射的这个地址时,底层寄存器在修改时没有发生变化,证明我映射的地方错了或者是映射的方式错了

#define IICFIF_PHYS     0x54000000  // physical address of IIC

VirtualCopy((PVOID)v_pIICPregs, (PVOID)(IICFIF_PHYS >> 8), sizeof(IICreg), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE) 

这个地址做映射试了一下,发现居然寄存器操作成功。

 

分析问题:

     WINCE地址映射分了两步:

第一步:是在BOOTLOADE里做第一次映射,将0xB1400000的地址映射到0x54000000

第二步:在应用层中,使用VirtualCopy((PVOID)v_pIICPregs, (PVOID)(IIC_BASE>> 8), sizeof(IICreg), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE)将地址映射一次,用户便能操作寄存器。

此次出现的问题在于IIC中,第一步没有做,也就是说BOOTLOADE没有将0xB1400000的地址映射到0x54000000,后面第二步我直接在应用层映射0x54000000显然是不行的。

那么我在应用层将0xB1400000做映射解决了这个问题。

 

MPU6050是一款常用的六轴惯性测量单元,可用于测量加速度和角速度。要驱动MPU6050通过IIC接口进行通信,我们需要进行以下步骤: 1. 硬件准备:连接好MPU6050和微控制器。MPU6050的SCL引脚接到微控制器的IIC时钟线上,SDA引脚接到微控制器的IIC数据线上,同时需要给MPU6050供电。 2. 引入相关库文件:在你的嵌入式项目,需要导入MPU6050的IIC通信库文件,这些文件可以在网上或者相关开发板厂商提供的SDK找到。 3. 配置IIC通信参数:在你的代码,需要设置IIC通信相关的参数,如传输速率、地址等。这些参数通常可以在芯片手册或者驱动库的API文档找到。 4. 初始化MPU6050:在主程序,通过调用相关API函数初始化MPU6050。这通常包括初始化IIC总线,配置MPU6050的工作模式、量程等。 5. 读写数据:完成初始化后,可以通过调用相应函数读取或写入MPU6050的寄存器,从而获取加速度和角速度的数据。需要根据MPU6050手册寄存器映射表来确定寄存器地址,并按照要求的格式进行数据读写。 6. 关闭IIC通信:在嵌入式程序的最后,需要关闭IIC通信,以释放相关资源。 在完成上述步骤后,就能够成功驱动MPU6050通过IIC接口进行数据传输。为了保证正确性和稳定性,建议参考相关文档和示例代码,并利用调试工具检查和排除可能出现的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值