[fpc-pascal] ARM-embedded & Interrupt numbers

Koenraad Lelong fpascal1 at de-brouwerij.be
Fri Aug 14 09:08:20 CEST 2015


Hi,

I'm trying to restart my arm-embedded project.
A few years ago I had a working compiler, with some utility-files.

I made a new cross-compiler (fpc svn 31290). But I don't find where the 
interrupt-numbers of an STM32F103xx processor are defined.
So I made an inc-file and added that to e.g. 
rtl/embedded/arm/stm32f10x_md.pp, because that's the processor I'm 
working with.
The inc-file does contain ifdef's for the different STM32F10x processors 
though, so all stm32F10x files could contain that inc-file.

Is this the way to do it ? Or is there  better way ? Or does this exist 
already ?

Comments please.

If that's a proper way to do this, how could this be included in a next 
version of fpc ? Do I make a bug-report including the new file, with 
diffs for the modified files ?
How do I make a proper diff ?

Thanks,

Koenraad.

Code snippet of the interrupt-numbers :

const
   NonMaskableInt_IRQn        = -14; //  2 Non Maskable // interrupt 

   HardFault_IRQn              = -13;  //  4 Cortex-M3 Memory Management 
// interrupt
   MemoryManagement_IRQn      = -12; //  4 Cortex-M3 Memory Management 
// interrupt
   BusFault_IRQn              = -11; //  5 Cortex-M3 Bus Fault // 
interrupt
   UsageFault_IRQn            = -10; //  6 Cortex-M3 Usage Fault // 
interrupt
   SVCall_IRQn                = -5;   // 11 Cortex-M3 SV Call // 
interrupt
   DebugMonitor_IRQn          = -4;   // 12 Cortex-M3 Debug Monitor // 
interrupt
   PendSV_IRQn                = -2;   // 14 Cortex-M3 Pend SV // 
interrupt
   SysTick_IRQn                = -1;  // 15 Cortex-M3 System Tick // 
interrupt
   WWDG_IRQn                  = 0;   //  Window WatchDog // interrupt 

   PVD_IRQn                    = 1;    //  PVD through EXTI Line 
detection // interrupt
   TAMPER_IRQn                = 2;   //  Tamper // interrupt 

   RTC_IRQn                    = 3;    //  RTC global // interrupt 

   FLASH_IRQn                  = 4;    //  FLASH global // interrupt 

   RCC_IRQn                    = 5;    //  RCC global // interrupt 

   EXTI0_IRQn                  = 6;    //  EXTI Line0 // interrupt 

   EXTI1_IRQn                  = 7;    //  EXTI Line1 // interrupt 

   EXTI2_IRQn                  = 8;    //  EXTI Line2 // interrupt 

   EXTI3_IRQn                  = 9;    //  EXTI Line3 // interrupt 

   EXTI4_IRQn                  = 10;  // EXTI Line4 // interrupt 

   DMA1_Channel1_IRQn          = 11;  // DMA1 Channel 1 global // 
interrupt
   DMA1_Channel2_IRQn          = 12;  // DMA1 Channel 2 global // 
interrupt
   DMA1_Channel3_IRQn          = 13;  // DMA1 Channel 3 global // 
interrupt
   DMA1_Channel4_IRQn          = 14;  // DMA1 Channel 4 global // 
interrupt
   DMA1_Channel5_IRQn          = 15;  // DMA1 Channel 5 global // 
interrupt
   DMA1_Channel6_IRQn          = 16;  // DMA1 Channel 6 global // 
interrupt
   DMA1_Channel7_IRQn          = 17;  // DMA1 Channel 7 global // interrupt

   {$ifdef stm32f10x_ld}
   ADC1_2_IRQn                = 18;   // ADC1 et ADC2 global // 
interrupt
   USB_HP_CAN1_TX_IRQn        = 19;   // USB High Priority or CAN1 TX 
Interrupts
   USB_LP_CAN1_RX0_IRQn        = 20;  // USB Low Priority or CAN1 RX0 
Interrupts
   CAN1_RX1_IRQn              = 21;   // CAN1 RX1 // interrupt 

   CAN1_SCE_IRQn              = 22;   // CAN1 SCE // interrupt 

   EXTI9_5_IRQn                = 23;  // External Line[9:5] Interrupts 

   TIM1_BRK_IRQn              = 24;   // TIM1 Break // interrupt 

   TIM1_UP_IRQn                = 25;  // TIM1 Update // interrupt 

   TIM1_TRG_COM_IRQn          = 26;   // TIM1 Trigger and Commutation // 
interrupt
   TIM1_CC_IRQn                = 27;  // TIM1 Capture Compare // 
interrupt
   TIM2_IRQn                  = 28;   // TIM2 global // interrupt 

   TIM3_IRQn                  = 29;   // TIM3 global // interrupt 

   I2C1_EV_IRQn                = 31;  // I2C1 Event // interrupt 

   I2C1_ER_IRQn                = 32;  // I2C1 Error // interrupt 

   SPI1_IRQn                  = 35;   // SPI1 global // interrupt 

   USART1_IRQn                = 37;   // USART1 global // interrupt 

   USART2_IRQn                = 38;   // USART2 global // interrupt 

   EXTI15_10_IRQn              = 40;  // External Line[15:10] Interrupts 

   RTCAlarm_IRQn              = 41;   // RTC Alarm through EXTI Line // 
interrupt
   USBWakeUp_IRQn              = 42;  // USB WakeUp from suspend through 
EXTI Line // interrupt
   {$endif}

   {$ifdef STM32F10X_LD_VL}
   ADC1_2_IRQn                = 18;   // ADC1 et ADC2 global // 
interrupt
   EXTI9_5_IRQn                = 23;  // External Line[9:5] Interrupts 

   TIM1_BRK_IRQn              = 24;   // TIM1 Break // interrupt 

   TIM1_UP_IRQn                = 25;  // TIM1 Update // interrupt 

....



More information about the fpc-pascal mailing list