This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Tiva tm4c129 unusual hard fault

Other Parts Discussed in Thread: TM4C129DNCPDT, TM4C123GH6PM

Hello,

Using TIVA TM4C129DNCPDT, running at 120 MHz.  Processor enters hard fault ISR early during intialization.


I have read the hard fault app note, and have ruled out the usual suspects.  There is plenty of stack space; all devices that are accessed are enabled;  no invalid instructions.

During initialization, the processor enables USB, serial I/O, timer tick interrupt.  It is at a point during init where it asserts some GPIOs to enable an external device; code then delays 2mS before accessing the external (spi) peripheral.  Serial output is fine up to the point of failure, confirming baud rate, serial I/O. 

We have multiple cards;  happens on some cards with great frequency; not observed on other cards.  Changes to the software (moving code around, adding debug logs, etc.) may cause problem to occur with more or less frequency.


Problem seems to occur in the vicinity of reading the sys tick value register fairly often.

Stack trace, from GDB:

#0  FaultISR () at /home/tcooper/higherground/p4_firmware/hwlib/tm4c123gh6pm_startup_ccs_gcc.c:445
#1  <signal handler called>
#2  CPUcpsie () at /home/tcooper/higherground/p4_firmware/driverlib/cpu.c:219
#3  0x00032c36 in IntMasterEnable ()
    at /home/tcooper/higherground/p4_firmware/driverlib/interrupt.c:216
#4  0x000293f8 in _timerGetTime (pSubTick=pSubTick@entry=0x20023fac <pui32Stack+16300>)
    at /home/tcooper/higherground/p4_firmware/utils/timers.c:285
#5  0x000297be in _timerDelay (t=<optimized out>)
    at /home/tcooper/higherground/p4_firmware/utils/timers.c:662
#6  0x000297e8 in timerDelayMs (ms=<optimized out>)
    at /home/tcooper/higherground/p4_firmware/utils/timers.c:673
#7  0x00025510 in txTaskInit () at /home/tcooper/higherground/p4_firmware/monitor/txTask.cpp:484
#8  0x0001c714 in main () at /home/tcooper/higherground/p4_firmware/monitor/main.cpp:108

Registers:

(gdb) info reg
r0             0x0    0
r1             0x0    0
r2             0x4005b000    1074114560
r3             0x244fe018    609214488
r4             0x10a    266
r5             0x20023fac    537018284
r6             0x20023fac    537018284
r7             0x5a6d0    370384
r8             0x0    0
r9             0x0    0
r10            0x0    0
r11            0x3e69    15977
r12            0x4c    76
sp             0x20023f60    0x20023f60 <pui32Stack+16224>
lr             0xfffffff9    -7
pc             0x1c22a    0x1c22a <FaultISR+18>
xPSR           0x21000003    553648131

Stack dump, starting 16 bytes above top of stack:

(gdb) x/32xw 0x20023f50
0x20023f50 <pui32Stack+16208>:    0xffffffff    0xffffffff    0xffffffff    0xffffffff
0x20023f60 <pui32Stack+16224>:    0x00000000    0x00000000    0x681dd00e    0x00000000
0x20023f70 <pui32Stack+16240>:    0x0000004c    0x00032c5f    0x00032c74    0x21000000
0x20023f80 <pui32Stack+16256>:    0xffffff38    0x000293ed    0xffffff38    0x0000010a
0x20023f90 <pui32Stack+16272>:    0x20023fac    0x000c4807    0x0005a6d0    0x000297d7
0x20023fa0 <pui32Stack+16288>:    0x00000000    0x00000010    0x20035094    0x000dfe40
0x20023fb0 <pui32Stack+16304>:    0x20028258    0x20024a70    0x20024a78    0x00029801
0x20023fc0 <pui32Stack+16320>:    0x00005254    0x00025529    0x20027e80    0x00000054

Now, I've added code to FaultISR to read the SysTickValue register and store it;  here is the resulting disassembly:

(gdb) disassemble FaultISR
Dump of assembler code for function FaultISR:
   0x0001c218 <+0>:    movw    r3, #57368    ; 0xe018
   0x0001c21c <+4>:    movt    r3, #57344    ; 0xe000
   0x0001c220 <+8>:    ldr    r2, [r3, #0]
   0x0001c222 <+10>:    movw    r3, #15944    ; 0x3e48
   0x0001c226 <+14>:    movt    r3, #8195    ; 0x2003
=> 0x0001c22a <+18>:    str    r2, [r3, #0]
   0x0001c22c <+20>:    b.n    0x1c22c <FaultISR+20>
End of assembler dump.

Note, however, that when the processor locked up, ctl-c and GDB reported the PC at 0x1c22a.  However, notice r3 value from the register dump:  0x224f_e018.  R3 should be e000_e018 at this point.  R2, the tick counter, should be <= 1,200,000 and it is much higher. 

Interrupt enable registers show vectors 5, 42 = UART0, USB MAC.

(gdb) x/4xw 0xe000e100
0xe000e100:    0x00000020    0x00000400    0x00000000    0x00000000

Any thoughts on how to proceed are appreciated.

Thanks!

  • Hello Tim,

    Instead of using the PLL for 120MHz if you use the 16 MHz PIOSC as clock source (though it may be sub optimal) then does the issue. I want to eliminate the clock switching as possible root cause. Also if you can send the value of NVIC_FAULTSTAT and NVIC_FAULTADDR from the different boards (if they show variation in the fault) would be useful

    Regards
    Amit
  • Tim Cooper1 said:
    ...multiple cards;  happens on some cards with great frequency; not observed on other cards. 

    Few here (i.e. none) can compete w/Amit in this MCU specific realm - thus outsiders are forced to steer towards general test/troubleshooting - groomed over the ages...

    The fact that you report "some cards" fail - but not all - may prove worthwhile.   That said - might you (somewhat) define "some?"   (i.e. as you know; 1% vs. 20% "failure rate" leads to far different "suspects.")   I present (below) items which usually - but not always - have resolved similar issues @ our small, tech firm & our clients:

    • were "all" cards built at the same time - via the same vendor - using the same assembly methods & equipment?
    • were all "critical" components held constant during such builds?   Did you supply all of the components or rely upon CM?  (contract mfgr)
    • it's likely that your "cards" are part of a (bigger) interconnected system.   How have you eliminated external signals, connections, noise from being causative?
    • how critical is the "SysTickValue?"   The SysTick is just 24 (not 32) bits.   Might it have "rolled over" - and that fact missed?
    • usually - but not always - with the speed you're running & the number of "demanding" peripherals - there is potential for a "race" condition

    What to do:  (imho)

    • dial down your MCU clock's speed (temporarily, during test) so that factor may be probed  (running @ 50MHz seems a good beginning)
    • you note that there's a "2mS" delay prior to your accessing the external SPI peripheral.   Such indicates that you have (some) concern about the "readiness" of that peripheral - or other system matters?   How did that concern arise?   And have you monitored that "2mS" to confirm that it is "proper" during failure?
    • you "assert some GPIOs" to enable "an" external device.   (I read that as one device)   Why several GPIOs for (one) device?   Are you quite sure that it is (only) the external SPI peripheral which proves the culprit?   (there is conflict w/in your language, here)
    • systematically - one by one - eliminate, "USB, serial I/O" to learn if such reduction eliminates your issue.   Serial Port - if via UART - should avoid the introduction of any delays - especially those occurring w/in interrupt handlers.
    • focus intently upon the correct powering, interconnect & proper set-up of that external SPI device.   Should that SPI device be located, "off board" might the "swap" of SPI devices - between "known good" and "known failed" boards provide insight?

    Firm and this reporter are serious believers in "KISS."   We always (and only) focus upon and exhaustively test each peripheral (one by one) trying to "break it."   Only when (we believe) that peripheral (or external device) to be "bullet-proof" will we admit it into our (otherwise) "known good" program and/or board mix.

    All other methods - especially so when many peripherals & external devices are "in play" - have received our (kind) designation, "Maximum Randomness!"   And - when that's allowed (or worse) encouraged - the fault you characterize as "unusual" - rises so often as to "defy that characterization..."   (i.e. becomes quite "predictable!")

  • Hello Amit,


    I reduced the PLL output frequency to 60 MHz;  this showed similar behaviour.   I will continue to test and get the other info as I can.

    Thanks!

  • Hello Tim,

    OK, let me clarify my intent. I want to check if the issue is with PLL or with the clock source. I would suggest a simpler experiment. Configure a timer in PWM Mode on your board and monitor the output of the Timer in PWM Mode on the corresponding IO. The Timer in PWM mode should be configured for a div by 1000 output. So a 120MHz system clock on the scope would be seen as 120KHz.
    Once this is eliminated then we can start looking at other causes that may introduce a fault. Also data for the second part of the earlier post is still awaited. Were you able to get the value of FAULSTAT and FAULTADDR?

    Regards
    Amit
  • Hello cb1_mobile,

    About 15 cards were built as a lot, from the same CM, at the same time, using same equipment. Cards are small, self-contained with all periphs on board, and external connections for units under test are power supply, serial port, JTAG connector to Tiva. Problem occurs early during initialization, in the process of bringing up the 2nd on board periph device (usually).

    SysTickValue is critical. Rollover taken care of. Software runs fine on some cards. Reload value is 1,200,000, for a sys tick interrupt period of 100 Hz.

    Race condition: understood but can you be more specific about how this would correlate to the symptoms I observe?

    Dialed down PLL output to 60 MHz; no discernible change in behaviour. Will go lower, and try and change to use PIOSC as Amit suggested, later. Note that application requires we operate at 120.

    2mS: that is the manufacturer's spec regarding the time between when power is applied to the external device (via on-board switchable power supply: part draws ~100mA) and the time when configuration, via SPI, should occur.

    Serial port: interrupt driven, lots of miles on the code, no delays within the code. This is a real-time embedded system; no delays within ISRs that require timer interrupts.

    Other GPIOs: UART 0 enabled; SPI to iCE40 low power FPGA up and running but idle; external SDRAM up and running on EPI; passes power up self test.

    Since the observed error is intermittent (some cards, 40% of time power up), and is code-image related (change in code can change the statistics/location of failure), removing a device and having it work is not a conclusive indicator the the problem was with that device or the software used to control it.

    Thanks,

    Tim
  • Tim Cooper1 said:
    removing a device and having it work is not a conclusive indicator

    No one here has made such (conclusive) claim - yet (some) indicator trumps (no) indicator!     (i.e. effectively the present condition...)

    Might the date codes on the MCUs differ between "pass/fail?"

  • Hello Amit,

    Additional info, with another failure mode.  This test was run at 120 MHz. This mode is also observed frequently:

     

     

    REGISTERS:

    Program received signal SIGINT, Interrupt.

    0x0001c108 in __udivdi3 ()

    (gdb) bt

    #0  0x0001c108 in __udivdi3 ()

    #1  0x000c55b8 in ?? ()

    Backtrace stopped: frame did not save the PC

    (gdb) info registers

    r0             0x4437d 279421

    r1             0x0 0

    r2             0x124f80 1200000

    r3             0xe000e018 -536813544

    r4             0x4438f 279439

    r5             0x42 66

    r6             0x20023fac 537018284

    r7             0x0 0

    r8             0x0 0

    r9             0x0 0

    r10            0x0 0

    r11            0xfffffffe -2

    r12            0x4c 76

    sp             0x20023f68 0x20023f68 <pui32Stack+16232>

    lr             0xfffffff1 -15

    pc             0x1c108 0x1c108 <__udivdi3+500>

    xPSR           0x21000003 553648131

     

     

    STACK starting at sp - 0x20:

    (gdb) x/64xw 0x20023f68-0x20

    0x20023f48 <pui32Stack+16200>: 0xffffffff 0xffffffff 0xffffffff 0xffffffff

    0x20023f58 <pui32Stack+16216>: 0xffffffff 0xffffffff 0xffffffff 0x2002be84

    0x20023f68 <pui32Stack+16232>: 0x0004437d 0x00000000 0x00124f80 0xe000e018

    0x20023f78 <pui32Stack+16248>: 0x0000004c 0x00029411 0x00032c48 0x21000003

    0x20023f88 <pui32Stack+16264>: 0xffffff38 0x0000010a 0x20023fac 0x000c55b8

    0x20023f98 <pui32Stack+16280>: 0x0005a6d0 0x000297d7 0x00000000 0x00000010

    0x20023fa8 <pui32Stack+16296>: 0x20035094 0x000e0b42 0x20028258 0x20024a70

    0x20023fb8 <pui32Stack+16312>: 0x20024a78 0x00029801 0x00005254 0x00025529

    0x20023fc8 <pui32Stack+16328>: 0x20027e80 0x00000054 0x00000000 0x00000000

    0x20023fd8 <pui32Stack+16344>: 0x000018e0 0x00000000 0x00000000 0x00000000

    0x20023fe8 <pui32Stack+16360>: 0x00000000 0x0001c729 0x000018e0 0x0001c463

    0x20023ff8 <pui32Stack+16376>: 0x00000000 0xffffffff 0x00000000 0x00000001

    0x20024008 <__ctype_ptr__>: 0x00054398 0x20024010 0x00000000 0x00054520

     

    FAULT REGISTERS:

    (gdb) x/1xw 0xe000ed28      

    0xe000ed28: 0x00010000

    (gdb) x/1xw 0xe000ed2c

    0xe000ed2c: 0x40000000

    (gdb) x/1xw 0xe000ed34

    0xe000ed34: 0xe000edf8

    (gdb) x/1xw 0xe000ed38

    0xe000ed38: 0xe000edf8

     

    PC where failure occurred:

       0x0001c0f8 <+484>:    mov    r10, r0
       0x0001c0fa <+486>:    mov    r0, r7
       0x0001c0fc <+488>:    bl    0x1a1dc <__aeabi_uidivmod>
       0x0001c100 <+492>:    ldr    r2, [sp, #0]
       0x0001c102 <+494>:    mul.w    r2, r2, r10
       0x0001c106 <+498>:    orr.w    r1, r5, r1, lsl #16
       0x0001c10a <+502>:    cmp    r2, r1
       0x0001c10c <+504>:    bls.n    0x1c11a <__udivdi3+518>
       0x0001c10e <+506>:    adds.w    r1, r1, r8
       0x0001c112 <+510>:    add.w    r0, r10, #4294967295
       0x0001c116 <+514>:    bcc.n    0x1c1f2 <__udivdi3+734>
       0x0001c118 <+516>:    mov    r10, r0
       0x0001c11a <+518>:    ldr    r5, [sp, #4]
       0x0001c11c <+520>:    orr.w    r0, r10, r11, lsl #16
       0x0001c120 <+524>:    subs    r1, r1, r2
       0x0001c122 <+526>:    umull    r2, r3, r0, r5
       0x0001c126 <+530>:    cmp    r1, r3
       0x0001c128 <+532>:    bcc.n    0x1c144 <__udivdi3+560>
       0x0001c12a <+534>:    lsl.w    r6, r6, r4

    Now, an unusual observation is that r2 = the timer reload value I use, and r3 = address of tick value register;  I find it unlikely that these would occur inside the divide function.

     

    I will perform the PIOSC test later today.

     

    Thanks!

  • Hello Tim,

    OK the fault in this case is an UNDEF instruction. Did you check the compiler options that it points to M4F. Please share the compiler options for review.

    Regards
    Amit
  • Hello Tim,
    I'm not sure if you can debug this on the level I'm going to mention, but here goes.....
    From your Opening Post:
    "when the processor locked up, ctl-c and GDB reported the PC at 0x1c22a"

    So the 32bit store (STR) instruction at 0x1c22a locked the CPU up. It would do that if it went to store outside of the RAM block. In TMC123GH6PM the RAM runs from 0x20000000 to 0x20040000. The instructions immediately prior to that show R3 being setup as a pointer for the store close to where the RAM ends at 0x20033448. As you mention that R3 is much higher than expected would it be fair to say that it is the advancing R3 that eventually crashes the CPU?

    If so there's a 'leak' somewhere that allows this. As to finding it....

    Is there a way to trap the R3 value as it runs away? Is this possible if the code is compiled from C and would the R3 use be the same each time? Amit and CB maybe able to help there.
    Other thoughts:
    1) Breakpoint it and run between break points simply watching R3. Go backwards in the initialisation in steps looking for where R3 'breaks free'. Depending on the system you maybe able to do this single stepping or with a full speed run and stopping it dead with a breakpoint.

    2) Modify the code to trap itself when either R3, or the variable it represents runs away. (what is being stored in RAM?)

    The trace information I can't read properly but they mention the timer/s. The problem also seems to occur after setting up the GPIO after which there's a 2mS delay. The problem also seems to vary somewhat from board to board. If possible, I would lengthen that 2mS time to say 200mS to rule it out for now. Also, does the system have a way to establish that the external hardware has powered up fully before using it? It sounds like a borderline timing issue.

    "2mS: that is the manufacturer's spec regarding the time between when power is applied to the external device (via on-board switchable power supply: part draws ~100mA) and the time when configuration, via SPI, should occur."

    And we know what manufacturers specs mean sometimes don't we :)


    Also, another thought; this is provoked by one of Amit's posts from way back. Make sure that you wait for each and every module you use on the TM4Cx to become available for use and that you also reset it. So the order would be, and correct me Amit if I'm wrong:

    1) Enable clocking to module
    2) Enable the module
    3) Reset it
    4) Wait for the module to become ready (check its flag in system control)

    These steps need doing for all of them that are used. The datasheet mentions this for some modules but not others. Doing so for all of them will prevent some wild goose chases and at times some unpredictable behaviour further down the line which is hard to trace.

    Hope that helps Tim.

  • @ Pete,

    Believe you've greatly aided w/your time/effort - as expressed here. Thank you.

    I'm not so sure that this is a SW defect as it does not impact the entire board population. (yet we still do not know the "extent" of the issue - such (though requested) remains stuck @ "some.")

    Outside poster's specific case - the tips & guidance are surely of value to poster - and more broadly to the community in general. Good job!
  • Hello CB,
    It may well not be a SW fault, but it kind of leads to something related. There maybe merit in working from the known result and going backwards. In the times I've done this, it sometimes gets you to a tighter area of investigation where the true problem becomes apparent.
  • May I note (again) that such, "tighter area of investigation" falls w/in the scope of "KISS."

    You may enjoy the book, "Test-Driven Development for Embedded C" by James W. Grenning. The many aspects of "singular, exhaustive tests" prior to adding complexity - are long known & very well presented, therein...
  • Hello Pete,

    Your post elaborately describes the thought process of debug. The only difference in the sequence is to

    1. Disable the clock to peripheral
    2. Reset the peripheral
    3. Enable the clock to peripheral
    4. Wait for the peripheral to be ready
    5. Enable the peripheral configuration and the peripheral.

    Regards
    Amit
  • One may consider, "Test-Driven Development" as well - which would briefly "follow" the above by measuring & confirming key output signals - to insure that the peripheral device is (truly) "up & functional."

    Even "elaborate" thought process - and especially lesser "cut/paste" (i.e. "borrowed code") - benefits from such systematic test/verification - the earlier the better...

  • Thanks, Pete.

    "So the 32bit store (STR) instruction at 0x1c22a locked the CPU up. It would do that if it went to store outside of the RAM block. In TMC123GH6PM the RAM runs from 0x20000000 to 0x20040000. The instructions immediately prior to that show R3 being setup as a pointer for the store close to where the RAM ends at 0x20033448. As you mention that R3 is much higher than expected would it be fair to say that it is the advancing R3 that eventually crashes the CPU?"

    123's have only 32K of RAM; the 129 has 0x4_0000 = 256K. The store address is a valid static and is in the address map at 0x2003_3448; approx 48K from the end of memory. The disassembly is that of the fault ISR, which ends in an infinite loop, so R3 should not have advanced at all after the store.

    So, the PC tells us it is in the fault ISR, but the register values suggest otherwise... this is, of course, hard to explain.

    The GPIO is set up well in advance; the problem occurs before the 2mS delay completes after asserting the GPIO. The problem occurs whether the delay is 2mS or 2000mS. The device being powered up is an SPI slave device; it cannot assert any signals to the TIVA during its power-up other than MISO, which is ignored during this time.

    I neglected to mention there are two LEDs, GPIO driven, set up early and illuminated. Also, out of the ~15 cards, I physically have two of them; others are with other engineers around the country; other cards show anomalies but I've not had them in my possession in order to verify that it is the same problem.

    Tim
  • Compilation flags:

    message("ARM toolchain selected. Building the embedded applications.")
    ADD_DEFINITIONS(-mthumb)
    #ADD_DEFINITIONS(-march=armv7-m)
    ADD_DEFINITIONS(-mcpu=cortex-m4)
    ADD_DEFINITIONS(-mfpu=fpv4-sp-d16)
    #ADD_DEFINITIONS(-mfpu=vfp)
    ADD_DEFINITIONS(-mhard-float)
    ADD_DEFINITIONS(-mfloat-abi=softfp)
    ADD_DEFINITIONS(-D__thumb2__)
    ADD_DEFINITIONS(-DARM_MATH_CM4)
    ADD_DEFINITIONS(-D__FPU_PRESENT)
    ADD_DEFINITIONS(-Dgcc)
    ADD_DEFINITIONS(-ffunction-sections)
    ADD_DEFINITIONS(-fdata-sections)
    ADD_DEFINITIONS(-Wall)
    ADD_DEFINITIONS(-O2)
    ADD_DEFINITIONS(-pedantic)
    #ADD_DEFINITIONS(-DPART_TM4C123GH6PM)
    ADD_DEFINITIONS(-DPART_TM4C129DNCPDT)
    ADD_DEFINITIONS(-DUART_BUFFERED)
    #ADD_DEFINITIONS(-DTARGET_IS_TM4C123_RB1)
    ADD_DEFINITIONS(-DTARGET_IS_TM4C129_RA1)
    set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -fno-exceptions -fno-rtti -fcheck-new -std=c++11")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
    set(CMAKE_EXE_LINKER_FLAGS "-mthumb -mcpu=cortex-m4 -Wl,--gc-sections")

    Also, compiler version:

    arm-none-eabi-gcc (Sourcery CodeBench Lite 2014.05-28) 4.8.3 20140320 (prerelease)
    Copyright (C) 2013 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


    I would think an image having an incorrect instruction would fail more consistently, over time and across boards.

    Tim
  • Hello Tim,

    The following are in my compile options
    ADD_DEFINITIONS(-march=armv7e-m)
    ADD_DEFINITIONS(-mfpu=vfpv3xd)
    ADD_DEFINITIONS(-mfloat-abi=softfp)

    And the following do not come up in my compilation flow.
    ADD_DEFINITIONS(-mhard-float)
    ADD_DEFINITIONS(-D__thumb2__)

    But what is strangest is the option

    ADD_DEFINITIONS(-D__thumb2__) ???

    Regards
    Amit
  • Understood Tim. I notice that the compilation flags listing has some commented out references to TM4C123GH6PM. Is the problem new or has it occurred after certain point? What I'm thinking of here is 'if so, what changed?'

    R3, in my books, is still a pointer to where things go narnas.

    "So, the PC tells us it is in the fault ISR, but the register values suggest otherwise... this is, of course, hard to explain."
    My only thought on that is that sometimes I've seen the MCU hard fault on the instruction AFTER the one that's actually causing the problem., but this is in single step so maybe the IDE has disjointed the whole flow of it.

    @Amit. Thankyou for the correction. Step (1) there is a very notable addition to the logical process of firing up a module from a known state. Your sequence there is actually quite different to the ones I've seen discussed, and again an big improvement on the datasheet.
  • The original development system employed the tm4c123. That was several card revisions ago.

    This is not in single step mode; it is a ctl-c and dump after the processor has wedged. So, the processor should be in the infinite loop within the fault ISR.

    Tim
  • Hello Amit,

    I've talked with the custodians of the other cards, and confirmed that they do not share the problem I am seeing. (They are having a problem which was determined to be a missing operator test sequence step resulting in an infinite loop; software has been corrected to prevent this from occurring.)

    Having determined that, it appears that my board is failing for a unique, board-specific reason. I am happy to set it aside and allow our hw engineer to examine it, esp since I cannot explain any of the fault information from the dumps, registers, etc. If I observe more of this or if the hw engineer cannot find a cause, I may re-open this.

    Thank for your input, and also thank you Pete and cb1.

    BTW, Pete, we used the 123 gcc startup file for the 129; this is why you saw a 123 file in the back trace; I realized later the confusion and created a 129 startup file. The only difference is some of the interrupt assignments, almost all of which go to the standard "inthandler", so no differences of any consequence.
  • Hello Tim

    It would be good to get the image from the other cards and see if it works as expected. This would help isolate the issue in the software.

    Regards
    Amit
  • Thanks.

    The exact same executable image fails 30-50% of the time on one card, and works on other card(s). More testing is in progress. This appears to be a board-specific issue.

    Tim
  • Hello Tim,

    OK. Please do keep us posted in case you suspect something on TM4C129.

    Regards
    Amit