Я использую Eclipse для написания c-кода для моей реализации NIOS II на MAX10.У меня есть два модуля verilog, которые генерируют импульс, один для обнаружения нарастающего фронта и один на обнаружении падающего фронта.Я просмотрел эти импульсы с помощью осциллографа, и оба генерируют только импульс на краю, который они предназначены для обнаружения.Но я посылаю эти импульсы на два входа PIO на NIOS, которые генерируют IRQ при обнаружении нарастающего фронта этих импульсов.Обнаружение нарастающего фронта генерирует прерывание только на нарастающих фронтах, но обнаружение падающего фронта генерирует прерывание на нарастающих и нарастающих фронтах, даже если они инициализируются в коде таким же образом.Мысли?
static void rise_edge_ISR( void * context)
{
adc_start(MODULAR_ADC_0_SEQUENCER_CSR_BASE);
RISES[edge_occured] = IORD_ALTERA_AVALON_PIO_DATA(RISE_EDGE_TIME_BASE);
edge_occured++;
//Acknowledge the IRQ : Clear the edgecapture register by writing to it
(individual bit setting is disabled so any write to the edge capture reg
clears it)
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(RISE_EDGE_DETECTION_BASE,
RISE_EDGE_DETECTION_BIT_CLEARING_EDGE_REGISTER);
}
static void fall_edge_ISR( void * context)
{
adc_start(MODULAR_ADC_0_SEQUENCER_CSR_BASE);
FALLS[fall_edge_occured] = IORD_ALTERA_AVALON_PIO_DATA(FALL_EDGE_TIME_BASE);
fall_edge_occured++;
//Acknowledge the IRQ : Clear the edgecapture register by writing to it
(individual bit setting is disabled so any write to the edge capture reg
clears it)
IOWR_ALTERA_AVALON_PIO_EDGE_CAP(FALL_EDGE_DETECTION_BASE,
FALL_EDGE_DETECTION_BIT_CLEARING_EDGE_REGISTER);
}
в main ()
alt_ic_isr_register(RISE_EDGE_DETECTION_IRQ_INTERRUPT_CONTROLLER_ID, //alt_u32 ic_id
RISE_EDGE_DETECTION_IRQ, //alt_u32 irq
rise_edge_ISR, //alt_isr_func isr
NULL,
NULL);
alt_ic_isr_register(FALL_EDGE_DETECTION_IRQ_INTERRUPT_CONTROLLER_ID, //alt_u32 ic_id
FALL_EDGE_DETECTION_IRQ, //alt_u32 irq
fall_edge_ISR, //alt_isr_func isr
NULL,
NULL);
//Setting interrupt mask register to 1 enables interrupts
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(RISE_EDGE_DETECTION_BASE,
RISE_EDGE_DETECTION_CAPTURE);
//Setting interrupt mask register to 1 enables interrupts
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(FALL_EDGE_DETECTION_BASE,
FALL_EDGE_DETECTION_CAPTURE);