|
LPC2104 c нуля., Че то я торможу для начала. |
|
|
|
Mar 30 2006, 15:41
|

Местный
  
Группа: Свой
Сообщений: 323
Регистрация: 13-05-05
Пользователь №: 4 986

|
Наконец-то я раздобыл, сей чип, и хочу его запустить. Пока в ящике были AT90 и скоростуха не поджимала, все было ОК. Но час Х настал... Ткнулся я было по-старинке и понял, что здорово отстал от жизни. Посему накиньте, кому не влом, мелкий план моих действий. Все что тут было я по-видимому читал, и все что было уже скачал, но толку мало. Вообщем главный вопрос ЧТО ДЕЛАТЬ?  1) как практически его запрограммировать (аппаратно), а то там всякие BOOT LOADER-ы и т.д, Как с ними работать? И можно ли обойтись без них - просто тупо записать прогу в ФЛЭШ контроллера как когда-то АТ90?! И как лечилку к Кейлу применить - если она хочет DLL которая есть, но которую она не видит!!! И может Кейл - ну его? 2) Wiegler дружит с Кейлом (2.4) ? Вообщем буду признателен за конкретный краткий план моих действий. Для AVR это могло бы выглядеть так 1) сделать плату с АВР-ом из примера СоdeVision****, 2) сделать програматор СТК200, 3) поставить компилятор COdeVision 3) скомпилировать пример 4) прошить АВР 5) убедится в работоспособности и т.д Буду всем очень признателен, а то время не ждет!
--------------------
О сколько нам открытий чудных ...
|
|
|
|
|
 |
Ответов
(1 - 14)
|
Mar 31 2006, 07:36
|
Тутэйшы
   
Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263

|
По большому счету я наверное не имею морального права советовать, так как еще не одного реального девайса на LPC не создал, но все-таки выскажусь. В данный момент я нахожусь в стадии написания фирмвари. Железо будет тольуо к концу апреля. Пока доверяю софтовому отладчику кейла - и алгоритм и работу с железом отлаживаю в нем. Возможности Кейла в этом плане безграничны. Пишу в связке с писишным программером. Кинул кабель со своего компа к его, натравил дебагер на ком порт и спокойно гоняем данные. Программер свою работу делает, я свою. Впрочем я отвлекся от сути. План действий таков: - Прочти фак вверху форума - Скачай юзер мануал, описание ядра арм, еррату, даташит, книгу lpc-ARM-book_srn.pdf. Последнюю особенно рекомендую. Мануал есть даже на русском, правда на другой камень, но похожи. Был на сахаре. Если не найдешь - оставь почту - вышлю. В процессе читай. - Скачай компилятор. Сейчас самый лучьший - Кейл + Реал Вью (MDK300 с www.keil.com). - Пробуй писать простые прожки, знакомься с примерами. Можно в дебагере убедиться в работе. - Обзаведись железом и с помощью филипсовского флешера и преобразователя 232 интерфейса заливай фирмварю через бутлодер и пробуй в железе. - Тусуйся на форумах. - Если серьезно настроен прикупи МТ-LINK.
|
|
|
|
|
Mar 31 2006, 09:15
|
Тутэйшы
   
Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263

|
В каждом LPC на заводе прошит бутлодер, чтоб пользователь не напрягался с программатором, а мог подключить TXD, RXD UART0 камня к ком порту компа, запустить программу philips_flash_utility, которая доступна с сайта филипса, указать в ней путь к прошивке, и нажать пуск. Если соответствующим образом к RTS DTR подключены ресет LPC и 0.14 разряд порта, то прога сама все сделает. Если RTS/DTR не заведены, сам садишь 0.14 на землю, жмешь кнопку ресет и после старта проц начинает ожидать команды от проги-флешера. После старта управление передается бутлодеру. Он смотрит если нога 0.14 не седит на земле, значит передает управление основной программе. Короче если все собрано правильно, то LPC сможет прошить и неандарталец. Схема для RTS/DTR если в апликухе или на прошлой странице в посте где обсуждали мою схемку.
|
|
|
|
|
Apr 1 2006, 13:40
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
Привет!
Примерно аналогично. Использую mVision3 V3.21 C Compiler CA.Exe V2.40a Assembler AA.Exe V2.40a
1) Вылезла проблема с выравниванием. Вот такой код volatile struct Msg { long a; long b; long c; long d; unsigned char Buf[40]; } MsgOut;
*((short int *)&MsgOut.Buf[4+16]) = 0x7ff7; *((int *) &MsgOut.Buf[4+18]) = 0x87654321; упорно записывает 0x87654321 по смещению 20. parma pack() не помогает
2) не могу сообразить, как разрешать-запрешать прерывания. т.е. описалово VICIntEnable и VICIntClr читаю. Нашел что в доках голины пишут как VICIntClr, так и VICIntClear Но не доходит, во что это выливается. Вопрос связан с тем, что вылезла неатомарность записи, т.е. если в функции записываю переменную, а в прерывании ей пользуюсь...теряются от 1 до 3 байт, аналогично опасаюсь, что может вылезли если писать в прерывании, а пользоваться в функции. Как с этим бороться - нифига не могу сообразить, ни в доках, ни в книжке "Insider's guide"
спасите-помогите ;-)
|
|
|
|
|
Apr 2 2006, 11:44
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
Цитата(evgen2 @ Apr 1 2006, 16:40)  1) Вылезла проблема с выравниванием. сделанное из Hello World unsigned char Buf[40]; int main (void) { ........ *((short int *)&Buf[0]) = 0x77ff; *((int *)&Buf[2]) = 0x12345678; printf("%x %x %x %x \n", Buf[0],Buf[1],Buf[2],Buf[3]); } выводит 78 56 34 12 и шоб было праильно - надо извращаться *(( _packed int *)&Buf[2]) = А на первой странице и в ридмях этого написать эти пейсатели не могут - повбывал бы и на кол пересажал
|
|
|
|
|
Apr 2 2006, 12:00
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(evgen2 @ Apr 1 2006, 17:40)  1) Вылезла проблема с выравниванием. Наверное, в описанном Вами случае стоит использовать union, а еще лучше - сделать все руками, с выравниванием шутить не стоит. Цитата(evgen2 @ Apr 1 2006, 17:40)  2) не могу сообразить, как разрешать-запрешать прерывания. Для глобального запрещения прерываний служат биты I и F статусного регистра, записываются командой msr
|
|
|
|
|
Apr 2 2006, 13:41
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
[quote name='aaarrr' date='Apr 2 2006, 15:00' post='100343'] [quote name='evgen2' post='100120' date='Apr 1 2006, 17:40'] 1) Вылезла проблема с выравниванием. [/quote] Наверное, в описанном Вами случае стоит использовать union, а еще лучше - сделать все руками, с выравниванием шутить не стоит. [/quote] ну лучше сразу на все грабли встать, чем потом по очереди. Я так понимаю что если это фича проца, то хоть union, хоть не union - если попадется невыравненный адрес, то хрень произойдет [quote name='evgen2' post='100120' date='Apr 1 2006, 17:40'] 2) не могу сообразить, как разрешать-запрешать прерывания. [/quote] Для глобального запрещения прерываний служат биты I и F статусного регистра, записываются командой msr [/quote] [/quote] Modem Control Register ? А может таки VICIntEnable/VICIntClr ? Ну так я их использую и все равно с CARM-овским компилером получается фигня - так будто бы это VICIntClr не моментально действует. А вот с RealView - вроде бы как все правильно, но таки остаются сомнения - может быть надо таки делать какие ритуальные танцы для гарантирования атомарности действий ?
|
|
|
|
|
Apr 3 2006, 00:12
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(evgen2 @ Apr 2 2006, 17:41)  Я так понимаю что если это фича проца, то хоть union, хоть не union - если попадется невыравненный адрес, то хрень произойдет Только в случае с union это будет головная боль компилятора, а не Ваша. *((_packed int *)&Buf[2] делает тоже самое, только через Ж. Цитата(evgen2 @ Apr 2 2006, 17:41)  Modem Control Register ?  Во-первых MSR, а не MCR; во-вторых, это команда, а не регистр. Регистр называется PSR, и относится к ядру процессора - смотрите мануал на ядро.
|
|
|
|
|
Apr 3 2006, 07:54
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
Цитата(aaarrr @ Apr 3 2006, 03:12)  Во-первых MSR, а не MCR; во-вторых, это команда, а не регистр. Регистр называется PSR, и относится к ядру процессора - смотрите мануал на ядро. эээ... смотрел в книгу, видел фигу называется. Окей. MSR. а VICIntEnable/VICIntClr тогда каким боком соотносится с MSR ? Во! Еще оказывается в RealView компилере еще есть _enable_irq/_disable_irq и _enable_fiiq/_disable_fiq, которые я безуспешно пытался обнаружить в CARMе и аналоги которых есть в более других местах. Теперь осталось прояснить ситуацию с задержкой запрещения прерываний и тем, сколько тактов съедает прерывание в сях. Вот если я делаю _disable_irq() - можно ли считать что "на следующей строчке" у меня прерывания действительно запрещены ?
|
|
|
|
|
Apr 3 2006, 10:09
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(evgen2 @ Apr 3 2006, 11:54)  а VICIntEnable/VICIntClr тогда каким боком соотносится с MSR ? Во! Еще оказывается в RealView компилере еще есть _enable_irq/_disable_irq и _enable_fiiq/_disable_fiq, которые я безуспешно пытался обнаружить в CARMе и аналоги которых есть в более других местах. VIC никаким боком не соотносится с ядром - это внешнее периферийное устройство. Функции _enable_irq/_disable_irq как раз устанавливают и снимают бит I в PSR. Цитата(evgen2 @ Apr 3 2006, 11:54)  Теперь осталось прояснить ситуацию с задержкой запрещения прерываний и тем, сколько тактов съедает прерывание в сях. Вот если я делаю _disable_irq() - можно ли считать что "на следующей строчке" у меня прерывания действительно запрещены ? Да, можно.
|
|
|
|
|
Apr 6 2006, 15:19
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688

|
А как бы так отпрофилировать выполнение , а то, например для int A, B,C; .... A = B/C; показываются несколько не те времена, т.е. все что улетает в функции записывается в профилировщике в другом месте. Для своих функций это удобно, а вот для intrinsic все время сбивает с толку.
И еще вопрос: вот мне надо найти int X, T;
V = (X[1]-X[0]) / (T[1]-T[0])
Где X - положение, Т - время с таймера 0. Долго выеживался чтоб остаться в int - типа ( (X[1]-X[0])<<16) / (T[1]-T[0]) и не уехать в ноль где abs(X[1]-X[0]) < 16000, (T[1]-T[0]) - от 0 до эээээ.. секунды потом плюнул и сделал float V = (float)(X[1]-X[0]) /(float) (T[1]-T[0]) и как-то оно с RealView вроде бы не очень тормозно получается поругайте-похвалите
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|