搜索
bottom↓
回复: 2

请教F28M35 I2C 调试

[复制链接]

出0入0汤圆

发表于 2014-4-27 21:50:12 | 显示全部楼层 |阅读模式
有谁用过F28M35?
我在用61IC的I2C 例程来调试TI的Concerto_F28M35xx_control_CARD,我手上也有61IC的开发板,因为没有仿真器目前,所以只能调试TI的了。
TI的板子用的是PB6 PB7, 61IC用的是PB2 PB3。
我把例程中相应的改为PB6 PB7,并且,GPIOPINUNLOCK了PB7。
但是结果始终不对,READDATA始终和WRITEDATA不对。
不知道问题出在哪,没有很多时间从DATASHEET慢慢的找问题。

希望高手能指点。

谢谢。

下面是我的代码:
#include "inc/hw_i2c.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_sysctl.h"
#include "driverlib/gpio.h"
#include "driverlib/i2c.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/debug.h"

#define ID_I2C_ADDR                0x50

static tBoolean
WriteData(unsigned char ucAddr, unsigned char ucData);
static tBoolean
ReadData(unsigned char *pucData, unsigned long ulOffset,
                 unsigned long ulCount);
int main(void)
{
    unsigned char pucData[8]={'a','b','c','d','e','f','g','h'};
    unsigned char dat[8];
    unsigned char i;
    unsigned char value1, value2, value3, value4;
    // Disable Protection
    HWREG(SYSCTL_MWRALLOW) =  0xA5A5A5A5;

    // Setup main clock tree for 75MHz - M3 and 150MHz - C28x
    SysCtlClockConfigSet(SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_2 | SYSCTL_USE_PLL |
                         (SYSCTL_SPLLIMULT_M & 0x0F));


    SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0);                        /*  使能I2C外设                 */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);                       /*  使能GPIO外设                */
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);

    // Disable clock supply for the watchdog modules
    SysCtlPeripheralDisable(SYSCTL_PERIPH_WDOG1);
    SysCtlPeripheralDisable(SYSCTL_PERIPH_WDOG0);

    IntMasterEnable();                                                  /*  使能处理器中断              */

    GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_6);
    GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_7);


    GPIOPinUnlock(GPIO_PORTB_BASE, GPIO_PIN_7);
    //GPIOPinUnlock(GPIO_PORTB_BASE, GPIO_PIN_6);

    //GPIOPinConfigure(GPIO_PB2_I2C0SCL);
    //GPIOPinConfigure(GPIO_PB3_I2C0SDA);
    GPIOPinConfigure(GPIO_PB7_I2C0SCL);
    GPIOPinConfigure(GPIO_PB6_I2C0SDA);

    //GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_2 | GPIO_PIN_3);
    GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_6 | GPIO_PIN_7);

    GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_6, ~0);
    GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_7, ~0);

    I2CMasterInitExpClk(I2C0_MASTER_BASE, SysCtlClockGet(
                            SYSTEM_CLOCK_SPEED), false);

   // for(i=0;i<8;i++)
   //         WriteData(0x08+i,pucData[i]);
    ReadData(dat,0x08,8);
    value1=dat[0];
    value2=dat[1];
    value3=dat[2];
    value4=dat[3];
    for(i=0;i<8;i++)
    {
            if(dat[i]!=pucData[i])
            {
                    GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_6, 0);
                    while(1);
            }
    }
    GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_7, 0);
    while(1);
}

void Delays (unsigned char no)
{
        int i, j;
        for ( ; no > 0; no--) {
                for (i = 0; i < 150; i++) {
                    for (j = 0; j < 255; j++);
                }
        }
}

static tBoolean
WaitI2CFinished(void)
{
    //
    // Wait until the current byte has been transferred.
    //
    while(I2CMasterIntStatus(I2C0_MASTER_BASE, false) == 0)
    {
    }

    if(I2CMasterErr(I2C0_MASTER_BASE) != I2C_MASTER_ERR_NONE)
    {
        I2CMasterIntClear(I2C0_MASTER_BASE);
        return(false);
    }

    //
    // Clear any interrupts set.
    //
    while(I2CMasterIntStatus(I2C0_MASTER_BASE, false))
    {
        I2CMasterIntClear(I2C0_MASTER_BASE);
    }

    return(true);
}

static tBoolean ReadData(unsigned char *pucData, unsigned long ulOffset,unsigned long ulCount)
{
    unsigned long ulToRead;
    I2CMasterIntClear(I2C0_MASTER_BASE);
    I2CMasterSlaveAddrSet(I2C0_MASTER_BASE, ID_I2C_ADDR, false);
    I2CMasterDataPut(I2C0_MASTER_BASE, ulOffset);
    I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_SEND_START);
    if(!WaitI2CFinished())
        return(false);
    I2CMasterSlaveAddrSet(I2C0_MASTER_BASE, ID_I2C_ADDR, true);
    I2CMasterControl(I2C0_MASTER_BASE,
                     ((ulCount > 1) ? I2C_MASTER_CMD_BURST_RECEIVE_START :
                     I2C_MASTER_CMD_SINGLE_RECEIVE));
    ulToRead = ulCount;

    while(ulToRead)
    {
        while(I2CMasterIntStatus(I2C0_MASTER_BASE, false) == 0) { }
        I2CMasterIntClear(I2C0_MASTER_BASE);
        *pucData++ = I2CMasterDataGet(I2C0_MASTER_BASE);
        ulToRead--;
        if(ulToRead)
            I2CMasterControl(I2C0_MASTER_BASE,
                             ((ulToRead == 1) ?
                              I2C_MASTER_CMD_BURST_RECEIVE_FINISH :
                              I2C_MASTER_CMD_BURST_RECEIVE_CONT));
    }
    return(true);
}


static tBoolean WriteData(unsigned char ucAddr, unsigned char ucData)
{
    I2CMasterIntClear(I2C0_MASTER_BASE);
    I2CMasterSlaveAddrSet(I2C0_MASTER_BASE, ID_I2C_ADDR, false);
    I2CMasterDataPut(I2C0_MASTER_BASE, ucAddr);
    I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_SEND_START);
    if(!WaitI2CFinished())
        return(false);
    I2CMasterDataPut(I2C0_MASTER_BASE, ucData);
    I2CMasterControl(I2C0_MASTER_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);
    if(!WaitI2CFinished())
        return(false);
//    SysCtlDelay(SysCtlClockGet()/600 );
    Delays(15);
    return(true);
}

/*********************************************************************************************************
END FILE
*********************************************************************************************************/

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2014-4-28 10:27:24 | 显示全部楼层
官方自带了的吧?

出0入0汤圆

 楼主| 发表于 2014-4-29 22:25:49 | 显示全部楼层
就是自带的有问题。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 09:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表