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

 
 
> Проба ARM, начал с LPC2134 c IAR
arttab
сообщение Feb 20 2007, 12:58
Сообщение #1


Профессионал
*****

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



Начал создавать новый проект (иар4.40А) и не понял как в примерах стартап получался.
может кто-нибудь объяснить или ссылку кинуть (если не на русском, то плиз картинок по больше или ролик).
Спасибо.

или я туплю (путаю с кейлом) и все надо ручками?
а к проекту только подключить #include"iolpc2134.h" ?


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 22)
Сергей Борщ
сообщение Feb 20 2007, 13:17
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 21 2007, 06:04
Сообщение #3


Профессионал
*****

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



Спасибо за ответ. Рою дальше.
Для ознакомления открыл демо 213х.
В demo.c есть #include "includes.h". уже в нем
#ifndef __INCLUDES_H
#define __INCLUDES_H

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdbool.h>

#include <intrinsics.h>
#include <iolpc2148.h>

#include <LPC_data_type.h>
#include <arm_comm.h>
#include <LPC2138_sys_cnfg.h>

#include <menu_cnfg.h>
#include <menu.h>
#include <drv_hd44780.h>
#include <LPC_SysControl.h>
#include <LPC_Vic.h>
#include <LPC_Uart.h>
#include <LPC_Timer.h>
#include <LPC_Rtc.h>

#endif // __INCLUDES_H

Если я правильно понял то это самодельный файл. для краткости в него запихали все подключаемое.
Вопрос по организыции проекта: куча папок app, board.... Это стиль написания проекта?

Вот я пока и не могу разобраться что должен я написать сам, что подключить готовое (если мне не нужно делать что то особенное - xcl редактировать под свое размещение сегментов).

Покопаюсь еще в хелпе - может допрет.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
DASM
сообщение Feb 21 2007, 06:30
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



не с того начали.. перходите на Keil - чтобы потом не было мучительно больно за бесцельно прожитую жизнь
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 21 2007, 07:15
Сообщение #5


Профессионал
*****

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



Цитата
не с того начали.. перходите на Keil - чтобы потом не было мучительно больно за бесцельно прожитую жизнь

Зачем плодить сущие без надобности? Я в иаре под AVR работаю. А кейл менее конфигурируемый (помниться до 4 сегментов пользователя). IDE дело вкуса и привычки

Цитата
Вот тут про создание проекта для SAM7, для LPC точно так же.

По хелпу создание проекта прошел, но не дошло как иару указать начальную конфигурацию кристала.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
DASM
сообщение Feb 21 2007, 07:18
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(arttab @ Feb 21 2007, 07:15) *
Цитата
не с того начали.. перходите на Keil - чтобы потом не было мучительно больно за бесцельно прожитую жизнь

Зачем плодить сущие без надобности? Я в иаре под AVR работаю. А кейл менее конфигурируемый (помниться до 4 сегментов пользователя). IDE дело вкуса и привычки

Цитата
Вот тут про создание проекта для SAM7, для LPC точно так же.

По хелпу создание проекта прошел, но не дошло как иару указать начальную конфигурацию кристала.

Какие 4-ре сегмента ??? Я про компилятор RVDS и скаттер файлы - куда уж гибче. Впрочем дело ваше - когда отладка будет отваливаться на каждом шагу в большом проекте - вспомните
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 21 2007, 08:28
Сообщение #7


Профессионал
*****

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



из примера на SAM7X256 получается, что конфигурация задается в начале main.
Т.е. подключаю файл описания .h (вот только какой для lpc2134?) и в Main начинаю настраивать переферию и прочее?


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 21 2007, 09:55
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 21 2007, 13:38
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 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....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 21 2007, 14:21
Сообщение #10


Гуру
******

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



Цитата(arttab @ Feb 21 2007, 12:38) *
нашел файл cstartup.s79. Получается в нем на асме надо написать инициализацию железа. Достаточно ли этот файл просто добавить в прект или надо в xcl поправить размещение? И как?
Не,этот файл вам не нужен. Точнее он подлинкуется из библиотеки и сам настроит стеки. Вам остается только периферию настроить. Как и в AVR smile.gif МАМ является периферией, как и контроллер прерываний.
Цитата(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)
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 22 2007, 05:44
Сообщение #11


Профессионал
*****

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



Спасибо! Посмотрю. MAM я для примера привел (неудачно) имел ввиду стеки. Если cstartup.s79 сам подлинкуется, то и размер стеков будет автоматом определен для данного проекта?


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 22 2007, 11:11
Сообщение #12


Гуру
******

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



Цитата(arttab @ Feb 22 2007, 04:44) *
имел ввиду стеки. Если cstartup.s79 сам подлинкуется, то и размер стеков будет автоматом определен для данного проекта?
Да, сколько указано в .xcl, столько и пропишет.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 22 2007, 12:17
Сообщение #13


Профессионал
*****

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



Цитата
Да, сколько указано в .xcl, столько и пропишет.

Блин, опять не понял.
Для каждого проекта размер стеков индивидуален. А тут получается прошишит значения для "среднего" проекта. И если мне будет мало или много "средних" размеров стеков, то нужно лезь в .xcl?


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
gladov
сообщение Feb 22 2007, 12:27
Сообщение #14


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

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Цитата(arttab @ Feb 22 2007, 12:17) *
Цитата
Да, сколько указано в .xcl, столько и пропишет.

Блин, опять не понял.
Для каждого проекта размер стеков индивидуален. А тут получается прошишит значения для "среднего" проекта. И если мне будет мало или много "средних" размеров стеков, то нужно лезь в .xcl?

Файл .xcl принято для КАЖДОГО проекта писать отдельно. И класть его, например, в settings проекта.
Если присмотреться к файлу более внимательно, станет видно, что там вообще нет общих настроек для гипотетического проекта. Только конкретные указания линкеру, которые индивидуальны для каждого проекта.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 22 2007, 12:34
Сообщение #15


Гуру
******

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



Цитата(arttab @ Feb 22 2007, 11:17) *
И если мне будет мало или много "средних" размеров стеков, то нужно лезь в .xcl?
Когда вы писали для AVR, вы могли размеры стеков задать в оболочке или в xcl - там стеков было всего два и куча. Тут стеков несколько больше, поэтому, видимо, проще оказалось не мучаться с оболочкой а оставить только вариант с xcl.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 25 2007, 15:01
Сообщение #16


Профессионал
*****

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



Со стеками стало понятней. Теперь вопросы по векторам прерываний. Как задать основные (их штук 6 кажеться) и "расширенные" (где по флагам идет разбор что конкретно случилось)?
И по документации фигня на lpc - скачал pdf, а в нем регистры не расписаны и порядок зпдания ни на PLL, ни на прочее.
Сергей Борщ как то Вы хитро PLL иницилизировали. Будем искать.

Разобраться в Вашем проекте сложно - 5 файлов Вы сами делали для scmRTOS (не считая 2 главных в проекте). Поищу инфу как это по шагам делать.


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 25 2007, 16:02
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 26 2007, 08:43
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 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....
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 26 2007, 11:04
Сообщение #19


Профессионал
*****

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



Или предыдущее только в кейле пройдет?
А под IAR надо как Вы писали:

CODE32
COMMON INTVEC:CODE:ROOT
org 0x00000018
LDR PC, VICVectAddr
END
а в Си:

__irq __arm void IRQ_Handler1() {

.............

VICVectAddr->VIC_EOICR = 0;
}

__irq __arm __nested void IRQ_Handler2() {

.............

VICVectAddr->VIC_EOICR = 0;

но тогда как быть с другими ситуациями (от SWI, FIQ и прочии)?
и где узнать названия прерываний (IRQ_Handler1(), IRQ_Handler2())? в хелпе на IAR не нашел. А VICVectAddr это тыпа метка с произвольным именем. Не ошибаюсь?


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 26 2007, 13:25
Сообщение #20


Профессионал
*****

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



Немного распутался. Имена векторов объявлены в iolpc2134.ddf
Значит имена возьму оттуда.
Хотя не понял как связаны VICIRQStatus с AIC_IVR. И что будет ля FIQ, SWI....


--------------------
OrCAD, Altium,IAR, AVR....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 26 2007, 14:10
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
arttab
сообщение Feb 26 2007, 19:52
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 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....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 1 2007, 19:58
Сообщение #23


Гуру
******

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



Цитата(Сергей Борщ @ Feb 21 2007, 13:21) *
Вот, надергал из проекта. Компилится, но проверить сейчас не на чем. Правда С++, но думаю идея будет понятна.
Нашел время проверить. Отловил пару ошибок. Исправленная версия прилагается.
Прикрепленные файлы
Прикрепленный файл  LPC_uart.zip ( 21.29 килобайт ) Кол-во скачиваний: 109
 


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 16:53
Рейтинг@Mail.ru


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