|
Проба ARM, начал с LPC2134 c IAR |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 22)
|
Feb 20 2007, 13:17
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(arttab @ Feb 20 2007, 11:58)  Начал создавать новый проект (иар4.40А) и не понял как в примерах стартап получался. По-хорошему он автоматически подлинковывается из библиотеки. И только если он вас чем-то не устраивает (что случается очень редко) надо подключать свой. Вот тут про создание проекта для SAM7, для LPC точно так же.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 21 2007, 07:15
|

Профессионал
    
Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371

|
Цитата не с того начали.. перходите на Keil - чтобы потом не было мучительно больно за бесцельно прожитую жизнь Зачем плодить сущие без надобности? Я в иаре под AVR работаю. А кейл менее конфигурируемый (помниться до 4 сегментов пользователя). IDE дело вкуса и привычки Цитата Вот тут про создание проекта для SAM7, для LPC точно так же. По хелпу создание проекта прошел, но не дошло как иару указать начальную конфигурацию кристала.
--------------------
OrCAD, Altium,IAR, AVR....
|
|
|
|
|
Feb 21 2007, 07:18
|
Гуру
     
Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493

|
Цитата(arttab @ Feb 21 2007, 07:15)  Цитата не с того начали.. перходите на Keil - чтобы потом не было мучительно больно за бесцельно прожитую жизнь Зачем плодить сущие без надобности? Я в иаре под AVR работаю. А кейл менее конфигурируемый (помниться до 4 сегментов пользователя). IDE дело вкуса и привычки Цитата Вот тут про создание проекта для SAM7, для LPC точно так же. По хелпу создание проекта прошел, но не дошло как иару указать начальную конфигурацию кристала. Какие 4-ре сегмента ??? Я про компилятор RVDS и скаттер файлы - куда уж гибче. Впрочем дело ваше - когда отладка будет отваливаться на каждом шагу в большом проекте - вспомните
|
|
|
|
|
Feb 21 2007, 09:55
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(arttab @ Feb 21 2007, 07:28)  из примера на SAM7X256 получается, что конфигурация задается в начале main. Можно там, можно в __low_level_init(). А AVR вы как конфигурите? Делайте и тут также. Цитата(arttab @ Feb 21 2007, 07:28)  Т.е. подключаю файл описания .h (вот только какой для lpc2134?) А поищите в IAR\EWARM\ARM\INC
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 21 2007, 13:38
|

Профессионал
    
Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371

|
Цитата А поищите в IAR\EWARM\ARM\INC нашел iolpc2134.h. это аналог под avr ioM8.inc - дефаин регистров и прочего. подключил. Цитата Можно там, можно в __low_level_init(). А AVR вы как конфигурите? Делайте и тут также. под avr делаю в начале mian, но в avr нет таких тонкостей (включить MAM или нет, определить стеки для разных режимов,....) нашел файл cstartup.s79. Получается в нем на асме надо написать инициализацию железа. Достаточно ли этот файл просто добавить в прект или надо в xcl поправить размещение? И как? Цитата __low_level_init() по встроеному шелпу ее можно использовать для задания начальной конфигурации. так: __low_level_init() {MAMCR=0; MAMTIM=0x03;} ? Спасибо за помощь! уже не в первый раз выручаете. если можно дайте простой пример: trumb, UART (на какуе-нибудь скорость), и вектор на USART. буду дальше разбираться
--------------------
OrCAD, Altium,IAR, AVR....
|
|
|
|
|
Feb 21 2007, 14:21
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(arttab @ Feb 21 2007, 12:38)  нашел файл cstartup.s79. Получается в нем на асме надо написать инициализацию железа. Достаточно ли этот файл просто добавить в прект или надо в xcl поправить размещение? И как? Не,этот файл вам не нужен. Точнее он подлинкуется из библиотеки и сам настроит стеки. Вам остается только периферию настроить. Как и в AVR  МАМ является периферией, как и контроллер прерываний. Цитата(arttab @ Feb 21 2007, 12:38)  Цитата __low_level_init() по встроеному шелпу ее можно использовать для задания начальной конфигурации. так: __low_level_init() {MAMCR=0; MAMTIM=0x03;} ? Угу, только return 1; Иначе память не проинициализует. Цитата(arttab @ Feb 21 2007, 12:38)  если можно дайте простой пример: trumb, UART (на какуе-нибудь скорость), и вектор на USART. буду дальше разбираться Вот, надергал из проекта. Компилится, но проверить сейчас не на чем. Правда С++, но думаю идея будет понятна.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 22 2007, 12:17
|

Профессионал
    
Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371

|
Цитата Да, сколько указано в .xcl, столько и пропишет. Блин, опять не понял. Для каждого проекта размер стеков индивидуален. А тут получается прошишит значения для "среднего" проекта. И если мне будет мало или много "средних" размеров стеков, то нужно лезь в .xcl?
--------------------
OrCAD, Altium,IAR, AVR....
|
|
|
|
|
Feb 22 2007, 12:27
|
Частый гость
 
Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687

|
Цитата(arttab @ Feb 22 2007, 12:17)  Цитата Да, сколько указано в .xcl, столько и пропишет. Блин, опять не понял. Для каждого проекта размер стеков индивидуален. А тут получается прошишит значения для "среднего" проекта. И если мне будет мало или много "средних" размеров стеков, то нужно лезь в .xcl? Файл .xcl принято для КАЖДОГО проекта писать отдельно. И класть его, например, в settings проекта. Если присмотреться к файлу более внимательно, станет видно, что там вообще нет общих настроек для гипотетического проекта. Только конкретные указания линкеру, которые индивидуальны для каждого проекта.
|
|
|
|
|
Feb 25 2007, 16:02
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(arttab @ Feb 25 2007, 14:01)  Теперь вопросы по векторам прерываний. Как задать основные (их штук 6 кажеться) и "расширенные" (где по флагам идет разбор что конкретно случилось)? Почитайте эту ветку. При чтении заменяйте AT91C_BASE_AIC->AT91C_AIC_IVR и AT91C_BASE_AIC->AIC_EOICR на VICVectAddr и получите то же самое для LPC. Цитата(arttab @ Feb 25 2007, 14:01)  И по документации фигня на lpc - скачал pdf, а в нем регистры не расписаны и порядок зпдания ни на PLL, ни на прочее. Это похоже вы даташит скачали, а регистры и устройство периферии расписано в User Manual. Цитата(arttab @ Feb 25 2007, 14:01)  Сергей Борщ как то Вы хитро PLL иницилизировали. Будем искать. Казалось, что прямо по мануалу. Записал коэффициенты, запустил, дождался захвата, переключил тактирование на PLL. Цитата(arttab @ Feb 25 2007, 14:01)  Разобраться в Вашем проекте сложно - 5 файлов Вы сами делали для scmRTOS (не считая 2 главных в проекте). Поищу инфу как это по шагам делать. Не понял что вы тут хотели сказать. Да, порт scmRTOS делал я. Да, в этот пример я взял файлы .xcl, .mac и файлы проекта оттуда. С тем же успехом мог бы создать их заново, но смысл? Что касается файлов - мне удобнее много мелких логически законченных файлов чем один большой. В проекте: LPC_bits.h - опиcание битов регистров периферии. Описание их в ioLPC2xxx.h через битовые поля часто неудобно. LPC_UART.h - описание регистров UART в виде структуры. Позволяет по указателю одинаково обращаться к любому uart: к UART0 и к UART1. Тоже отстутствует в ioLPC2xxx.h. Подобное есть в ioAT91xxx.h circ_buff.h - шаблон кольцевого буфера. Поскольку может использоваться не только с UART - вынесен в отдельный файл. UART.h - собственно класс UART. main.cpp - инициализация процессора, пример использования UART. Vectors.s79 - ветвление по адресу из контроллера прерываний. Реализация таким образом мне кажется наиболее оптимальной по скорости. Почему - описывал в приведенной выше ветке.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 26 2007, 08:43
|

Профессионал
    
Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371

|
Спасибо! Т.е. на асме можно так объявить прерывания (файл тапв .s79): EXTERN CODE32 (Undef_Handler?A) EXTERN CODE32 (SWI_Handler?A) EXTERN CODE32 (Pabt_Handler?A) EXTERN CODE32 (Dabt_Handler?A) EXTERN CODE32 (IRQ_Handler?A) EXTERN CODE32 (FIQ_Handler?A)
Vectors: LDR PC, Reset_Addr LDR PC, Andef_Addr LDR PC, SWI_Addr LDR PC, Pabt_Addr LDR PC, Dabt_Addr NOP LDR PC, IRQ_Addr LDR PC, FIQ_Addr
Reset_Addr: DD Reset_Handler и т.д. правильно?
--------------------
OrCAD, Altium,IAR, AVR....
|
|
|
|
|
Feb 26 2007, 14:10
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(arttab @ Feb 26 2007, 12:25)  Немного распутался. Имена векторов объявлены в iolpc2134.ddf Значит имена возьму оттуда. Хотя не понял как связаны VICIRQStatus с AIC_IVR. Никак. Аналог AIC_IVR (AIC Interrupt Vector Register) у AT91SAM7 это VICVectAddr (VIC vector address) у LPC2xxx. Отступление: любое прервание можно назначить генернить IRQ или FIQ запрос. В VICIRQStatus биты указывают какие из разрешенных и назначенных как IRQ прерываний сработали (флаги). При срабатывании прерывания IRQ контроллер (VIC) помещает адрес его обработчика в VICVectAddr. Откуда он читается и по нему осуществляется переход: LDR PC, VICVectAddr. Вы документацию вообще не читаете? Цитата(arttab @ Feb 26 2007, 12:25)  И что будет ля FIQ, SWI.... для FIQ и SWI будут функции с квалификаторами __fiq и __swi. FIQ ветвлений не предусматривает, поэтому и обработчик только один: Код #pragma vector = 0x1C __fiq void FIQ_Handler() { ..... } Про swi прочитайте в описании компилятора - там может быть много обработчиков и им можно передавать параметры. Переходы по векторам DataAbort, PrefetchAbort и Undef могут быть описаны только на асме (об этом писалось в ветке, ссылку на которую я приводил). Переход по ResetVector осуществляется в библиотечной cstartup, вам про нее думать не нужно.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 26 2007, 19:52
|

Профессионал
    
Группа: Свой
Сообщений: 1 432
Регистрация: 7-12-04
Из: Новосибирск
Пользователь №: 1 371

|
Цитата Вы документацию вообще не читаете? Извените, отвлекают. Иногда основательно и забыл, то что уже разбирал. Перечитываю первоисточники , в частности Мартина. настройка PLL у Вас действительно как в рекомендации. Только я не понял почему при M=5 и P=2 в книге получилось 0x00000024 (стр.74) По аналогии для AVR искал в каком файле обозначены имена векторов, регистров. Надеюсь уже не ошибусь ioLPC2134.h. в секции ** VIC Interrupt channels вектора и перечислены, а в секции ** VIC привязка к адресам. Продолжу перечитывать и далее углубляться.
--------------------
OrCAD, Altium,IAR, AVR....
|
|
|
|
|
Mar 1 2007, 19:58
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Сергей Борщ @ Feb 21 2007, 13:21)  Вот, надергал из проекта. Компилится, но проверить сейчас не на чем. Правда С++, но думаю идея будет понятна. Нашел время проверить. Отловил пару ошибок. Исправленная версия прилагается.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|