Цитата
А что делает магическая функция AT91F_Disable_Interrupt()? Возможно она запрещает только IRQ, а у вас еще задействовано FIQ? Даже и не знаю, что еще можно придумать. Проблема пропадает именно при включении светодиода, или при любом действии с портом? С питанием все в порядке? Земли на все ноги заведены, питание на VDDFLASH заведено и зашунтировано блокировочным конденсатором?
Код AT91F_Disable_Interrupt() :
Код
#define I_BIT 0x00000080
#define F_BIT 0x00000040
mrs r0,CPSR
orr r0, r0, #(I_BIT | F_BIT)
msr CPSR_c,r0
mrs r0,CPSR
ands r0,r0, #(I_BIT | F_BIT)
beq AT91F_Disable_Interrupt
bx lr
Т.е. FIQ вроде как тоже запрещается. С землей все в порядке, блокировочный конденсатор на месте.
После нескольких экспериментов оказалось, что проблема пропадает не только если зажечь светодиод, но и вообще после любого действия с любым PIO! Да даже запись в регистр RTMR помогает!
Теоретически... Возможно действительно что-то с питанием от USB... Ибо
здесь у меня тоже были проблемы с зависанием при ожидании бита подтверждения, и был сделан вывод о несовершенстве моего USB-порта. Но только в данном-то случае по юсб ничего не передается, а бит подтверждения FRDY генерируется внутри процессора...
Чуть позже попробую испытать на другом компьютере... Может с ним все нормально будет...