Вспомним старое доброе (ARM7)

Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
L_VL
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт сен 19, 2017 18:15:40

Вспомним старое доброе (ARM7)

Сообщение L_VL »

Всем привет, коты!

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

Наткнулся на днях у себя в погребах на когда-то купленные и бережно упакованные 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:
Реклама
Аватара пользователя
smalcom
Встал на лапы
Сообщения: 128
Зарегистрирован: Пн фев 08, 2016 10:57:14

Re: Вспомним старое доброе (ARM7)

Сообщение smalcom »

Код: Выделить всё

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

Код: Выделить всё

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

и наконец

Код: Выделить всё

while (1);
тут обычно люая вычислительная система ничего не делает.
Реклама
L_VL
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт сен 19, 2017 18:15:40

Re: Вспомним старое доброе (ARM7)

Сообщение L_VL »

[uquote="smalcom",url="/forum/viewtopic.php?p=3187714#p3187714"]

Код: Выделить всё

 но делать нифига не делает...
"ничо не работает" - это фраза из бухгалтерии.[/uquote]

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

[uquote="smalcom",url="/forum/viewtopic.php?p=3187714#p3187714"]

Код: Выделить всё

Delay(55000);
Почти со стопроцентной вероятностью компилятор это выкинет.[/uquote]

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

[uquote="smalcom",url="/forum/viewtopic.php?p=3187714#p3187714"]и наконец

Код: Выделить всё

while (1);
тут обычно люая вычислительная система ничего не делает.[/uquote]

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

Пока никаких продвижений :cry:
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Вспомним старое доброе (ARM7)

Сообщение YS »

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

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

Код: Выделить всё

void delay(uint32_t N)
{
  volatile uint32_t k;

  for (k=0; k<N; k++)
  {
  }
}
И мигать я бы рекомендовал не пять раз, а постоянно, прямо в while (1). По крайней мере, для начала.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Реклама
Эиком - электронные компоненты и радиодетали
L_VL
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт сен 19, 2017 18:15:40

Re: Вспомним старое доброе (ARM7)

Сообщение L_VL »

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);
  };
}
Как-то с Мегами таких проблем с запуском не было :)))
Реклама
Аватара пользователя
abc
Друг Кота
Сообщения: 3686
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Re: Вспомним старое доброе (ARM7)

Сообщение abc »

Вообще, такая тема уже есть - пишите апологетам, они там мигают даже лампочками на утюгах.
http://radiokot.ru/forum/viewtopic.php?f=62&t=105290
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Реклама
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Вспомним старое доброе (ARM7)

Сообщение YS »

YS, попробовал... Увы, результат тот же, PA0 всегда высокий...
Хм.

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

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

Второе: на эту ножку по умолчанию не замаплена какая-нибудь альтернативная функция? Например, бывает так, что после старта определенные ножки используются под JTAG, скажем, и управление ими недоступно до перенастройки.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
L_VL
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт сен 19, 2017 18:15:40

Re: Вспомним старое доброе (ARM7)

Сообщение L_VL »

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:
L_VL
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт сен 19, 2017 18:15:40

Re: Вспомним старое доброе (ARM7)

Сообщение L_VL »

В рамках продолжения эксперимента был заземлен корпус кварца. Блокировочные емкости поставлены 10 пФ. Менялся сам контроллер. Результат - нулевой...
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Вспомним старое доброе (ARM7)

Сообщение YS »

Мне все же кажется, что вы что-то не включили на программном уровне.

Кстати, у этого МК нет ли случаем специальных ножек (опять же, как у STM32), которые выбирают, откуда он будет загружать программу (FLASH/RAM/etc)?
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
smalcom
Встал на лапы
Сообщения: 128
Зарегистрирован: Пн фев 08, 2016 10:57:14

Re: Вспомним старое доброе (ARM7)

Сообщение smalcom »

L_VL
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт сен 19, 2017 18:15:40

Re: Вспомним старое доброе (ARM7)

Сообщение L_VL »

Все бы хорошо, да нифига. Думаю в сторону негенерирующего кварца, да проверить сейчас его нечем, осцилл с диапазоном 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 кГц). Но его там нет...

Чтение флэша каждый раз подтверждает то, что было в него записано...
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Вспомним старое доброе (ARM7)

Сообщение YS »

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

Есть ли startup-файлы, доступные для редактирования? Может быть, стартовый код настраивает контроллер на неработающий/несуществующий источник тактирования?
По моим прикидкам на выводе PA3 должен быть меандр с частотой не выше 500 кГц (48МГц/96 = 500 кГц). Но его там нет...
А попробуйте не меандр, а просто устанавливать ножку в 1/0 и дальше бесконечный цикл. Если МК хоть как-то работает, то после заливания соответствующей прошивки состояние ножки, как вы понимаете, должно меняться.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
L_VL
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт сен 19, 2017 18:15:40

Re: Вспомним старое доброе (ARM7)

Сообщение L_VL »

YS писал(а):А попробуйте не меандр, а просто устанавливать ножку в 1/0 и дальше бесконечный цикл. Если МК хоть как-то работает, то после заливания соответствующей прошивки состояние ножки, как вы понимаете, должно меняться.
Пробовал в самом начале пути 8) Нет реакции :?
YS писал(а):Есть ли startup-файлы, доступные для редактирования?
Вроде как нет, только тот конфиг, что я делаю в main() перед циклом.
YS писал(а):А там есть внутренний генератор (да, каюсь, мне лень читать документацию)?
Есть, я читал документацию :))) Именно на нем стартует МК и потом по моим настройкам в main() инициализирует PLL и внешний кварц.
YS писал(а):Может быть, попробуйте с ним?
Сейчас буду репку чесать :solder:
YS писал(а):Может быть, стартовый код настраивает контроллер на неработающий/несуществующий источник тактирования?
Неработающий еще куда ни шло, но несуществующий :)))
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Вспомним старое доброе (ARM7)

Сообщение YS »

Неработающий еще куда ни шло, но несуществующий :)))
Не, ну и такое тоже бывает, да. :)))
Разница между теорией и практикой на практике гораздо больше, чем в теории.
L_VL
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт сен 19, 2017 18:15:40

Re: Вспомним старое доброе (ARM7)

Сообщение L_VL »

Всем добрый вечер!

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

Код: Выделить всё

#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:
L_VL
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт сен 19, 2017 18:15:40

Re: Вспомним старое доброе (ARM7)

Сообщение L_VL »

Друзья! Коллеги!

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

Отдельная благодарность 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:
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Вспомним старое доброе (ARM7)

Сообщение YS »

Меандр у меня прошлой ночью таки замеандрил!
ЫЫЫ!!! :) :beer:
Отдельная благодарность YS!
Не за что, всегда рад помочь! :) :beer:
Разница между теорией и практикой на практике гораздо больше, чем в теории.
L_VL
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт сен 19, 2017 18:15:40

Re: Вспомним старое доброе (ARM7)

Сообщение L_VL »

Хэхэй! Эт снова я :))) Всем привет :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, с ним станет жить приятнее. Но я и со своими узкодиапазонниками вижу, что на кварце ничего не происходит...
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Вспомним старое доброе (ARM7)

Сообщение YS »

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

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

Вернуться в «Практика»