forked from Imagelibrary/rtems
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).
This commit is contained in:
@@ -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>
|
2011-06-07 Sebastian Huber <sebastian.huber@embedded-brains.de>
|
||||||
|
|
||||||
* shared/include/cache_.h: Moved content of "cache.h" to "cache_.h".
|
* shared/include/cache_.h: Moved content of "cache.h" to "cache_.h".
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
void bsp_interrupt_dispatch(void)
|
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);
|
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)
|
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 */
|
/* disable all interrupts */
|
||||||
AIC_CTL_REG(AIC_IDCR) = 0xffffffff;
|
AIC_CTL_REG(AIC_IDCR) = 0xffffffff;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user