Например TDA7294

 Форум РадиоКот • Просмотр темы - Вспомним старое доброе (ARM7)
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Пн ноя 20, 2017 16:31:47



Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.
Автор Сообщение
Не в сети
 Заголовок сообщения: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Вт сен 19, 2017 23:27:34 
Первый раз сказал Мяу!

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 0
Всем привет, коты!

Настолько давно забросил хардвару, что аж забыл свой аккаунт на коте... Создав новый пришел с поклоном к гуру!

Наткнулся на днях у себя в погребах на когда-то купленные и бережно упакованные AT91SAM7S512 и рассыпуху к ним. Тогда руки не добрались... Сейчас решил помучить зверьков, попробовать-таки великие, как многие говорят, ARMы, да не тут-то было...

Напаял кристалл, припаял кварц с блокировкой, нашаманил RC-PLL, даже на LM317T из USB ему подвел 3.3V. Софт установил!!!

И о чудо!
Камень шьется по USB из-под SAM-BA, SAM-PROG, BOSSA, но делать нифига не делает...

Прошу Вашей помощи и поддержки в восстановлении истины и знаний 8)

Код писался под IAR EW for ARM 7.50: попытка подрыгать ногой.

Код:
#include <Atmel\ioat91sam7s512.h>
#include <stdio.h>

AT91PS_PIO    m_pPio   = AT91C_BASE_PIOA;

//it's a simple delay
void Delay (unsigned long a) {
  while (--a!=0);
}

int main(void)
{
  // Configure led
  m_pPio->PIO_SODR  = AT91C_PIO_PA0;   // Set PA18 to HIGH -> led off
  m_pPio->PIO_OER   = AT91C_PIO_PA0;   // Configure PA8 as output
 
    unsigned long i;
  for(i = 0; i < 5; i++)
  {
    m_pPio->PIO_CODR = AT91C_PIO_PA0;   
    Delay(55000);
    m_pPio->PIO_SODR = AT91C_PIO_PA0;   
    Delay(55000);
  }
 
    // Main loop
    while (1);
}


Очень прошу лапами не бить, на дверь не указывать со словами "Нашел старье..." или "Atmel помойка"... Не за такой помощью обращаюсь :idea:


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Ср сен 20, 2017 16:39:31 
Встал на лапы
Аватар пользователя

Карма: -6
Зарегистрирован: Пн фев 08, 2016 11:57:14
Сообщений: 92
Рейтинг сообщения: 0
Код:
 но делать нифига не делает...

"ничо не работает" - это фраза из бухгалтерии.

Код:
Delay(55000);

Почти со стопроцентной вероятностью компилятор это выкинет.

и наконец
Код:
while (1);

тут обычно люая вычислительная система ничего не делает.


Вернуться наверх
 Профиль  
 
JLCPCB Prototype, $2 за 10 печатных плат (2 слоя, 100×100мм).

Крупнейший производитель печатных плат в Китае, 290,000+ заказчиков, 8,000+ он-лайн заказов в день.

Узнать цену прямо сейчас!

LCSC Parts: Экономия до 50%, большой выбор компонентов в наличии, отправка заказа в день оплаты.

Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Ср сен 20, 2017 16:52:11 
Первый раз сказал Мяу!

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 0
Код:
 но делать нифига не делает...

"ничо не работает" - это фраза из бухгалтерии.


Ага, только он работает, но ничего не делает :)))

Код:
Delay(55000);

Почти со стопроцентной вероятностью компилятор это выкинет.


За что? Да и не выкинул даже warning'ов 8)

и наконец
Код:
while (1);

тут обычно люая вычислительная система ничего не делает.


Да, только перед тем при старте должно 5 раз аж поморгать в цикле...

Пока никаких продвижений :cry:


Вернуться наверх
 Профиль  
 

Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Вс сен 24, 2017 20:00:17 
Друг Кота
Аватар пользователя

Карма: 67
Зарегистрирован: Вс мар 29, 2009 23:09:05
Сообщений: 7248
Рейтинг сообщения: 0
Цитата:
За что? Да и не выкинул даже warning'ов


По мнению оптимизатора этот код ничего не делает. Предупреждений в таком случае и не бывает, так как компилятор честно считает, что сделал благое дело - ускорил выполнение программы!

Я бы рекомендовал переписать delay так:

Код:
void delay(uint32_t N)
{
  volatile uint32_t k;

  for (k=0; k<N; k++)
  {
  }
}


И мигать я бы рекомендовал не пять раз, а постоянно, прямо в while (1). По крайней мере, для начала.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 Профиль WWW  
 

Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Вс сен 24, 2017 20:56:36 
Первый раз сказал Мяу!

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 0
YS, попробовал... Увы, результат тот же, PA0 всегда высокий... :(

Код:
#include <Atmel\sam7s\AT91SAM7S512.h>
#include <stdio.h>
#include <stdint.h>

AT91PS_PIO    m_pPio   = AT91C_BASE_PIOA;

//it's a simple delay
void Delay(uint32_t N)
{
  volatile uint32_t k;

  for (k=0; k<N; k++)
  {
  }
}

int main(void)
{
  // Configure led
  m_pPio->PIO_SODR  = AT91C_PIO_PA0;   // Set PA18 to HIGH -> led off
  m_pPio->PIO_OER   = AT91C_PIO_PA0;   // Configure PA8 as output
 
    // Main loop
  while (1){
    m_pPio->PIO_CODR = AT91C_PIO_PA0;   
    Delay(55000);
    m_pPio->PIO_SODR = AT91C_PIO_PA0;   
    Delay(55000);
  };
}


Как-то с Мегами таких проблем с запуском не было :)))


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Вс сен 24, 2017 23:04:55 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 50
Зарегистрирован: Чт мар 20, 2008 02:06:40
Сообщений: 2373
Откуда: Севастополь
Рейтинг сообщения: 0
Вообще, такая тема уже есть - пишите апологетам, они там мигают даже лампочками на утюгах.
viewtopic.php?f=62&t=105290

_________________
>(*.*)<


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Вс сен 24, 2017 23:24:01 
Друг Кота
Аватар пользователя

Карма: 67
Зарегистрирован: Вс мар 29, 2009 23:09:05
Сообщений: 7248
Рейтинг сообщения: 0
Цитата:
YS, попробовал... Увы, результат тот же, PA0 всегда высокий...


Хм.

Тогда вопрос такой: а чтобы порт работал, точно не надо, скажем, включить его тактирование, или типа того?

Я с ARM от Atmel не работал, но вот в STM32, например, вся периферия (и порты тоже) по умолчанию отключена. Чтобы использовать, скажем, порт, надо сначала включить его тактирование в блоке управления тактированием. Может и тут как-то так?

Второе: на эту ножку по умолчанию не замаплена какая-нибудь альтернативная функция? Например, бывает так, что после старта определенные ножки используются под JTAG, скажем, и управление ими недоступно до перенастройки.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Пн сен 25, 2017 20:06:42 
Первый раз сказал Мяу!

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 0
abc писал(а):
а чтобы порт работал, точно не надо, скажем, включить его тактирование, или типа того?


Ну в целом наверное надо, про такое я читал :)))

Увы, литературы толковой не нашел, пришлось нахлебываться тем, что есть в интернетах :oops:

Вечером обязательно попробую :solder:

Добавлено after 8 hours 45 minutes 22 seconds:
Итак, эксперименты проведены :?

Код:
#include <Atmel\sam7s\AT91SAM7S512.h>
#include <stdio.h>
#include <stdint.h>

//it's a simple delay
void Delay(uint32_t N) {
  volatile uint32_t k;
  for (k=0; k<N; k++) {}
}

int main(void)

  // Определяем указатели на структуры питания, сброса, порта PIOA
  AT91PS_PMC    pPMC     = AT91C_BASE_PMC;
  AT91PS_RSTC   m_pRSTC  = AT91C_BASE_RSTC;
  AT91PS_PIO    m_pPio   = AT91C_BASE_PIOA;
  // Настраиваем сброс по RST
  m_pRSTC->RSTC_RCR = 0xA5000008;
  m_pRSTC->RSTC_RMR = 0xA5000001;
  Delay(1000);
 
  // Настройка контроллера Flash
  AT91C_BASE_MC->MC0_FMR = ((AT91C_MC_FMCN)&(48 <<16)) | AT91C_MC_FWS_1FWS ;
  // Запрет WatchDog'а
  AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
 
  // Генератор - внешний кварц + PLL
  pPMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x06 <<8) | AT91C_CKGR_MOSCEN ));
  while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
 
  // Настройка PLL
  pPMC->PMC_PLLR = ((AT91C_CKGR_DIV & 0x05) | (AT91C_CKGR_PLLCOUNT & (28<<8)) | (AT91C_CKGR_MUL & (25<<16)));
  while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
 
  // Коэффициент деления для PLL = 2
  pPMC->PMC_MCKR =  AT91C_PMC_PRES_CLK_2;
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
  pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));

  // Настройка порта PA
  m_pPio->PIO_PER  = 1 << AT91C_PIO_PA3;        // Разрешить работу пина
  m_pPio->PIO_OER   = 1 << AT91C_PIO_PA3;       // Установить пин PA0 на выход
  pPMC->PMC_PCER  = 1 << AT91C_ID_PIOA;         // Включить тактирование порта
  m_pPio->PIO_CODR   = 1 << AT91C_PIO_PA3;      // Очистить бит пина (PA0 = 0)
 
 
    // Main loop
  while (1){
    m_pPio->PIO_CODR = AT91C_PIO_PA3;   
    Delay(55000);
    m_pPio->PIO_SODR = AT91C_PIO_PA3;   
    Delay(55000);
  };
}


Специально взял пин PA3, у него только одна функция доступна - пин ввода-вывода.

Результат тот же - нифига! :cry:


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Вт сен 26, 2017 21:01:05 
Первый раз сказал Мяу!

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 0
В рамках продолжения эксперимента был заземлен корпус кварца. Блокировочные емкости поставлены 10 пФ. Менялся сам контроллер. Результат - нулевой...


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Вт сен 26, 2017 22:04:53 
Друг Кота
Аватар пользователя

Карма: 67
Зарегистрирован: Вс мар 29, 2009 23:09:05
Сообщений: 7248
Рейтинг сообщения: 0
Мне все же кажется, что вы что-то не включили на программном уровне.

Кстати, у этого МК нет ли случаем специальных ножек (опять же, как у STM32), которые выбирают, откуда он будет загружать программу (FLASH/RAM/etc)?

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Вт сен 26, 2017 22:40:57 
Встал на лапы
Аватар пользователя

Карма: -6
Зарегистрирован: Пн фев 08, 2016 11:57:14
Сообщений: 92
Рейтинг сообщения: 0
http://electronix.ru/forum/index.php?ac ... t&id=20707


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Ср сен 27, 2017 19:15:36 
Первый раз сказал Мяу!

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 0
Все бы хорошо, да нифига. Думаю в сторону негенерирующего кварца, да проверить сейчас его нечем, осцилл с диапазоном over 1 MHz прибудет через пару недель только... Успокаиваю себя тем, что раз по USB шьется, значит и кварц генерит. Или вывод неправильный?

На данный момент, обложившись листингами разными, переписал код так:

Код:
#include <Atmel\sam7s\AT91SAM7S512.h>
#include <stdio.h>
#include <stdint.h>

//it's a simple delay
void Delay(uint32_t N) {
  volatile uint32_t k;
  for (k=0; k<N; k++) {}
}

int main(void)
{
  // Определяем указатели на структуры питания, сброса, порта PIOA
  AT91PS_PMC    pPMC     = AT91C_BASE_PMC;
  AT91PS_PIO    m_pPio   = AT91C_BASE_PIOA;
 
  AT91C_BASE_MC->MC0_FMR = AT91C_MC_FWS_1FWS ;
  pPMC->PMC_MOR = (( AT91C_CKGR_OSCOUNT & (0x40 <<8) | AT91C_CKGR_MOSCEN ));
  while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
 
  pPMC->PMC_PLLR = AT91C_CKGR_USBDIV_1|(16<<8) | (AT91C_CKGR_MUL & (72<<16)) | (AT91C_CKGR_DIV & 14);
  while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
 
  pPMC->PMC_MCKR =  AT91C_PMC_PRES_CLK_2;
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
  pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
 
  AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
 
  AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA) ; //Включаем тактировние
    AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, AT91C_PIO_PA1) ;                //Конфигурируем порт на выход
    AT91F_PIO_SetOutput( AT91C_BASE_PIOA, AT91C_PIO_PA1);                 //Включаем вывод
 
    // Main loop
  while (1){
    m_pPio->PIO_CODR = AT91C_PIO_PA3;   
    Delay(96);
    m_pPio->PIO_SODR = AT91C_PIO_PA3;   
    Delay(96);
  };
}


По моим прикидкам на выводе PA3 должен быть меандр с частотой не выше 500 кГц (48МГц/96 = 500 кГц). Но его там нет...

Чтение флэша каждый раз подтверждает то, что было в него записано...


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Ср сен 27, 2017 20:14:42 
Друг Кота
Аватар пользователя

Карма: 67
Зарегистрирован: Вс мар 29, 2009 23:09:05
Сообщений: 7248
Рейтинг сообщения: 0
Цитата:
Успокаиваю себя тем, что раз по USB шьется, значит и кварц генерит. Или вывод неправильный?


Кто знает... А там есть внутренний генератор (да, каюсь, мне лень читать документацию)? Может быть, попробуйте с ним?

Есть ли startup-файлы, доступные для редактирования? Может быть, стартовый код настраивает контроллер на неработающий/несуществующий источник тактирования?

Цитата:
По моим прикидкам на выводе PA3 должен быть меандр с частотой не выше 500 кГц (48МГц/96 = 500 кГц). Но его там нет...


А попробуйте не меандр, а просто устанавливать ножку в 1/0 и дальше бесконечный цикл. Если МК хоть как-то работает, то после заливания соответствующей прошивки состояние ножки, как вы понимаете, должно меняться.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Ср сен 27, 2017 20:20:35 
Первый раз сказал Мяу!

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 0
YS писал(а):
А попробуйте не меандр, а просто устанавливать ножку в 1/0 и дальше бесконечный цикл. Если МК хоть как-то работает, то после заливания соответствующей прошивки состояние ножки, как вы понимаете, должно меняться.


Пробовал в самом начале пути 8) Нет реакции :?

YS писал(а):
Есть ли startup-файлы, доступные для редактирования?


Вроде как нет, только тот конфиг, что я делаю в main() перед циклом.

YS писал(а):
А там есть внутренний генератор (да, каюсь, мне лень читать документацию)?


Есть, я читал документацию :))) Именно на нем стартует МК и потом по моим настройкам в main() инициализирует PLL и внешний кварц.

YS писал(а):
Может быть, попробуйте с ним?


Сейчас буду репку чесать :solder:

YS писал(а):
Может быть, стартовый код настраивает контроллер на неработающий/несуществующий источник тактирования?


Неработающий еще куда ни шло, но несуществующий :)))


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Ср сен 27, 2017 21:20:32 
Друг Кота
Аватар пользователя

Карма: 67
Зарегистрирован: Вс мар 29, 2009 23:09:05
Сообщений: 7248
Рейтинг сообщения: 0
Цитата:
Неработающий еще куда ни шло, но несуществующий :)))


Не, ну и такое тоже бывает, да. :)))

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Чт сен 28, 2017 21:30:55 
Первый раз сказал Мяу!

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 0
Всем добрый вечер!

Итак, до чего я добрался, пока курил доку и читал Редькина...

Код:
#include <Atmel\sam7s\AT91SAM7S512.h>

int main(void)
{
AT91PS_PMC    pPMC     = AT91C_BASE_PMC;
AT91PS_PIO    m_pPio   = AT91C_BASE_PIOA;

// Настроить внутренний RC-генератор
pPMC->PMC_MCKR |= AT91C_PMC_CSS_SLOW_CLK;
// Дождаться стабилизации частоты
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
 
pPMC->PMC_PCER  = 1 << AT91C_ID_PIOA;        // Включить тактирование порта
m_pPio->PIO_PER  = 1 << AT91C_PIO_PA3;        // Использовать PA3 как линию ввода-вывода
m_pPio->PIO_OER   = 1 << AT91C_PIO_PA3;       // Установить пин PA0 на выход
 
m_pPio->PIO_CODR   = 1 << AT91C_PIO_PA3;     // Очистить бит пина (PA3 = 0)

while (1){
  };
}


Вроде бы с виду все правильно и примитивнее некуда:
- включаемся;
- запускаем встроенный RC-генератор на 32 кГц;
- включаем порт ВВ;
- ставим "вечный" 0 на выводе 3.

Вот только на выводе PA3 постоянно 1!!!

Пробовал даже в инициализации отключить подтяжку ножки порта к питанию

Код:
pPMC->PMC_PCER  = 1 << AT91C_ID_PIOA;         // Включить тактирование порта
  m_pPio->PIO_PER  = 1 << AT91C_PIO_PA3;        // Разрешить работу пина
  m_pPio->PIO_PPUDR  = 1 << AT91C_PIO_PA3;     // Отключаем подтяжку
  m_pPio->PIO_OER   = 1 << AT91C_PIO_PA3;       // Установить пин PA0 на выход


Но безрезультатно... На ножке всегда 1...

Добавил емкостей по линии VDD_CORE (1.8в), тоже никак...

Я в растерянности окончательно :dont_know:


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Пт сен 29, 2017 18:46:23 
Первый раз сказал Мяу!

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 0
Друзья! Коллеги!

Всем спасибо за оказанное содействие!

Отдельная благодарность YS!

Меандр у меня прошлой ночью таки замеандрил! Вычислил уже только с помощью симулятора в IAR.

Код
Код:
pPMC->PMC_PCER  = 1 << AT91C_ID_PIOA;        // Включить тактирование порта
m_pPio->PIO_PER  = 1 << AT91C_PIO_PA3;        // Использовать PA3 как линию ввода-вывода
m_pPio->PIO_OER   = 1 << AT91C_PIO_PA3;       // Установить пин PA0 на выход


Оказался не совсем корректным, потому что в Atmel\sam7s\AT91SAM7S512.h записан define

Код:
#define AT91C_PIO_PA3        (1 <<  3) // Pin Controlled by PA3


И на выходе я получал не <<, а << (<<) :))) то есть вместо PA3 я попадал в PA6!

Вот такой конфуз :oops:

Но попутно поначитался про архитектуру, про настройку периферии и ЗГ, так что опыт не совсем пустой 8)

Пойду играться с генератором и PLL :solder: , ну а эту тему можно закрывать :beer:


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Пт сен 29, 2017 19:08:48 
Друг Кота
Аватар пользователя

Карма: 67
Зарегистрирован: Вс мар 29, 2009 23:09:05
Сообщений: 7248
Рейтинг сообщения: 0
Цитата:
Меандр у меня прошлой ночью таки замеандрил!


ЫЫЫ!!! :) :beer:

Цитата:
Отдельная благодарность YS!


Не за что, всегда рад помочь! :) :beer:

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Ср окт 04, 2017 23:56:45 
Первый раз сказал Мяу!

Зарегистрирован: Вт сен 19, 2017 19:15:40
Сообщений: 35
Рейтинг сообщения: 0
Хэхэй! Эт снова я :))) Всем привет :tea:

У меня, вообщем, опять траблы с этим чудом :)))


На внутреннем RC-генераторе все работает зачетно и стабильно, а вот с запуском внешнего никак ничего не выходит :facepalm:

Пробовал запускаться от самого кварца на 18,432 МГц:

Код:
  // Время запуска кварца и включение самого кварца
  pPMC->PMC_MOR = ((AT91C_CKGR_OSCOUNT & (0xFF << 8)) | AT91C_CKGR_MOSCEN);
  while(!(pPMC->PMC_SR & AT91C_PMC_MOSCS));
 
  // Выбор источника тактирования CSS_MAIN без предделителя
  pPMC->PMC_MCKR = (AT91C_PMC_PRES_CLK | AT91C_PMC_CSS_MAIN_CLK);
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));


На кварце тишина, код не исполняется.

Пробовал на кварце с PLL:

Код:
  // Настройка циклов флэш-контроллера
  AT91C_BASE_MC->MC0_FMR = ((AT91C_MC_FMCN & 48) | AT91C_MC_FWS_1FWS);
  // Отключение сторожевого таймера
  AT91C_BASE_WDTC -> WDTC_WDMR = AT91C_WDTC_WDDIS;
 
  // Настройка тайминга запуска и запуск кварца
  pPMC->PMC_MOR = ((AT91C_CKGR_OSCOUNT & 0x06) | AT91C_CKGR_MOSCEN);
  while(!(pPMC -> PMC_SR & AT91C_PMC_MOSCS));
 
  // Настройка множителей и таймингов ФАПЧ
  pPMC -> PMC_PLLR = ((AT91C_CKGR_DIV & 0x05) | (AT91C_CKGR_PLLCOUNT & 28) | (AT91C_CKGR_MUL & 25));
  while(!(pPMC->PMC_SR & AT91C_PMC_LOCK));
  while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));
 
  // Предделитель 2 (т.к. PLL на 96 МГц, а для проца и USB требуется 48)
  pPMC->PMC_MCKR =  AT91C_PMC_PRES_CLK_2;
  while(!(pPMC -> PMC_SR & AT91C_PMC_MCKRDY));
  // Выбор сигнала тактирования - PLL
  pPMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
  while(!(pPMC -> PMC_SR & AT91C_PMC_MCKRDY));


И снова ничего :dont_know:

Иными словами кварц не запускается.

Кварц менял, емкости подключал/отключал, корпус кварца заземлял. Грешил, было, на проц, но...
Если оторвать кварц - по USB проц вообще не определяется. Значит кварц работает.
Если оторвать PLL - проц так же не определяется. Значит и PLL работает.

Никто не подскажет, что за грабли?

Пы.Сы. Все жду осцилл с диапазоном over100mhz, с ним станет жить приятнее. Но я и со своими узкодиапазонниками вижу, что на кварце ничего не происходит...


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Вспомним старое доброе (ARM7)
СообщениеДобавлено: Чт окт 05, 2017 11:22:11 
Друг Кота
Аватар пользователя

Карма: 67
Зарегистрирован: Вс мар 29, 2009 23:09:05
Сообщений: 7248
Рейтинг сообщения: 0
Цитата:
Если оторвать кварц - по USB проц вообще не определяется. Значит кварц работает.


А не надо для FLASH выставить wait states? Как правило, при работе на частотах выше 16 МГц FLASH сама по себе не успевает выдавать данные, и в контроллерах применяются всякие трюки, чтобы это обойти. Это может быть необходимо включить явно.

Смысл обычно сводится к тому, что контроллер памяти на каждом такте системной шины выдает данные из буфера, а на каждом кратном такте читает данные из памяти. При этом память имеет более широкую шину, чем системная, так что за одно обращение извлекается несколько машинных слов, которые складываются в буфер.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 Профиль WWW  
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.



Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: gsmart и гости: 20


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y