OpenBCM V1.07b12 (Linux)

Packet Radio Mailbox

DB0FHN

[JN59NK Nuernberg]

 Login: GUEST





  
DK6JU  > DSP      17.06.96 22:07l 413 Lines 13331 Bytes #-10684 (0) @ DL
BID : 176607DB0IZ
Read: DC4MG DK8RW DJ2TK DL1EEC DG9ALL DK5RAS GUEST
Subj: C50-CPU-BUGs
Path: DB0AAB<DB0PV<DB0MAK<DB0HOT<DB0LPZ<DB0MER<DB0EMU<DB0OCA<DB0FC<DB0SHG<
      DB0HSK<DB0QS<DB0IZ
Sent: 960617/1720z @:DB0IZ.#NRW.DEU.EU [JO31NE, Op: DL6EE] $:176607DB0IZ
de DK6JU @ DB0IZ.#NRW.DEU.EU   (Michael)

to DSP @ DL

Hallo DSP'ler,

wer schon mal Software für den C50-DSK von TI entwickelt hat, wird
festgestellt haben, daß die Programme nicht auf jedem DSK laufen.
Ursache dafür scheinen Änderungen in der C50 CPU zu sein. Die
original Fehlerlisten von TI sind im folgenden Abgedruckt.

Der Übergang von der CPU Rel. 1.x auf die CPU Rel. 2.x erfolgte
anscheinen bei den DSKs, die ab Ende 95 ausgeliefert wurden. Achtung:
die Änderungen im Layout und der Schaltung des DSK dienen der
Verbesserung der EMV und haben   n i c h t s   mit dem CPU-Release zu
tuen!

Die Probleme, die mir aufgefallen sind, betreffen die Ansteuerung des
AIC durch die serielle Schnittstelle. Manche Programme, die auf der alten
CPU laufen geben auf der neuen CPU nur noch einen Knacks von sich und
tuen anscheinend nichts mehr. Bei genauerer Analyse stellt man fest,
daß die Programm selbst noch laufen, aber die Interruptroutinen für
die serielle Schnittstelle nicht mehr ablaufen.

Um diese Probleme zu vermeiden, muß man sorgfältig darauf achten, daß
man jeden vom AIC geschickten Wert auch aus dem DRR-Register
ausliest. Wenn man das nur einmal versäumt (z.B. weil man den Wert
nicht braucht), werden   k e i n e   Receive-Interrupts (RINT) mehr
erzeugt (bis man wieder DRR ausliest)!
Das führt je nach Struktur des Programms zum völligen
Stillstand des Programms oder es werden halt keine neuen Werte mehr
eingelesen. Entsprechendes gilt für den Transmit-Interrupt (XINT):
wenn man nach einem XINT keinen neuen Wert in das DXR-Register
schreibt, werden keine XINTs mehr erzeugt.
Beim alten CPU-Releasestand traten in diesen Fällen keine Probleme
auf, weil jeder FSR/FSX-Impuls einen Interrupt auslöste, unabhängig vom
overflow/underflow-Status von DRR/DXR.

vy 73 Michael, DK6JU


Hier die ERRATA-SHEETS von TI:


		TMS320C5xPQ SILICON ERRATA
		Rev 1.x Silicon (Document Revision 1.2)
		Last Modified:06/08/92

 The following problems exist in the TMS320C50PQ, the
 TMS320C51PQ, and the TMS320C53PQ (The PQ is the Plastic
 Quad Flat Pack package and should be distinguished from the
 ceramic HQ package).  Each problem is described and an
 appropriate work around is presented.  In addition, the
 revision in which the problem is fixed or will be fixed is
 included.

 PROBLEM 1:
 The underflow and overrun error flags on serial port #1 and
 serial port #2 (TDM and non-TDM mode), XSREMPTY and RSRFULL,
 are non-functional. These flags should not be used to detect
 any error condition.

 On the receive side of the serial port #1 (and the serial
 port #2 in non-TDM mode), RSR (TRSR) register contents are
 copied to DRR (TDRR) register each time RSR (or TRSR) has
 shifted in a full word (or byte) and the previous contents
 of DRR (or TDRR) have already been read. This is normal
 device operation. However, if the current DRR (or TDRR)
 contents have not been read and RSR (or TRSR) has received
 new word then RSR (or TRSR) to DRR (TDRR) transfer will
 still take place if external FSR line strobes, thus
 overwriting DRR.  The receive interrupt would also be
 generated at the same time. According to the serial port
 specs, RSR (or TRSR) to DRR (or TDRR) transfer should not
 have taken place in this receive over-run condition.

 On the transmit side the operation of the serial port is
 according to spec except for the non-functionality of the
 XSREMPTY flag.

 For the Continuous Mode, both receive and transmit sides,
 the silicon behaves as described above.


 WORK AROUND 1:
 Note that both the serial ports (TDM or non-TDM) behave
 according to the specs except under receive over-run and
 transmit under-flow conditions. The user should either avoid
 these conditions or understand the ramifications of it.

 WILL FIX IN SILICON REVISION 2.x


 PROBLEM 2:
 A RPT instruction located within two words of the end of a
 repeat block will cause the block repeat counter BRCR and
 the repeat counter RPTC to be corrupted.

		RPTB END_LOOP-1
		 .
		 .
		RPT  TIMES
		NOP       ;Any repeatable C5X instruction
		NOP       ;Any valid C5X instruction
      END_LOOP



 WORK AROUND 2:
 Place a NOP between the repeated instruction and the end of
 the repeat block.

		RPTB END_LOOP-1
		 .
		 .
		RPT  TIMES
		NOP            ; Any repeatable instruction
		NOP            ; Any valid C5X instruction
		NOP            ; Added as bug workaround
      END_LOOP

      WILL FIX IN SILICON REVISION 2.x.


 PROBLEM 3:
 An XC instruction located at the end of a repeat block with
 k=2 will cause the block repeat counter BRCR to not
 decrement if the condition is false.

		RPTB END_LOOP-1
		 .
		 .
		XC  2, cond
		NOP            ; Could be 1 2-word or 2
		NOP            ; 1-word C5X instructions.
      END_LOOP

 WORK AROUND 3:
 Place a NOP between the  instruction and the end of the
 repeat block.
		RPTB END_LOOP-1
		 .
		 .
		XC   2, cond
		NOP                 ; Could be 1 2-word or 2
		NOP                 ; 1-word C5X instructions
		NOP                 ; Added as bug workaround
      END_LOOP

      WILL FIX IN SILICON REVISION 2.x.

 PROBLEM 4:

 When coming out of HOLD (HOLDA_ goes high) if the first
 action is an external memory write, the STRB_ signal will go
 active one cycle early for that write.  There is no problem
 in this situation with the first read or any subsequent
 accesses.  This problem does not affect any of the other
 memory interface signals.


 WORK AROUND 4:

 This is a hardware bug and has no software workarounds.
 Even though STRB_ becomes active one cycle early, WE_ only
 becomes active as specified and data will be valid on the
 bus when WE_ is active.  If WE_ is used to write data into
 the target devices (memory or I/O), then correct data would
 be written.

 WILL FIX IN SILICON REVISION 2.x.

 PROBLEM 5:

 The I/O space addresses from 20h to 4Fh and from 80h to FFh
 are not decoded.  Thus instructions using these port
 addresses will not function properly.  There is no problem
 with the sixteen memory-mapped port addresses in the range
 50h to 5Fh.  The following map identifies the problem
 addresses in I/O space.

			I/O
		0000h _________
		     |         |
		     | Valid   |
		001Fh|         |
		0020h|---------|
		     | Invalid |
		004Fh|---------|
		0050h|         |
		     | Valid   |
		007Fh|         |
		0080h|---------|
		     | Invalid |
		00FFh|---------|
		0100h|         |
		     | Valid   |
		     |         |
		FFFFh|_________|

		  C5X I/O Space Map


 WORK AROUND 5:

 Avoid using the I/O space port addresses cautioned above.

 WILL FIX IN SILICON REVISION 2.x.


 COMPATIBILITY NOTE:
 The frame synchronization pulse of the C5X is an active high
 signal that marks the beginning of a serial port transfer.
 Thus when coming out of serial port or device reset, the FSX
 pin (if configured as an input) should be low.  The
 following problem is discussed because of compatibility
 issues with certain parts such as the TLC320XX Analog
 Interface Chip (AIC).


 PROBLEM 6:
 If the transmit frame sync (FSX or TFSX) pin is configured
 as input on serial port #1 (or serial port #2 in non-TDM
 mode) and it is kept high when serial port is taken out of
 reset then the first word shifted out on DX (or TDX) line
 may be random. This may happen because the DXR to XSR (or
 TDXR to TXSR) transfer does not take place under this
 condition when the serial port is taken out of reset and the
 uninitialized contents of XSR (or TXSR) are shifted out at
 the falling edge of FSX (or TFSX). Note that in this case,
 the first word written to DXR (or TDXR) by the user's code
 will be transmitted as the second word on DX (or TDX) line.

 WORK AROUND 6:

 In most serial port interfaces, transmit frame sync input is
 kept low (or inactive) until the serial port is initialized.
 For such cases, the above problem will not be relevant.
 However, in case of AIC (TLC320xx) interface, FSX (or TFSX)
 will be driven high by AIC during periods of inactivity.  If
 a power-up reset is used on AIC then it is likely that the
 FSX (or TFSX) line will be high when the serial port is
 taken out of reset.  Since a random data transfer from 'C5x
 to the AIC can potentially modify AIC's mode of operation,
 it is recommended that the 'C5x has control over the AIC reset
 line.  The following code illustrates the AIC initialization
 using XF to control AIC reset line:
	.
	.
	.
 * initialize serial port
 *
	lacc #0000000000001000b  ; initialize serial port
	sacl spc
	lacc #0000000011001000b  ; take it out of reset
	sacl spc
	zac
	sacl dxr                 ; clear first int

	rpt #100                 ; wait a few cycles
	nop

	clrc xf                  ; put AIC in reset
	rpt #N                   ; N depends on min AIC reset
	nop                      ;   pulse width
	setc xf                  ; take AIC out of reset
	splk #020h,imr
	 ; enable xint for aic init
	splk #0ffffh,ifr
	clrc intm                ; enable interrupts
	.
	.
	.

 WILL MODIFY (MAKE NON-RANDOM) IN SILICON REVISION 2.x







			TMX320C5x silicon errata
			Rev 2.x silicon (Document Revision 2.0)
			Last Modified: 10/08/93

Silicon revision 2.x of C5X that includes TMx320C50, TMx320C51,
TMx320C52, TMx320C53, and TMx320C53SX have the following problems.
Each problem is described and an appropriate work around is
suggested.



Problem 1: The OUT instruction may corrupt some memory map registers.

The I/O space addresses from 20h to 4Fh are not properly decoded.
Whenever the case of writing to this I/O block occurs the internal
data memory from 20h to 4Fh is also accessed.  Thus the OUT
instruction using these port addresses will also overwrite the memory
map registers that between 20h and 4Fh. However, there is no problem
with the sixteen memory-mapped port addresses in the range 50h to
5Fh. The following map identifies the problem address in I/O space.


				 I/O
			 0000h _________
			      |         |
			      | Valid   |
			 001Fh|         |
			 0020h|---------|
			      | Invalid |
			 004Fh|---------|
			 0050h|         |
			      | Valid   |
			      |         |
			 FFFFh|_________|

			   C5X I/O Space Map



Work around:
Avoid using the I/O space port addresses 20h to 4Fh.

WILL BE FIXED IN LATER REVISION


Problem 2: On the TDM port, the TADD of an empty slot drives low.

According to the User's Guide, an empty slot is defined by the
following two cases: 1) when no device has TCSR (TDM Channel Select
Register) configured to transmit in that slot (i.e., no 1's in TCSR).
2) when the slot is configured to transmit, but the TDXR (TDM Data
Transmit Register) has been writted a new data for transmit.
Typically, the TADD line should be in high impedance for an empty
slot. However, the TADD line is pulled low internally in the second
case mentioned above.



Work around:
If the high impedance is expected on TADD, put 0's in the
corresponding bits in the TCSR.

WILL BE FIXED IN LATER REVISION


Problem 3: When the TDM port is reset, external TFRM and TCLK may
corrupt the TDAT line.

After the TDM serial port was reset by XRST, the data in the first
several frames are shifted sometimes.  This happens when the XRST and
the external TFRM pulse occur simultaneously and on the falling edge
of TCLK (see figure below).

		 __    __    __    __    __    __    __    __
      TCLK    __|  |__|  |__|  |__|  |__|  |__|  |__|  |__|  |__
	      _________________       __________________________
      XRST                     |_____|
			    _______________
      TFRM    _____________|               |_____________________



Work around in software:
For the normal software reset, pull the TRAD register to check the
current slot (bits 13-11) then reset the TDM port after first 2 slots
(such as slot 4). This will prevent the XRST and external TFRM
occurring simultaneously. In the IDLE2 mode, the device will freeze
the status of TDM port and continue after coming out of the power
down mode. Thus the TCSR has to be cleared before it get into the
IDLE2 mode. Otherwise the slot counter will be corrupted after
processor wakes up. Since the TCSR will not update until next frame,
it should clear a frame before IDLE2 executes. Wait for second TFRM
pulse after the processor comes out of IDLE2 mode to initialize TCSR.
Then reset the TDM port after first 2 slots. Following is a simple
example code to reset TDM port at slot 4.



	    SPLK   #0h,TCSR       ; clear TCSR before reset TDM port
	    RPT    #lk            ; waif for one more frame to update
the
	    NOP                   ; the TCSR. The lk should equal the
frame's
				  ; period.
********************************************************
*  Ready to reset TDM port or step into IDLE2 mode     *
********************************************************
;           IDLE2                 ; get into IDLE2 mode
	    CALL   TDMINIT        ; or reset TDM port
	     .
	     .
	     .
TDMINIT:
;           RPT    #lk            ; If comes out of IDLE2 mode, wait
for
;           NOP                   ; 2nd TFRM pulse
CHK:        LAMM   TRAD           ; Load TRAD Reg to chek bit 13-11
for
	    OR     #3800h         ; current slot information.
	    SUB    #2000h         ; If it is slot 4 then reset TDM
port
	    BCND   CHK,NEQ
	    SPLK   #0039h,TSPC    ; put TDM port in reset
	    SPLK   #00f9h,TSPC    ; pull TDM port out of reset
	    RET


WILL BE FIXED IN LATER REVISION





Read previous mail | Read next mail


 18.09.2025 21:24:17lGo back Go up