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_LPC17xx.cpp
00001 extern "C" { 00002 00003 #include "LPC17xx.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 extern unsigned int __data_section_table; 00010 extern unsigned int __data_section_table_end; 00011 extern unsigned int __bss_section_table; 00012 extern unsigned int __bss_section_table_end; 00013 00014 extern void __libc_init_array(void); 00015 extern int main(void); 00016 extern void _vStackTop(void); 00017 extern void (* const g_pfnVectors[])(void); 00018 00019 void ResetISR (void); 00020 WEAK void NMI_Handler (void); 00021 WEAK void HardFault_Handler (void); 00022 WEAK void MemManage_Handler (void); 00023 WEAK void BusFault_Handler (void); 00024 WEAK void UsageFault_Handler(void); 00025 WEAK void SVCall_Handler (void); 00026 WEAK void DebugMon_Handler (void); 00027 WEAK void PendSV_Handler (void); 00028 WEAK void SysTick_Handler (void); 00029 WEAK void IntDefaultHandler (void); 00030 00031 void WDT_IRQHandler (void) ALIAS(IntDefaultHandler); 00032 void TIMER0_IRQHandler (void) ALIAS(IntDefaultHandler); 00033 void TIMER1_IRQHandler (void) ALIAS(IntDefaultHandler); 00034 void TIMER2_IRQHandler (void) ALIAS(IntDefaultHandler); 00035 void TIMER3_IRQHandler (void) ALIAS(IntDefaultHandler); 00036 void UART0_IRQHandler (void) ALIAS(IntDefaultHandler); 00037 void UART1_IRQHandler (void) ALIAS(IntDefaultHandler); 00038 void UART2_IRQHandler (void) ALIAS(IntDefaultHandler); 00039 void UART3_IRQHandler (void) ALIAS(IntDefaultHandler); 00040 void PWM1_IRQHandler (void) ALIAS(IntDefaultHandler); 00041 void I2C0_IRQHandler (void) ALIAS(IntDefaultHandler); 00042 void I2C1_IRQHandler (void) ALIAS(IntDefaultHandler); 00043 void I2C2_IRQHandler (void) ALIAS(IntDefaultHandler); 00044 void SPI_IRQHandler (void) ALIAS(IntDefaultHandler); 00045 void SSP0_IRQHandler (void) ALIAS(IntDefaultHandler); 00046 void SSP1_IRQHandler (void) ALIAS(IntDefaultHandler); 00047 void PLL0_IRQHandler (void) ALIAS(IntDefaultHandler); 00048 void RTC_IRQHandler (void) ALIAS(IntDefaultHandler); 00049 void EINT0_IRQHandler (void) ALIAS(IntDefaultHandler); 00050 void EINT1_IRQHandler (void) ALIAS(IntDefaultHandler); 00051 void EINT2_IRQHandler (void) ALIAS(IntDefaultHandler); 00052 void EINT3_IRQHandler (void) ALIAS(IntDefaultHandler); 00053 void ADC_IRQHandler (void) ALIAS(IntDefaultHandler); 00054 void BOD_IRQHandler (void) ALIAS(IntDefaultHandler); 00055 void USB_IRQHandler (void) ALIAS(IntDefaultHandler); 00056 void CAN_IRQHandler (void) ALIAS(IntDefaultHandler); 00057 void DMA_IRQHandler (void) ALIAS(IntDefaultHandler); 00058 void I2S_IRQHandler (void) ALIAS(IntDefaultHandler); 00059 void ENET_IRQHandler (void) ALIAS(IntDefaultHandler); 00060 void RIT_IRQHandler (void) ALIAS(IntDefaultHandler); 00061 void MCPWM_IRQHandler (void) ALIAS(IntDefaultHandler); 00062 void QEI_IRQHandler (void) ALIAS(IntDefaultHandler); 00063 void PLL1_IRQHandler (void) ALIAS(IntDefaultHandler); 00064 void USBActivity_IRQHandler(void) ALIAS(IntDefaultHandler); 00065 void CANActivity_IRQHandler(void) ALIAS(IntDefaultHandler); 00066 00067 __attribute__ ((section(".isr_vector"))) 00068 void (* const g_pfnVectors[])(void) = { 00069 &_vStackTop, ResetISR, NMI_Handler, 00070 HardFault_Handler, 00071 MemManage_Handler, 00072 BusFault_Handler, 00073 UsageFault_Handler, 00074 0, 00075 0, 00076 0, 00077 0, 00078 SVCall_Handler, 00079 DebugMon_Handler, 00080 0, 00081 PendSV_Handler, 00082 SysTick_Handler, 00083 WDT_IRQHandler, 00084 TIMER0_IRQHandler, 00085 TIMER1_IRQHandler, 00086 TIMER2_IRQHandler, 00087 TIMER3_IRQHandler, 00088 UART0_IRQHandler, 00089 UART1_IRQHandler, 00090 UART2_IRQHandler, 00091 UART3_IRQHandler, 00092 PWM1_IRQHandler, 00093 I2C0_IRQHandler, 00094 I2C1_IRQHandler, 00095 I2C2_IRQHandler, 00096 SPI_IRQHandler, 00097 SSP0_IRQHandler, 00098 SSP1_IRQHandler, 00099 PLL0_IRQHandler, 00100 RTC_IRQHandler, 00101 EINT0_IRQHandler, 00102 EINT1_IRQHandler, 00103 EINT2_IRQHandler, 00104 EINT3_IRQHandler, 00105 ADC_IRQHandler, 00106 BOD_IRQHandler, 00107 USB_IRQHandler, 00108 CAN_IRQHandler, 00109 DMA_IRQHandler, 00110 I2S_IRQHandler, 00111 ENET_IRQHandler, 00112 RIT_IRQHandler, 00113 MCPWM_IRQHandler, 00114 QEI_IRQHandler, 00115 PLL1_IRQHandler, 00116 USBActivity_IRQHandler, 00117 CANActivity_IRQHandler, 00118 }; 00119 00120 AFTER_VECTORS void data_init(unsigned int romstart, unsigned int start, unsigned int len) { 00121 unsigned int *pulDest = (unsigned int*) start; 00122 unsigned int *pulSrc = (unsigned int*) romstart; 00123 unsigned int loop; 00124 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = *pulSrc++; 00125 } 00126 00127 AFTER_VECTORS void bss_init(unsigned int start, unsigned int len) { 00128 unsigned int *pulDest = (unsigned int*) start; 00129 unsigned int loop; 00130 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = 0; 00131 } 00132 00133 AFTER_VECTORS void ResetISR(void) { 00134 unsigned int LoadAddr, ExeAddr, SectionLen; 00135 unsigned int *SectionTableAddr; 00136 00137 SectionTableAddr = &__data_section_table; 00138 00139 while (SectionTableAddr < &__data_section_table_end) { 00140 LoadAddr = *SectionTableAddr++; 00141 ExeAddr = *SectionTableAddr++; 00142 SectionLen = *SectionTableAddr++; 00143 data_init(LoadAddr, ExeAddr, SectionLen); 00144 } 00145 while (SectionTableAddr < &__bss_section_table_end) { 00146 ExeAddr = *SectionTableAddr++; 00147 SectionLen = *SectionTableAddr++; 00148 bss_init(ExeAddr, SectionLen); 00149 } 00150 00151 SystemInit(); 00152 __libc_init_array(); 00153 main(); 00154 while (1) {;} 00155 } 00156 00157 AFTER_VECTORS void NMI_Handler (void) {} 00158 AFTER_VECTORS void HardFault_Handler (void) {} 00159 AFTER_VECTORS void MemManage_Handler (void) {} 00160 AFTER_VECTORS void BusFault_Handler (void) {} 00161 AFTER_VECTORS void UsageFault_Handler(void) {} 00162 AFTER_VECTORS void SVCall_Handler (void) {} 00163 AFTER_VECTORS void DebugMon_Handler (void) {} 00164 AFTER_VECTORS void PendSV_Handler (void) {} 00165 AFTER_VECTORS void SysTick_Handler (void) {} 00166 AFTER_VECTORS void IntDefaultHandler (void) {} 00167 00168 int __aeabi_atexit(void *object, void (*destructor)(void *), void *dso_handle) {return 0;} 00169 } 00170 00171 #include <stdlib.h> 00172 00173 void *operator new(size_t size) {return malloc(size);} 00174 void *operator new[](size_t size){return malloc(size);} 00175 00176 void operator delete(void *p) {free(p);} 00177 void operator delete[](void *p) {free(p);}
Generated on Tue Jul 12 2022 13:47:02 by 1.7.2