微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI WIFI设计交流 > CC3200 + RTC模块 (IO口配置)

CC3200 + RTC模块 (IO口配置)

时间:10-02 整理:3721RD 点击:

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口配置的因素,如果配置正确,那么我就再次排查时序是否正确。

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top