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

 
 
 
Reply to this topicStart new topic
> Проблема с внешним кварцем ATSAM4SD32C, Не заводлится от внешнего кварца.
Грендайзер
сообщение Feb 18 2015, 07:49
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Всем доброго времени суток. Пытаю отладочную плату SAM4S-EK2 на базе контроллера ATSAM4SD32C. Пытаюсь заставить микросхему тактироваться от внешнего кварца 12МГц. Делаю всё как указано в даташите. Сначала перевожу процессор на тактирование от низкочастотного внутреннего генератора:
PMC -> PMC_MCKR = PMC_MCKR_CSS_SLOW_CLK;
Тут всё работает, процессор действительно начинает медленно работать. Далее запускаю кварцевй генератор:
PMC -> CKGR_MOR = CKGR_MOR_MOSCRCEN | CKGR_MOR_MOSCRCF_12_MHz| CKGR_MOR_MOSCXTEN | CKGR_MOR_MOSCXTST_Msk | CKGR_MOR_KEY_PASSWD;
При этом если разбить данную строчку на 2, т.е.:
PMC -> CKGR_MOR = CKGR_MOR_MOSCRCEN | CKGR_MOR_MOSCRCF_12_MHz| CKGR_MOR_KEY_PASSWD;
PMC -> CKGR_MOR = CKGR_MOR_MOSCXTEN | CKGR_MOR_MOSCXTST_Msk | CKGR_MOR_KEY_PASSWD;
то выскакивает ошибка о которой скажу ниже.
И так, кварцевый генератор запускается (смотрю осциллографом на резонаторе, есть генерация).
Далее жду некоторое время:
for(int i = 0; i < 10000; i++)
{}
Далее ставлю кварцевый генератор, как основной и переключаюсь с низкочастотного генератора на кварцевый:
PMC -> CKGR_MOR = CKGR_MOR_MOSCSEL | CKGR_MOR_KEY_PASSWD;
PMC -> PMC_MCKR = PMC_MCKR_CSS_MAIN_CLK;
Компилю... Всё норм... но после прошивки ничего не происходит, а при повторной попытке прошить выскакивает ошибка, как на картинке. Единственный способ перепрошить - притянуть ногу ERASE к 0 и затем передёрнуть питание. Есть подозрения на программатор Atmel-ICE. 3 дня уже убил, всё перепробовал.

Сообщение отредактировал Грендайзер - Feb 18 2015, 07:51
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Feb 18 2015, 08:09
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(Грендайзер @ Feb 18 2015, 10:49) *
Всем доброго времени суток. Пытаю отладочную плату SAM4S-EK2 на базе контроллера ATSAM4SD32C. Пытаюсь заставить микросхему тактироваться от внешнего кварца 12МГц.

#define SYS_BOARD_OSCOUNT (CKGR_MOR_MOSCXTST(0x8U))
#define SYS_CKGR_MOR_KEY_VALUE CKGR_MOR_KEY(0x37) /* Key to unlock MOR register */

/* Initialize main oscillator */
if (!(PMC->CKGR_MOR & CKGR_MOR_MOSCSEL)) {
PMC->CKGR_MOR = CKGR_MOR_KEY_PASSWD | SYS_BOARD_OSCOUNT |
CKGR_MOR_MOSCRCEN | CKGR_MOR_MOSCXTEN;
uint32_t timeout = 0xFFFF;
while (!(PMC->PMC_SR & PMC_SR_MOSCXTS) && --timeout) {
}
}

/* Switch to 3-20MHz Xtal oscillator */
PMC->CKGR_MOR = CKGR_MOR_KEY_PASSWD | SYS_BOARD_OSCOUNT |
CKGR_MOR_MOSCRCEN | CKGR_MOR_MOSCXTEN | CKGR_MOR_MOSCSEL;
uint32_t timeout = 0xFFFF;
while (!(PMC->PMC_SR & PMC_SR_MOSCSELS) && --timeout) {
}
PMC->PMC_MCKR = (PMC->PMC_MCKR & ~(uint32_t)PMC_MCKR_CSS_Msk) |
PMC_MCKR_CSS_MAIN_CLK;
uint32_t timeout = 0xFFFF;
while (!(PMC->PMC_SR & PMC_SR_MCKRDY) && --timeout) {
}

Цитата
Далее жду некоторое время:
for(int i = 0; i < 10000; i++)
{}

Так делать нежелательно. Нужно дожидаться выставления флагов в статусном регистре.
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Feb 18 2015, 09:11
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



DmitryM, большое спасибо, вроде заработало! cheers.gif 3 дня блин... blink.gif
Не могли бы Вы ещё несколько вопросо просветить:
1) По коду:
PMC->PMC_MCKR = (PMC->PMC_MCKR & ~(uint32_t)PMC_MCKR_CSS_Msk) |PMC_MCKR_CSS_MAIN_CLK;
можно прокомментировать эту строку?
2) Из-за чего происходила ошибка?
3) И последний, как отработать прерывания в данной микросхеме? Т.е. в AVR я помню когда писал на ассемблере, задавал вектор прерываний, тем самым указывая процессору, какую подпрограмму надо выполнять если произошло именно это прерывание, когда писал на C использовал ф-ции из ToolChein'а но помню с этими ф-циями были какие то проблемы. Вот и сейчас использовать ф-ции которые Atmel предлагает - опять гадать в чём проблема. Тем более недавно пытался такой пользоваться, так выскочела та же ошибка...
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Feb 18 2015, 11:07
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(Грендайзер @ Feb 18 2015, 12:11) *
Не могли бы Вы ещё несколько вопросо просветить:
1) По коду:
PMC->PMC_MCKR = (PMC->PMC_MCKR & ~(uint32_t)PMC_MCKR_CSS_Msk) |PMC_MCKR_CSS_MAIN_CLK;

Обратите внимание, что MCKR Read/Write. Т.е. очистка поля CSS и задание CSS_MAIn_CLOCK без изменения остальных полей.
Цитата
2) Из-за чего происходила ошибка?

Возможно, переключение на нестабилизированный генератор. Разбираться надо подробнее.
Цитата
3) И последний, как отработать прерывания в данной микросхеме? Т.е. в AVR я помню когда писал на ассемблере...

Примерно как в AVR.
Например, прерывание от USART0.

void USART0_Handler( void )
{
...
}

Дополнительная настройка:

NVIC_SetPriority(USART0_IRQn, 6);
NVIC_EnableIRQ(USART0_IRQn);
USART0->US_IER = US_IER_RXRDY;

Весь перечень доступных ХХХ_Handler для данного кристала описан в startup_sam4s.c
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Feb 18 2015, 12:56
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Большое спасибо за помощь. Теперь всё ясно! sm.gif
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Feb 28 2015, 19:26
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Здравствуйте, снова появился вопрос. Заметил данную проблемку достаточно давно, но не придавал значение, а вот теперь не пойму в чём дело..
Написал вот такую программку:
Код
PIOA -> PIO_PER = PIO_PER_P19;        // 1: Отключаю переферию
PIOA -> PIO_PER = PIO_PER_P20;        // 1: Отключаю переферию
PIOC -> PIO_PER = PIO_PER_P20;        // 1: Отключаю переферию

while(!((PIOA -> PIO_PSR & (PIO_PSR_P19 | PIO_PSR_P20)) && (PIOC -> PIO_PSR & PIO_PSR_P20)))
{}
                
PIOA -> PIO_OER = PIO_OER_P19;        // 1: PIOA19 -> Input
PIOA -> PIO_OER = PIO_OER_P20;        // 1: PIOA20 -> Input
PIOC -> PIO_OER = PIO_OER_P20;        // 1: PIOC20 -> Input
                
while(!((PIOA -> PIO_OSR & (PIO_OSR_P19 | PIO_OSR_P20)) && (PIOC -> PIO_OSR & PIO_OSR_P20)))
{}

PIOA -> PIO_SODR = PIO_CODR_P19 | PIO_CODR_P20;    // 1: PIOA19,20 -> '1'
PIOC -> PIO_СODR = PIO_SODR_P20;    // 1: PIOС20 -> '0'                                                
                
    while (1)
    {}
}


На ноги порта А (P19, P20) выдаётся 1, а порта С (P20) - 0. К данным ножкам подключены светодиоды. К порту А через резисторы, а ножка PC20 управляет затвором ключика, который и управляет диодом. Т.о. Если на ножках PIOA19,20 единицы - светодиоды не горят, а светодиод которым управляет ключик не горит, когда на затворе 0. Всё вроде бы нормально, диоды PIOA19,20 - погашены, а вот PIOC20 - раз в 15...20 сек. загорается. Проверил импульс на затворе осциллографоом, и впрямь, переодически ножка PIOC20 генерит импульс, при том, дочтаточной длительности, что бы его можно было заметить. В чём дело?

Сообщение отредактировал Грендайзер - Feb 28 2015, 19:26
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 28 2015, 22:56
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Может, watchdog срабатывает с такой периодичностью?
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Mar 1 2015, 10:10
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



aaarrr, только что отключил watchdog и... действительно маргание исчезло blink.gif Большое спасибо за подсказку. С этими армами беда какая то... никак не получается всё сразу понять sad.gif

Сообщение отредактировал Грендайзер - Mar 1 2015, 10:55
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Mar 18 2015, 18:18
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Снова здравствуйте, возник очередной вопрос, правда не совсем по ARMам, но вот не знаю куда лучше написать. Продолжая работать с ATsam4sd32c решил начать разбираться с АЦП и ЦАП (до этого с АЦП и ЦАП почти не работал, не было необходимости). Ну вот начал читать в даташите (Electrical Characteristics) характеристики АЦП. Нашёл табличку (на картинке). Никак не пойму... как я понял частота тактирования АЦП (fADC) может лежать в пределах от 1 до 22МГц. Так же я увидел такую строчку Sampling Frequency (fS), этот параметр лежит в интервале от 0,05МГц до 1МГц. Но что он значит? Sample - это насколько я помню выборка. Почему она измеряется в мегагерцах? Никак не могу понять, сигнал с какой максимальной частотой я могу оцифровать?

Сообщение отредактировал Грендайзер - Mar 18 2015, 18:21
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Mar 18 2015, 20:39
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



22MHZ - это тактовая частота. Как сказано в строчке 6, на преобразование требуется 20 импульсов тактовой частоты. Видимо, какое-то небольшое время еще нужно на выборку.


--------------------
ASB
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 19 2015, 06:46
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Частота измеряется в герцах, любая, даже семплирования. То есть когда пишут 20 мегосемплов, это имеют мегосемплов в секунду, то есть 20 МГц. Так что никаких противоречий я не вижу.

Также из таблички частота с которой надо тактировать АЦП может быть от 1 до 22 МГц, время одно преобразования 20 тактов,
22 МГц/20 = 1.1 МГц - вот максимальная частота выборок
то есть 1.1 Мегасемплов в секунду.
так же можете получить нижнюю границу.

А отцифровать вы можете сигнал до половины частоты дискретизации, с условием правильной фильтрации и желанием полного востановления формы сигнала по теореме котельникова, кажется...
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Mar 19 2015, 08:05
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Цитата
Видимо, какое-то небольшое время еще нужно на выборку.

Да, совершенно точно, в описании на АЦП сказано, что ему надо сколько то тактов на взятие отсчёта + 10 тактов.
Цитата
22 МГц/20 = 1.1 МГц - вот максимальная частота выборок

Всё, теперь понял. Я упустил из вида такой параметр, как скорость преобразования и думал что преобразование происходит по фронтам синхросигнала. Частота семплирования это - частота, с которой я реально могу оцифровать сигнал... соответственно частота оцифровываемого сигнала не должна превышать fs/2. Aleksandr Baranov, Golikov A., спасибо за раъяснения.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:55
Рейтинг@Mail.ru


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