fix for mbed lib issue 3 (i2c problem) see also https://mbed.org/users/mbed_official/code/mbed/issues/3 affected implementations: LPC812, LPC11U24, LPC1768, LPC2368, LPC4088
Fork of mbed-src by
startup_LPC11xx.cpp
00001 extern "C" { 00002 00003 #include "LPC11Uxx.h" 00004 00005 #define WEAK __attribute__ ((weak)) 00006 #define ALIAS(f) __attribute__ ((weak, alias (#f))) 00007 #define AFTER_VECTORS __attribute__ ((section(".after_vectors"))) 00008 00009 void ResetISR (void); 00010 WEAK void NMI_Handler (void); 00011 WEAK void HardFault_Handler (void); 00012 WEAK void SVCall_Handler (void); 00013 WEAK void PendSV_Handler (void); 00014 WEAK void SysTick_Handler (void); 00015 WEAK void IntDefaultHandler (void); 00016 void FLEX_INT0_IRQHandler(void) ALIAS(IntDefaultHandler); 00017 void FLEX_INT1_IRQHandler(void) ALIAS(IntDefaultHandler); 00018 void FLEX_INT2_IRQHandler(void) ALIAS(IntDefaultHandler); 00019 void FLEX_INT3_IRQHandler(void) ALIAS(IntDefaultHandler); 00020 void FLEX_INT4_IRQHandler(void) ALIAS(IntDefaultHandler); 00021 void FLEX_INT5_IRQHandler(void) ALIAS(IntDefaultHandler); 00022 void FLEX_INT6_IRQHandler(void) ALIAS(IntDefaultHandler); 00023 void FLEX_INT7_IRQHandler(void) ALIAS(IntDefaultHandler); 00024 void GINT0_IRQHandler (void) ALIAS(IntDefaultHandler); 00025 void GINT1_IRQHandler (void) ALIAS(IntDefaultHandler); 00026 void SSP1_IRQHandler (void) ALIAS(IntDefaultHandler); 00027 void I2C_IRQHandler (void) ALIAS(IntDefaultHandler); 00028 void TIMER16_0_IRQHandler(void) ALIAS(IntDefaultHandler); 00029 void TIMER16_1_IRQHandler(void) ALIAS(IntDefaultHandler); 00030 void TIMER32_0_IRQHandler(void) ALIAS(IntDefaultHandler); 00031 void TIMER32_1_IRQHandler(void) ALIAS(IntDefaultHandler); 00032 void SSP0_IRQHandler (void) ALIAS(IntDefaultHandler); 00033 void UART_IRQHandler (void) ALIAS(IntDefaultHandler); 00034 void USB_IRQHandler (void) ALIAS(IntDefaultHandler); 00035 void USB_FIQHandler (void) ALIAS(IntDefaultHandler); 00036 void ADC_IRQHandler (void) ALIAS(IntDefaultHandler); 00037 void WDT_IRQHandler (void) ALIAS(IntDefaultHandler); 00038 void BOD_IRQHandler (void) ALIAS(IntDefaultHandler); 00039 void FMC_IRQHandler (void) ALIAS(IntDefaultHandler); 00040 void USBWakeup_IRQHandler(void) ALIAS(IntDefaultHandler); 00041 00042 extern void __libc_init_array(void); 00043 extern int main(void); 00044 extern void _vStackTop(void); 00045 00046 extern void (* const g_pfnVectors[])(void); 00047 __attribute__ ((section(".isr_vector"))) 00048 void (* const g_pfnVectors[])(void) = { 00049 &_vStackTop, 00050 ResetISR, 00051 NMI_Handler, 00052 HardFault_Handler, 00053 0, 00054 0, 00055 0, 00056 0, 00057 0, 00058 0, 00059 0, 00060 SVCall_Handler, 00061 0, 00062 0, 00063 PendSV_Handler, 00064 SysTick_Handler, 00065 FLEX_INT0_IRQHandler, 00066 FLEX_INT1_IRQHandler, 00067 FLEX_INT2_IRQHandler, 00068 FLEX_INT3_IRQHandler, 00069 FLEX_INT4_IRQHandler, 00070 FLEX_INT5_IRQHandler, 00071 FLEX_INT6_IRQHandler, 00072 FLEX_INT7_IRQHandler, 00073 GINT0_IRQHandler, 00074 GINT1_IRQHandler, 00075 0, 00076 0, 00077 0, 00078 0, 00079 SSP1_IRQHandler, 00080 I2C_IRQHandler, 00081 TIMER16_0_IRQHandler, 00082 TIMER16_1_IRQHandler, 00083 TIMER32_0_IRQHandler, 00084 TIMER32_1_IRQHandler, 00085 SSP0_IRQHandler, 00086 UART_IRQHandler, 00087 USB_IRQHandler, 00088 USB_FIQHandler, 00089 ADC_IRQHandler, 00090 WDT_IRQHandler, 00091 BOD_IRQHandler, 00092 FMC_IRQHandler, 00093 0, 00094 0, 00095 USBWakeup_IRQHandler, 00096 0, 00097 }; 00098 00099 AFTER_VECTORS void data_init(unsigned int romstart, unsigned int start, unsigned int len) { 00100 unsigned int *pulDest = (unsigned int*) start; 00101 unsigned int *pulSrc = (unsigned int*) romstart; 00102 unsigned int loop; 00103 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = *pulSrc++; 00104 } 00105 00106 AFTER_VECTORS void bss_init(unsigned int start, unsigned int len) { 00107 unsigned int *pulDest = (unsigned int*) start; 00108 unsigned int loop; 00109 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = 0; 00110 } 00111 00112 extern unsigned int __data_section_table; 00113 extern unsigned int __data_section_table_end; 00114 extern unsigned int __bss_section_table_end; 00115 00116 AFTER_VECTORS void ResetISR(void) { 00117 unsigned int LoadAddr, ExeAddr, SectionLen; 00118 unsigned int *SectionTableAddr; 00119 00120 // Data Init 00121 SectionTableAddr = &__data_section_table; 00122 while (SectionTableAddr < &__data_section_table_end) { 00123 LoadAddr = *SectionTableAddr++; 00124 ExeAddr = *SectionTableAddr++; 00125 SectionLen = *SectionTableAddr++; 00126 data_init(LoadAddr, ExeAddr, SectionLen); 00127 } 00128 00129 // BSS Init 00130 while (SectionTableAddr < &__bss_section_table_end) { 00131 ExeAddr = *SectionTableAddr++; 00132 SectionLen = *SectionTableAddr++; 00133 bss_init(ExeAddr, SectionLen); 00134 } 00135 00136 SystemInit(); 00137 __libc_init_array(); 00138 main(); 00139 while (1) {;} 00140 } 00141 00142 AFTER_VECTORS void NMI_Handler (void) {while(1){}} 00143 AFTER_VECTORS void HardFault_Handler(void) {while(1){}} 00144 AFTER_VECTORS void SVCall_Handler (void) {while(1){}} 00145 AFTER_VECTORS void PendSV_Handler (void) {while(1){}} 00146 AFTER_VECTORS void SysTick_Handler (void) {while(1){}} 00147 AFTER_VECTORS void IntDefaultHandler(void) {while(1){}} 00148 00149 #include <stdlib.h> 00150 00151 void *operator new (size_t size) {return malloc(size);} 00152 void *operator new[](size_t size) {return malloc(size);} 00153 00154 void operator delete (void *p) {free(p);} 00155 void operator delete[](void *p) {free(p);} 00156 00157 int __aeabi_atexit(void *object, void (*destructor)(void *), void *dso_handle) { 00158 return 0; 00159 } 00160 00161 }
Generated on Tue Jul 12 2022 13:47:02 by 1.7.2