123kill12 0 12 июля, 2010 Опубликовано 12 июля, 2010 (изменено) · Жалоба регистры прерываний у них разные. у меня книжка по LPC2000 и там другое чем в даташите на LPC17xx. перечитал даташит и нашел нужную главу по внешние прерывание void ExInt(void) { SETENA0_bit.SETENA18=1; EXTINT_bit.EINT0=1; EXTMODE_bit.EXTMODE0=0; EXTPOLAR_bit.EXTPOLAR0=0; PINSEL4_bit.P2_10=0x01; } void EINT0_IRQHandler (void) { if( Reg2==0x40000000) { Reg2=Reg2>>1; } FIO1PIN=Reg2; Reg2=Reg2>>1; if (Reg2<0x10000000) { Reg2=0x80000000; } CLRPEND0_bit.CLRPEND18=0; } работает. но что то не так сделал с сбросом прерывания. оно после срабатывания постоянно вызывается((( Изменено 12 июля, 2010 пользователем 123kill12 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
123kill12 0 12 июля, 2010 Опубликовано 12 июля, 2010 · Жалоба перечитал даташит и нашел в чем накасячил. EXTINT геристр перрываний содержит EINT0 - чтобы сбросить его, следует программно записать в него 1. void ExInt(void) { SETENA0_bit.SETENA18=1; EXTMODE_bit.EXTMODE0=1; EXTPOLAR_bit.EXTPOLAR0=0; PINSEL4_bit.P2_10=0x01; } void EINT0_IRQHandler (void) { EXTINT_bit.EINT0=1; if( Reg2==0x40000000) { Reg2=Reg2>>1; } FIO1PIN=Reg2; Reg2=Reg2>>1; if (Reg2<0x10000000) { Reg2=0x80000000; } CLRPEND0_bit.CLRPEND18=1; } тогда вопрос зачем внешнее прерывание в носить в регистр сброса прерываний ICPR если через него сброс не происходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться