Changeset 6ac14a70 in mainline for kernel/arch/arm32/src/interrupt.c
- Timestamp:
- 2009-07-28T12:47:31Z (15 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5e73815
- Parents:
- 7038f55
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/arm32/src/interrupt.c
r7038f55 r6ac14a70 36 36 #include <arch/asm.h> 37 37 #include <arch/regutils.h> 38 #include <arch/ drivers/gxemul.h>38 #include <arch/machine.h> 39 39 #include <ddi/irq.h> 40 40 #include <ddi/device.h> … … 43 43 /** Initial size of a table holding interrupt handlers. */ 44 44 #define IRQ_COUNT 8 45 46 static irq_t gxemul_timer_irq;47 45 48 46 /** Disable interrupts. … … 53 51 { 54 52 ipl_t ipl = current_status_reg_read(); 55 53 56 54 current_status_reg_control_write(STATUS_REG_IRQ_DISABLED_BIT | ipl); 57 55 … … 66 64 { 67 65 ipl_t ipl = current_status_reg_read(); 68 66 69 67 current_status_reg_control_write(ipl & ~STATUS_REG_IRQ_DISABLED_BIT); 70 68 … … 92 90 } 93 91 94 /** Starts gxemul Real Time Clock device, which asserts regular interrupts.95 *96 * @param frequency Interrupts frequency (0 disables RTC).97 */98 static void gxemul_timer_start(uint32_t frequency)99 {100 *((uint32_t *) (gxemul_rtc + GXEMUL_RTC_FREQ_OFFSET))101 = frequency;102 }103 104 static irq_ownership_t gxemul_timer_claim(irq_t *irq)105 {106 return IRQ_ACCEPT;107 }108 109 /** Timer interrupt handler.110 *111 * @param irq Interrupt information.112 * @param arg Not used.113 */114 static void gxemul_timer_irq_handler(irq_t *irq)115 {116 /*117 * We are holding a lock which prevents preemption.118 * Release the lock, call clock() and reacquire the lock again.119 */120 spinlock_unlock(&irq->lock);121 clock();122 spinlock_lock(&irq->lock);123 124 /* acknowledge tick */125 *((uint32_t *) (gxemul_rtc + GXEMUL_RTC_ACK_OFFSET))126 = 0;127 }128 129 92 /** Initialize basic tables for exception dispatching 130 93 * and starts the timer. … … 133 96 { 134 97 irq_init(IRQ_COUNT, IRQ_COUNT); 98 machine_timer_irq_start(); 135 99 136 irq_initialize(&gxemul_timer_irq);137 gxemul_timer_irq.devno = device_assign_devno();138 gxemul_timer_irq.inr = GXEMUL_TIMER_IRQ;139 gxemul_timer_irq.claim = gxemul_timer_claim;140 gxemul_timer_irq.handler = gxemul_timer_irq_handler;141 142 irq_register(&gxemul_timer_irq);143 144 gxemul_timer_start(GXEMUL_TIMER_FREQ);145 100 } 146 101
Note:
See TracChangeset
for help on using the changeset viewer.