PR 1832/libcpu
	* at91rm9200/irq/irq.c: he bsp_interrupt_dispatch routine does not
	determine the correct interrupt source number. According to the
	datasheet, the reading of the interrupt vector register (AIC_IVR)
	notifies the hardware that the OS is taken care of the interrupt.
	Only after AIC_IVR have been read can the correct source number be
	read from the interrupt status register (AIC_ISR).
This commit is contained in:
Joel Sherrill
2011-07-13 20:24:04 +00:00
parent aa03052eee
commit bbacebe209
2 changed files with 17 additions and 1 deletions

View File

@@ -1,3 +1,13 @@
2011-07-13 Sebastian Huber <sebastian.huber@embedded-brains.de>
PR 1832/libcpu
* at91rm9200/irq/irq.c: he bsp_interrupt_dispatch routine does not
determine the correct interrupt source number. According to the
datasheet, the reading of the interrupt vector register (AIC_IVR)
notifies the hardware that the OS is taken care of the interrupt.
Only after AIC_IVR have been read can the correct source number be
read from the interrupt status register (AIC_ISR).
2011-06-07 Sebastian Huber <sebastian.huber@embedded-brains.de>
* shared/include/cache_.h: Moved content of "cache.h" to "cache_.h".

View File

@@ -21,7 +21,7 @@
void bsp_interrupt_dispatch(void)
{
rtems_vector_number vector = AIC_CTL_REG(AIC_ISR);
rtems_vector_number vector = AIC_CTL_REG(AIC_IVR);
bsp_interrupt_handler_dispatch(vector);
@@ -44,6 +44,12 @@ rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
rtems_status_code bsp_interrupt_facility_initialize(void)
{
unsigned long i = 0;
for (i = 0; i < 32; ++i) {
AIC_SVR_REG(i<<2) = i;
}
/* disable all interrupts */
AIC_CTL_REG(AIC_IDCR) = 0xffffffff;