在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2147|回复: 0

【Artix-7开发板试用】之四 MPU6050程序设计初步

[复制链接]
发表于 2016-8-12 23:39:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
这段时间工作很忙,说要抓紧进度,总是力不从心。上次查阅了mpu6050相关资料,还有结合原来的IIC设计,现在整理了部分iic的代码。
接口设计:
module mpu6050_top(
input clk,rst_n;
output scl;
inout sda;
output reg [7:0]ACC_XH_READ;//存储加速度X轴高八位
output reg [7:0]ACC_XL_READ;//存储加速度X轴低八位
output reg [7:0]ACC_YH_READ;//存储加速度Y轴高八位
output reg [7:0]ACC_YL_READ;//存储加速度Y轴低八位
output reg [7:0]ACC_ZH_READ;//存储加速度Z轴高八位
output reg [7:0]ACC_ZL_READ;//存储加速度Z轴低八位
output reg [7:0]GYRO_XH_READ;//存储陀螺仪X轴高八位
output reg [7:0]GYRO_XL_READ;//存储陀螺仪X轴低八位
output reg [7:0]GYRO_YH_READ;//存储陀螺仪Y轴高八位
output reg [7:0]GYRO_YL_READ;//存储陀螺仪Y轴低八位
output reg [7:0]GYRO_ZH_READ;//存储陀螺仪Z轴高八位
output reg [7:0]GYRO_ZL_READ;//存储陀螺仪Z轴低八位


);



//parameter declaration start
`define DEVICE_READ 8'hD1//寻址器件,读操作
`define DEVICE_WRITE 8'hD0//寻址器件,写操作
`define ACC_XH 8'h3B//加速度x轴高位地址
`define ACC_XL 8'h3C//加速度x轴低位地址
`define ACC_YH 8'h3D//加速度y轴高位地址
`define ACC_YL 8'h3E//加速度y轴低位地址
`define ACC_ZH 8'h3F//加速度z轴高位地址
`define ACC_ZL 8'h40//加速度z轴低位地址
`define GYRO_XH 8'h43//陀螺仪x轴高位地址
`define GYRO_XL 8'h44//陀螺仪x轴低位地址
`define GYRO_YH 8'h45//陀螺仪y轴高位地址
`define GYRO_YL 8'h46//陀螺仪y轴低位地址
`define GYRO_ZH 8'h47//陀螺仪z轴高位地址
`define GYRO_ZL 8'h48//陀螺仪z轴低位地址   

//陀螺仪初始化寄存器
`define PWR_MGMT_1 8'h6B
`define SMPLRT_DIV 8'h19
`define CONFIG1 8'h1A
`define GYRO_CONFIG 8'h1B
`define ACC_CONFIG 8'h1C
//陀螺仪初始化对应寄存器值配置
`define PWR_MGMT_1_VAL 8'h00
`define SMPLRT_DIV_VAL 8'h07
`define CONFIG1_VAL 8'h06
`define GYRO_CONFIG_VAL 8'h18
`define ACC_CONFIG_VAL 8'h01

`define SCL_POS (cnt==3'd0)
`define SCL_HIG (cnt==3'd1)
`define SCL_NEG (cnt==3'd2)
`define SCL_LOW (cnt==3'd3)

parameter IDLE = 4'd0;
parameter START1 = 4'd1;
parameter ADD1 = 4'd2;
parameter ACK1 = 4'd3;
parameter ADD2 = 4'd4;
parameter ACK2 = 4'd5;
parameter START2 = 4'd6;
parameter ADD3 =4'd7;
parameter ACK3 = 4'd8;
parameter DATA = 4'd9;
parameter ACK4 = 4'd10;
parameter STOP1 = 4'd11;
parameter STOP2 = 4'd12;
parameter ADD_EXT = 4'd13;
parameter ACK_EXT = 4'd14;
//parameter declaration over



iic模块使用状态机来实现,共有15中状态,分别为上述的参数定义所示。


下面为scl时钟信号产生的逻辑实现:

always@(posedge clk or negedge rst_n)
    if(!rst_n)
        cnt_sum <= 0;
    else if(cnt_sum ==9'd499)
        cnt_sum <= 0;
    else
        cnt_sum <= cnt_sum+1'b1;

always@(posedge clk or negedge rst_n)
    if(!rst_n)
        cnt <= 3'd5;
    else
        begin
            case(cnt_sum)
            9'd124: cnt<=3'd1;//高电平
            9'd249: cnt<=3'd2;//下降沿
            9'd374: cnt<=3'd3;//低电平
            9'd499: cnt<=3'd0;//上升沿
            default: cnt<=3'd5;
            endcase
        end

always@(posedge clk or negedge rst_n)
    if(!rst_n)
        scl_r <= 1'b0;
    else if(cnt==3'd0)
        scl_r <= 1'b1;
    else if(cnt==3'd2)
        scl_r <= 1'b0;

assign scl = scl_r;//scl时钟信号



assign sda = sda_link?sda_r:1'bz;

状态机比较乱,暂时就先不贴代码了,等调好了在分享吧。
下一步要在vavida环境中调试了,加油!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-20 06:57 , Processed in 0.015240 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表