This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 我需要面对面地阅读 RTC

Guru**** 2422790 points
Other Parts Discussed in Thread: TMS320F28035

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/801244/i-have-face-to-face-to-read-rtc

主题中讨论的其他器件:TMS320F28035

尊敬的  

我使用 I2C 将 RTC mode1307与 TMS320F28035连接。 但我可以阅读日期、我随附了我的计划、请帮我。

unsigned int get_integer4 (char 计数器)

unsigned int value=0、i、乘法器=1、临时;
字符 j;
char array[8]={0、0、0、0、0、0、0};//
char key=99、count2=0;

date= I2C_read2 (DATE_ADDRESS);//月、月_地址、年_地址最小值、最小值_地址
year1= I2C_read3 (year_address);//year1_address
Int_TO_STRINT2 (数组、日期、年份1);//year1)

for (i=0;<counter;i++))
{j=array[i];

display_char (j、2、i);//display_char (cap_array[i]、2、i);// 0=数据为显示、2=行号、无数字


while (key!= ENTER)

键=键盘(任意键);
if (键<10)

array[count2]=键;
display_char ((key+48)、2、count2);
count2++;
if (count2 ==(counter)) count2=0;

delay_loop (3000000);

for (i =计数器;i >0;i -)

INTERIM=(int)数组[I-1];
INTERIMITY*=乘数;
Value+=临时;
乘数*=10;

return (value);

uint16 I2C_read2 (无符号 int 地址)

unsigned int data、ADD2、data2;
I2caRegs.I2CFFRX.bit.RXFFINTCLR=1;
ADD2 =地址;
//等待直到 STP 位从任何先前的主设备通信中清零。
//模块清除该位的操作被延迟到 SCD 位之后
//设置。 如果在启动新消息之前未选中此位
// I2C 可能会被混淆。
while (I2caRegs.I2CMDR.bit.STP==1);

I2caRegs.I2CSAR = 0x0068;

I2caRegs.I2CCNT = 2;
I2caRegs.I2CDXR =地址;//(地址>>=8);
I2caRegs.I2CDXR = ADD2;
I2caRegs.I2CMDR.ALL = 0x6E20;//发送数据到设置 EEPROM 地址

while (I2caRegs.I2CMDR.bit.STP==1);

I2caRegs.I2CCNT =2;//设置预期的字节数
I2caRegs.I2CMDR.ALL = 0x6C20;//作为主接收器发送重启

while (I2caRegs.I2CFFRX.bit.RXFFINT=0);
I2caRegs.I2CFFRX.bit.RXFFINTCLR=1;

Data=I2caRegs.I2CDRR;
Data=(data&=0x003F);
//data <<=8;
//data=(data&=0x003F);//日期和月份
Data2=I2caRegs.I2CDRR;
Data2<<=8;
Data+=(data2 &=0x3F00);//data+=(data2 &=0x00FF);
返回(数据);

uint16 I2C_read3 (char 地址)//int I2C_read3 (unsigned int 地址)

unsigned int data、ADD2、data2;//、data2
I2caRegs.I2CFFRX.bit.RXFFINTCLR=1;
ADD2 =地址;
//等待直到 STP 位从任何先前的主设备通信中清零。
//模块清除该位的操作被延迟到 SCD 位之后
//设置。 如果在启动新消息之前未选中此位
// I2C 可能会被混淆。
while (I2caRegs.I2CMDR.bit.STP==1);

I2caRegs.I2CSAR = 0x0068;

I2caRegs.I2CCNT = 2;
I2caRegs.I2CDXR =地址;//>>=8;//(地址>>=8);
I2caRegs.I2CDXR = ADD2;//地址;
I2caRegs.I2CMDR.all =0x2E20;//0x6E20;//发送数据以设置 EEPROM 地址

while (I2caRegs.I2CMDR.bit.STP==1);

I2caRegs.I2CCNT= 2;//设置预期的字节数
I2caRegs.I2CMDR.all =0x2C20;//0x6C20;//作为主接收器发送重启

while (I2caRegs.I2CFFRX.bit.RXFFINT=0);
I2caRegs.I2CFFRX.bit.RXFFINTCLR=1;

Data=I2caRegs.I2CDRR;
Data=(data &=0x00FF);
数据<<=8;
//日期和月份
Data2=I2caRegs.I2CDRR;
Data+=(data2 &=0xFF);
//delay_loop (200);
返回(数据);

请给我邮寄  

bkhanduri@awtxglobal.com

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好:Bhagat Ram Khanduri、

    您能否共享 I2C 初始化函数/代码?

    您要连接的'RTC mode1307' I2C 从器件是什么(器件型号)? 请确保您正在匹配从设备的协议。

    您是否探测过 I2C 信号以查看总线上发生的情况? 这应能最好地说明问题。 如果可能、请在此处提供波形的屏幕截图。

    最棒的
    Kevin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、Kevin

    当我们阅读时间(mm:HH)日期月份和年份(DD:mm:YY)时
    因为时间是正确的日期、并且 moth 也是正确的、但我在一年中阅读它、然后将年份位置写为月

    您能不能介绍我如何在 I2C 协议中及时读取数据块


    我们有内部 RTC 型号1307,它具有 TM320F28035和 I2C 总线

    //A RTC 1307、我们设置如下

    、、Mdel RTC 1307是从器件、TM320F28035是主器件

    //从地址为68
    #definesec_address00
    #defineMIN_ADDRESS01
    #defineHours_address02
    #defineDAY 地址03
    #defineDATE_ADDRESS03
    #defineMONT_ADDRESS 04
    #defineyear 地址05
    #defineyear1_address06


    空 I2CA_Init (空)

    //初始化 I2C
    I2caRegs.I2CSAR = 0x0068;//从器件地址-

    I2caRegs.I2CPSC.all = 6;//预分频器-模块时需要7-12MHz
    I2caRegs.I2CCLKL = 10;//注意:必须为非零
    I2caRegs.I2CCLKH = 5;//注意:必须为非零
    //I2caRegs.I2CIER.All = 0x24;//启用 SCD 和 ARDY 中断

    I2caRegs.I2CMDR.ALL = 0x0020;//使 I2C 退出复位
    I2caRegs.I2CFFTX.ALL = 0x6000;//启用 FIFO 模式和 TXFIFO
    I2caRegs.I2CFFRX.ALL = 0x2042;//启用 RXFIFO、清除 RXFFINT、



    ________________________________________________________________


    unsigned int get_integer3 (char 计数器)

    unsigned int value=0、i、乘法器=1、临时;
    字符 j;
    char array[8]={0、0、0、0、0、0、0};
    char cap_array[5]={0、0、0、0};
    char key=99、count2=0;

    请参阅= I2C_read1 (sec_address、array);//请参阅 sec_address sec_address //阅读它正在工作的分钟和小时数

    INT_TO_STRIN1 (CAP_ARRAY、请参阅);

    for (i=0;<counter;i++))
    {j=cap_array[i];

    display_char (j、2、i);//display_char (cap_array[i]、2、i);// 0=数据为显示、2=行号、无数字




    date= I2C_read2 (DATE_ADDRESS); // 它读取日期和月份、它是正常工作

    year1= I2C_read3 (year_address); //它读取日期和年份不起作用
    Int_TO_STRINT2 (数组、日期、年1);

    for (i=0;i<8;i++)
    {j=array[i];

    display_char (j、2、i+6); //显示日期





    //*********


    阅读日期和月份
    _________________________________________

    uint16 I2C_read2 (无符号 int 地址)

    unsigned int data、ADD2、data2;
    I2caRegs.I2CFFRX.bit.RXFFINTCLR=1;
    ADD2 =地址;

    while (I2caRegs.I2CMDR.bit.STP==1);

    I2caRegs.I2CSAR = 0x0068;

    I2caRegs.I2CCNT = 2;
    I2caRegs.I2CDXR =地址;//(地址>>=8);
    I2caRegs.I2CDXR = ADD2;
    I2caRegs.I2CMDR.ALL = 0x6E20;//发送数据到设置 EEPROM 地址

    while (I2caRegs.I2CMDR.bit.STP==1);

    I2caRegs.I2CCNT =2;//设置预期的字节数
    I2caRegs.I2CMDR.ALL = 0x6C20;//作为主接收器发送重启

    while (I2caRegs.I2CFFRX.bit.RXFFINT=0);
    I2caRegs.I2CFFRX.bit.RXFFINTCLR=1;

    Data=I2caRegs.I2CDRR;
    Data=(data&=0x003F);
    //data <<=8;
    //data=(data&=0x003F);//日期和月份
    Data2=I2caRegs.I2CDRR;
    Data2<<=8;
    Data+=(data2 &=0x3F00);//data+=(data2 &=0x00FF);
    返回(数据);


    阅读年度信息
    _________________________________

    UINT16 I2C_read3 (字符地址)
    unsigned int data、ADD2、data2
    I2caRegs.I2CFFRX.bit.RXFFINTCLR=1;
    ADD2 =地址;

    while (I2caRegs.I2CMDR.bit.STP==1);

    I2caRegs.I2CSAR = 0x0068;

    I2caRegs.I2CCNT = 2;
    I2caRegs.I2CDXR =地址;
    I2caRegs.I2CDXR = ADD2;
    I2caRegs.I2CMDR.all =0x6E20;

    while (I2caRegs.I2CMDR.bit.STP==1);

    I2caRegs.I2CCNT= 2;
    I2caRegs.I2CMDR.all =0x6C20;//0x6C20;

    while (I2caRegs.I2CFFRX.bit.RXFFINT=0);
    I2caRegs.I2CFFRX.bit.RXFFINTCLR=1;

    Data=I2caRegs.I2CDRR;
    Data=(data &=0x003F);

    Data2=I2caRegs.I2CDRR;

    返回(数据);



    请告诉我如何解决这个问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Bhagat Ram Khanduri、

    我认为这是因为您对"DATE_ADDRES"的定义不正确。 您已将"do_address"和"do_address"设置为"03"。

    #define DAY ADDRESS 03
    #define DATE_ADDRESS 03 //应为04
    #define MONT_ADDRESS 04 //应为05
    #define year ADDRESS 05 //应为06
    
    ... 

    最棒的

    Kevin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,卡文
    我不是在读书。
    我先读了
    1分钟和一小时无问题。
    2.阅读日和月无问题。
    3.如果我当时读的是年份,则在月份位置写05,然后读年份。
    因此、当我首先传递加法器时、它将在早期位置写入该加法值。
    例如
    RTC1307中的 RTC 值如下。
    位置值
    Oo 第二个
    01 分钟
    02 小时
    03 天
    04 日期
    05 月
    06 年
    当我具有传递00加法器时、它将该00写入第二个值并读取分钟和小时
    2.当我有 PASS 03加法器时,它会将此03写入 Day 值并读取 Day 和 Month。
    当我有密码05时,它会将该值写入“05个月”并读取年份。
    下一次读取时、我们发现分钟、小时、日期和年份正确、但月份值为05固定。

    请告诉我如何解决此问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,卡文
    我不是在读书。
    我有读取时间和日期
    如果我读 A
    如果我当时读的是年份、则在月份位置写入05、然后读的是年份。
    因此、当我首先传递加法器时、它将在早期位置写入该加法值。
    例如
    当我具有传递00加法器时、它将该00写入第二个值并读取分钟和小时
    2.当我有 PASS 03加法器时,它会将此03至 DAY 值写入并读取日期和月份。
    当我有密码05时,它会将该值写入“05个月”并读取年份。
    请告诉我如何解决此问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好:Bhagat Ram Khanduri、

    我还不清楚您遇到的问题。 当您第一次获得正确值时读取月值? 但是、当您在它不变后的任何时候读取它时、会怎么样呢?

    在尝试读取月份地址05时、您是否曾尝试查看 I2C 总线上的波形(对信号进行范围界定或使用逻辑分析仪)? 这可能会提供一些有关发生这种情况的更多详细信息。

    最棒的
    Kevin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、Kevin  

    如果 我正在读取 单次数据 、但如果我在第二次读取多次数据、我的代码将按读取的速度写入加法器。

    此致  

    手柄式  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:Bhagat Ram Khanduri、

    如果不查看生成的 I2C 波形、我很难理解这个问题。

    如果连续读取/写入遇到问题、可以尝试在中间添加一些延迟。 可能 RTC 从设备需要比您提供的时间更多的时间。

    最棒的

    Kevin