ARM-embedded & Interrupt numbers

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

ARM-embedded & Interrupt numbers

Koenraad Lelong-4
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

....
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: ARM-embedded & Interrupt numbers

Marc Santhoff-2
Hi Koenraad,

On Fr, 2015-08-14 at 09:08 +0200, Koenraad Lelong wrote:

> 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 ?

I can't answer your question(s), only want to bring this to your
attention:

http://j-software.dk/stm32f103.php

Maybe you can save some work or find answers in that code.

HTH,
Marc

--
Marc Santhoff <[hidden email]>

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: ARM-embedded & Interrupt numbers

Michael Ring-2
Jeppe would be the best person to answer your question anyway as he is
the master of (nearly) all files in the embedded directory.

I just checked, when I created my own units for other devices I included
those const's, it seems that they never were in Jeppe's files could it
be that you saw them in lpc11xx.pp ?
To be honest I was 100% sure that I have seen those declarations in
Jeppe's files, but a quick check in svn showed that those consts
actually never were there... (or I am blind)

For using Interrupts in your code you do necessarily need them as it is
good enough to write procedures with the correct name:

procedure SysTick_interrupt; [public, alias: 'SysTick_interrupt'];
begin
   inc(Systick_Timestamp);
end;

but for configuring interrupts in nvic the constants actually could help.

Michael


Am 14.08.15 um 13:33 schrieb Marc Santhoff:

> Hi Koenraad,
>
> On Fr, 2015-08-14 at 09:08 +0200, Koenraad Lelong wrote:
>
>> 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 ?
> I can't answer your question(s), only want to bring this to your
> attention:
>
> http://j-software.dk/stm32f103.php
>
> Maybe you can save some work or find answers in that code.
>
> HTH,
> Marc
>

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: ARM-embedded & Interrupt numbers

Jeppe Johansen-3
In reply to this post by Koenraad Lelong-4
On 08/14/2015 09:08 AM, Koenraad Lelong wrote:

> 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.
Hi Koenraad,

For simplicity I think it would be best to just add them to each unit
without too many macros.

There's not a clear line for what to include in the RTL units at the
moment, but with CMSIS growing more relevant I think it makes sense to
have that table of IRQn numbers in there for all Cortex-M devices.

You can either just use SVN to create a patch (there's info here:
http://wiki.freepascal.org/Creating_A_Patch), or just send the files to
me and I'll fix it up.

Best Regards,
Jeppe
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: ARM-embedded & Interrupt numbers

Koenraad Lelong-4
Op 14-08-15 om 14:18 schreef Jeppe Johansen:

> Hi Koenraad,
>
> For simplicity I think it would be best to just add them to each unit
> without too many macros.
>
> There's not a clear line for what to include in the RTL units at the
> moment, but with CMSIS growing more relevant I think it makes sense to
> have that table of IRQn numbers in there for all Cortex-M devices.
>
> You can either just use SVN to create a patch (there's info here:
> http://wiki.freepascal.org/Creating_A_Patch), or just send the files to
> me and I'll fix it up.
>
> Best Regards,
> Jeppe
Hi,

Sorry it's been a while, but here are the modifications I did and the
include file.
That include file is a Pascal version of the stm32f10x.h file from CMSIS
3.5.0.

I hope this will appear in some future FPC-version.

Koenraad.


_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

mypatch.diff (1K) Download Attachment
stm32f10x_intr.inc (26K) Download Attachment