From: tojo Date: Wed, 23 Mar 2011 08:35:21 +0000 (+0100) Subject: Updated installation of ISRs in mpc55xx drivers X-Git-Url: http://rtime.felk.cvut.cz/gitweb/arc.git/commitdiff_plain/374525e06a2f7e8b7a17f3113003d1572304a413 Updated installation of ISRs in mpc55xx drivers --- diff --git a/arch/ppc/mpc55xx/drivers/Adc.c b/arch/ppc/mpc55xx/drivers/Adc.c index 35eae105..76bedbb8 100644 --- a/arch/ppc/mpc55xx/drivers/Adc.c +++ b/arch/ppc/mpc55xx/drivers/Adc.c @@ -702,31 +702,11 @@ void Adc_ConfigureEQADCInterrupts (void) { Adc_GroupType group; -#if defined(USE_KERNEL) - TaskType tid; - tid = Os_Arc_CreateIsr(Adc_EQADCError,EQADC_FISR_OVER_PRIORITY,"Adc_Err"); - Irq_AttachIsr2(tid,NULL,EQADC_FISR_OVER); - - tid = Os_Arc_CreateIsr(Adc_Group0ConversionComplete,EQADC_FIFO0_END_OF_QUEUE_PRIORITY,"Adc_Grp0"); - Irq_AttachIsr2(tid,NULL,EQADC_FISR0_EOQF0); + ISR_INSTALL_ISR2( "Adc_Err", Adc_EQADCError, EQADC_FISR_OVER, EQADC_FISR_OVER_PRIORITY, 0 ); + ISR_INSTALL_ISR2( "Adc_Grp0", Adc_Group0ConversionComplete, EQADC_FISR0_EOQF0, EQADC_FIFO0_END_OF_QUEUE_PRIORITY, 0 ); + ISR_INSTALL_ISR2( "Adc_Grp1", Adc_Group1ConversionComplete, EQADC_FISR1_EOQF1, EQADC_FIFO1_END_OF_QUEUE_PRIORITY, 0 ); - tid = Os_Arc_CreateIsr(Adc_Group1ConversionComplete,EQADC_FIFO1_END_OF_QUEUE_PRIORITY,"Adc_Grp1"); - Irq_AttachIsr2(tid,NULL,EQADC_FISR1_EOQF1); - -#else - Irq_InstallVector (Adc_EQADCError, - EQADC_FISR_OVER, - EQADC_FISR_OVER_PRIORITY, CPU_Z1); - Irq_InstallVector (Adc_Group0ConversionComplete, - EQADC_FISR0_EOQF0, - EQADC_FIFO0_END_OF_QUEUE_PRIORITY, CPU_Z1); - - Irq_InstallVector (Adc_Group1ConversionComplete, - EQADC_FISR1_EOQF1, - EQADC_FIFO1_END_OF_QUEUE_PRIORITY, CPU_Z1); - -#endif for (group = ADC_GROUP0; group < AdcConfigPtr->nbrOfGroups; group++) { /* Enable end of queue, queue overflow/underflow interrupts. Clear corresponding flags. */ diff --git a/arch/ppc/mpc55xx/drivers/Can.c b/arch/ppc/mpc55xx/drivers/Can.c index 98fbc704..3676a370 100644 --- a/arch/ppc/mpc55xx/drivers/Can.c +++ b/arch/ppc/mpc55xx/drivers/Can.c @@ -132,34 +132,21 @@ #define GET_CONTROLLER_CNT() (CAN_CONTROLLER_CNT) -#if 0 -#define _INSTALL_HANDLER(_can_entry, _unique, _vector,_priority,_app ) \ +#define INSTALL_HANDLER4(_name, _can_entry, _vector, _priority, _app)\ do { \ - const OsIsrConstType _can_entry ## _unique = { \ - .vector = _vector, \ - .type = ISR_TYPE_2, \ - .priority = _priority, \ - .entry = _can_entry, \ - .name = "Can", \ - .resourceMask = 0, \ - .timingProtPtr = NULL, \ - .appOwner = _app, \ - }; \ - Os_IsrAdd( & _can_entry ## _unique); \ - } while(0); -#endif + ISR_INSTALL_ISR2(_name, _can_entry, _vector+0, _priority, _app); \ + ISR_INSTALL_ISR2(_name, _can_entry, _vector+1, _priority, _app); \ + ISR_INSTALL_ISR2(_name, _can_entry, _vector+2, _priority, _app); \ + ISR_INSTALL_ISR2(_name, _can_entry, _vector+3, _priority, _app); \ + } while(0) -#define INSTALL_HANDLER4(_name,_can_entry, _vector,_priority,_app)\ - ISR_INSTALL_ISR2(_name,_can_entry, _vector+0,_priority,_app) \ - ISR_INSTALL_ISR2(_name,_can_entry, _vector+1,_priority,_app) \ - ISR_INSTALL_ISR2(_name,_can_entry, _vector+2,_priority,_app) \ - ISR_INSTALL_ISR2(_name,_can_entry, _vector+3,_priority,_app) - -#define INSTALL_HANDLER16(_name,_can_entry, _vector,_priority,_app)\ - INSTALL_HANDLER4(_name,_can_entry, _vector+0,_priority,_app) \ - INSTALL_HANDLER4(_name,_can_entry, _vector+4,_priority,_app) \ - INSTALL_HANDLER4(_name,_can_entry, _vector+8,_priority,_app) \ - INSTALL_HANDLER4(_name,_can_entry, _vector+12,_priority,_app) +#define INSTALL_HANDLER16(_name, _can_entry, _vector, _priority, _app)\ + do { \ + INSTALL_HANDLER4(_name, _can_entry, _vector+0, _priority, _app); \ + INSTALL_HANDLER4(_name, _can_entry, _vector+4, _priority, _app); \ + INSTALL_HANDLER4(_name, _can_entry, _vector+8, _priority, _app); \ + INSTALL_HANDLER4(_name, _can_entry, _vector+12,_priority, _app); \ + } while(0) //------------------------------------------------------------------- diff --git a/arch/ppc/mpc55xx/drivers/Gpt.c b/arch/ppc/mpc55xx/drivers/Gpt.c index 0a2df55f..5f03f2fe 100644 --- a/arch/ppc/mpc55xx/drivers/Gpt.c +++ b/arch/ppc/mpc55xx/drivers/Gpt.c @@ -144,13 +144,6 @@ GPT_ISR( 6 ); GPT_ISR( 7 ); GPT_ISR( 8 ); -#define GPT_ISR_INSTALL( _channel, _prio ) \ -{ \ - TaskType tid; \ - tid = Os_Arc_CreateIsr(Gpt_Isr_Channel##_channel, _prio, XSTR__(Gpt_##_channel)); \ - Irq_AttachIsr2(tid, NULL, PIT_PITFLG_RTIF + _channel); \ -} - //------------------------------------------------------------------- void Gpt_Init(const Gpt_ConfigType *config) @@ -187,15 +180,16 @@ void Gpt_Init(const Gpt_ConfigType *config) { switch( ch ) { - case 0: GPT_ISR_INSTALL( 0, cfg->GptNotificationPriority ); break; - case 1: GPT_ISR_INSTALL( 1, cfg->GptNotificationPriority ); break; - case 2: GPT_ISR_INSTALL( 2, cfg->GptNotificationPriority ); break; - case 3: GPT_ISR_INSTALL( 3, cfg->GptNotificationPriority ); break; - case 4: GPT_ISR_INSTALL( 4, cfg->GptNotificationPriority ); break; - case 5: GPT_ISR_INSTALL( 5, cfg->GptNotificationPriority ); break; - case 6: GPT_ISR_INSTALL( 6, cfg->GptNotificationPriority ); break; - case 7: GPT_ISR_INSTALL( 7, cfg->GptNotificationPriority ); break; - case 8: GPT_ISR_INSTALL( 8, cfg->GptNotificationPriority ); break; + // TODO: What to do with cfg->GptNotificationPriority ? + case 0: ISR_INSTALL_ISR2( "Gpt_0", Gpt_Isr_Channel0, PIT_PITFLG_RTIF, 2, 0 ); break; + case 1: ISR_INSTALL_ISR2( "Gpt_1", Gpt_Isr_Channel1, PIT_PITFLG_PIT1, 2, 0 ); break; + case 2: ISR_INSTALL_ISR2( "Gpt_2", Gpt_Isr_Channel2, PIT_PITFLG_PIT2, 2, 0 ); break; + case 3: ISR_INSTALL_ISR2( "Gpt_3", Gpt_Isr_Channel3, PIT_PITFLG_PIT3, 2, 0 ); break; + case 4: ISR_INSTALL_ISR2( "Gpt_4", Gpt_Isr_Channel4, PIT_PITFLG_PIT4, 2, 0 ); break; + case 5: ISR_INSTALL_ISR2( "Gpt_5", Gpt_Isr_Channel5, PIT_PITFLG_PIT5, 2, 0 ); break; + case 6: ISR_INSTALL_ISR2( "Gpt_6", Gpt_Isr_Channel6, PIT_PITFLG_PIT6, 2, 0 ); break; + case 7: ISR_INSTALL_ISR2( "Gpt_7", Gpt_Isr_Channel7, PIT_PITFLG_PIT7, 2, 0 ); break; + case 8: ISR_INSTALL_ISR2( "Gpt_8", Gpt_Isr_Channel8, PIT_PITFLG_PIT8, 2, 0 ); break; default: { // Unknown PIT channel. @@ -205,15 +199,6 @@ void Gpt_Init(const Gpt_ConfigType *config) } } } -#if defined(USE_KERNEL) - // Don't install if we use kernel.. it handles that. -#else - else if (ch == GPT_CHANNEL_DEC) - { - // Decrementer event is default an exception. Use software interrupt 7 as wrapper. - Irq_InstallVector(config[i].GptNotification, INTC_SSCIR0_CLR7, 1, CPU_Z1); - } -#endif cfg++; i++; diff --git a/arch/ppc/mpc55xx/drivers/Lin.c b/arch/ppc/mpc55xx/drivers/Lin.c index b539829c..e574da42 100644 --- a/arch/ppc/mpc55xx/drivers/Lin.c +++ b/arch/ppc/mpc55xx/drivers/Lin.c @@ -262,14 +262,6 @@ static void LinInterruptH() LinInterrupt(LIN_CTRL_H); } -static const void const * aIntFnc[] = {LinInterruptA, - LinInterruptB, - LinInterruptC, - LinInterruptD, - LinInterruptE, - LinInterruptF, - LinInterruptG, - LinInterruptH,}; void Lin_Init( const Lin_ConfigType* Config ) { @@ -330,26 +322,18 @@ void Lin_InitChannel( uint8 Channel, const Lin_ChannelConfigType* Config ) VALIDATE( (LinDriverStatus != LIN_UNINIT), LIN_INIT_CHANNEL_SERVICE_ID, LIN_E_UNINIT ); VALIDATE( (Channel < LIN_CONTROLLER_CNT), LIN_INIT_CHANNEL_SERVICE_ID, LIN_E_INVALID_CHANNEL ); + // Install the interrupt - if (Channel > 3) - { -#if defined(USE_KERNEL) - TaskType tid; - tid = Os_Arc_CreateIsr(aIntFnc[Channel],LIN_PRIO,"Lin"); - Irq_AttachIsr2(tid,NULL,SCI_E_COMB + Channel); -#else - Irq_InstallVector(aIntFnc[Channel],SCI_E_COMB + Channel,LIN_PRIO,CPU_Z1); -#endif - } - else - { -#if defined(USE_KERNEL) - TaskType tid; - tid = Os_Arc_CreateIsr(aIntFnc[Channel],LIN_PRIO,"Lin"); - Irq_AttachIsr2(tid,NULL,SCI_A_COMB + Channel); -#else - Irq_InstallVector(aIntFnc[Channel],SCI_A_COMB + Channel,LIN_PRIO,CPU_Z1); -#endif + switch (Channel) { + case 0: ISR_INSTALL_ISR2( "LinA", LinInterruptA, SCI_A_COMB, LIN_PRIO, 0 ); break; + case 1: ISR_INSTALL_ISR2( "LinB", LinInterruptB, SCI_B_COMB, LIN_PRIO, 0 ); break; + case 2: ISR_INSTALL_ISR2( "LinC", LinInterruptC, SCI_C_COMB, LIN_PRIO, 0 ); break; + case 3: ISR_INSTALL_ISR2( "LinD", LinInterruptD, SCI_D_COMB, LIN_PRIO, 0 ); break; + case 4: ISR_INSTALL_ISR2( "LinE", LinInterruptE, SCI_E_COMB, LIN_PRIO, 0 ); break; + case 5: ISR_INSTALL_ISR2( "LinF", LinInterruptF, SCI_F_COMB, LIN_PRIO, 0 ); break; + case 6: ISR_INSTALL_ISR2( "LinG", LinInterruptG, SCI_G_COMB, LIN_PRIO, 0 ); break; + case 7: ISR_INSTALL_ISR2( "LinH", LinInterruptH, SCI_H_COMB, LIN_PRIO, 0 ); break; + default: assert(0); break; } esciHw->CR2.B.MDIS = 0;/* The module is enabled by writing the ESCIx_CR2[MDIS] bit to 0. */ diff --git a/arch/ppc/mpc55xx/drivers/Pwm.c b/arch/ppc/mpc55xx/drivers/Pwm.c index 161aa5a0..532b4aff 100644 --- a/arch/ppc/mpc55xx/drivers/Pwm.c +++ b/arch/ppc/mpc55xx/drivers/Pwm.c @@ -119,11 +119,6 @@ void Pwm_Init(const Pwm_ConfigType* ConfigPtr) { #endif #endif - #if PWM_NOTIFICATION_SUPPORTED==STD_ON - // Create a task for our interrupt service routine. - TaskType tid = Os_Arc_CreateIsr(Pwm_Isr, PWM_ISR_PRIORITY /*prio*/, "PwmIsr"); - #endif - /* Clock scaler uses system clock (~64MHz) as source, so prescaler 64 => 1MHz. */ EMIOS.MCR.B.GPRE = PWM_PRESCALER - 1; @@ -155,7 +150,26 @@ void Pwm_Init(const Pwm_ConfigType* ConfigPtr) { // Pwm_DisableNotification(channel); // Install ISR - Irq_AttachIsr2(tid, NULL, EMISOS200_FLAG_F0 + channel); + switch (channel) { + case 0x0: ISR_INSTALL_ISR2( "Pwm0", Pwm_Isr, EMISOS200_FLAG_F0, PWM_ISR_PRIORITY, 0 ); break; + case 0x1: ISR_INSTALL_ISR2( "Pwm1", Pwm_Isr, EMISOS200_FLAG_F1, PWM_ISR_PRIORITY, 0 ); break; + case 0x2: ISR_INSTALL_ISR2( "Pwm2", Pwm_Isr, EMISOS200_FLAG_F2, PWM_ISR_PRIORITY, 0 ); break; + case 0x3: ISR_INSTALL_ISR2( "Pwm3", Pwm_Isr, EMISOS200_FLAG_F3, PWM_ISR_PRIORITY, 0 ); break; + case 0x4: ISR_INSTALL_ISR2( "Pwm4", Pwm_Isr, EMISOS200_FLAG_F4, PWM_ISR_PRIORITY, 0 ); break; + case 0x5: ISR_INSTALL_ISR2( "Pwm5", Pwm_Isr, EMISOS200_FLAG_F5, PWM_ISR_PRIORITY, 0 ); break; + case 0x6: ISR_INSTALL_ISR2( "Pwm6", Pwm_Isr, EMISOS200_FLAG_F6, PWM_ISR_PRIORITY, 0 ); break; + case 0x7: ISR_INSTALL_ISR2( "Pwm7", Pwm_Isr, EMISOS200_FLAG_F7, PWM_ISR_PRIORITY, 0 ); break; + case 0x8: ISR_INSTALL_ISR2( "Pwm8", Pwm_Isr, EMISOS200_FLAG_F8, PWM_ISR_PRIORITY, 0 ); break; + case 0x9: ISR_INSTALL_ISR2( "Pwm9", Pwm_Isr, EMISOS200_FLAG_F9, PWM_ISR_PRIORITY, 0 ); break; + case 0xA: ISR_INSTALL_ISR2( "Pwm10", Pwm_Isr, EMISOS200_FLAG_F10, PWM_ISR_PRIORITY, 0 ); break; + case 0xB: ISR_INSTALL_ISR2( "Pwm11", Pwm_Isr, EMISOS200_FLAG_F11, PWM_ISR_PRIORITY, 0 ); break; + case 0xC: ISR_INSTALL_ISR2( "Pwm12", Pwm_Isr, EMISOS200_FLAG_F12, PWM_ISR_PRIORITY, 0 ); break; + case 0xD: ISR_INSTALL_ISR2( "Pwm13", Pwm_Isr, EMISOS200_FLAG_F13, PWM_ISR_PRIORITY, 0 ); break; + case 0xE: ISR_INSTALL_ISR2( "Pwm14", Pwm_Isr, EMISOS200_FLAG_F14, PWM_ISR_PRIORITY, 0 ); break; + case 0xF: ISR_INSTALL_ISR2( "Pwm15", Pwm_Isr, EMISOS200_FLAG_F15, PWM_ISR_PRIORITY, 0 ); break; + default: assert(0); break; + } + ChannelRuntimeStruct[channel].NotificationRoutine = ConfigPtr->NotificationHandlers[channel_iterator]; #endif diff --git a/arch/ppc/mpc55xx/drivers/sys_tick.c b/arch/ppc/mpc55xx/drivers/sys_tick.c index ef81dddb..10177f16 100644 --- a/arch/ppc/mpc55xx/drivers/sys_tick.c +++ b/arch/ppc/mpc55xx/drivers/sys_tick.c @@ -17,13 +17,14 @@ #include "internal.h" #include "isr.h" #include "arc.h" +#include "irq_types.h" /** * Init of free running timer. */ void Os_SysTickInit( void ) { - ISR_INSTALL_ISR2("OsTick",OsTick,7,6,0); + ISR_INSTALL_ISR2( "OsTick", OsTick, INTC_SSCIR0_CLR7, 6, 0 ); // TaskType tid; @@ -35,7 +36,7 @@ void Os_SysTickInit( void ) { IRQ_ATTACH(7); // else - tid = Os_Arc_CreateIsr(OsTick,6/*prio*/,"OsTick"); + tid = ISR_INSTALL_ISR2( "OsTick", OsTick, _vector, 6/*prio*/, 0 ); Irq_AttachIsr2(tid,NULL,7); #endif } diff --git a/include/isr.h b/include/isr.h index 22646c41..90ad553b 100644 --- a/include/isr.h +++ b/include/isr.h @@ -39,35 +39,35 @@ #define ISR_TYPE_2 1 /* ----------------------------[macro]---------------------------------------*/ -#define ISR_DECLARE_ISR2(_name, _entry, _unique, _vector,_priority,_app ) \ +#define ISR_DECLARE_ISR2( _name, _entry, _unique, _vector, _priority, _app ) \ const OsIsrConstType _entry ## _unique = { \ - .vector = _vector, \ - .type = ISR_TYPE_2, \ - .priority = _priority, \ - .entry = _entry, \ - .name = _name, \ - .resourceMask = 0, \ - .timingProtPtr = NULL, \ - .appOwner = _app, \ - }; \ - -#define _ISR_INSTALL_ISR2(_name, _entry, _unique, _vector,_priority,_app ) \ - do { \ + .vector = _vector, \ + .type = ISR_TYPE_2, \ + .priority = _priority, \ + .entry = _entry, \ + .name = _name, \ + .resourceMask = 0, \ + .timingProtPtr = NULL, \ + .appOwner = _app, \ + } + +#define _ISR_INSTALL_ISR2( _name, _entry, _unique, _vector, _priority, _app ) \ + do { \ const OsIsrConstType _entry ## _unique = { \ - .vector = _vector, \ - .type = ISR_TYPE_2, \ - .priority = _priority, \ - .entry = _entry, \ - .name = _name, \ - .resourceMask = 0, \ - .timingProtPtr = NULL, \ - .appOwner = _app, \ - }; \ - Os_IsrAdd( & _entry ## _unique); \ - } while(0); - -#define ISR_INSTALL_ISR2(_name,_entry, _vector,_priority,_app) \ - _ISR_INSTALL_ISR2(_name,_entry, __LINE__, _vector,_priority,_app) + .vector = _vector, \ + .type = ISR_TYPE_2, \ + .priority = _priority, \ + .entry = _entry, \ + .name = _name, \ + .resourceMask = 0, \ + .timingProtPtr = NULL, \ + .appOwner = _app, \ + }; \ + Os_IsrAdd( & _entry ## _unique); \ + } while(0) + +#define ISR_INSTALL_ISR2( _name, _entry, _vector, _priority, _app ) \ + _ISR_INSTALL_ISR2( _name, _entry, __LINE__, _vector, _priority, _app ) /* ----------------------------[typedef]-------------------------------------*/ diff --git a/makefile b/makefile index 7ae0e60b..2af6b8de 100644 --- a/makefile +++ b/makefile @@ -161,7 +161,7 @@ clean_all: $(Q)find . -type d -name obj_* | xargs rm -rf $(Q)find . -type f -name *.a | xargs rm -rf @echo - @echo " >>>>>>> DONE <<<<<<<<<" + @echo " >>>>>>>>> DONE <<<<<<<<<" @echo config: $(dir_cmd_goals) @@ -174,7 +174,7 @@ clean: $(dir_cmd_goals) $(Q)find . -type f -name *.a| xargs rm -rf $(Q)rm -rf libs/* @echo - @echo " >>>>>>> DONE <<<<<<<<<" + @echo " >>>>>>>>> DONE <<<<<<<<<" @echo diff --git a/scripts/rules.install b/scripts/rules.install index ded59c62..22a5ef5b 100644 --- a/scripts/rules.install +++ b/scripts/rules.install @@ -60,5 +60,5 @@ $(build-lib-y): $(dep-y) $(obj-y) $(build-exe-y): $(obj-y) $(sim-y) $(libitem-y) @echo " >> LD $(RELDIR)/$@" $(LD) $(LDFLAGS) $(ldcmdfile-y) -o $@ $(obj-y) $(libpath-y) --start-group $(lib-y) $(libitem-y) --end-group $(LDMAPFILE) - @echo " >>>>>>> DONE <<<<<<<<<" + @echo " >>>>>>>>> DONE <<<<<<<<<" \ No newline at end of file diff --git a/scripts/rules.mk b/scripts/rules.mk index 22a9fd01..56b9bdd3 100644 --- a/scripts/rules.mk +++ b/scripts/rules.mk @@ -276,8 +276,6 @@ $(build-exe-y): $(dep-y) $(obj-y) $(sim-y) $(libitem-y) $(ldcmdfile-y) ifeq ($(CROSS_COMPILE),) $(Q)$(CC) $(LDFLAGS) -o $@ $(libpath-y) $(obj-y) $(lib-y) $(libitem-y) else - @echo LDFLAGS $(LDFLAGS) - @echo LD_FILE $(LD_FILE) $(Q)$(LD) $(LDFLAGS) $(LD_FILE) $(ldcmdfile-y) -o $@ $(libpath-y) $(LD_START_GRP) $(obj-y) $(lib-y) $(libitem-y) $(LD_END_GRP) $(LDMAPFILE) ifdef CFG_MC912DG128A # Print memory layout