|
Простые вопросы по кортексам |
|
|
|
Dec 19 2013, 09:57
|
Частый гость
 
Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591

|
Здравствуйте. Насколько я понимаю, вопросы по кортексам тоже сюда писать? Так как к кортексам только подступаю, а отладочную плату привезти обещают в обозримом будущем, то изучаю их по даташитам и кейлу (до 32 кБ он условно-бесплатный). Имеются совсем дилетантскае вопросы. Смотрю на примере LPC1102 и LPC1311. 1. Почему в кейле нет симуляции периферии кортексов? Или это я плохо смотрел? Можно ли как её подключить? Есть ли там понятие Fast GPIO? 2. Каковы наклюдные расходы (примерно в тактах) входа в обработчик внешних прерываний? Есть ли смысл программу писать а ассемблере? 3. Насколько я понял, блоки MAM отсутствует и FIQ отсутствуют? Или у кортексов с выборкой команд всё хорошо? Программа может выполняться только из флеша? 5. Можно ли настроить выход из спящего режима по SPI? По завершению приёма байта или по приёму первого бита? Или просыпание лучше завести от внешнего прерывания? 6. Сколько примерно тактов (если не сложно ответить) будет занимать каждая команда в таком вот простом коде: Код int i = 0; int datas[1000];
for (i = 0; i < 1000; ++i){ datas[i] = IOPIN; }
|
|
|
|
|
Dec 19 2013, 10:08
|
Знающий
   
Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414

|
Цитата(vladimir_orl @ Dec 19 2013, 13:57)  1. Почему в кейле нет симуляции периферии кортексов? Или это я плохо смотрел? Можно ли как её подключить? Есть ли там понятие Fast GPIO? Ответом на этот и большую часть других вопросов является то, что Cortex, а точней, Cortex-M -- это семейство процессорных ядер, а не конкретный микроконтроллер. Наличие той или иной периферии, ускорителя памяти, возможность использования периферии для пробуждения процессора -- всё это зависит от конкретной модели микроконтроллера, а не от того, какое именно у него ядро. Дело ядра -- лишь выполнять программы. Скорость выполнения кода сама по себе -- одна машинная команда за такт, но достигается она за счёт работы конвейера. Поэтому переходы и прерывания уменьшают скорость (возникают "лишние" такты из-за необходимости выборки и декодирования команд при пустом конвейере). Скорость выборки кода из флэш-памяти зависит опять-таки от модели микроконтроллера, напряжения питания и тактовой частоты.
|
|
|
|
|
Dec 19 2013, 10:13
|
Частый гость
 
Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591

|
Цитата Cortex-M -- это семейство процессорных ядер Я, скорее всего буду применять либо продукцию LPC либо ST. Цитата Найдите книжки Josef Yiu по Cortex Спасибо. Скачал.
|
|
|
|
|
Dec 19 2013, 13:08
|
Частый гость
 
Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591

|
Цитата плохо смотрели. Все там есть У меня keil4. Контроллер - LPC1102. Создал проект, откомпилил. Запустил дебаггер. Смотрю перифералс. А там только Cjre Peripherals. Или так и должно быть? Хотелось бы и порты ввода-вывода и таймеры и etc.
|
|
|
|
|
Dec 20 2013, 17:26
|

Профессионал
    
Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877

|
Цитата(vladimir_orl @ Dec 19 2013, 17:08)  У меня keil4. Контроллер - LPC1102. Создал проект, откомпилил. Запустил дебаггер. Смотрю перифералс. А там только Cjre Peripherals. Или так и должно быть? Хотелось бы и порты ввода-вывода и таймеры и etc. Большую часть периферии в кейле перенесли в новый механизм: View -> System Viewer, потыкайте по меню (этот пункт появляется только в активной дебаг-сессии). PS сильно заморачиваться подсчётом тактов на кортексах не стоит. Куча шин, хитро связанных друг с другом, каждая со своей частотой и таймаутами, ведомыми только разработчику чипа. Меряйте окончательную производительность, это интересней. Особенно заметна эта проблема на low-end чипах, когда производитель сосредотачивается на энерго- и деньго-сберегающих технологиях, а не на скорости. Я как-то экспериментировал с SSP (продвинутый SPI) на LPC1111. Тупой код Код while (len--) { while (STATUS_REG == BUSY); DATA_REG = *data++; } Работал на порядок, наверное, медленнее, чем должно было быть по результатам подсчёта тактов. Переделал в критичных местах на использование аппаратного FIFO, убрав часть запросов к регистру статуса - стало заметно быстрее.
--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
|
|
|
|
|
Dec 20 2013, 19:00
|

Гуру
     
Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514

|
Цитата(esaulenka @ Dec 20 2013, 21:26)  PS сильно заморачиваться подсчётом тактов на кортексах не стоит. + хотя все такты и расписаны (конвеер отключим  ), никто не будет, на мой взгляд, заниматься настолько глубоко симуляцией. Расчет времени возможно. Кейл даже может что-т показать в плане времени. Да вот все никак не было возможности проверить, потому как отдельный камень со всей своей периферией - это сферический конь. Как там с ним и кто будет общаться - вот тут уже и все симуляторы сломались Что касаемо времени критических обработок - грамотное распределение приоритетов прерываний, короткие обработчики и сохранение критических данных (по скорости) где-то в TCM Цитата(esaulenka @ Dec 20 2013, 21:26)  Куча шин, хитро связанных друг с другом, каждая со своей частотой и таймаутами, ведомыми только разработчику чипа. Почему чипа? AHB и APB разве не стандартизированы ARM? Цитата(esaulenka @ Dec 20 2013, 21:26)  стало заметно быстрее. у меня тоже софтварный UART на 8051 больше 9600 не мог, ему там еще кучу дел нужно было делать
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|