added prescaler for 16 bit pwm in LPC1347 target

Fork of mbed-dev by mbed official

Committer:
JojoS
Date:
Sat Sep 10 15:32:04 2016 +0000
Revision:
147:ba84b7dc41a7
Parent:
144:ef7eb2e8f9f7
added prescaler for 16 bit timers (solution as in LPC11xx), default prescaler 31 for max 28 ms period time

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 extern "C" {
<> 144:ef7eb2e8f9f7 2
<> 144:ef7eb2e8f9f7 3 #include "LPC11xx.h"
<> 144:ef7eb2e8f9f7 4
<> 144:ef7eb2e8f9f7 5 #define WEAK __attribute__ ((weak))
<> 144:ef7eb2e8f9f7 6 #define ALIAS(f) __attribute__ ((weak, alias (#f)))
<> 144:ef7eb2e8f9f7 7 #define AFTER_VECTORS __attribute__ ((section(".after_vectors")))
<> 144:ef7eb2e8f9f7 8
<> 144:ef7eb2e8f9f7 9 void ResetISR (void);
<> 144:ef7eb2e8f9f7 10 WEAK void NMI_Handler (void);
<> 144:ef7eb2e8f9f7 11 WEAK void HardFault_Handler (void);
<> 144:ef7eb2e8f9f7 12 WEAK void SVC_Handler (void);
<> 144:ef7eb2e8f9f7 13 WEAK void PendSV_Handler (void);
<> 144:ef7eb2e8f9f7 14 WEAK void SysTick_Handler (void);
<> 144:ef7eb2e8f9f7 15 WEAK void IntDefaultHandler (void);
<> 144:ef7eb2e8f9f7 16 void FLEX_INT0_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 17 void FLEX_INT1_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 18 void FLEX_INT2_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 19 void FLEX_INT3_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 20 void FLEX_INT4_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 21 void FLEX_INT5_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 22 void FLEX_INT6_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 23 void FLEX_INT7_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 24 void GINT0_IRQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 25 void GINT1_IRQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 26 void SSP1_IRQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 27 void I2C_IRQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 28 void TIMER16_0_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 29 void TIMER16_1_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 30 void TIMER32_0_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 31 void TIMER32_1_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 32 void SSP0_IRQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 33 void UART_IRQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 34 void USB_IRQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 35 void USB_FIQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 36 void ADC_IRQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 37 void WDT_IRQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 38 void BOD_IRQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 39 void FMC_IRQHandler (void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 40 void USBWakeup_IRQHandler(void) ALIAS(IntDefaultHandler);
<> 144:ef7eb2e8f9f7 41
<> 144:ef7eb2e8f9f7 42 extern void __libc_init_array(void);
<> 144:ef7eb2e8f9f7 43 extern int main(void);
<> 144:ef7eb2e8f9f7 44 extern void _vStackTop(void);
<> 144:ef7eb2e8f9f7 45
<> 144:ef7eb2e8f9f7 46 extern void (* const g_pfnVectors[])(void);
<> 144:ef7eb2e8f9f7 47 __attribute__ ((section(".isr_vector")))
<> 144:ef7eb2e8f9f7 48 void (* const g_pfnVectors[])(void) = {
<> 144:ef7eb2e8f9f7 49 &_vStackTop,
<> 144:ef7eb2e8f9f7 50 ResetISR,
<> 144:ef7eb2e8f9f7 51 NMI_Handler,
<> 144:ef7eb2e8f9f7 52 HardFault_Handler,
<> 144:ef7eb2e8f9f7 53 0,
<> 144:ef7eb2e8f9f7 54 0,
<> 144:ef7eb2e8f9f7 55 0,
<> 144:ef7eb2e8f9f7 56 0,
<> 144:ef7eb2e8f9f7 57 0,
<> 144:ef7eb2e8f9f7 58 0,
<> 144:ef7eb2e8f9f7 59 0,
<> 144:ef7eb2e8f9f7 60 SVC_Handler,
<> 144:ef7eb2e8f9f7 61 0,
<> 144:ef7eb2e8f9f7 62 0,
<> 144:ef7eb2e8f9f7 63 PendSV_Handler,
<> 144:ef7eb2e8f9f7 64 SysTick_Handler,
<> 144:ef7eb2e8f9f7 65 FLEX_INT0_IRQHandler,
<> 144:ef7eb2e8f9f7 66 FLEX_INT1_IRQHandler,
<> 144:ef7eb2e8f9f7 67 FLEX_INT2_IRQHandler,
<> 144:ef7eb2e8f9f7 68 FLEX_INT3_IRQHandler,
<> 144:ef7eb2e8f9f7 69 FLEX_INT4_IRQHandler,
<> 144:ef7eb2e8f9f7 70 FLEX_INT5_IRQHandler,
<> 144:ef7eb2e8f9f7 71 FLEX_INT6_IRQHandler,
<> 144:ef7eb2e8f9f7 72 FLEX_INT7_IRQHandler,
<> 144:ef7eb2e8f9f7 73 GINT0_IRQHandler,
<> 144:ef7eb2e8f9f7 74 GINT1_IRQHandler,
<> 144:ef7eb2e8f9f7 75 0,
<> 144:ef7eb2e8f9f7 76 0,
<> 144:ef7eb2e8f9f7 77 0,
<> 144:ef7eb2e8f9f7 78 0,
<> 144:ef7eb2e8f9f7 79 SSP1_IRQHandler,
<> 144:ef7eb2e8f9f7 80 I2C_IRQHandler,
<> 144:ef7eb2e8f9f7 81 TIMER16_0_IRQHandler,
<> 144:ef7eb2e8f9f7 82 TIMER16_1_IRQHandler,
<> 144:ef7eb2e8f9f7 83 TIMER32_0_IRQHandler,
<> 144:ef7eb2e8f9f7 84 TIMER32_1_IRQHandler,
<> 144:ef7eb2e8f9f7 85 SSP0_IRQHandler,
<> 144:ef7eb2e8f9f7 86 UART_IRQHandler,
<> 144:ef7eb2e8f9f7 87 USB_IRQHandler,
<> 144:ef7eb2e8f9f7 88 USB_FIQHandler,
<> 144:ef7eb2e8f9f7 89 ADC_IRQHandler,
<> 144:ef7eb2e8f9f7 90 WDT_IRQHandler,
<> 144:ef7eb2e8f9f7 91 BOD_IRQHandler,
<> 144:ef7eb2e8f9f7 92 FMC_IRQHandler,
<> 144:ef7eb2e8f9f7 93 0,
<> 144:ef7eb2e8f9f7 94 0,
<> 144:ef7eb2e8f9f7 95 USBWakeup_IRQHandler,
<> 144:ef7eb2e8f9f7 96 0,
<> 144:ef7eb2e8f9f7 97 };
<> 144:ef7eb2e8f9f7 98
<> 144:ef7eb2e8f9f7 99 AFTER_VECTORS void data_init(unsigned int romstart, unsigned int start, unsigned int len) {
<> 144:ef7eb2e8f9f7 100 unsigned int *pulDest = (unsigned int*) start;
<> 144:ef7eb2e8f9f7 101 unsigned int *pulSrc = (unsigned int*) romstart;
<> 144:ef7eb2e8f9f7 102 unsigned int loop;
<> 144:ef7eb2e8f9f7 103 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = *pulSrc++;
<> 144:ef7eb2e8f9f7 104 }
<> 144:ef7eb2e8f9f7 105
<> 144:ef7eb2e8f9f7 106 AFTER_VECTORS void bss_init(unsigned int start, unsigned int len) {
<> 144:ef7eb2e8f9f7 107 unsigned int *pulDest = (unsigned int*) start;
<> 144:ef7eb2e8f9f7 108 unsigned int loop;
<> 144:ef7eb2e8f9f7 109 for (loop = 0; loop < len; loop = loop + 4) *pulDest++ = 0;
<> 144:ef7eb2e8f9f7 110 }
<> 144:ef7eb2e8f9f7 111
<> 144:ef7eb2e8f9f7 112 extern unsigned int __data_section_table;
<> 144:ef7eb2e8f9f7 113 extern unsigned int __data_section_table_end;
<> 144:ef7eb2e8f9f7 114 extern unsigned int __bss_section_table_end;
<> 144:ef7eb2e8f9f7 115
<> 144:ef7eb2e8f9f7 116 extern "C" void software_init_hook(void) __attribute__((weak));
<> 144:ef7eb2e8f9f7 117
<> 144:ef7eb2e8f9f7 118 AFTER_VECTORS void ResetISR(void) {
<> 144:ef7eb2e8f9f7 119 unsigned int LoadAddr, ExeAddr, SectionLen;
<> 144:ef7eb2e8f9f7 120 unsigned int *SectionTableAddr;
<> 144:ef7eb2e8f9f7 121
<> 144:ef7eb2e8f9f7 122 // Data Init
<> 144:ef7eb2e8f9f7 123 SectionTableAddr = &__data_section_table;
<> 144:ef7eb2e8f9f7 124 while (SectionTableAddr < &__data_section_table_end) {
<> 144:ef7eb2e8f9f7 125 LoadAddr = *SectionTableAddr++;
<> 144:ef7eb2e8f9f7 126 ExeAddr = *SectionTableAddr++;
<> 144:ef7eb2e8f9f7 127 SectionLen = *SectionTableAddr++;
<> 144:ef7eb2e8f9f7 128 data_init(LoadAddr, ExeAddr, SectionLen);
<> 144:ef7eb2e8f9f7 129 }
<> 144:ef7eb2e8f9f7 130
<> 144:ef7eb2e8f9f7 131 // BSS Init
<> 144:ef7eb2e8f9f7 132 while (SectionTableAddr < &__bss_section_table_end) {
<> 144:ef7eb2e8f9f7 133 ExeAddr = *SectionTableAddr++;
<> 144:ef7eb2e8f9f7 134 SectionLen = *SectionTableAddr++;
<> 144:ef7eb2e8f9f7 135 bss_init(ExeAddr, SectionLen);
<> 144:ef7eb2e8f9f7 136 }
<> 144:ef7eb2e8f9f7 137
<> 144:ef7eb2e8f9f7 138 SystemInit();
<> 144:ef7eb2e8f9f7 139 if (software_init_hook) // give control to the RTOS
<> 144:ef7eb2e8f9f7 140 software_init_hook(); // this will also call __libc_init_array
<> 144:ef7eb2e8f9f7 141 else {
<> 144:ef7eb2e8f9f7 142 __libc_init_array();
<> 144:ef7eb2e8f9f7 143 main();
<> 144:ef7eb2e8f9f7 144 }
<> 144:ef7eb2e8f9f7 145 while (1) {;}
<> 144:ef7eb2e8f9f7 146 }
<> 144:ef7eb2e8f9f7 147
<> 144:ef7eb2e8f9f7 148 AFTER_VECTORS void NMI_Handler (void) {while(1){}}
<> 144:ef7eb2e8f9f7 149 AFTER_VECTORS void HardFault_Handler(void) {while(1){}}
<> 144:ef7eb2e8f9f7 150 AFTER_VECTORS void SVC_Handler (void) {while(1){}}
<> 144:ef7eb2e8f9f7 151 AFTER_VECTORS void PendSV_Handler (void) {while(1){}}
<> 144:ef7eb2e8f9f7 152 AFTER_VECTORS void SysTick_Handler (void) {while(1){}}
<> 144:ef7eb2e8f9f7 153 AFTER_VECTORS void IntDefaultHandler(void) {while(1){}}
<> 144:ef7eb2e8f9f7 154
<> 144:ef7eb2e8f9f7 155 int __aeabi_atexit(void *object, void (*destructor)(void *), void *dso_handle) {
<> 144:ef7eb2e8f9f7 156 return 0;
<> 144:ef7eb2e8f9f7 157 }
<> 144:ef7eb2e8f9f7 158
<> 144:ef7eb2e8f9f7 159 }