File indexing completed on 2025-05-11 08:23:05
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <rtems/score/armv4.h>
0013
0014 #include <bsp.h>
0015 #include <bsp/irq.h>
0016 #include <bsp/irq-generic.h>
0017
0018 #include <lpc22xx.h>
0019
0020 void bsp_interrupt_dispatch(void)
0021 {
0022 rtems_vector_number vector = 31 - __builtin_clz(VICIRQStatus);
0023
0024 bsp_interrupt_handler_dispatch(vector);
0025
0026 VICVectAddr = 0;
0027 }
0028
0029 rtems_status_code bsp_interrupt_get_attributes(
0030 rtems_vector_number vector,
0031 rtems_interrupt_attributes *attributes
0032 )
0033 {
0034 return RTEMS_SUCCESSFUL;
0035 }
0036
0037 rtems_status_code bsp_interrupt_is_pending(
0038 rtems_vector_number vector,
0039 bool *pending
0040 )
0041 {
0042 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0043 bsp_interrupt_assert(pending != NULL);
0044 *pending = false;
0045 return RTEMS_UNSATISFIED;
0046 }
0047
0048 rtems_status_code bsp_interrupt_raise(rtems_vector_number vector)
0049 {
0050 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0051 return RTEMS_UNSATISFIED;
0052 }
0053
0054 rtems_status_code bsp_interrupt_clear(rtems_vector_number vector)
0055 {
0056 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0057 return RTEMS_UNSATISFIED;
0058 }
0059
0060 rtems_status_code bsp_interrupt_vector_is_enabled(
0061 rtems_vector_number vector,
0062 bool *enabled
0063 )
0064 {
0065 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0066 bsp_interrupt_assert(enabled != NULL);
0067 *enabled = false;
0068 return RTEMS_UNSATISFIED;
0069 }
0070
0071 rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector)
0072 {
0073 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0074 VICIntEnable |= 1 << vector;
0075 return RTEMS_SUCCESSFUL;
0076 }
0077
0078 rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
0079 {
0080 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0081 VICIntEnClr = 1 << vector;
0082 return RTEMS_SUCCESSFUL;
0083 }
0084
0085 rtems_status_code bsp_interrupt_set_priority(
0086 rtems_vector_number vector,
0087 uint32_t priority
0088 )
0089 {
0090 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0091 return RTEMS_UNSATISFIED;
0092 }
0093
0094 rtems_status_code bsp_interrupt_get_priority(
0095 rtems_vector_number vector,
0096 uint32_t *priority
0097 )
0098 {
0099 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0100 bsp_interrupt_assert(priority != NULL);
0101 return RTEMS_UNSATISFIED;
0102 }
0103
0104 void bsp_interrupt_facility_initialize(void)
0105 {
0106 volatile uint32_t *ctrl = (volatile uint32_t *) VICVectCntlBase;
0107 size_t i = 0;
0108
0109
0110 VICIntEnClr = 0xffffffff;
0111
0112
0113 VICIntSelect = 0;
0114
0115
0116 VICProtection = 0;
0117
0118 for (i = 0; i < 16; ++i) {
0119
0120 ctrl [i] = 0;
0121
0122
0123 VICVectAddr = 0;
0124 }
0125
0126
0127 VICVectAddr = 0;
0128
0129
0130 _CPU_ISR_install_vector(ARM_EXCEPTION_IRQ, _ARMV4_Exception_interrupt, NULL);
0131 }