TI中文支持网
TI专业的中文技术问题搜集分享网站

CC3200 + RTC模块 (IO口配置)

Hi,

     项目需要用到实时时钟模块搭配CC3200工作,目前选择的实时时钟模块是DS1302模块,它有三个引脚 RST、SCLK、DATA。

 

     请帮助看下思路是否正确,对IO口的配置是否正确,有没有更好的建议?    

    谢谢,可能你们认为是很简单的一个问题,但是就会卡死我们这些新学者,请及时点拨。谢谢!

 

     我的做法为:

      Step1.配置引脚RST、SCLK为输出模式,

                  即    MAP_PRCMPeripheralClkEnable(PRCM_GPIOA1, PRCM_RUN_MODE_CLK);

                         MAP_PinTypeGPIO(PIN_64, PIN_MODE_0, false);
                         MAP_GPIODirModeSet(GPIOA1_BASE, 0x2, GPIO_DIR_MODE_OUT);

                         MAP_PinTypeGPIO(PIN_02, PIN_MODE_0, false);
                         MAP_GPIODirModeSet(GPIOA1_BASE, 0x8, GPIO_DIR_MODE_OUT);

          Step2. DATA引脚,在往DS1302写数据时配置为输出,从DS1302读数据时配置为输入,每次读取和写入切换时都重新配置引脚属性。

                 void SetDataInput(void)

                 {

                        MAP_PinTypeGPIO(PIN_01, PIN_MODE_0, false);
                         MAP_GPIODirModeSet(GPIOA1_BASE, 0x4, GPIO_DIR_MODE_IN);

                }

                void SetDataOutput(void)

               {

                      MAP_PinTypeGPIO(PIN_01, PIN_MODE_0, false);
                     MAP_GPIODirModeSet(GPIOA1_BASE, 0x4, GPIO_DIR_MODE_OUT);

                 }

              Step3.读数据,

char read_1302(char cmd)
{
    char i,dat,temp;

    SetDataOutput();
    cmd|=0x01;
    write_1302_byte(cmd);//读完之后时钟复位,时序又匹配不上,所以方案还是不行
       GPIO_IF_LedOn(MCU_ORANGE_LED_GPIO);       SetDataInput();
    GPIO_IF_LedOff(MCU_RED_LED_GPIO);
    GPIO_IF_LedOn(MCU_GREEN_LED_GPIO);
      for(i=0;i<8;i++)
    {
        GPIO_IF_LedOn(MCU_RED_LED_GPIO);
         MAP_UtilsDelay(20);
        temp=GPIO_ReadOutputDataBit();
        if(temp)          dat|=0x80;
        GPIO_IF_LedOff(MCU_RED_LED_GPIO);//下降沿读取
        dat>>=1;
        MAP_UtilsDelay(5);
        //GPIO_IF_LedOff(MCU_RED_LED_GPIO);
    }
    //GPIO_IF_LedOff(MCU_RED_LED_GPIO);
    GPIO_IF_LedOff(MCU_GREEN_LED_GPIO);              //禁止数据传递
    MAP_UtilsDelay(3);
    dat=((dat&0x70)>>4)*10+(dat&0x0f);//bcd码转换
    return (dat);          //将读出的数据返回
}

 

void write_1302_byte(char temp)
{    SetDataOutput();
    GPIO_IF_LedOff(MCU_RED_LED_GPIO);
    MAP_UtilsDelay(3);
    GPIO_IF_LedOn(MCU_GREEN_LED_GPIO);
    MAP_UtilsDelay(3);       char i;
    for(i=0;i<8;i++)
    {
            GPIO_IF_LedOff(MCU_RED_LED_GPIO);
            if(temp&0x01)
                    GPIO_IF_LedOn(MCU_ORANGE_LED_GPIO);//从低字节开始传送
            else
                    GPIO_IF_LedOff(MCU_ORANGE_LED_GPIO);
            temp>>=1;//右移 1 位
            GPIO_IF_LedOn(MCU_RED_LED_GPIO);//高电平时写入数据、
            MAP_UtilsDelay(10);
    }
    GPIO_IF_LedOff(MCU_GREEN_LED_GPIO);
}

    该方法还没成功,我想先排除IO口配置的因素,如果配置正确,那么我就再次排查时序是否正确。

Yonghua Pan:

SCLK是需要给出稳定的clock的吧,你是不是需要用PWM分频去做。 RST和DAT倒是可以用普通的GPIO去做。

赞(0)
未经允许不得转载:TI中文支持网 » CC3200 + RTC模块 (IO口配置)
分享到: 更多 (0)