ksn13 发表于 2013-6-19 16:04:02

关于LPC812的IIC接口问题

int GetData(uchar REG_Address)
{
        UINT16 data;

    Buffer = SlaveAddress | 0x01;
    Buffer = REG_Address & 0x0FF;
   
        param.num_bytes_recv    = 2;
        param.buffer_ptr_recv   = &Buffer;
        param.stop_flag         = 1;

        do {
                error_code = LPC_I2CD_API->i2c_master_receive_poll(i2c_handle, &param, &result);
        } while (error_code);
   
    return *((UINT16 *)Buffer);
}

主机:LPC812
从机:MPU6050

从机地址:SlaveAddress
从机子地址:REG_Address

我想写一个函数读取器件“MPU6050子地址”里面的值。

各位熟悉IIC的帮我看,是不是我只要把“MPU6050子地址”顺序写在SlaveAddress 后面就可以了?
LPC_I2CD_API->i2c_master_receive_poll是nxp提供的函数。

现在error_code一直等于0x28.

另外想了解error_code的含义去哪里查找?

谢谢各位

leifeng 发表于 2013-6-19 16:18:17

你是用什么开发环境?是官方的例程吗?

ksn13 发表于 2013-6-19 16:51:03

leifeng 发表于 2013-6-19 16:18 static/image/common/back.gif
你是用什么开发环境?是官方的例程吗?

keil4.7 是官方的例程

ksn13 发表于 2013-6-19 16:52:00

leifeng 发表于 2013-6-19 16:18 static/image/common/back.gif
你是用什么开发环境?是官方的例程吗?

GetData是我自己写的 有问题

ksn13 发表于 2013-6-19 16:56:55

ksn13 发表于 2013-6-19 16:51 static/image/common/back.gif
keil4.7 是官方的例程

例程

#if I2C_MASTER_MODE
/* Master Polling Mode */
static void App_I2C_Master_Polling(void)
{
        /* Transmit TmpBuffer */
        /* Initialize buffer */
        Buffer_Init(TmpBuffer, BUFFER_SIZE, 1);
        TmpBuffer = I2C_SLAVE_ADDR_7BIT;

        param.num_bytes_send    = BUFFER_SIZE;
        param.buffer_ptr_send   = &TmpBuffer;
        param.stop_flag         = 1;
        do {
                error_code = LPC_I2CD_API->i2c_master_transmit_poll(i2c_handle, &param, &result);
        } while (error_code);

        /* Receive Buffer and compare with TmpBuffer */
        /* Initialize buffer */
        Buffer_Init(Buffer, BUFFER_SIZE, 0);
        Buffer = I2C_SLAVE_ADDR_7BIT | 0x01;

        param.num_bytes_recv    = BUFFER_SIZE;
        param.buffer_ptr_recv   = &Buffer;
        param.stop_flag         = 1;
        do {
                error_code = LPC_I2CD_API->i2c_master_receive_poll(i2c_handle, &param, &result);
        } while (error_code);

        /* Verify */
        Buffer_Compare(TmpBuffer, Buffer, 1, BUFFER_SIZE);

        /* Transmit TmpBuffer and receive Buffer, then compare them together */
        /* Initialize buffer */
        Buffer_Init(Buffer, BUFFER_SIZE, 0);
        Buffer = I2C_SLAVE_ADDR_7BIT | 0x01;

        TmpBuffer = I2C_SLAVE_ADDR_7BIT;
        TmpBuffer = 0xBA;

        param.num_bytes_send    = BUFFER_SIZE;
        param.buffer_ptr_send   = &TmpBuffer;
        param.num_bytes_recv    = BUFFER_SIZE;
        param.buffer_ptr_recv   = &Buffer;
        param.stop_flag         = 1;

        do {
                error_code = LPC_I2CD_API->i2c_master_tx_rx_poll(i2c_handle, &param, &result);
        } while (error_code);

        /* Verify */
        Buffer_Compare(TmpBuffer, Buffer, 1, BUFFER_SIZE);
}

fqc168 发表于 2013-9-27 22:14:14

请教楼主一些问题:

1.lpc单片机主要应用那些领域?lpc是恩智浦的单片机吗?
2.我看了P89LPC952的文档,发现和STC单片机的内容有惊人的相似。主要是寄存器名称,大体功能痛,只不过STC的文档比较难看一点
3.写lpc程序也是用keil C软件吗?

虽然用了好几年单片机,虽然不是老手,但是也算用得得心应手,但是对lpc还是比较陌生。

ksn13 发表于 2013-9-29 09:16:14

fqc168 发表于 2013-9-27 22:14 static/image/common/back.gif
请教楼主一些问题:

1.lpc单片机主要应用那些领域?lpc是恩智浦的单片机吗?


1. 是
3. 是

w534172 发表于 2014-10-17 15:53:43

LPC812现在是什么价格啊?

xyq4513 发表于 2014-10-17 22:18:58

w534172 发表于 2014-10-17 15:53
LPC812现在是什么价格啊?

淘宝上 7、8块钱左右吧。

xyq4513 发表于 2014-10-17 22:20:41

楼主有没有用到串口啊?我用发送中断做的程序数据量大会漏发

ksn13 发表于 2014-10-20 10:00:01

xyq4513 发表于 2014-10-17 22:20
楼主有没有用到串口啊?我用发送中断做的程序数据量大会漏发

肯定是你自己代码写的有问题,仔细分析一下程序看看为什么漏发。其它的原因暂时不需要考虑。
页: [1]
查看完整版本: 关于LPC812的IIC接口问题