Код
#define AIC_SMR(n) (*(&AIC_SMR0 + n))
#define AIC_SVR(n) (*(&AIC_SVR0 + n))
#define AIC_SRCTYPE_INT_LEVEL_SENSITIVE 0x00 /* Level Sensitive */
#define AIC_SRCTYPE_INT_EDGE_TRIGGERED 0x20 /* Edge Triggered */
#define AIC_SRCTYPE_EXT_LOW_LEVEL 0x00 /* Low Level */
#define AIC_SRCTYPE_EXT_NEGATIVE_EDGE 0x20 /* Negative Edge */
#define AIC_SRCTYPE_EXT_HIGH_LEVEL 0x40 /* High Level */
#define AIC_SRCTYPE_EXT_POSITIVE_EDGE 0x60 /* Positive Edge */
#define US0_ID 6
void uart0_irq(void) __attribute__ ((interrupt("IRQ")));
void uart0_irq(void)
{
// PIOA_CODR = 0x01;
// delaym(100000);
// PIOA_SODR = 0x01;
int act=uart_get_sc(), i;
for (i=0;i<6;i++)
{
prev_active[i]=active[i];
active[i]=(act>>i) & 0x1;
}
AIC_EOICR = 0;
}
в мэйне:
AIC_IDCR = 1 << 6;
AIC_SVR(6) = (unsigned)uart0_irq;
AIC_SMR(6) = 0x00;//AIC_SRCTYPE_INT_EDGE_TRIGGERED;
AIC_ICCR = 1 << 6;
AIC_IECR = 1 << 6;
__ARMLIB_enableIRQ();
#define AIC_SVR(n) (*(&AIC_SVR0 + n))
#define AIC_SRCTYPE_INT_LEVEL_SENSITIVE 0x00 /* Level Sensitive */
#define AIC_SRCTYPE_INT_EDGE_TRIGGERED 0x20 /* Edge Triggered */
#define AIC_SRCTYPE_EXT_LOW_LEVEL 0x00 /* Low Level */
#define AIC_SRCTYPE_EXT_NEGATIVE_EDGE 0x20 /* Negative Edge */
#define AIC_SRCTYPE_EXT_HIGH_LEVEL 0x40 /* High Level */
#define AIC_SRCTYPE_EXT_POSITIVE_EDGE 0x60 /* Positive Edge */
#define US0_ID 6
void uart0_irq(void) __attribute__ ((interrupt("IRQ")));
void uart0_irq(void)
{
// PIOA_CODR = 0x01;
// delaym(100000);
// PIOA_SODR = 0x01;
int act=uart_get_sc(), i;
for (i=0;i<6;i++)
{
prev_active[i]=active[i];
active[i]=(act>>i) & 0x1;
}
AIC_EOICR = 0;
}
в мэйне:
AIC_IDCR = 1 << 6;
AIC_SVR(6) = (unsigned)uart0_irq;
AIC_SMR(6) = 0x00;//AIC_SRCTYPE_INT_EDGE_TRIGGERED;
AIC_ICCR = 1 << 6;
AIC_IECR = 1 << 6;
__ARMLIB_enableIRQ();
на uart каждую секунду идет информация со скоростью 9600 бод, но прерывание не происходит...
в чем причина? что забыли?