Easyelectronics.ru

Электроника для всех
Текущее время: 17 окт 2019, 13:23

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 103 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 28 фев 2011, 15:07 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
Вопрос к знатокам.Насколько подходят примеры из Кейла для МСВ2140(контроллер 2148)для контроллера 2142?Точнее те примеры которые связаны с УСБ.(usbhid,usbmem).Хочу поверить работает ли усб.Меняю в прожекте девайс с 2148 на 2142,проект компилится и прошивается,но дальше никакой реакции.Может ещё что надо изменить?
И ещё вопрос какое напряжение должно приходить на ногу VBUS ?немогу найти в ДШ.У меня приходит 5 в.Мог я этим спалить внутренний контрллер усб в самом МК?
и ещё в догонку.нога 0.31(та что"connect/up_led"),на ней постоянно висит +3,3в.Насколько я понял при правильной инициализации усб на ней должно чтото меняться(я думаю что её должно подтянуть к gnd)?так,нет?

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 28 фев 2011, 20:35 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
Сам спросил,сам отвечу.Никак они(примеры) не подходят,потому что согласно юзер мануалу в 2148 у УСБ есть DMA-контроллер,который в 2142 отсутствует.Наверное так.

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 04 мар 2011, 16:22 
Заглядывает иногда

Зарегистрирован: 04 окт 2010, 14:43
Сообщения: 45
MixaNik писал(а):
нету у меня ком порта и непредвидится.
продаются недорогие переходники USB->COM


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 04 мар 2011, 16:47 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
novico писал(а):
MixaNik писал(а):
нету у меня ком порта и непредвидится.
продаются недорогие переходники USB->COM

это к чему?проблема давно решена с помощью FT232?которая собсвенно и является переходником.

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 09 мар 2011, 01:59 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
к MCDFV.Скажи а чем обусловлен твой выбор ЙАРа в качестве среды.Просто сейчас немного посвободнее стало,сново появилось время на хобби,сижу сравниваю две среды и чёто Кейл вроде как по дружелюбней,или я просто не до конца его(ЙАР) понял?Если честно то у меня даже не получилось создать пустой проект в IAR'e,а с кейлом сейчас к SPI подбираюсь.Правда всё достаточно поверхносно,но тем не менее хотябы понимание стало сприходить что к чему(не всё так страшно оказалось как я вначале думал).Например мне не понятно даже где в ЙАРе хекс вытащить для "флеш меджик".
На паял тут себе обвеса к LPC и к STM32:дата флешь на 45DB161D от атмел,платку с 8-ю светодиодами,аудио(микрофон и динамик с LM324 в качестве усилителя),ещё сейчас буду делать
плату с дисплеем от сименса(тот что LS020).Всё сделано в таком формате:


Вложения:
IMG_3663.jpg
IMG_3663.jpg [ 176.59 Кб | Просмотров: 13185 ]

_________________
"Арфы нет!Возьмите бубен."
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 09 мар 2011, 06:37 
Старожил

Зарегистрирован: 13 фев 2011, 01:25
Сообщения: 618
Откуда: Севастополь
последний нормальный иар, который к тому же не парит мозк с ассемблерными вставками и позволяет быстро и без гемороя с кучей areas юзать любимый ORG это 4.41. Все что выше - почему то работает через одно место. Во всяком случае - несколько попыток стартовать проект с чистого листа и без применения либ - почему то обламывались. Keil мне тоже показался более дружелюбным - но уже существует наркотическая зависимость от пакета IAR. Просто использую старую его версию 4.41а.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 11 мар 2011, 20:59 
Заглядывает иногда

Зарегистрирован: 24 июл 2010, 21:53
Сообщения: 76
MixaNik извини не заметил сообщений. Стал шо то редко форум просматривать.
Ну по поводу иара. Я на нём под авр пишу вот наверное этим и обосновывался выбор. Потом была ещё книга редькина(ошибки хотя там есть) ну и друг опытный советовал. А так я ещё сам начинающий и опыта мало чтоб сравнивать кеил и иар. Но вот точно могу сказать про иар под авр он очень хорошо сишный код в асмный переводит.
Теперь могу рассказать как создавать проект в иар.
Файл нью ворк спэйс. Проджект криейт проджект. Выбираю си. Потом отдельно настраиваю 2 конфигурации дебуг и релиз.
В дебуг выбираю чип, в категории с/с++ компилер выбираю писать в командах арм всегда без оптимизации в категори линкер ставлю галочку перезаписать линкер конфигурейшн файл указываю там размеры памяти для данного мк. категория дебугер ставлю галочку ран ту мэйн и выбираю джей линк отладчик (есть такое у меня)
Следует заметить что отладка происходит тока в дебуге. (может я не прав и в релизе она работает но у меня только в дебуге получалось)
Релиз выбираю чип выбираю набор команд арм выбираю без оптимизации в категории аутпут конвертор ставлю галочку дженерейт аддишинал аутпут выбираю интел икстэндит и ставлю галочку чтоб генерировался хекс файл. Также как и для дебуга настраиваю категорию линкер указываю границы памяти ну собственно всё.
Делие хочу сказать по поводу критерия пользовательского действительного кода. Иар генерит его сам т.е прошивку можна сразу в чип заливать. А вот для протеуса придётся лпс флеш утилити исправить критерий пользовательского действительного кода.
Буфер флеш буфер оперейшн загружаем хекс файл и нажимаем вектор калкулейшн. после этого можнго хекс файл загружать в протеус. Оно меняет всего лиш 2 строки первую и последнюю (могу ошибатиься пишу по памяти) и кстати говоря не трогает критерий действительного пользовательского кода.
Вот тут кстати вопрос а чего почему реальному кристалу файл сгенерированый иаром катит а протеусу нет?
ещё что хочу сказать что вся настройка проекта занимает не болие минуты.
Где вытащить хекс файл: папка проекта релиз экзэ и там хекс файл.
А на счёт эспиай так там всё просто я не работал ещё но читал редькина. По сравнению с авр эспиай мне в лпс понравился больше. болие гибко скорость можна задавать.
Ещё почему агитировал за иар хотел найти единомышленников, как говорится одна голова хорошо а 5 ещё лучше(ну это уже юмор)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 13 мар 2011, 00:19 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
то MCDFV,по ЙАР осознал ,попробую всётаки вникнуть в него.По поводу протеуса нечего сказать не могу,т.к практически им не пользуюсь.
MCDFV писал(а):
Потом была ещё книга редькина

Редькин да .Я его как перевод юзер мануала пользую,и описано доступно.Для меня главное что там все регистры по полочкам разложены.
MCDFV писал(а):
Ещё почему агитировал за иар хотел найти единомышленников

так компилятор тут не припятствие,а может даже и плюс работа с разными системами,будет что сравнить.да не и думаю что перенос с йар->кейл будет очень сложным.
Я просто нихуя ни программер,я больше железячник.Спаять,схему-разводку платы сделать.Как до программирования доходит иногда такие затупы бывают что сам удивляюсь.Старый становлюсь,мозги гибкость теряют.Я вот ща борды свои для отладки доделаю ,а там и попрограмлю всласть.
MCDFV писал(а):
как говорится одна голова хорошо а 5
,а 5 это уже мутант.

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 09:43 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
Снова взываю к коллективному разуму.
В своём изучении LPC добрался до прерываний.Незнаю какую химию употребляли разработчики LPC и ARM при создании контроллера прерываний,но у меня такой нет,поэтому двигаюсь с большим скрипом.Остановился на простейшей задаче,создание паузы с помощью таймера и програмного прерывания.
Собсвенно код:
Код:
#include <lpc214x.h>

typedef  unsigned char  u8;//беззнаковое 8-ми битное
typedef   unsigned int  u16;//беззнаковое 16-ти битное

void delay_ms(u16 pause);  //функция паузы
void initIrq(void);        // функция инициализации прерывания
static void stopTimer();   // подрограмма обработки прерывания


u8 stop=1;
int main(void)
{
IODIR1=(0xff<<16);         //переопределяем порты на выход
while(1)
{
IOSET1=(0xff<<16);         //на выходах порта с 1.16 до 1.23 устанавливаем "1",зажигаем диоды
delay_ms();               //уходим в функцию паузы
IOCLR1=(0xff<<16);         //гасим диоды
}
}

void delay_ms()            //функция паузы
{

initIrq();               //идём инициализировать прерывания

               //инициализируем таймер


T0PR=0;            //счётчик предделителя инкреминируется при  каждом цикле генератора
T0MCR=0x00000001;   //прерывание при совпадении на канале МR0
T0MR0=2; //;*pause   //значение регистра совпадения.При достижении  таймером этого числа сгенерируется прерывание.Значение выбраны минимальные чтоб долго не шагать в симуляторе.
T0TCR=1;         //запускаем таймер
while(stop){;}     //пауза пока таймер не досчитает до значения в регистре совпадения
T0TCR=0;          //останавливаем таймер
VICIntEnClr=0xffffffff;//запрещаем прерывания
//возващаемся в основную программу
}
void initIrq(void)
{
VICIntSelect=0x00000000;               //опредиляем прерывания как IRQ      
VICIntEnable=0x00000010;               //Разрешаем прерывания от таймера0
VICVectCntl0=0x00000010;               //
VICDefVectAddr=(u16)&stopTimer;            //определяем адрес
VICVectAddr1=(u16)&stopTimer;            //подпрограммы прерываний
}
static void stopTimer()                  //функция вызывающаяся при срабатывании прерывания,также возвращает адрес  самой подпрограммы
{
stop=0;                              //переменная для остановки паузы
}


как смог расписал каждую строку.
Теперь собственно проблемма.Программу делаю в кейле,обрабатываю тамже в симуляторе.Так вот,программа выполняется как положено .Но после функции обработки программа не возвращается в main.Т.е. программа доходит до здесь
Код:
T0TCR=0;          //останавливаем таймер
VICIntEnClr=0xffffffff;//запрещаем прерывания
//возващаемся в основную программу
}

и вместо того чтобы вернутся в delay_ms(),и пойти дальше погасив диоды, просто останавливается в этом месте,и почему не могу понять.Как смог обозначил проблему .Прошу помочь.

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 12:17 
Заглядывает иногда

Зарегистрирован: 24 июл 2010, 21:53
Сообщения: 76
MixaNik я щас тоже прерывания ковыряю и уже 3 день а толку никакого.
Задача которую я поставил перед собой: настроить таймер и по совпадению счётного регистра таймера счётчика
с регитром сравнения сгенерировать прерывание, после совпадения сбросить счётный регистр таймера счетчика, а в прерывании проинвертировать все выводы порта 1. Соответственно єтот процесс должен продолжаться пока не віключим питание.
Пишу в ИАР. Вот код.
Код:

#include <NXP/iolpc2142.h>
#include <intrinsics.h>
#include <stdio.h>

void feed (void)
{
  PLLFEED=0xAA;
  PLLFEED=0x55;
}

void MM_TIMER0_ISR()
{
  IO1PIN=~IO1PIN;
}

__irq __arm void irq_handler (void)
{
  void (*interrupt_function)();                   //описанно в заголовках.
  unsigned int vector;
  vector=VICVectAddr;                            // Get interrupt vector.
  interrupt_function = (void(*)())vector;        // Call MM_TIMER0_ISR thru pointer
  (*interrupt_function)();                       // Call vectored interrupt function
}

void main(void)
{
  PLLCON_bit.PLLC=PLLCON_bit.PLLE=0;             //Disable and disconnect PLL
  feed ();
  VPBDIV_bit.VPBDIV=0;                                           //Init Peripherial divider Pckl = Clk/4
 
  PINSEL1=0;
  IO1DIR=0xFFFFFFFF;
  IO1PIN=0xFFFFFFFF;
 
  VICProtection = 0;                                               // VIC registers can be accessed in User or
  VICIntEnClear=0xFFFFFFFF;                                   // Diasable all interrupts
  VICIntEnable=(1<<VIC_TIMER0);
  VICIntSelect &= ~(1<<VIC_TIMER0);                      // Timer 0 intrpt is an IRQ (VIC_TIMER0 = 4)
  VICVectAddr0 = (unsigned int)&MM_TIMER0_ISR;      // Install ISR in VIC addr  slot 0                                                                                             
  VICVectCntl0 = 0x20 | VIC_TIMER0;                       // IRQ type, TIMER 0 int enabled   
  __enable_interrupt();                                           // Global interrupt enable
 
 
  T0TCR_bit.CE=1;                                                 //разрешили счёт
  T0TCR_bit.CR=1;                                                 //синхронный сброс счётчика таймера и счётчика предделителя
                                                                          //они будут сброшены до тех пор пока в этом бите лог 1
  T0PR=0;                                                             //инкрементируем счётный регистр каждые 0+1 цикл шины pclk
  T0MR0=10;                                                         //значение до которого считаем.
  T0MCR_bit.MR0INT=1;                                          //разрешили прерывание по совпадению
  T0MCR_bit.MR0RES=1;                                          //сброс счётного регистра по совпадению
  T0TCR_bit.CR=0;                                                  //разрешаем счёт
  while(1);
}

Проблема в том что я в прерывание вообще не попадаю, соответственно импульсов нет.
Пробовал отлаживать прогу отладчиком и тут шок. Нулевой флаг, который показывает наступление прерывания по совпадению первого канала в регистре TIMER0 установлен ещё при начале отладки программы, в регистрах VICIntEnable и VICIntSelect значения не изменяются после строк присвоения значений, и самый прикол счётный регистр таймера счётчика увеличивается не на одно значение а каждый раз на какое то разное.
Есть ещё мысль может мне следует подключить файл стартап к моему проекту, кеил спрашивает про это а ИАР нет.
Смотрел я тот файл и ничего там не понимаю что там происходит.
Прошу помощи гуру.
P.S. Да ребята из конторы NXP химию курят страшную. Тут я согласен


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 12:37 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
MCDFV писал(а):
Есть ещё мысль может мне следует подключить файл стартап к моему проекту, кеил спрашивает про это а ИАР нет.

Я думаю что старт ап нужен обязательно.Не знаю как в йаре,а в кейле там прописан адрес адрес подпрограмы.
вот кейловский кусок стартапа куда прописан адрес подпрограммы:
Код:
Vectors         LDR     PC, Reset_Addr         
                LDR     PC, Undef_Addr
                LDR     PC, SWI_Addr
                LDR     PC, PAbt_Addr
                LDR     PC, DAbt_Addr
                NOP                            ; Reserved Vector
                LDR     PC, IRQ_Addr
                LDR     PC, [PC, #-0x0FF0]     ; Vector from VicVectAddr
;                LDR     PC, FIQ_Addr

причём в таком виде у меня в подпрограмму вообще не заходит.А если закоментить стороку вот так
Код:
;               LDR     PC, IRQ_Addr

то всё работает.
Вообще даже не знаю чем тебе помочь.На вскидку код рабочий,но я запуталься в твоих битах настройки таймера и прерываний.

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 12:39 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
MCDFV писал(а):
Смотрел я тот файл и ничего там не понимаю что там происходит.

А покажи его.Мож я чё посоветую.Имею в виду стартап.

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 12:51 
Заглядывает иногда

Зарегистрирован: 24 июл 2010, 21:53
Сообщения: 76
MixaNik ты ИАР ставил? Если ставил то там в примерах есть.
Но щас прикреплю.
Там 2 стартапа, с 2 разных примерах.
Фишка в том что у меня кеил выпендривается, как я писал раньше что прошивка из кейла не работает а
из иара работает.


Вложения:
Startap_file.rar [3.61 Кб]
Скачиваний: 318
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 12:58 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
MCDFV писал(а):
MixaNik ты ИАР ставил?

Только вчера снёс блин.Можешь в текстовом формате выложить.
MCDFV писал(а):
Фишка в том что у меня кеил выпендривается, как я писал раньше что прошивка из кейла не работает а из иара работает.

Таже фигня у меня с IAR.
Давай ещё раз попробуем запустить твой кейл.У тебя кстати что за версия кейла?

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 13:11 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
MixaNik писал(а):
Только вчера снёс блин.Можешь в текстовом формате выложить

Всё, не надо,открыл кейлом.

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 13:15 
Заглядывает иногда

Зарегистрирован: 24 июл 2010, 21:53
Сообщения: 76
Так то текстовые файлы открываются в обычном блокноте.
Кстати, не в тему но всё таки: http://www.tnkernel.com/tn_usb_fw_upgrader.html
по поводу ЮЗБ загрузчика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 13:53 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
Посмотрел стартап:тоже вроде правильно всё(насколько я логику стартапов понимаю).Попробуй его всётаки прицепить его в код,хуже точно не будет.
Единственное .В книге Редкина по LPC2000 есть пример с прерываниями для опроса кнопок.Попробуй там глянуть ,может там найдёш решение.
MCDFV писал(а):
Кстати, не в тему но всё таки: http://www.tnkernel.com/tn_usb_fw_upgrader.htmlпо поводу ЮЗБ загрузчика.

Там и про прерывания тоже расписано.Отправляется в архив на компе.
MCDFV,а по моему вопросу нет мыслей?Мож видишь какую ошибку свежим взглядом.

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 14:58 
Заглядывает иногда

Зарегистрирован: 24 июл 2010, 21:53
Сообщения: 76
MixaNik по поводу твоей программы.
Ну я во первых не пойму структуру твоей программы. В функции задержки ты и прерывания настраиваешь и таймер. Я бы раз настроил в основной программе и всё.
Второе. При записи в этот регистр VICVectCntl0 нужно ещё устанавливать 5 бит в 1. Так и в редькине написанно
и в примерах ИАР.
А по поводу моей проги она у тебя работает? Я этого момента там и не понял.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 15:13 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
MCDFV писал(а):
Я бы раз настроил в основной программе и всё.

попробую.
MCDFV писал(а):
Второе. При записи в этот регистр VICVectCntl0 нужно ещё устанавливать 5 бит в 1. Так и в редькине написанно и в примерах ИАР.

у меня это сделано:
Код:
VICVectCntl0=0x00000010;

MCDFV писал(а):
А по поводу моей проги она у тебя работает? Я этого момента там и не понял.

Так я писал уже:Стёр я вчера IAR,проверять не начем,а если переделаю под кейл то тебе это наврядли поможет. Вечером домой прийду,качну демку IARа и попробую твою прогу.

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 17:04 
Заглядывает иногда

Зарегистрирован: 24 июл 2010, 21:53
Сообщения: 76
Число 0х10 в двоичной системе будет 0b00010000 т.е четвёртый бит установлен, а надо пятый
т.е 0х20.
Нужно сделать так VICVectCntl0 = 0x20 | VIC_TIMER0; тогда установится пятый бит + ещё и выберется канал прерываний.
А вообще бы неплохо было бы чтоб написал как ты понимаешь работу контроллера VIC. И я напишу. А так куски кода и каждый доказывает какое значение в какой регистр писать это не дело


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 21:52 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
Одолел таки.Заработало.
Show


MCDFV писал(а):
Нужно сделать так VICVectCntl0 = 0x20 | VIC_TIMER0;

если честно ,то я вообще не понял назначения этого регистра.Поэтому спорить не буду.
MCDFV писал(а):
А вообще бы неплохо было бы чтоб написал как ты понимаешь работу контроллера VIC.

Ну я попробую,но не обещаю.Хреновый из меня объяснятель.
Не хочешь попробовать на кейл перелезть?

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 22:06 
Заглядывает иногда

Зарегистрирован: 24 июл 2010, 21:53
Сообщения: 76
Честно говоря я до сих пор не пойму логику рабооты программы твоей.
Что у меня получилось. После подключения старт апа к проекту я наблюдал вход
в прерывание там инвертировался порт 1 и на этом работа моей программы закончилась.
А надо чтоб светодиодик мигал. (Вообще то есть одна интересная идейка попробовать сделать частотомер на арм). Варианты тут могу быть такие
1)попадаем в прерывание инвертируем вывод и всё там так и остаёмся;
2)тоже самое только возращаемся в бесконечный цикл и больше прерывания не происходят либо потому что в настройках таймера проблемы (хотя от чего им менятся), либо надо контроллеру вик указывать что мы хотим дальше прерывания были.
На счёт среды это ж инструмент. Я то попробую написать в кеил, но я не думаю что что то изменется да и надо понять почему в ИАР не работает.
Ведь логика проги останется та же.
MixaNik начинай пожалуйста рассказывать как работает VIC.
Позволю себе обратится к уважаемому DI HALT`у.
Мог бы он пролить свет на данным мк. А то так получается что в собственном соку варимся как говорится что не есть хорошо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 22:48 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
MCDFV писал(а):
Честно говоря я до сих пор не пойму логику рабооты программы твоей.

MCDFV писал(а):
Задача которую я поставил перед собой: настроить таймер и по совпадению счётного регистра таймера счётчика с регитром сравнения сгенерировать прерывание, после совпадения сбросить счётный регистр таймера счетчика, а в прерывании проинвертировать все выводы порта 1. Соответственно єтот процесс должен продолжаться пока не віключим питание.

Ты не поверишь,но код который я привёл решает именно эту задачу .Я просто хотел сделать аппаратную задержку управления паузами,чтоб потом в программы вставлять.Сейчас это делаю через цикл,а это е есть гут с точки зрения расчётов времени.
У тебя сейчас таже самая проблемма которая была у меня,Я примерно представляю где она но не могу толком сформулировать.
Вот смотри:
что я считаю лишним при подключеном старт апе:
MCDFV писал(а):
void feed (void){  PLLFEED=0xAA;  PLLFEED=0x55;}

MCDFV писал(а):
__irq __arm void irq_handler (void){  void (*interrupt_function)();                   //описанно в заголовках.  unsigned int vector;   vector=VICVectAddr;                            // Get interrupt vector.  interrupt_function = (void(*)())vector;        // Call MM_TIMER0_ISR thru pointer  (*interrupt_function)();                       // Call vectored interrupt function}

Всё это уже оределено в старт апе.
Дальше:
MCDFV писал(а):
void MM_TIMER0_ISR(){  IO1PIN=~IO1PIN;}

перепиши вот так:
Код:
__irq __void MM_TIMER0_ISR()
{
  IO1PIN=~IO1PIN;
  T0IR=0x000000001;
T0MCR=0x00000000;
VICVectAddr=0;
}


ещё:
MCDFV писал(а):
PLLCON_bit.PLLC=PLLCON_bit.PLLE=0;             //Disable and disconnect PLL  feed ();  VPBDIV_bit.VPBDIV=0;                                           //Init Peripherial divider Pckl = Clk/4

тоже нахрена.Должно быть в старт апе.
Это то что я понимаю.Инициализацию таймера вообще не вкурил,нахрена там все эти биты.
Сделай так как у меня.
Код:
T0TCR=0x00000002;
T0TC=0;
T0PR=10;         //счётчик предделителя инкреминируется при  каждом цикле генератора
T0MCR=0x00000001;   //прерывание при совпадении на канале МR0
T0MR0=1364*pause;   //0значение регистра совпадения.При достижении  таймером этого числа сгенерируется совпадение
T0TCR=1;      

Извени за сумбурные объяснения,но как могу.

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 14 апр 2011, 23:00 
Старожил
Аватара пользователя

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
MCDFV писал(а):
MixaNik начинай пожалуйста рассказывать как работает VIC.

я пытаюсь,но у меня получается переписывание книги редькина,ну не объяснить мне лучше чем он.Если есть голосовой скайп давай туда,может на словах лучше объясню,пиши адрес в личку если интересно,или задавай вопросы:что конкретно по VIC тебе не понятно.
MCDFV писал(а):
Позволю себе обратится к уважаемому DI HALT`у.Мог бы он пролить свет на данным мк. А то так получается что в собственном соку варимся как говорится что не есть хорошо.
А врядли кому кроме нас это интересно:Контроллер старый,примеров почти нет,отладочных плат и не будет.Проще купить СТМ с дисплеем за 1500р,чем заморачиваться с довольно сомнительным по перспективам железом.

_________________
"Арфы нет!Возьмите бубен."


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 15 апр 2011, 12:46 
Заглядывает иногда

Зарегистрирован: 24 июл 2010, 21:53
Сообщения: 76
Цитата:
Ты не поверишь,но код который я привёл решает именно эту задачу.

Задача то одна но пути решения разные. Это как помигать светодиодом с помошью таймера на AVR.
Настроили таймер счётк на прерывание по переполнению или по совпадению, запустили его,
а в программе обработчика прерывания инвертируем порт. Неужели такая сложная идея?
На счёт того что контроллре страрый это да тут не поспоришь, однако если есть данный мк то и выполнять свои функции он должен. И неужели мы разрабатываем настолько серьезный весчи что чувствуем огромную разницу между ядрами ARM7TDMI-S и Cortex-M3? Теперь по делу.
На счёт старт ап и настройки всяких PLL MAM и перефереийной шины VPB. Да можно все эти весчи настроить в старт апе, но вся идея заключается в том что эти настройки могут гибко изменяться в процессе работы программы, для обеспечения
разной скорости выполнения кода и соответственно потребляемой мощности. Т.е если нам надо выполнить какой то участок кода быстро то мы настраиваем всё на максимальную скорось и выполняем, а потом если скорость выполнения кода уже не так важна а важно энерго потребление то можно отключить PLL и MAM снизить частоту шины VPB до минимума и всё. Мало того есть ещё и регистр потребляемой мощностью переферийных устройств для снижения потребляемой мощности.
Цитата:
void feed (void){ PLLFEED=0xAA; PLLFEED=0x55;}
Всё это уже оределено в старт апе.

Нет это в старт апе не должно быть определено и не может быть определено в старт апе.
Это корректная последовательность ввода данных в PLL
По поводу вот таких: T0TCR_bit.CE=1;
и таких: T0IR=0x000000001; записей. В последнем варианте вообще ж ничего не понятно, точнее понятно что в нулевой
бит регистра T0IR записывается лог 1, а за что этот бит отвечает вообще не очевидно. По истечении некоторого времени глядя на код не поймешь что это было зачем и почему.
T0TCR_bit.CE=1; это болие понятная запись. Хотя архитектуру таймера надо знать.
В регистре таймер0таймер контрол реджэстр установили бит каунтин энейбл. Понятно что происходит.
Теперь по поводу настройки таймера.
Логика работа как я хочу чтоб он работал. Запускаем таймер он начинает считать с 0 и считает до значения которое находится в регистре сравнения, когда это событие случилось счётный регистр таймера счётчика сбрасывается и генерируется прерывание в котором инвертируется порт 1.
По настройкам.
T0TCR_bit.CE=1; разрешили счёт.
T0TCR_bit.CR=1; сбросили счётчик таймера и счётчик предделителя. Они будут сброшены до тех пор пока этот бин не сбросится в 0.
T0MR0=10; Сюда просто записали число до которого считаем.
T0MCR_bit.MR0INT=1; разрешили прерывание по совпадению
T0MCR_bit.MR0RES=1; указали чтоб счётный регистр таймера счётчика сбрасывался по совпадению
T0TCR_bit.CR=0; разрешаем счёт.
Идея простая но не работает


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 103 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB