Easyelectronics.ru

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

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



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

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

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

Почему?Разница в том что ты обрабатываешь прямо в прерывании,а у меня из прерывания уходит в основную программу?Повторяю ,я ставил задачу сделать функцию delay_ms() для формирования пауз,которая работала бы от внутреннего таймера, а не тупо молотила бы цикл :
Код:
void delay (void){
int d;
for (d=0;d<1000000;d++);
}

когда мне,допустим, нужна пауза в программе в 1мс.
Ладно.Давай пройдусь по своему коду .под спойлером программа целиком.
Show


Код:
int main(void)
{
IODIR1=(0xff<<16);

while(1)
{

IOSET1=(0xff<<16);
delay_ms(1000);
IOCLR1=(0xff<<16);
delay_ms(1000);
}
}

основная часть программы.Думаю особых пояснений не надо.Зажигаем диод,ждём секунду,гасим.И так до бесконечности.


Код:
int delay_ms(u16 pause)
{
stop=1;
initIrq();
T0TCR=0x00000002;
T0TC=0;
T0PR=10;
T0MCR=0x00000001;
T0MR0=1364*pause;
T0TCR=1;
while(stop){;}
return 0;
}

Производим инициализацию таймера0.
stop-глоб.переменная.Введена для работы внутреннего цикла
while(stop){;}

Код:
initIrq();

Уходим в функцию инициализации прерываний.Понимаю что не совсем коррекно ставить инициализацию здесь,но на данном этапе её расположение меня заботило мало.В дальнейшем планирую немного переделать.Скорее всего в этой функции будут затрагиваться только биты касающиеся таймера0,но конкретно пока об этом не думал.
об инициализации прерываний напишу ниже.

Код:
T0TCR=0x00000002;

регистр управления таймером.Всё просто первый бит :"1"-считаем,"0"- не считаем.
второй бит:"1"-сбросили таймер,"0"-хорош сбрасывать.

Код:
T0TC=0;

собсвенно сам регист счётчика.Без коментариев.

Код:
T0PR=10;

предделитель.Тоже думаю всё ясно:плюсуем таймер прикаждом 10-ом тике генератора.

Код:
T0MR0=1364*pause;

регист сравнения.Я в данном случае высчитывал его так чтоб функция delay_ms(1),выполнялась за одну миллисекунду.pause-переменная которую мы передали при вызове функции

Код:
T0MCR=0x00000001;

разрешаем генерировать прерывание при совпадении.

Код:
T0TCR=1;

запускаем таймер.

Код:
while(stop){;}

ничего не делаем пока переменная stop=1;Таймер молотит до тех пор,пока значения таймера не совпадут со значением регистра сравнения.Совпало-генерируем прерывание и уходим в подпрограмму его обработки.Из подпрограммы нам вернули stop=0,значит выходим из цикла и возвращаемся в основную программу(main).


теперь об инициализации прерывания.
Код:
VICProtection = 0;

Установкой нуля позволяем менять настройки прерывания.Т.е. как известно у АРМ 6 режимов работы:user,fast interrupt(fiq),interrupt(irq),supervisor,abort,undefined.То записывая в этот регистр нули мы разрешаем менять регистры VIC когда програма находится в режиме User(например тотже main).


Код:
VICIntSelect=0x00000000;

определяем прерывания как "небыстрые" .Если пишем 1 то то прерывание будет быстрым(FIQ),имеющим самый высокий преоритет.


Код:
VICIntEnable=0x00000010;

Собственно разрешение прерывания и .Всего у нас 32 прерывания.Допустим прерывание от WDT(сторожевой таймер) имеет номер0(для разрешения этого прерывания надо занести в бит0 значение "1" ),прерывание от АЦП номер 17(бит 17 в"1")и т.д.Нас интересует прерывание по совпадению от таймера0-это 5-ый бит.


Код:
VICVectCntl0=0x00000024;

В это регистре мы связываем определённое прорывание с определённой подпрограммой и определяем его векторным.В нашем случае :подпрограмма находящаяся по адресу "0" ,будет связана с таймером(первые 5 бит регистра.таймер0 это пятый канал,соответсвенно число 4),и разрешаем выполнение этой прграммы (бит 6 в регистре)

Код:

VICVectAddr0=(u16)&stopTimer;

определяем адрес подпрограммы которую будем выполнять.Здесь требуются некоторые пояснения.
на самом деле это выглядит так:у нас пришло прерывание,программа переходит в режим IRQ,в регистр VICVectAddr заносится значение регистра VICVectAddr0, сама программа переходит на адрес вектора IRQ 0x00000018(если бы я настроил прерывания как FIQ, программа перешла бы на адрес 0х00000001С),в котором хранится значение VICVectAddr на данный момент,
.В этой ячейке находится адрес самой подпрограммы которую нужно выполнить.Всё эти манипуляции с адресами за меня сделал стартап Кейла.


и наконец сама функция прерывания.
Код:
void stopTimer(void)__irq               
{
stop=0;
T0IR=0x000000001;
T0MCR=0x00000000;
VICVectAddr=0;
}

Код:
stop=0;

сбрасываем переменную чтобы выйти из цикла и вернутся в основную программу.

Код:
T0IR=0x000000001;
T0MCR=0x00000000;
VICVectAddr=0;

Собсвенно без этих команд из прерывания программа не выходит.Т.е нужно запретить прерывания от таймера(T0MCR=0x00000000;),очистить флаг прерывания канала совпадения MR0(T0IR=0x000000001;).и очистить текущий регистр адреса подпрограммы прерывания(VICVectAddr=0).

MCDFV объяснил моё понимание прерываний как мог.

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


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

Зарегистрирован: 21 янв 2011, 21:47
Сообщения: 27
Здравствуйте.
Подскажите, достаточно ли данного обвяза (см. схему) для запуска и прошивки LPC2101?
На схеме J1 - разъём com-порта.

Изображение


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

Зарегистрирован: 03 мар 2010, 14:10
Сообщения: 1514
Откуда: Беларусь, Минск
curock писал(а):
Здравствуйте.
Подскажите, достаточно ли данного обвяза (см. схему) для запуска и прошивки LPC2101?
На схеме J1 - разъём com-порта.

Изображение

По схеме не скажу, но вот ком-порт у вас неправильно подключён: земля на 5ой ноге разъёма, а не на 9ой.


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

Зарегистрирован: 21 янв 2011, 21:47
Сообщения: 27
amx писал(а):
По схеме не скажу, но вот ком-порт у вас неправильно подключён: земля на 5ой ноге разъёма, а не на 9ой.

Да, точно. Извините, протупил. Но всё же интересно услышать мнения о подключинии МК.
ЗЫ Благодарю за оперативность


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

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
напряжение 1,8в на ядро не подано

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


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

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
кондёры на каждую пару ног питания неплохобы.На Vbat питание необязательно.

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


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

Зарегистрирован: 29 янв 2010, 00:34
Сообщения: 818
Откуда: Санкт-Петербург
curock писал(а):
Здравствуйте.
Подскажите, достаточно ли данного обвяза (см. схему) для запуска и прошивки LPC2101?
На схеме J1 - разъём com-порта.

Изображение

Что-то не видно конденсаторов на выводах питания.
Можно поставить 0.1uF к каждому входу, недалеко от выхода источника питания электролит на ~10uF, так же добавить кондесаторы в цепи сброса и внешнего прерывания по нажатию кнопки (0.1 тоже должно сгодиться, можно поставить 1uF).
Можно еще заморочиться с отдельной разводкой питания и земли для аналоговой части (VDDA/VSSA).
Тут есть полезная инфа по разводке, для cortex правда, но это не столь важно.
http://www.nxp.com/documents/applicatio ... N10974.pdf
http://www.nxp.com/documents/applicatio ... elines.zip


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

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
Ахахаха.А система тактирования то где???

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


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

Зарегистрирован: 01 сен 2011, 11:02
Сообщения: 2
MixaNik писал(а):
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

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


Вектор прерывания IRQ находится сразу за Reserved Vector.
Тут действительно строка LDR PC, IRQ_Addr просто лишняя. (Это переход на IRQ_Addr, если он определен)
LDR PC, [PC, #-0x0FF0] - Это и есть переход по адресу хранящемуся в VicVectAddr (т.е. IRQ)
А у тебя получается так:
LDR PC, IRQ_Addr - Это вектор IRQ
LDR PC, [PC, #-0x0FF0] - Это вектор FIQ
; LDR PC, FIQ_Addr - Это вообще находится за границей таблицы векторов (а их всего 8)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 11 янв 2012, 15:26 
Только пришел

Зарегистрирован: 09 янв 2012, 18:18
Сообщения: 8
Тут кто-нибудь использует LPCXpresso и LPC17xx?
Я недавно начал изучать это семейство. В наличии есть девайс с чипом LPC1766.
Подскажите с чего начать разбираться с этим чипом? Примеры программ под него есть какие-нибудь?
Или книги? Пока читаю книжку по ARM7 и мк 2300/2400. Ну чтобы немного набраться теории по арм процессорам.


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

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
CnApTaK писал(а):
Пока читаю книжку по ARM7 и мк 2300/2400. Ну чтобы немного набраться теории по арм процессорам.

не туда тебя занесло,
CnApTaK писал(а):
LPC17xx
это совсем другая архитектура.
сюда ходи :)http://we.easyelectronics.ru/tag/LPCXpresso/

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 12 янв 2012, 16:08 
Только пришел

Зарегистрирован: 09 янв 2012, 18:18
Сообщения: 8
у меня этот линк в закладках, но мне для начала нужна теория.
в которой по полочкам разложено как работает сам чип, его возможности и как и когда их использовать.
типа фундаментальная литература. можно и не на русском :) я просто ничего такого по нему не нашёл.


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

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
нy вроде как фундаментальнее ничего нету:)
http://ics.nxp.com/support/documents/mi ... pc17xx.pdf.

здесь ещё глянь.Книги по арму(думаю в инете есть гденить)
http://www.arm.com/support/resources/ar ... /index.php

собственно само руководство пользователя по ядру М3
http://infocenter.arm.com/help/index.js ... index.html

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


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

Зарегистрирован: 29 окт 2010, 23:55
Сообщения: 328
Фундаментально как работает чип и что для чего можете почитать в любой доке по Cortex ядру. Нампример есть "The Insider Guide to the STM32 ARM Based Microcontroller" (есть переведенное на русский), можете почитать - основные представления, что к чему, даст. То что СТМ32 не принципиально в этом плане - просто примеры кода не заработают на лпц.

_________________
http://angel5a.narod.ru - LPC/STM8/anything yet?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 30 янв 2012, 18:57 
Здравствуйте!

Зарегистрирован: 30 янв 2012, 18:24
Сообщения: 3
Приветствую уважаемые форумчане. Так как тема подходящая то новую решил неоткрывать, пишу сюда.
Решил сделать контроллер движка BLDC на базе LPC2148, согласно апноту AN10661 но с изменениями.
Планирую добавить управление скоростью вращения посредством потенциометра его в апноте нет. А как это сделать пока незнаю. Посему вопрос к гуру " как организовать" в программе?
Прога от Keil микровижн 4 у меня есть. Разбираюсь понемногу.
И ещё вылазят такие ошибки--

Startup.s(19): error: A1163E: Unknown opcode File , expecting opcode or Macro
Startup.s(20): error: A1163E: Unknown opcode Author: , expecting opcode or Macro
Startup.s(21): error: A1163E: Unknown opcode Date: , expecting opcode or Macro
Что записать понятно, но вот как?
Нужна ваша помощь.
Заранее благодарен.


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

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

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


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

Зарегистрирован: 30 янв 2012, 18:24
Сообщения: 3
Вот полное описание проэкта с текстом проги.
http://img80.imageshack.us/img80/6113/an10661.pdf
Надеюсь что нормально залилось.


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

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
Ты не понял:).У меня есть апнот.Я просил твой проект,со всеми ошибками и косяками:)

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


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

Зарегистрирован: 30 янв 2012, 18:24
Сообщения: 3
Приветствую. Пардонс, нетак понял. Вот сдесь проект, делал в Кеилмикровижн 4. Оттуда и ошибки виписал. И ещё этой прогой, я так понял и зашить можно? Если можно то как? Так как у меня есть ещё проект без ошибок, для движка коллекторного. Там предусмотрен RS-232. Сейчас платку доделываю.
http://narod.ru/disk/39367300001/LPC2148.7z.html


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

Зарегистрирован: 03 мар 2012, 03:20
Сообщения: 2
Вечер добрый! Подскажите, как можно в программе изменять T0MR0 (или другие регистры совпадения)? Простое присвоение в программе приводит к ее зависанию. Если же вызывать полную инициализацию (идентична таковой у serg1077, только для Таймера 0), тоже наблюдаются проблемы: через определенное время прерывания уже вообще не генерируются.
Вообще управляю шаговым двигателем, нужно его разогнать до известной скорости. Поэтому при вызове инициализации в прерываниях он сначала разгоняется, а потом останавливается. Остальные части программы функционируют без проблем.
Спасибо!


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

Зарегистрирован: 30 окт 2010, 17:43
Сообщения: 372
Ну по идее,полностью инициализацию проводить не надо.Надо сбросить счёчик таймера,установить значение
T0MR0 и снова запустьть таймер.И не помню точно уже,но вроде в обработке прерывания надо сбросить бит разрешения T0MCR,его тоже нужно снова выставить.

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


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

Зарегистрирован: 03 мар 2012, 03:20
Сообщения: 2
Да, спасибо. Заработало и без глюков!


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

Зарегистрирован: 05 фев 2012, 15:50
Сообщения: 173
Как правильно подключить резистор подтяжки на D+? По схеме получается, что к ноге может быть приложено +5V.


Вложения:
lpcboard.png
lpcboard.png [ 72.14 Кб | Просмотров: 10715 ]


Последний раз редактировалось Minoru 21 июл 2012, 10:43, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 21 июл 2012, 10:37 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 05 фев 2012, 15:50
Сообщения: 173
И да, в даташите написано:
Цитата:
Following reset, the LPC1311/13/42/43 will operate from the internal RC oscillator until
switched by software. This allows systems to operate without any external crystal and the
bootloader code to operate at a known frequency.

Следует ли из этого, что кварц не нужен?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: LPC быстрый старт.Как?
СообщениеДобавлено: 10 авг 2012, 00:50 
Старожил

Зарегистрирован: 29 окт 2010, 23:55
Сообщения: 328
подтяжку D+ делайте к VDD МК резистором 1.5кОм как предлагает даташит. D+ и D- не являются 5v tolerant и по хорошему не держат более 3.6В.
Да, чип может работать без кварца. Но с кварцем будет больше стабильность, чо может быть актуально для USB.

_________________
http://angel5a.narod.ru - LPC/STM8/anything yet?


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

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


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

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


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

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

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