Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Посмотрите мою инициализацию при старте. Если кварц нормально пропаян - косяк в проге. Не надо откидывать вероятность поджареного чипа. Из сотни мне пару встречалось битых. Ну или по крайней мере вышли из строя в приборе хз по каким причинам.

Отправлено 1111 19 марта 2008 г. 10:38
В ответ на: Проблемы с FM3104 отправлено <font color=gray>Oleg_tv</font> 19 марта 2008 г. 09:41


<code>
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Синхронизация часов
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
u8_t RTC_Sync(void)
{
u32_t data_time;
u8_t *ptr = (u8_t*)&twi.buf[TWI_BUF_DATA];
volatile u8_t err_code;

err_code = 0;

//Считаем флаг состояния FM31XXX
err_code = TWI_Read(FM31XXX_CPU_COMPANION_DSEL, 1, FM31XXX_WDT_RES_REG);

if(err_code == 0)//Если считано нормально
{
if(((*(ptr + 0)) & (1<<FM31XXX_LB_BIT)) != 0)//Если FM31XXX была без питания
{
system.state_flags |= (1<<SYS_FLAG_RTC_BATTERY_FAIL);

//Запишем в ис системное время по умолчанию
if((err_code = RTC_Load_Data_Time_To_FM31XXX(RTC_DEFLT_LONG_DATA_TIME)) == 0)
{
//Сбросим флаг разряда баттарейки
data_time = 0;
err_code = TWI_Write(FM31XXX_CPU_COMPANION_DSEL, 1, FM31XXX_WDT_RES_REG, (u8_t*)&data_time);
}
}
}

if(err_code == 0)
{
//Сконфигурируем WDT
data_time = (u32_t)0x1F;
err_code = TWI_Write(FM31XXX_CPU_COMPANION_DSEL, 1, FM31XXX_WDT_CNTRL_REG, (u8_t*)&data_time);

if(err_code == 0)
{
//Запустим RTC
data_time = 0;
err_code = TWI_Write(FM31XXX_CPU_COMPANION_DSEL, 1, FM31XXX_CAL_CNTRL_REG, (u8_t*)&data_time);
}
}

if(err_code != 0)
{
err_code = 0;
return 0;
}
else
{
return 1;
}
}

//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Настройка часов при старте
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
void RTC_Startup_Set(void)
{
if(RTC_Sync() != 0)
{
//Log_Make_Record(MAIN_BUF, LOG_REC_CODE_POWER_ON, LOCAL_ADDR_TYPE_SYSTEM, 0, 0); //Старт
}
else
{
//Log_Make_Record(MAIN_BUF, LOG_REC_CODE_POWER_ON, LOCAL_ADDR_TYPE_SYSTEM, 0, 0); //Старт

if((system.state_flags & (1<<SYS_FLAG_EQUPMENT_TRBL)) == 0)
{
system.state_flags |= (1<<SYS_FLAG_EQUPMENT_TRBL); //Установим флаг неисправного оборудования
//Log_Make_Record(MAIN_BUF, LOG_REC_CODE_SYS_TROUBLE, LOCAL_ADDR_TYPE_SYSTEM, 0, 0); //Неисправность
}
}
}


#define FM31XXX_MAX_CPU_COMPANION_ADDR 0x18
#define FM31XXX_CPU_COMPANION_SIZE 0x19

#define FM31XXX_FRAM_DSEL 0xA0
#define FM31XXX_CPU_COMPANION_DSEL 0xD0

//Регистры FM31XXX_CPU_COMPANION
#define FM31XXX_RTC_CNTRL_REG 0x00
#define FM31XXX_CAL_CNTRL_REG 0x01
#define FM31XXX_SECONDS_REG 0x02
#define FM31XXX_MINUTES_REG 0x03
#define FM31XXX_HOURS_REG 0x04
#define FM31XXX_DAY_REG 0x05
#define FM31XXX_DATE_REG 0x06
#define FM31XXX_MONTH_REG 0x07
#define FM31XXX_YEARS_REG 0x08
#define FM31XXX_WDT_RES_REG 0x09
#define FM31XXX_WDT_CNTRL_REG 0x0A
#define FM31XXX_COMPANION_CNTRL_REG 0x0B
#define FM31XXX_EVNT_CNT_CNTRL_REG 0x0C
#define FM31XXX_EVNT_CNT1_LSB_REG 0x0D
#define FM31XXX_EVNT_CNT1_MSB_REG 0x0E
#define FM31XXX_EVNT_CNT2_LSB_REG 0x0F
#define FM31XXX_EVNT_CNT2_MSB_REG 0x10
#define FM31XXX_SN0_REG 0x11
#define FM31XXX_SN1_REG 0x12
#define FM31XXX_SN2_REG 0x13
#define FM31XXX_SN3_REG 0x14
#define FM31XXX_SN4_REG 0x15
#define FM31XXX_SN5_REG 0x16
#define FM31XXX_SN6_REG 0x17
#define FM31XXX_SN7_REG 0x18

//Биты FM31XXX_CPU_COMPANION
//FM31XXX_RTC_CNTRL_REG
#define FM31XXX_R_BIT 0x00
#define FM31XXX_W_BIT 0x01
#define FM31XXX_CAL_BIT 0x02
#define FM31XXX_CF_BIT 0x06

//FM31XXX_CAL_CNTRL_REG
#define FM31XXX_CAL0_BIT 0x00
#define FM31XXX_CAL1_BIT 0x01
#define FM31XXX_CAL2_BIT 0x02
#define FM31XXX_CAL3_BIT 0x03
#define FM31XXX_CAL4_BIT 0x04
#define FM31XXX_CALS_BIT 0x05
#define FM31XXX_OSCEN_BIT 0x07

//FM31XXX_SECONDS_REG
#define FM31XXX_SECONDS_BIT 0x00
#define FM31XXX_10SECONDS_BIT 0x04

//FM31XXX_MINUTES
#define FM31XXX_MINUTES_BIT 0x00
#define FM31XXX_10MINUTES_BIT 0x04

//FM31XXX_HOURS
#define FM31XXX_HOURS_BIT 0x00
#define FM31XXX_10HOURS_BIT 0x04

//FM31XXX_DAY
#define FM31XXX_DAY_BIT 0x00

//FM31XXX_DATE
#define FM31XXX_DATE_BIT 0x00
#define FM31XXX_10DATE_BIT 0x04

//FM31XXX_MONTH
#define FM31XXX_MONTH_BIT 0x00
#define FM31XXX_10MONTH_BIT 0x04

//FM31XXX_YEARS
#define FM31XXX_YEARS_BIT 0x00
#define FM31XXX_10YEARS_BIT 0x04

//FM31XXX_WDT_RES
#define FM31XXX_WR0_BIT 0x00
#define FM31XXX_WR1_BIT 0x01
#define FM31XXX_WR2_BIT 0x02
#define FM31XXX_WR3_BIT 0x03
#define FM31XXX_LB_BIT 0x05
#define FM31XXX_POR_BIT 0x06
#define FM31XXX_WTR_BIT 0x07

//FM31XXX_WDT_CNTRL
#define FM31XXX_WDT0_BIT 0x00
#define FM31XXX_WDT1_BIT 0x01
#define FM31XXX_WDT2_BIT 0x02
#define FM31XXX_WDT3_BIT 0x03
#define FM31XXX_WDT4_BIT 0x04
#define FM31XXX_WDE_BIT 0x07

//FM31XXX_COMPANION_CNTRL
#define FM31XXX_VTP0_BIT 0x00
#define FM31XXX_VTP1_BIT 0x01
#define FM31XXX_VBC_BIT 0x02
#define FM31XXX_WP0_BIT 0x03
#define FM31XXX_WP1_BIT 0x04
#define FM31XXX_SNL_BIT 0x07
</code>


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 97:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru