Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: помигать светодиодиком в lpc2478
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
_Ivan_33
здравствуйте! не получается помигать светодиодиком на данном проце
компилятор - keil
CODE

#include "stdio.h"
#include "LPC23XX.h"

void wait (void) { /* wait function */
int d;

for (d = 0; d < 1000000; d++); /* only to delay for LED flashes */
}

int main(void){
IODIR0 = 0x00000180;

while(1){
IOSET0 = 0x00000080;
// wait();
IOCLR0 = 0x000000100;
};
return 0;
}

плата sk-lpc2478-s3e
стартап был сконфигурирован кейлом самостоятельно и правки туда не вводились...
помогите пожалуйста!
DpInRock
Ну, wait закоментирован...
А по программе ничего мигать не должно. Т.е. все правильно не мигает.

Чтобы мигать - надо значение порта (портов) менять на противоположное.
У вас значение P0.7 устанавливается в 1 и значение P0.8 устанавливается в 0. Много раз.
_Ivan_33
CODE
#include "stdio.h"
#include "LPC23XX.h"

void wait (void) { /* wait function */
int d;

for (d = 0; d < 1000000; d++); /* only to delay for LED flashes */
}

int main(void){
IODIR0 = 0xffffffff;
IOCLR0 = 0xffffffff;
while(1){
//IOSET0 = 0x00000080;
//wait();
//IOCLR0 = 0x00000080;
//wait();
};
return 0;
}

на порте держится стабильно 3,3 вольта...
дохлый проц? хотя все нормально прошивается и стирается...
или я уже порты успел пожечь...
DpInRock
Вам знакомо назначение "//"?
Это обозначение комментариев.
--
Уберете комментарии, попробуйте долго смотреть на светодиод. Не спешите.
_Ivan_33
да знакомо... этим я специально воспользовался...
но когда пишешь процу убрать все ноги порта в 0, а на них вольтметром получается 3,3 вольта, то это настораживает...

а что за регистр IOPIN - за что он отвечает непонятно...?
GPIO Port Pin value register. The current state of the GPIO
configured port pins can always be read from this register,
regardless of pin direction. By writing to this register port’s pins will
be set to the desired level instantaneously.
текущее состояние конфигурируемых выводов порта может быть прочитано из этого регистра, независимо вход или выход этот вывод. При записи в этот регистр, выводы порта будут поставлены в необходимый уровень мгновенно.
То есть если я пишу в один его бит единицу, то вывод если он выход будет поставлен в лог 1, так?

точнее дело так... светодиод горит, но очень тускло, если на него смотреть сверху - то видно горение, сбоку - нет. когда его подключаешь к +3,3 вольтам горит ярко, так что светодиод исправен. подключен через резистор в 560 ом.

и еще - может найдется добрый человек и скомплирует сам со своим кейлом чтоб всем портом помигать, вдруг в компиляторе дело, а я в железе испытаю...
_Ivan_33
вот мой проект
DpInRock
Вот там есть файл LPC2400.s

Если хотите стать человеком, то надо разобрать все, что делает этот файл. Причем, не обязательно КАК. Главное - что.
---

Попробуйте поставить в процедуре WAIT вместо "int d" "volatile int d".
_Ivan_33
добавление volatile ничего не дает, так как это локальная переменная и в прерываниях и других функциях не используется вроде бы...
я понимаю, чтобы считать себя юным падаваном армов я эти 1500 строк кода должен понимать что каждая строка значит, но ведь мой путь тернистый разве стоит начинать именно с этого?
DpInRock
Не что значит, а ДЛЯ ЧЕГО.

Там идет настройка PLL. Вы должны понимать на какой частоте работает процессор. Ибо откуда вы знаете какой будет задержка в этом случае?

Там идет настройка ФУНКЦИЙ пинов (PINSELx). Не направления, а функций. После которых ваши попытки сменить (установить направление) могут быть бесполезными.
(Не говорю, что будут, говорю, что могут быть).

Цитата
добавление volatile ничего не дает

Если оптимизатор включен на полную, то вполне себе может дать.

Цитата
но ведь мой путь тернистый разве стоит начинать именно с этого

Начинать надо, разумеется, не с этого.
А с чтения user manual на этот процессор. И вот примеры программ в этом случае будут как нельзя кстати.

---
Ну и мозг включать тоже надо. К примеру, вы пробовали разную задержку? Вы пробовали просто погасить или просто зажечь. Чтоб хотя бы разницу заметить, если у вас осциллографа под рукой нет?

_Ivan_33
пробовал и погасить и зажечь, не получалось
оптимизатор стоит на -O0
юзер мануал я читал и как раз эти строки кода оттуда скоммуниздил...
в свойствах проекта я указал 12 мегагерц частоту, так 12 мегагерц и должно вроде быть...
про PINSEL сейчас буду разбираться


S1LENCE
Может вместо #include "LPC23XX.h" нужно #include "LPC24XX.h" ?
А на схематике все нормально?
PINSEL - выбор назначения пина тут не нужно, тоесть должен быть =0 как обычный инпут/аутпут
_Ivan_33
я нашел этот файл вот тут - http://ics.nxp.com/products/lpc2000/lpc24xx/
Sample Code Bundle for LPC23xx/LPC24xx Peripherals using Keil's μVision V1.60 (Mar 10, 2009)
ну скиньте мне тогда lpc24XX.h у кого есть пожалуйста и стартап если можно на 12 мегагерц
по схематике быть ошибок не должно - плата от стартеркита)
skripach
Чем прошиваете?
_Ivan_33
флешмеджиком в связке с arm-usb-ocd
_Ivan_33
товарищи... чудеса продолжаются...
дали мне прошивку - работает -светодиод мигает...
текст программы я взял оттуда...
кстати,сделал теперь на линуксе себе компилятор Sourcery G++ Lite 2010.09-51 for ARM EABI
скрестил с эклипсом - работает, компилит и прочее...
но вот опять... я даже не могу светодиодик зажечь... crying.gif
тот же порт, тот же пин, те же строки...
что вообще за хрень!?!??!?

прошиваю теперь из консольки lpc21isp
проект прикрепляю...
yashok
Из файла main.c видно что диод мигать не должен, а должен просто загореться.
Если вы хотите сбросить 2 и 3 бит в ноль в регистре PINSEL1, то следует писать не так
Код
PINSEL1 &= 0x0000000C;

а вот так
Код
PINSEL1 &= ~(0x0000000C);
_Ivan_33
он даже не загорается...
yashok
А разве на плате sk-lpc2478-s3e диод не заведен на p0.22 ??
DpInRock
Код
void dell(void)
{
volatile unsigned int i;
for (i=0;i<1000000;i++);
}
void main (void)
{
PINSEL1=0;
PINMODE1=0;
IO0DIR=0x00400000;

for (;;)
{
IO0SET=0x00400000;
dell();
IO0CLR=0x00400000;
dell();
}

}


Забыл добавить. Этот процессор работает на более высокой частоте, чем 12МГц.
Зависит от PLL.
Если вы брали установку PLL от хороших людей, то процессор будет работать на 72 Мгц.
ARM7
Ну сделай наконец так-и будет мигать-
Код
int main(void){
while(1){
IO0DIR= 1 << 17;
IO0SET= 1 << 17; // может IOSET0 надо писать?
wait ();
IO0CLR= 1<<17;
wait ();
}
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.