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

 
 
> MD-328D (LGT8F328D) зависает при сбросе от WDT
BSACPLD
сообщение Jul 24 2018, 01:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056



Коллеги, помогите, пожалуйста, с очередной проблемой с MD-328D (LGT8F328D).
Пробую писать код на чистом C без использования Arduino IDE.
Инициализацию МК сделал аналогично загрузчику из Arduino IDE, но при этом не могу понять почему при срабатывании WDT контроллер намертво зависает так что даже не помогает кнопка сброса. Только ресет по питанию. Причем одна и та же программа ведет себя по разному в зависимости от того запускаю я её совместно со своим загрузчиком или загрузчиком из Arduino IDE.
MD-328D (LGT8F328D):
Загрузчик из Arduino IDE + моя программа = корретная работа.
Мой загрузчик + моя программа = зависание при срабатывании WDT.
Моя программа без загрузчика = зависание при срабатывании WDT.
ATmega328P:
Загрузчик из Arduino IDE + моя программа = корретная работа.
Мой загрузчик + моя программа = корретная работа.
Моя программа без загрузчика = корретная работа.
И еще один интересный момент. Если перезагрузку через сброс по WDT заменить на программный сброс (бит SWR в регистре VDTCR), то контроллер перестает зависать.
Также контроллер всегда зависает после перепрошивки по SWD и залитая программа стартует лишь после передергивания питания.
Может кто сталкивался с таким странным поведением данного контроллера?

Приложенные файлы:
md328d.rar - загрузчик из Arduino IDE.
MD-328D_AVRMINIBLD.rar - загрузчик под MD-328D.
MD-328D_AVRMINIAPP.rar - программа под MD-328D.
ATmega328_AVRMINIBLD.rar - загрузчик под ATmega328P.
ATmega328_AVRMINIAPP.rar - программа под ATmega328P.
Прикрепленные файлы
Прикрепленный файл  md328d.rar ( 39.94 килобайт ) Кол-во скачиваний: 9
Прикрепленный файл  MD_328D_AVRMINIBLD.rar ( 58.37 килобайт ) Кол-во скачиваний: 8
Прикрепленный файл  ATmega328_AVRMINIBLD.rar ( 56.9 килобайт ) Кол-во скачиваний: 8
Прикрепленный файл  MD_328D_AVRMINIAPP.rar ( 77.15 килобайт ) Кол-во скачиваний: 8
Прикрепленный файл  ATmega328_AVRMINIAPP.rar ( 73.75 килобайт ) Кол-во скачиваний: 8
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
BSACPLD
сообщение Jul 25 2018, 06:40
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 371
Регистрация: 24-07-05
Из: Москва
Пользователь №: 7 056



Нашел странную закономерность.
Если приведенный ниже код разместить начиная с адреса 0x0000, то он вроде как работает, но если с помощью настроек линкера поменять его размещение, допустим на 0x3000, то код также запускается, но при срабатывании WDT контроллер виснет намертво. На всех пинах слабая подтяжка к питанию и не реагирует на сигнал сброса.
Похоже на некорректную отработку сброса если в момент срабатывания WDT программа находится старше какого-то адреса.
Видимо это какой-то аппаратный баг... sad.gif

CODE

#include <ina90.h>
#include <iom328p.h>

#include "md328d.h"

#include <stdint.h>
#include <stdbool.h>

#include "main.h"

//-------------------------------------------------------------------
void md8fx8x_init (void) ;

//-------------------------------------------------------------------
void main (void)
{
md8fx8x_init () ;

MCUCR = (1<<PUD) ;

PORTB = (1<<PORTB7) | (1<<PORTB6) | (0<<PORTB5) | (1<<PORTB4) | (1<<PORTB3) | (1<<PORTB2) | (1<<PORTB1) | (1<<PORTB0) ;
DDRB = (0<<PORTB7) | (0<<PORTB6) | (1<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0) ;

PORTC = (1<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) | (1<<PORTC3) | (1<<PORTC2) | (1<<PORTC1) | (1<<PORTC0) ;
DDRC = (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0) ;

PORTD = (1<<PORTD7) | (1<<PORTD6) | (1<<PORTD5) | (1<<PORTD4) | (1<<PORTD3) | (1<<PORTD2) | (1<<PORTD1) | (1<<PORTD0) ;
DDRD = (0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (1<<PORTD1) | (0<<PORTD0) ;

LED_PORT |= (1<<LED_0) ;
__delay_cycles (8000000) ;
LED_PORT &= ~(1<<LED_0) ;
while (1) ;
}
//-------------------------------------------------------------------
void md8fx8x_init (void)
{
__disable_interrupt () ;

__watchdog_reset () ;
WDTCSR |= (1<<WDCE) | (1<<WDE) ;
WDTCSR = (0<<WDIE) | (0<<WDE) | (0<<WDP3) | (0<<WDP2) | (0<<WDP1) | (0<<WDP0) ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;

TKCSR = 0x00 ;

// enable 1KB E2PROM
ECCR = 0x80 ;
ECCR = 0x40 ;

// switch to external crystal
PMCR = 0x80 ;
PMCR = 0x37 ;

__delay_cycles (100) ;

CLKPR = 0x80 ;
CLKPR = 0x00 ;

__delay_cycles (100) ;

__watchdog_reset () ;
WDTCSR |= (1<<WDCE) | (1<<WDE) ;
WDTCSR = (0<<WDIE) | (1<<WDE) | (0<<WDP3) | (1<<WDP2) | (1<<WDP1) | (0<<WDP0) ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;
asm ("nop") ;

__enable_interrupt () ;
}
Go to the top of the page
 
+Quote Post
zombi
сообщение Jul 25 2018, 08:17
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(BSACPLD @ Jul 25 2018, 09:40) *
На всех пинах слабая подтяжка к питанию и не реагирует на сигнал сброса.

Прикольно ! biggrin.gif
Просто интересно, чем обусловлено столь пристальное внимание к этому MD-328D ?
Чем он лучше меги?
Go to the top of the page
 
+Quote Post



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

 


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


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