Прежде всего, изучите общие битовые (в вашем случае также контактные) выражения манипуляции, которые вы МНОГО будете использовать во встраиваемом программировании:
/* Set bit to 1 */
GPIO0_IODIR |= LED1; //output
/* Clear bit (set to 0) */
GPIO0_IOSET &= ~LED1; //low
/* Toggle bit */
GPIO0_IOSET ^= LED1;
Ваш цикл while()
на самом деле ничего не делает, кроме первой итерации, потому что те же логические операции ИЛИ не изменяют битовое состояние (см. логическую таблицу этой операции). Также вы должны добавить задержку, потому что, если контакт переключается слишком быстро, светодиод может выглядеть как выключенный все время. Простое решение будет выглядеть так:
while(1)
{
GPIO0_IOSET ^= LED1;
sleep(1); //or replace with any other available delay command
}
У меня нет исходных файлов U-Boot для Craneboard, поэтому я не могу сказать вам точное место, куда положить ваш код, но в принципе есть несколько вариантов: 1) добавить его в main()
, где стартует U-Boot, таким образом повесить его (но светодиод все еще мигает!). 2) реализовать отдельную команду для включения/выключения светодиода (см. примеры файлов command.c и cmd_ с префиксом) 3) интегрировать ее в последовательный цикл, чтобы контакт мог быть переключается во время ожидания ввода пользователем 4) создайте его как приложение поверх U-Boot.
Привыкайте к большому количеству чтения и документации, TRM здесь ваш друг (иногда единственный). Также есть несколько отличных руководств для начинающих, просто погуглите. Немного упомянуть:
http://www.microbuilder.eu/Tutorials/LPC2148/GPIO.aspx (основы с примерами)
http://beagleboard.org/ (отличный ресурс для BeagleBoard, но многое относится и к CraneBoard, поскольку они используют один и тот же SoC, включает большое сообщество).
http://free-electrons.com/ (больше для встраиваемых систем Linux и других продвинутых тем, но некоторые основы могут тоже можно найти)
http://processors.wiki.ti.com/index.php/CraneBoard (официальная вики CraneBoard, наверное это знают, но на всякий случай)
P.S. Удачи и не сдавайтесь!
person
KBart
schedule
11.02.2013