Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не могу зажечь светодиод на ноге у LPC2368
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
ArtemDement
Цитата(shahr @ Jul 22 2009, 13:35) *
Опыта пока нет, но можно побетатестировать вот такую плату на LPC2368 в режиме онлайн:



Здесь!


Есть у меня такая платка, штука интересная, прошивать ее не надо, просто достаточно кинуть bin-файл на флешку(сама платка как-бы ею и является). Вот только как HEX-файл от Keil заставить в ней работать ?
Может есть конвертер какой ?
ArtemDement
Цитата(-= Александр =- @ Feb 26 2010, 17:05) *
Теперь такой вопрос: как научить Keil шить через H-Flasher?


Найден ли ответ на этот вопрос ?
ArtemDement
Проблема - не могу зажечь светодиод на ноге P1.23 контроллера - LPC2368.


Код
#include <LPC23xx.h>

#define dword unsigned long int


void set_pin(dword p)
{
IOSET1=p;
}


void clear_pin(dword p)
{
IOCLR1=p;
}


void init_pins(dword p)
{
IODIR1=p;
}


#define PIN 1<<23



unsigned int i,j,z;



void main(void) {



init_pins(PIN);

z=123;


while (1)
{

set_pin(PIN);

for (i=1;i<10000;i++) j=z*z;

clear_pin(PIN);

for (i=1;i<10000;i++) j=z*z;

}

}
stasyud
IOSET1, IODIR1, IOCLR1 - что-то я не нашел в даташите таких регистров, зато есть - IO1SET, IO1DIR, IO1CLR.
Или у Вас в хидере они так обозначены? wink.gif
Ну, и переименовывать типы данных надо через typedef, а не - define.
DRUID3
Цитата(stasyud @ May 3 2010, 15:12) *
IOSET1, IODIR1, IOCLR1 - что-то я не нашел в даташите таких регистров, зато есть - IO1SET, IO1DIR, IO1CLR.
Или у Вас в хидере они так обозначены? wink.gif
Ну, и переименовывать типы данных надо через typedef, а не - define.

Ерунда... Такие регистры есть(по крайней мере были)...
Да и через define можно ввести DWORD.
ArtemDement
Полагаю, если бы их не было, то Keil просто не позволил бы создать HEX-файл и вывел сообщения о ошибках ?
DRUID3
1<<1 //2-ая нога

1<<23 //24-ая...

Эта нога ожидается?
ArtemDement
Светодиод не зажигается при присоединении к любому из выводов этого порта.
DRUID3
...а 3.3V он открывается вообще? Резистор токоограничения какой?
ArtemDement
Резистор 1к
stasyud
Цитата
Ерунда... Такие регистры есть(по крайней мере были)...

В юзер мануале их нету, зато в кейловском хидере они есть)))

Проверил в железе - код работает, правда в функции задержки добавил по нолику, чтобы подольше были.
ArtemDement
Цитата(stasyud @ May 3 2010, 16:59) *
Проверил в железе - код работает, правда в функции задержки добавил по нолику, чтобы подольше были.


А что за железо ?

Я проверял на такой платке:
http://starterkit.ru/html/index.php?name=s...p=view&id=9


Спасибо доброму модератору, добавившему два моих сообщения из других тем в эту тему.
Наверное, это должно привести к ускорению ответа на них.
smile.gif
stasyud
Цитата
А что за железо ?

Плата самодельная, в вашем коде изменил только ногу порта для светодиода
Nixon
А вы случайно в SCS бит GPIOM в "1" не установили?
ArtemDement
Цитата(Nixon @ May 3 2010, 17:40) *
А вы случайно в SCS бит GPIOM в "1" не установили?


Да, был установлен на "1", но смена на "0" ситуацию не изменила - мигать светодиодом не получается.

Продолжаю тестировать SK-MLPC2368.

Вот код для отправки символов по UART.
Этот код нормально работал с LPC2104, прошиваю в SK-MLPC2368 - никакой реакции.

Код
#include <LPC23xx.h>

#define byte unsigned char


void init_serial (void) /* Initialize Serial Interface */
{
PINSEL0 = 0x00000005; /* Enable RxD0 and TxD0 */
U0LCR = 0x00000083; /* 8 bits, no Parity, 1 Stop bit */
U0DLL = 110; /* 9600 Baud Rate 15MHz VPB Clock */
U0LCR = 0x00000003; /* DLAB = 0 */
}


byte send_byte (byte ch) /* Write character to Serial Port */
{
while (!(U0LSR & 0x20));
return (U0THR = ch);
}


byte b;

void main(void) {

init_serial();


while (1)
{
send_byte(b);
b++;
}


}
Nixon
А вы уверены что вы правильно линкуете программу? Судя по наличию вторичного бутлоадера программу нужно линковать не с 0.
zltigo
Цитата(ArtemDement @ May 3 2010, 20:40) *
Продолжаю тестировать SK-MLPC2368.

Инетесно,следующее сообщение будет не работает USB, или Ethernet?
Цитата
Этот код нормально работал с LPC2104, прошиваю в SK-MLPC2368 - никакой реакции.

PINSEL0 = 0x00000005; /* Enable RxD0 and TxD0 */
U0DLL = 110; /* 9600 Baud Rate 15MHz VPB Clock */

А Вам не показалось, что LP2104 это не LPC2368 и что copy-paste нельзя?



Цитата(Nixon @ May 3 2010, 20:42) *
Судя по наличию вторичного бутлоадера программу нужно линковать не с 0.

Почему решили, что есть "вторичный"?
Nixon
2 Zltigo А каким он образом эмулирует флешку?
zltigo
Цитата(Nixon @ May 3 2010, 21:56) *
А каким он образом эмулирует флешку?

Это уже о другой плате:
Цитата
прошиваю в SK-MLPC2368 - никакой реакции.
Nixon
А, понятно. Я про первую думал.
stasyud
ArtemDement, вот у NXP есть примеры на всю периферию 2368 под микровижн.
http://ics.nxp.com/support/documents/micro...4xx.uvision.zip
ArtemDement
Если уж у меня тут репутация "чайника", то ничто не мешает мне задать очередной глупый вопрос - почему при прошивке выдается такое сообщение ?
smile.gif
DpInRock
Оно означает, что вы не должны использовать эти области памяти для размещения того, что загружаете.
Вы можете использовать эту область в своей программе под данные, например.
В любом случае, после работы загрузчика эта область памяти будет в неопределенном состоянии.
ArtemDement
Цитата(stasyud @ May 4 2010, 14:26) *
ArtemDement, вот у NXP есть примеры на всю периферию 2368 под микровижн.
http://ics.nxp.com/support/documents/micro...4xx.uvision.zip



Еще вопросик - при загрузке файла fio_release.hex, который лежит в code.bundle.lpc23xx.lpc24xx.uvision\LPC23xx_24xxSampleSoftware.r3\Keil\GPIO\Obj светодиоды моргают, при загрузке hex-файла, созданного на основе исходников(без внесения в них изменений) - нет.
Почему ?
DpInRock
Видимо, следует правильно настроить компилятор и линкер.
Исходный текст на Си как таковой не содержит какой-либо информации о месте его расположения и прочем (режимы работы процессора, наличие, размер, местоположение стеков, местоположение самой программы (Внешняя рам, внутренняя, флэш...).
ArtemDement
Попробовал поэкспериментировать с настройками линкера - прошивка не исполняет своих функций.
sad.gif
Какие именно настройки влияют на работоспособность прошивки ?
DpInRock
А не надо экспериментировать. (Ибо программа может не работать по великой массе причин).
Вот, к примеру, вы куда загружаете программу? А тогда где об этом сказано у линкера?
А не нужно ли делать какой-нибудь ремап в этом случае?
А где стеки? И где об этом у линкера?
А, собственно, кто эти стеки устанавливает?

Ответьте на эти вопросы.

Кроме того - "прошивка не исполняет" - это что значит?
ArtemDement
Вот такие настройки по умолчанию.

"Прошивка не исполняется" - на выходе нет ни 0В, ни 3,3 В, а некое промежуточное состояние - 2,2В.
КСПшник
Цитата(ArtemDement @ May 10 2010, 12:29) *
Вот такие настройки по умолчанию.

"Прошивка не исполняется" - на выходе нет ни 0В, ни 3,3 В, а некое промежуточное состояние - 2,2В.


Осмелюсь предположить, что Вы меняете состояние порта с периодом, меньшим времени интегрирования показаний мультиметра (как я понял Вы именно его используете для измерения напряжения).
Если частоту смены состояния порта поставить меньше (скажем 0.3 - 0.1 Гц), то на "тестере" все будет видно.
ArtemDement
Цитата(КСПшник @ May 10 2010, 12:35) *
Осмелюсь предположить, что Вы меняете состояние порта с периодом, меньшим времени интегрирования показаний мультиметра (как я понял Вы именно его используете для измерения напряжения).
Если частоту смены состояния порта поставить меньше (скажем 0.3 - 0.1 Гц), то на "тестере" все будет видно.


Дело в том, что речь идет про исходник от NXP без всяких изменений и при загрузке файла fio_release.hex мигание отслеживается без проблем этим же мультиметром.
Проблема именно в том, что я как-то неправильно делаю HEX-файл.
stasyud
У меня иногда тоже не получалось получить рабочую прошивку - дело было в настройках оптимизации на вкладке "с/с++". Так и не понял как оно там оптимизирует - не работало при уровне оптимизации 0 и 3, а при 2 работало. Попробуйте откомпилить и проверить прошивки с разными уровнями оптимизации.
DpInRock
Если есть внешняя подтяжка пинов, то 2.2 вольта - это быстрое моргание.
Если нет, то может быть и чем угодно.

По поводу кейла. У вас стоит старт программы с 40000000. У 2368, насколько я помню, флэшка начинается с 0.
C 4000000 начинается RAM. Тогда, видимо, вопрос 1) к тому ЧЕМ вы загружаете и стартуете программу?

Для упрощения жизни ея лучше откомпилировать с адреса 0, после чего зашить во флэш. После чего она будет стартовать самостоятельно. Токо не забыть еще нужные галочки в кейле поставить, чтобы контрольную суммы по вектору 14 поставил нужную (если не ставит автоматически - я просто не знаю).
skripach
Коль вы выпускник"ЛЭТИ" я бы вам посоветовал изучить след. документик:
Цитата
Министерство образования и науки Российской Федерации
Санкт-Петербургский государственный
электротехнический университет «ЛЭТИ» им. В.И. Ульянова (Ленина)


Методические указания
для выполнения лабораторных работ
по дисциплине “Микропроцессорные системы”

Скачать можно сдесь, сори к посту не хочет цепляться.
В своё время мне помогло, хотя ЛЭТИ увы не заканчивал.
ViKo
Поделюсь своим решением подобной проблемы.
Тоже на порте, к которому был подключен светодиод, висело около 2 V. Ничего там быстро не переключалось. Просто из-за утечек несконфигурированного порта через светодиод (анод подключен к питанию) и резистор протекал маленький ток, создавая то самое падение на светодиоде (около 1 V), и совсем чуть-чуть - на резисторе.
Оказалось, что важно сначала подать такты на порт, а потом конфигурацию задавать. Я делал наоборот, казалось, так логичнее. Вот порт и не работал. Когда перенес тактирование вперед, светодиод засветился.
Работаю с STM32F103, но, думаю, с другими микроконтроллерами от ARM должно быть так же.
Хотя у автора, думаю, проблема в ином...
ArtemDement
Цитата(skripach @ May 11 2010, 11:54) *
Скачать можно сдесь, сори к посту не хочет цепляться.
В своё время мне помогло, хотя ЛЭТИ увы не заканчивал.


Вы вот иронизируете про ЛЭТИ, а у меня на кафедре, между прочим, большинство преподавателей вообще про ARM никогда не слышали, кто МК занимается, считает последним достижением 8051 или AVR.

Проблема разрешилась. Нужно было просто настроить Keil так как показано на скриншотах.
skripach
Цитата
у меня на кафедре, между прочим, большинство преподавателей вообще про ARM никогда не слышали

Ну если кафедра физкультуры или экономики какой-нибудь то поверю. Методы по моей ссылке кто-то ведь написал, а там именно ARM LPC... .
ArtemDement
Цитата(skripach @ May 23 2010, 00:22) *
Ну если кафедра физкультуры или экономики какой-нибудь то поверю. Методы по моей ссылке кто-то ведь написал, а там именно ARM LPC... .


Кафедра электроакустики и ультразвуковой техники.
По Вашим суждениям сразу видно, что Вы далеки от реалий того, что происходит в ЛЭТИ.
Да, там есть лаборатории с оборудованием NXP, Infineon, Siemens, Motorola, но далеко не все студенты учились хотя бы в одной из них.
Программа обучения на всех факультетах разная, зачастую сильно устаревшая.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.