Is it possible to obtain the processor Silicon Revision within a DSP application?
It may be desirable for an Application to be able to determine the silicon revision of the target on which it is running. Each processor has a particular register that can be read within the application, and the value of this register can be referenced against the relevant Anomaly list to determine the silicon revision.
Bits 15-0 of the DSPID Register indicate the Silicon revision of the Blackfin Processor. This is true of all Blackfin processors apart form the BF535, with which the silicon revision can be determined from bits 31:28 of the CHIPID.
Unfortunately, there is no way to differentiate which Blackfin architecture the target is from within software.
These Registers can be accessed by using Macros defined in the cdef*.h file. E.g.:
long dspid = *pCHIPID;
The 2106x and 2116x SHARC processor revisions can be identified via Bits 31:25 of the SHARC MODE2_SHDW register. For example, on a 21065L silicon revision 0.3, the MODE2[31-25] register will have the value 1100010.
In all 2126x and 2136x/2137x SHARCs, there is a REVPID register located at 0x30026. It is 8-bits wide, and bits 0-3 are Processor ID, and bits 4-7 are silicon revision. From the REVPID, the Processor ID is:
These Registers can be accessed by using Macros defined in the cdef*.h file. For the 2106x and 2116x the Macro is "pMODE2_SHDW", while the 2126x, 2136x and 2137x use the macro "pREVPID". E.g.:
int revpid = *pREVPID;
Bits 31:28 of the IDCODE Register indicate the Silicon Revision of the specific TigerSHARC processor. Note that there is unfortunately no way to differentiate between the ADSP-TS201, ADSP-TS202 or ADSP-TS203 processors.
These Registers can be accessed by using an inline assembly statement. E.g.:
asm("%0 = IDCODE;;" : "=x" (idcode)::);
Retrieving data ...