Equipment:
ICEv2 board,
CCSv6 vs 6.0.1.00040,
TI XDS100v2 USB Emulator,
Windows7,
am335x_sysbios_ind_sdk_1.1.0.6
NDK 2.24.1.18
NDK's NSP 1.10.2.09 not activated
SYSBIOS 6.40.3.39
Compiler TI v5.1.11
Project: 'standalone Ethernet switch' derived from the EthernetIp example of the SDK,
PRUSS for Ethernet access
Hi everybody,
as a result of some modifications (cache enabled, peripheral address range set to bufferable), I managed to create bursts of ten 40ns-pulses periodically.
The pulses are created like this:
asm (" MOVT r3, #0x08"); // load, Bit19=1
asm(" STR R3,[R1]"); // write --> HIGH
asm (" MOVT r3, #0x00"); // load, Bit19=0
asm(" STR R3,[R1]"); // write --> LOW
This code runs in a timer-ISR, i.e. interrupts are not explicitly enabled and all 10 pulses are generated one after the other.
Everything is ok: bursts of ten pulses (40ns high, 40ns low for each period).
But as soon as periodic data transfer via TCP/IP (which does NOT happen simultaneously to pulse generation!) is switched on, bursts occasionally look like this:
I.e. the length varies, it is not constant any longer. (Pulses are ok. if the send() function is commented out.)
In my understanding, an ISR cannot be interrupted. But what then is the reason for that variation one can see on the scope?
Perhaps I should mention that TCP/IP transfer is realized using the PRUs (with the binary code that comes with the ethernetip example).
Does anybody have an explanation for this phenomenon?
Regards,
Martin H.