Цитата(Alex03 @ Oct 11 2006, 13:15)

Цитата(slabnoff @ Oct 10 2006, 23:14)

Так вот суть в том, что иногда запуска просто не происходит. Начал копаться - не запускается само прерывание внешней синхронизации. Варианты разрешения этого прерывания пробовал через непосредственное разрешение в VIC и через программирование PINSEL, во втором случае вроде полегче, но до конца глюк не уходит.
Вот про "непосредственное разрешение в VIC и через программирование PINSEL" это как?
Тут ж надо всё вместе. И PINSEL и VIC и EXTINT? Для EXTINT errata читали?
Были два варианта:
1) Через VIC
отключение:
Код
__disable_interrupt(); // FIQ & IRQ off
VICIntEnClear = VIC_EINT0_bit;
__enable_interrupt(); // FIQ & IRQ on
включение:
Код
__disable_interrupt(); // FIQ & IRQ off
VICIntEnable |= VIC_EINT0_bit;
__enable_interrupt(); // FIQ & IRQ on
2) Через PINSEL
отключение:
Код
__disable_interrupt(); // FIQ & IRQ off
PINSEL1_bit.P0_16 = 0;
__enable_interrupt(); // FIQ & IRQ on
включение:
Код
__disable_interrupt(); // FIQ & IRQ off
PINSEL1_bit.P0_16 = 1;
__enable_interrupt(); // FIQ & IRQ on
Второй способ субъективно (хотя статистики мало) стабильнее в таком варианте (прерывание по спаду):
отключение:
Код
__disable_interrupt(); // FIQ & IRQ off
PINSEL1_bit.P0_16 = 0;
__enable_interrupt(); // FIQ & IRQ on
включение:
Код
__disable_interrupt(); // FIQ & IRQ off
while(IO0PIN_bit.P0_16);
while(!IO0PIN_bit.P0_16);
PINSEL1_bit.P0_16 = 1;
__enable_interrupt(); // FIQ & IRQ on
Вместе говорите... Поробую. Интересно в какой последовательности корректнее? По логике (да и вроде по описанию) при включении сначала разрешить PINSEL, затем уже VIC, а вот выключать не очень понятно как.