реклама на сайте
подробности

 
 
> Slaa290 RTC Calendar
tsbp
сообщение Nov 4 2010, 18:06
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 4-11-10
Пользователь №: 60 649



Привет всем!
Может кто-то использовал библиотеку от ТИ RTC_Calendar.h (slaa290). Неправильно устанавливается дата setDate( int year, char month, char day);
Непойму в чем грабли.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Nov 4 2010, 18:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



В чем выражается неправильность?
Go to the top of the page
 
+Quote Post
tsbp
сообщение Nov 4 2010, 18:43
Сообщение #3





Группа: Новичок
Сообщений: 6
Регистрация: 4-11-10
Пользователь №: 60 649



Цитата(rezident @ Nov 4 2010, 21:22) *
В чем выражается неправильность?

Вроде все просто setDate( int year, char month, char day);
Пишем например setDate( 0x2010, 0x10, 0x03);
В переменных TI_day, TI_dayOfWeek, TI_month, TI_year получаем значения не имеющие ничего общего с заявленными. после инкркмента дня переменные приобретают логический смыл.
Пробовал задавать поразному setDate( 2010, 10, 3); результат одинаковый. Проблема реально в коде RTC_Calendar.s43. Рылся в инете.
Нашел вот что
"I know this thread is kind of old, but I thought you should know that if you are using the RTC_Calendar.s43 module, you will need to modify the "setDate (y, m, d)" function. It is erroneous.

In particular, there is an instruction that modifies R10 ("add.w r10, r11"), but R10 is never pushed. To fix this, add a "Push R10" at the beginning and a "Pop R10" at the end.
"
Может это в старой версии библиотеки, проверил все врое есть "Push R10" "Pop R10"


Да, год устанавливается правильно. Дальше идет пересчет дня недели, весокосный год, там лажа.

Сообщение отредактировал tsbp - Nov 4 2010, 18:45
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 4 2010, 19:31
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(tsbp @ Nov 4 2010, 23:43) *
Пишем например setDate( 0x2010, 0x10, 0x03);
В переменных TI_day, TI_dayOfWeek, TI_month, TI_year получаем значения не имеющие ничего общего с заявленными. после инкркмента дня переменные приобретают логический смыл.

Смотрим прототип функции, читаем комментарий
Код
extern void setDate( int year, char month, char day);  //encoded as decimal numbers with Jan = 1 and 1st day = 1, 31st day = 31
и.... понимаем, что лажу в параметрах указали. laughing.gif
Цитата(tsbp @ Nov 4 2010, 23:43) *
Да, год устанавливается правильно. Дальше идет пересчет дня недели, весокосный год, там лажа.
Хотелось бы уточнить, какой именно пример и с какими именно компилятором вы используете? Проблема может быть в том, что в разных компиляторах используются разные способы (регистры, стековые переменные) передачи параметров в/из функции. Это особенно важно, когда функция написана на ASM, а не на Си.
Go to the top of the page
 
+Quote Post
tsbp
сообщение Nov 4 2010, 19:59
Сообщение #5





Группа: Новичок
Сообщений: 6
Регистрация: 4-11-10
Пользователь №: 60 649



Цитата(rezident @ Nov 4 2010, 22:31) *
Смотрим прототип функции, читаем комментарий
Код
extern void setDate( int year, char month, char day);  //encoded as decimal numbers with Jan = 1 and 1st day = 1, 31st day = 31
и.... понимаем, что лажу в параметрах указали. laughing.gif

месяц задавал 0х10, 10 или 1, в TI_dayOfWeek получал 0х50
Код
хотя "char TI_dayOfWeek;   // 0 - 6 .. Sunday = 0"

но дело не в том

Цитата(rezident @ Nov 4 2010, 22:31) *
Хотелось бы уточнить, какой именно пример и с какими именно компилятором вы используете? Проблема может быть в том, что в разных компиляторах используются разные способы (регистры, стековые переменные) передачи параметров в/из функции. Это особенно важно, когда функция написана на ASM, а не на Си.

Хотел применить в простеньком приборе. Но с примером из архива ТИ такая же фигня. Пользуюсь IAR C/C++ Compiler for MSP430 4.21.2 [Evaluation] (4.21.2.20066)
Код
//******************************************************************************
//  MSP-RTC Demo - Using Timer_A for 1 second interrupt
//
//  Description; This example shows the correct setup and usage of the RTC
//  Library without automatic ISR generation.  LED is toggled on each second
//
//           MSP430F149
//         ---------------
//     /|\|            XIN|-
//      | |               | 32kHz
//      --|RST        XOUT|-
//        |               |
//        |           P1.0|-->LED
//
//  L. Westlund
//  Texas Instruments, Inc
//  January 2005
//  Updated for IAR Embedded Workbench Version: 2.21B
//******************************************************************************

#include  <msp430x16x.h>
#include  "RTC_Calendar.h"


void main ( void )
{
  WDTCTL = WDTPW + WDTHOLD;             // Stop watchdog timer
  setTime( 0x12, 0, 0, 0);              // initialize time to 12:00:00 AM
  
  setDate(2010, 1,1); //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  
  P1DIR |= 0x01;                        // Set P1.0 to output direction
  CCR0 = 32768-1;
  TACTL = TASSEL_1+MC_1;                // ACLK, upmode
  CCTL0 |= CCIE;                        // enable CCRO interrupt
  _EINT();

  while( 1 )
  {
    LPM3;                               // enter LPM3, clock will be updated
    P1OUT ^= 0x01;                      // do any other needed items in loop
    _NOP();                             // set breakpoint here to see 1 second interrupt
  }
}


// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  incrementSeconds();
  LPM3_EXIT;
}

что-то типа этого на работе пробовал, убирал оптимизацию.
с программой все просто скопировал, подключил .s43 скомпилировалось без проблем, setTime работает без вопросов, хочется календарь еще.
Спасибо.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 04:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01415 секунд с 7
ELECTRONIX ©2004-2016