forked from Imagelibrary/rtems
Switched to SCV64.
This commit is contained in:
@@ -64,28 +64,56 @@ rtems_isr external_exception_ISR (
|
|||||||
rtems_vector_number vector /* IN */
|
rtems_vector_number vector /* IN */
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
rtems_unsigned16 index;
|
rtems_unsigned16 index;
|
||||||
rtems_vector_number chained_vector;
|
rtems_boolean is_active=FALSE;
|
||||||
Chain_Node *node;
|
rtems_unsigned32 scv64_status;
|
||||||
EE_ISR_Type *ee_isr;
|
rtems_vector_number chained_vector;
|
||||||
|
Chain_Node *node;
|
||||||
|
EE_ISR_Type *ee_isr;
|
||||||
|
|
||||||
/*
|
|
||||||
* Read vector.
|
|
||||||
*/
|
|
||||||
chained_vector = Get_interrupt();
|
|
||||||
index = chained_vector - DMV170_IRQ_FIRST;
|
|
||||||
node = ISR_Array[ index ].first;
|
|
||||||
while ( !_Chain_Is_tail( &ISR_Array[ index ], node ) ) {
|
|
||||||
ee_isr = (EE_ISR_Type *) node;
|
|
||||||
(*ee_isr->handler)( ee_isr->vector );
|
|
||||||
node = node->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clear the interrupt.
|
* Get all active interrupts.
|
||||||
*/
|
*/
|
||||||
Clear_interrupt( chained_vector );
|
scv64_status = SCV64_Get_Interrupt();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Process any set interrupts.
|
||||||
|
*/
|
||||||
|
for (index = 0; index <= 5; index++) {
|
||||||
|
switch(index) {
|
||||||
|
case 0:
|
||||||
|
is_active = SCV64_Is_IRQ0( scv64_status );
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
is_active = SCV64_Is_IRQ1( scv64_status );
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
is_active = SCV64_Is_IRQ2( scv64_status );
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
is_active = SCV64_Is_IRQ3( scv64_status );
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
is_active = SCV64_Is_IRQ4( scv64_status );
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
is_active = SCV64_Is_IRQ5( scv64_status );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_active) {
|
||||||
|
/*
|
||||||
|
* Read vector.
|
||||||
|
*/
|
||||||
|
node = ISR_Array[ index ].first;
|
||||||
|
while ( !_Chain_Is_tail( &ISR_Array[ index ], node ) ) {
|
||||||
|
ee_isr = (EE_ISR_Type *) node;
|
||||||
|
(*ee_isr->handler)( ee_isr->vector );
|
||||||
|
node = node->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -110,6 +138,11 @@ void initialize_external_exception_vector ()
|
|||||||
|
|
||||||
Nodes_Used = 0;
|
Nodes_Used = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the SCV64 chip
|
||||||
|
*/
|
||||||
|
SCV64_Initialize();
|
||||||
|
|
||||||
for (i=0; i <NUM_LIRQ; i++)
|
for (i=0; i <NUM_LIRQ; i++)
|
||||||
Chain_Initialize_empty( &ISR_Array[i] );
|
Chain_Initialize_empty( &ISR_Array[i] );
|
||||||
|
|
||||||
@@ -121,7 +154,6 @@ void initialize_external_exception_vector ()
|
|||||||
status = rtems_interrupt_catch( external_exception_ISR,
|
status = rtems_interrupt_catch( external_exception_ISR,
|
||||||
PPC_IRQ_EXTERNAL , (rtems_isr_entry *) &previous_isr );
|
PPC_IRQ_EXTERNAL , (rtems_isr_entry *) &previous_isr );
|
||||||
|
|
||||||
Init_Css();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*PAGE
|
/*PAGE
|
||||||
@@ -187,7 +219,10 @@ rtems_isr_entry set_EE_vector(
|
|||||||
/*
|
/*
|
||||||
* Enable the interrupt.
|
* Enable the interrupt.
|
||||||
*/
|
*/
|
||||||
enable_card_interrupt( vector );
|
if (vector == DMV170_LIRQ5)
|
||||||
|
SCV64_Generate_DUART_Interrupts();
|
||||||
|
else
|
||||||
|
enable_card_interrupt( vector );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* No interrupt service routine was removed so return 0
|
* No interrupt service routine was removed so return 0
|
||||||
|
|||||||
Reference in New Issue
Block a user