FreeCalypso > hg > fc-tourmaline
view src/gpf/ccd/ccddata.mk @ 268:f2e52cab0a73
abb_inth.c: check all interrupt causes, not just one
The original code used if - else if - else if etc constructs, thus
the first detected interrupt was the only one handled. However,
Iota ITSTATREG is a clear-on-read register, thus if we only handle
the first detected interrupt and skip checking the others, then the
other interrupts will be lost, if more than one interrupt happened
to occur in one ABB interrupt handling cycle - a form of rare race
condition. Change the code to check all interrupts that were read
in this cycle.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 13 Jun 2021 18:17:53 +0000 |
parents | 4e78acac3d88 |
children |
line wrap: on
line source
#----------------------------------------------------------------------------- # Project : # Modul : ccddata.mk #----------------------------------------------------------------------------- # Copyright 2002 Texas Instruments Berlin, AG # All rights reserved. # # This file is confidential and a trade secret of Texas # Instruments Berlin, AG # The receipt of or possession of this file does not convey # any rights to reproduce or disclose its contents or to # manufacture, use, or sell anything it may describe, in # whole, or in part, without the specific written consent of # Texas Instruments Berlin, AG. #----------------------------------------------------------------------------- # Purpose : Building Ccddata Dll/Lib. #----------------------------------------------------------------------------- ifndef TARGET TARGET=win32 endif ifeq ($(TARGET), nuc) override TARGET=arm7 endif PLATFORM=$(TARGET) COFILES= include ccd_base.mk ifeq ($(PROST), g23net) CDGINCDIR=$(TESTROOT)/Cdginc PROSTCFLAGS= #??? -DOPTION_MULTITHREADED -DSHARED_CCD endif ifeq ($(PROST), g23m) CDGINCDIR=$(TESTROOT)/ms/CDGINC endif ifeq ($(PROST), gsm) CDGINCDIR=$(TESTROOT)/ms/CDGINC endif ifeq ($(PROST), gprs) ifeq ($(TARGET), arm7) CDGINCDIR=$(TESTROOT)/cdginc/cdginc_vo else CDGINCDIR=$(TESTROOT)/ms/CDGINC endif endif ifeq ($(PROST), generic) ifndef CDGINCDIR CDGINCDIR=$(GPF)/util/teststack/inc/cdginc/ endif endif ifndef CCDDATADIR CCDDATADIR=$(GPFPRJDIR) endif override CCDDATADIR:=$(subst \,/,$(CCDDATADIR)) CCDDATA_OBJECTS=ccddata_ccd.obj ccddata_mconst.obj ccddata_ccdmtab.obj\ ccddata_cdemval.obj ccddata_ccdent.obj CCDDATA_OBJFILES=$(patsubst %.obj,$(OBJDIR)/%.obj,$(CCDDATA_OBJECTS)) CCDDATA_EXE_OBJECTS=cdt.obj CCDDATA_EXE_OBJFILES=$(patsubst %.obj,$(OBJDIR)/%.obj,$(CCDDATA_EXE_OBJECTS)) LNTFILES=$(patsubst %.obj,%.lto,$(CCDDATA_OBJECTS)) # win32 ifeq ($(TARGET),win32) include ccddata_version.h ifeq ($(LOAD),1) PART=load DLL_PREFIX= CCDDATA_OBJECTS = ccddata_load.obj COFILES+=$(CCDDATA_LIB) LDFLAGS_DLL+=/IMPLIB:$(CCDDATA_IMPLIB) DEFINES+=-DCCDDATA_LOAD else PART=dll DLL_PREFIX=cddl_ LDFLAGS_DLL+=/COMMENT:CCDDATA_$(CCDDATA_VERSION) CCDDATA_OBJECTS += ccddata_pconst.obj ccddata_ccdptab.obj \ ccddata_cdemstr.obj ccddata_cdepval.obj \ ccddata_tap_priv.obj ccddata_alias.obj \ ccddata_version.obj ccddata_eg.obj ccddata_pdi.obj endif include ccddata_exp.mk CCDDATA_LIB=$(GPFBINDIR)/ccddata_$(PART).dll CCDDATA_IMPLIB=$(subst win32,WIN32,$(GPFLIBDIR)/ccddata_$(PART).lib) CCDDATA_IMPLIB_LOCAL=$(OBJDIR)/ccddata_$(PART).lib COFILES+=$(CCDDATA_IMPLIB) CCDEDIT_LIB=$(GPFLIBDIR)/ccdedit.lib CCD_LIB=$(GPFLIBDIR)/ccd.lib PCON_LIB=$(GPFLIBDIR)/pcon.lib FRAME_LIB=$(GPFLIBDIR)/frame.lib CCDDATA_EXE=$(GPFBINDIR)/cdt.exe INCLUDES+=-I"$(CDGINCDIR)" DEFINES+=-DCCDDATA_DABSTR LDFLAGS_DLL+=/nologo /dll $(PROSTLDFLAGS) $(CCDEDIT_LIB) ifneq ($(LOAD),1) LDFLAGS_DLL+=/IMPLIB:$(CCDDATA_IMPLIB_LOCAL) else LINK_EXPORTS+=/EXPORT:ccddata_init /EXPORT:ccddata_exit\ /EXPORT:ccddata_dllname /SECTION:.shared,RWS endif LDFLAGS_DLL+=/OUT:"$@" $(LINK_EXPORTS) LDFLAGS_DLL+= $(PCON_LIB) $(CCD_LIB) $(FRAME_LIB) LDFLAGS_EXE=/nologo /OUT:"$@" $(PROSTLDFLAGS) ifeq ($(DEBUG), 1) LDFLAGS_EXE += /DEBUG /incremental:no /pdb:none endif ccddata: all $(CCDDATA_LIB): $(CCDDATA_OBJECTS) $(LINK) $(LDFLAGS_DLL) $(CCDDATA_OBJFILES) cdt: $(CCDDATA_EXE) $(CCDDATA_EXE): $(CCDDATA_EXE_OBJECTS) -cleartool co -nda -nc $@ $(LINK) $(LDFLAGS_EXE) $(CCDDATA_EXE_OBJFILES) $(CCDDATA_IMPLIB) else CCDDATA_OBJECTS += ccd_config.obj endif # target == win32 # nucwin ifeq ($(TARGET),nucwin) CCDDATA_LIB=$(CCDDATADIR)/ccddata.lib INCLUDES+=-I"$(CDGINCDIR)" LDFLAGS+=/OUT:"$(CCDDATA_LIB)" # currently for all nucwin: put the p* info for PCON in the lib CCDDATA_OBJECTS += ccddata_pconst.obj ccddata_ccdptab.obj # and for the concept of synchronous frame with the tap inside # of the protocol stack include also most of the rest of ccddata; it # should not matter even without the tap CCDDATA_OBJECTS += ccddata_cdemstr.obj ccddata_cdepval.obj \ ccddata_tap_priv.obj ccddata_alias.obj $(CCDDATA_LIB): $(CCDDATA_OBJECTS) $(MKLIB) $(LDFLAGS) $(CCDDATA_OBJFILES) endif # target == nucwin # nuc ifeq ($(TARGET),arm7) CCDDATA_OBJECTS += ccddata_pconst.obj ccddata_ccdptab.obj ifeq ($(CCD_SYMBOLS), 1) CCDDATA_OBJECTS += ccddata_alias.obj endif CCDDATA_LIB=$(CCDDATADIR)/ccddata.lib override CCDDATA_LIB:=$(subst \,/,$(CCDDATA_LIB)) INCLUDES+=-I"$(CDGINCDIR)" LDFLAGS+=-rq $@ $(CCDDATA_LIB): $(CCDDATA_OBJECTS) $(MKLIB) $(LDFLAGS) $(CCDDATA_OBJFILES) endif # target == arm7 # arm9 ifeq ($(TARGET),arm9) CCDDATA_OBJECTS += ccddata_pconst.obj ccddata_ccdptab.obj ifeq ($(CCD_SYMBOLS), 1) CCDDATA_OBJECTS += ccddata_alias.obj endif CCDDATA_LIB=$(CCDDATADIR)/ccddata.lib INCLUDES+=-I"$(CDGINCDIR)" LDFLAGS+=-rq $@ $(CCDDATA_LIB): $(CCDDATA_OBJECTS) $(MKLIB) $(LDFLAGS) $(CCDDATA_OBJFILES) endif # target = arm9 # arm_b16 ifeq ($(TARGET),arm_b16) CCDDATA_LIB=$(CCDDATADIR)/ccddata.lib INCLUDES+=-I"$(CDGINCDIR)" LDFLAGS+=-rv $@ $(CCDDATA_LIB): $(CCDDATA_OBJECTS) $(MKLIB) $(LDFLAGS) $(CCDDATA_OBJFILES) endif # target == arm_b16 # arm_b32 ifeq ($(TARGET),arm_b32) CCDDATA_LIB=$(CCDDATADIR)/ccddata.lib INCLUDES+=-I"$(CDGINCDIR)" LDFLAGS+=-rv $@ $(CCDDATA_LIB): $(CCDDATA_OBJECTS) $(MKLIB) $(LDFLAGS) $(CCDDATA_OBJFILES) endif # target == arm_b32 # psos ifeq ($(TARGET),psos) CCDDATA_LIB=$(CCDDATADIR)/ccddata.lib INCLUDES+=-I"$(CDGINCDIR)" LDFLAGS+=$@ $(CCDDATA_LIB): $(COPTS_FILE) $(CCDDATA_OBJECTS) $(MKLIB) $(LDFLAGS) $(CCDDATA_OBJFILES) $(RM) $(COPTS_FILE) $(COPTS_FILE): @echo $(_CFLAGS) > c.opt @echo $(INCLUDES) >> c.opt @echo $(DEFINES) >> c.opt endif # target == psos # sus environments ifeq ($(OSENV), sus) CCDDATA_LIB=$(CCDDATADIR)/libccddata.a INCLUDES+=-I$(CDGINCDIR) # currently for all emulations: put the p* info for PCON in the lib CCDDATA_OBJECTS += ccddata_pconst.obj ccddata_ccdptab.obj # and for the concept of synchronous frame with the tap inside # of the protocol stack include also most of the rest of ccddata; it # should not matter even without the tap CCDDATA_OBJECTS += ccddata_cdemstr.obj ccddata_cdepval.obj \ ccddata_tap_priv.obj ccddata_alias.obj $(CCDDATA_LIB): $(CCDDATA_OBJECTS) $(MKLIB) $(CCDDATA_LIB) $(CCDDATA_OBJFILES) $(RANLIB) $(CCDDATA_LIB) endif # sus all: $(CCDDATA_LIB) exe: $(CCDDATA_EXE) $(CCDDATA_OBJECTS) $(CCDDATA_EXE_OBJECTS):\ %.obj: %.c $(OBJDIR) $(CC) $(CFLAGS) "$<" CCDDATA_LIBDIR=$(subst \,/,$(dir $(CCDDATA_LIB))). $(CCDDATA_LIB): $(CCDDATA_LIBDIR) $(CCDEDIT_LIB) $(OBJDIR) $(CCDDATA_LIBDIR): @$(MKDIR) -p $@ clean: $(RM) $(OBJDIR)/ccddata* $(OBJDIR)/ccd_config* $(OBJDIR)/cdt.obj \ $(CCDDATA_LIB) help: @echo Usage: gnumake -f ccddata.mk [ DEBUG=1 ] TARGET=target @echo with target: arm7, arm9, arm_b16, arm_b32, nucwin, win32, or psos @echo further options: @echo CCDENT=0 when the file ccdent.cdg does not exist in the\ cdginc directory @echo CCDALIAS=0 when the files malias.cdg and palias.cdg do not exist\ in the cdginc directory @echo CDEMSTR=0 when the file cdemstr.cdg.cdg does not exist\ in the cdginc directory @echo CDGINCDIR=path with the path to the cdginc directory @echo CCDDATA_LIB=path with the path to the ccddata lib to be built ci: -cleartool ci -nc $(COFILES) co: -cleartool co -nda -nc $(COFILES) -include ccd_lnt.mk include ccddata_dep.mk