SPRSP19 December 2017 TMS320F28377D-EP
PRODUCTION DATA.
The Delfino TMS320F28377D-EP is a powerful 32-bit floating-point microcontroller unit (MCU) designed for advanced closed-loop control applications such as industrial drives and servo motor control; solar inverters and converters; digital power; transportation; and power line communications. Complete development packages for digital power and industrial drives are available as part of the powerSUITE and DesignDRIVE initiatives. While the Delfino product line is not new to the TMS320C2000 portfolio, the F28377D supports a new dual-core C28x architecture that significantly boosts system performance. The integrated analog and control peripherals also let designers consolidate control architectures and eliminate multiprocessor use in high-end systems.
The dual real-time control subsystems are based on TI’s 32-bit C28x floating-point CPUs, which provide 200 MHz of signal processing performance in each core. The C28x CPUs are further boosted by the new TMU accelerator, which enables fast execution of algorithms with trigonometric operations common in transforms and torque loop calculations; and the VCU accelerator, which reduces the time for complex math operations common in encoded applications.
The F28377D microcontroller features two CLA real-time control coprocessors. The CLA is an independent 32-bit floating-point processor that runs at the same speed as the main CPU. The CLA responds to peripheral triggers and executes code concurrently with the main C28x CPU. This parallel processing capability can effectively double the computational performance of a real-time control system. By using the CLA to service time-critical functions, the main C28x CPU is free to perform other tasks, such as communications and diagnostics. The dual C28x+CLA architecture enables intelligent partitioning between various system tasks. For example, one C28x+CLA core can be used to track speed and position, while the other C28x+CLA core can be used to control torque and current loops.
The TMS320F28377D-EP supports 1MB (512KW) of onboard flash memory with error correction code (ECC) and up to 204KB (102KW) of SRAM. Two 128-bit secure zones are also available on each CPU for code protection.
Performance analog and control peripherals are also integrated on the F28377D MCU to further enable system consolidation. Four independent 16-bit ADCs provide precise and efficient management of multiple analog signals, which ultimately boosts system throughput. The new sigma-delta filter module (SDFM) works in conjunction with the sigma-delta modulator to enable isolated current shunt measurements. The Comparator Subsystem (CMPSS) with windowed comparators allows for protection of power stages when current limit conditions are exceeded or not met. Other analog and control peripherals include DACs, PWMs, eCAPs, eQEPs, and other peripherals.
Peripherals such as EMIFs, CAN modules (ISO 11898-1/CAN 2.0B-compliant), and a new uPP interface extend the connectivity of the F28377D. The uPP interface is a new feature of the C2000 MCUs and supports high-speed parallel connection to FPGAs or other processors with similar uPP interfaces. Lastly, a USB 2.0 port with MAC and PHY lets users easily add universal serial bus (USB) connectivity to their application.
Both C28x CPUs on the device have the same memory map except where noted in Table 5-1. The GSx_RAM (Global Shared RAM) should be assigned to either CPU by the GSxMSEL register. Memories accessible by the CLA or DMA (direct memory access) are noted as well.
MEMORY | SIZE | START ADDRESS | END ADDRESS | CLA ACCESS | DMA ACCESS |
---|---|---|---|---|---|
M0 RAM | 1K × 16 | 0x0000 0000 | 0x0000 03FF | ||
M1 RAM | 1K × 16 | 0x0000 0400 | 0x0000 07FF | ||
PieVectTable | 512 × 16 | 0x0000 0D00 | 0x0000 0EFF | ||
CPUx.CLA1 to CPUx MSGRAM | 128 × 16 | 0x0000 1480 | 0x0000 14FF | Yes | |
CPUx to CPUx.CLA1 MSGRAM | 128 × 16 | 0x0000 1500 | 0x0000 157F | Yes | |
UPP TX MSG RAM | 512 × 16 | 0x0000 6C00 | 0x0000 6DFF | Yes | |
UPP RX MSG RAM | 512 × 16 | 0x0000 6E00 | 0x0000 6FFF | Yes | |
LS0 RAM | 2K × 16 | 0x0000 8000 | 0x0000 87FF | Yes | |
LS1 RAM | 2K × 16 | 0x0000 8800 | 0x0000 8FFF | Yes | |
LS2 RAM | 2K × 16 | 0x0000 9000 | 0x0000 97FF | Yes | |
LS3 RAM | 2K × 16 | 0x0000 9800 | 0x0000 9FFF | Yes | |
LS4 RAM | 2K × 16 | 0x0000 A000 | 0x0000 A7FF | Yes | |
LS5 RAM | 2K × 16 | 0x0000 A800 | 0x0000 AFFF | Yes | |
D0 RAM | 2K × 16 | 0x0000 B000 | 0x0000 B7FF | ||
D1 RAM | 2K × 16 | 0x0000 B800 | 0x0000 BFFF | ||
GS0 RAM(1) | 4K × 16 | 0x0000 C000 | 0x0000 CFFF | Yes | |
GS1 RAM(1) | 4K × 16 | 0x0000 D000 | 0x0000 DFFF | Yes | |
GS2 RAM(1) | 4K × 16 | 0x0000 E000 | 0x0000 EFFF | Yes | |
GS3 RAM(1) | 4K × 16 | 0x0000 F000 | 0x0000 FFFF | Yes | |
GS4 RAM(1) | 4K × 16 | 0x0001 0000 | 0x0001 0FFF | Yes | |
GS5 RAM(1) | 4K × 16 | 0x0001 1000 | 0x0001 1FFF | Yes | |
GS6 RAM(1) | 4K × 16 | 0x0001 2000 | 0x0001 2FFF | Yes | |
GS7 RAM(1) | 4K × 16 | 0x0001 3000 | 0x0001 3FFF | Yes | |
GS8 RAM(1) | 4K × 16 | 0x0001 4000 | 0x0001 4FFF | Yes | |
GS9 RAM(1) | 4K × 16 | 0x0001 5000 | 0x0001 5FFF | Yes | |
GS10 RAM(1) | 4K × 16 | 0x0001 6000 | 0x0001 6FFF | Yes | |
GS11 RAM(1) | 4K × 16 | 0x0001 7000 | 0x0001 7FFF | Yes | |
GS12 RAM(1)(2) | 4K × 16 | 0x0001 8000 | 0x0001 8FFF | Yes | |
GS13 RAM(1)(2) | 4K × 16 | 0x0001 9000 | 0x0001 9FFF | Yes | |
GS14 RAM(1)(2) | 4K × 16 | 0x0001 A000 | 0x0001 AFFF | Yes | |
GS15 RAM(1)(2) | 4K × 16 | 0x0001 B000 | 0x0001 BFFF | Yes | |
CPU2 to CPU1 MSGRAM(1) | 1K × 16 | 0x0003 F800 | 0x0003 FBFF | Yes | |
CPU1 to CPU2 MSGRAM(1) | 1K × 16 | 0x0003 FC00 | 0x0003 FFFF | Yes | |
CAN A Message RAM(1) | 2K × 16 | 0x0004 9000 | 0x0004 97FF | ||
CAN B Message RAM(1) | 2K × 16 | 0x0004 B000 | 0x0004 B7FF | ||
Flash | 256K × 16 | 0x0008 0000 | 0x000B FFFF | ||
Secure ROM | 32K × 16 | 0x003F 0000 | 0x003F 7FFF | ||
Boot ROM | 32K × 16 | 0x003F 8000 | 0x003F FFBF | ||
Vectors | 64 × 16 | 0x003F FFC0 | 0x003F FFFF |
On the F28377D device, each CPU has its own flash bank [512KB (256KW)], the total flash for each device is 1MB (512KW). Only one bank can be programmed or erased at a time and the code to program the flash should be executed out of RAM. Table 5-2 shows the addresses of flash sectors on CPU1 and CPU2 for F28377D.
SECTOR | SIZE | START ADDRESS | END ADDRESS |
---|---|---|---|
OTP Sectors | |||
TI OTP | 1K × 16 | 0x0007 0000 | 0x0007 03FF |
User configurable DCSM OTP | 1K × 16 | 0x0007 8000 | 0x0007 83FF |
Sectors | |||
Sector A | 8K × 16 | 0x0008 0000 | 0x0008 1FFF |
Sector B | 8K × 16 | 0x0008 2000 | 0x0008 3FFF |
Sector C | 8K × 16 | 0x0008 4000 | 0x0008 5FFF |
Sector D | 8K × 16 | 0x0008 6000 | 0x0008 7FFF |
Sector E | 32K × 16 | 0x0008 8000 | 0x0008 FFFF |
Sector F | 32K × 16 | 0x0009 0000 | 0x0009 7FFF |
Sector G | 32K × 16 | 0x0009 8000 | 0x0009 FFFF |
Sector H | 32K × 16 | 0x000A 0000 | 0x000A 7FFF |
Sector I | 32K × 16 | 0x000A 8000 | 0x000A FFFF |
Sector J | 32K × 16 | 0x000B 0000 | 0x000B 7FFF |
Sector K | 8K × 16 | 0x000B 8000 | 0x000B 9FFF |
Sector L | 8K × 16 | 0x000B A000 | 0x000B BFFF |
Sector M | 8K × 16 | 0x000B C000 | 0x000B DFFF |
Sector N | 8K ×16 | 0x000B E000 | 0x000B FFFF |
Flash ECC Locations | |||
TI OTP ECC | 128 × 16 | 0x0107 0000 | 0x0107 007F |
User-configurable DCSM OTP ECC | 128 × 16 | 0x0107 1000 | 0x0107 107F |
Flash ECC | 32K × 16 | 0x0108 0000 | 0x0108 7FFF |
The EMIF1 memory map is the same for both CPU subsystems. EMIF2 is available only on the CPU1 subsystem. The EMIF memory map is shown in Table 5-3.
EMIF CHIP SELECT | SIZE(2) | START ADDRESS | END ADDRESS | CLA ACCESS | DMA ACCESS |
---|---|---|---|---|---|
EMIF1_CS0n - Data | 256M × 16 | 0x8000 0000 | 0x8FFF FFFF | Yes | |
EMIF1_CS2n - Program + Data(3) | 2M × 16 | 0x0010 0000 | 0x002F FFFF | Yes | |
EMIF1_CS3n - Program + Data | 512K × 16 | 0x0030 0000 | 0x0037 FFFF | Yes | |
EMIF1_CS4n - Program + Data | 393K × 16 | 0x0038 0000 | 0x003D FFFF | Yes | |
EMIF2_CS0n - Data(1) | 3M × 16 | 0x9000 0000 | 0x91FF FFFF | ||
EMIF2_CS2n - Program + Data(1) | 4K × 16 | 0x0000 2000 | 0x0000 2FFF | Yes (Data only) |
The peripheral registers memory map can be found in Table 5-4. The peripheral registers can be assigned to either the CPU1 or CPU2 subsystems except where noted in Table 5-4. Registers in the peripheral frames share a secondary master (CLA or DMA) selection with all other registers within the same peripheral frame. See the TMS320F2837xD Dual-Core Delfino Microcontrollers Technical Reference Manual for details on the CPU subsystem and secondary master selection.
REGISTERS | STRUCTURE NAME | START ADDRESS |
END ADDRESS |
PROTECTED(1) | CLA ACCESS |
DMA ACCESS |
---|---|---|---|---|---|---|
AdcaResultRegs | ADC_RESULT_REGS | 0x0000 0B00 | 0x0000 0B1F | Yes | Yes | |
AdcbResultRegs | ADC_RESULT_REGS | 0x0000 0B20 | 0x0000 0B3F | Yes | Yes | |
AdccResultRegs | ADC_RESULT_REGS | 0x0000 0B40 | 0x0000 0B5F | Yes | Yes | |
AdcdResultRegs | ADC_RESULT_REGS | 0x0000 0B60 | 0x0000 0B7F | Yes | Yes | |
CpuTimer0Regs(2) | CPUTIMER_REGS | 0x0000 0C00 | 0x0000 0C07 | |||
CpuTimer1Regs(2) | CPUTIMER_REGS | 0x0000 0C08 | 0x0000 0C0F | |||
CpuTimer2Regs(2) | CPUTIMER_REGS | 0x0000 0C10 | 0x0000 0C17 | |||
PieCtrlRegs(2) | PIE_CTRL_REGS | 0x0000 0CE0 | 0x0000 0CFF | |||
Cla1SoftIntRegs | CLA_SOFTINT_REGS | 0x0000 0CE0 | 0x0000 0CFF | Yes – CLA only, no CPU access | ||
DmaRegs(2) | DMA_REGS | 0x0000 1000 | 0x0000 11FF | |||
Cla1Regs(2) | CLA_REGS | 0x0000 1400 | 0x0000 147F | |||
Peripheral Frame 1 | ||||||
EPwm1Regs | EPWM_REGS | 0x0000 4000 | 0x0000 40FF | Yes | Yes | Yes |
EPwm2Regs | EPWM_REGS | 0x0000 4100 | 0x0000 41FF | Yes | Yes | Yes |
EPwm3Regs | EPWM_REGS | 0x0000 4200 | 0x0000 42FF | Yes | Yes | Yes |
EPwm4Regs | EPWM_REGS | 0x0000 4300 | 0x0000 43FF | Yes | Yes | Yes |
EPwm5Regs | EPWM_REGS | 0x0000 4400 | 0x0000 44FF | Yes | Yes | Yes |
EPwm6Regs | EPWM_REGS | 0x0000 4500 | 0x0000 45FF | Yes | Yes | Yes |
EPwm7Regs | EPWM_REGS | 0x0000 4600 | 0x0000 46FF | Yes | Yes | Yes |
EPwm8Regs | EPWM_REGS | 0x0000 4700 | 0x0000 47FF | Yes | Yes | Yes |
EPwm9Regs | EPWM_REGS | 0x0000 4800 | 0x0000 48FF | Yes | Yes | Yes |
EPwm10Regs | EPWM_REGS | 0x0000 4900 | 0x0000 49FF | Yes | Yes | Yes |
EPwm11Regs | EPWM_REGS | 0x0000 4A00 | 0x0000 4AFF | Yes | Yes | Yes |
EPwm12Regs | EPWM_REGS | 0x0000 4B00 | 0x0000 4BFF | Yes | Yes | Yes |
ECap1Regs | ECAP_REGS | 0x0000 5000 | 0x0000 501F | Yes | Yes | Yes |
ECap2Regs | ECAP_REGS | 0x0000 5020 | 0x0000 503F | Yes | Yes | Yes |
ECap3Regs | ECAP_REGS | 0x0000 5040 | 0x0000 505F | Yes | Yes | Yes |
ECap4Regs | ECAP_REGS | 0x0000 5060 | 0x0000 507F | Yes | Yes | Yes |
ECap5Regs | ECAP_REGS | 0x0000 5080 | 0x0000 509F | Yes | Yes | Yes |
ECap6Regs | ECAP_REGS | 0x0000 50A0 | 0x0000 50BF | Yes | Yes | Yes |
EQep1Regs | EQEP_REGS | 0x0000 5100 | 0x0000 513F | Yes | Yes | Yes |
EQep2Regs | EQEP_REGS | 0x0000 5140 | 0x0000 517F | Yes | Yes | Yes |
EQep3Regs | EQEP_REGS | 0x0000 5180 | 0x0000 51BF | Yes | Yes | Yes |
DacaRegs | DAC_REGS | 0x0000 5C00 | 0x0000 5C0F | Yes | Yes | Yes |
DacbRegs | DAC_REGS | 0x0000 5C10 | 0x0000 5C1F | Yes | Yes | Yes |
DaccRegs | DAC_REGS | 0x0000 5C20 | 0x0000 5C2F | Yes | Yes | Yes |
Cmpss1Regs | CMPSS_REGS | 0x0000 5C80 | 0x0000 5C9F | Yes | Yes | Yes |
Cmpss2Regs | CMPSS_REGS | 0x0000 5CA0 | 0x0000 5CBF | Yes | Yes | Yes |
Cmpss3Regs | CMPSS_REGS | 0x0000 5CC0 | 0x0000 5CDF | Yes | Yes | Yes |
Cmpss4Regs | CMPSS_REGS | 0x0000 5CE0 | 0x0000 5CFF | Yes | Yes | Yes |
Cmpss5Regs | CMPSS_REGS | 0x0000 5D00 | 0x0000 5D1F | Yes | Yes | Yes |
Cmpss6Regs | CMPSS_REGS | 0x0000 5D20 | 0x0000 5D3F | Yes | Yes | Yes |
Cmpss7Regs | CMPSS_REGS | 0x0000 5D40 | 0x0000 5D5F | Yes | Yes | Yes |
Cmpss8Regs | CMPSS_REGS | 0x0000 5D60 | 0x0000 5D7F | Yes | Yes | Yes |
Sdfm1Regs | SDFM_REGS | 0x0000 5E00 | 0x0000 5E7F | Yes | Yes | Yes |
Sdfm2Regs | SDFM_REGS | 0x0000 5E80 | 0x0000 5EFF | Yes | Yes | Yes |
Peripheral Frame 2 | ||||||
McbspaRegs | MCBSP_REGS | 0x0000 6000 | 0x0000 603F | Yes | Yes | Yes |
McbspbRegs | MCBSP_REGS | 0x0000 6040 | 0x0000 607F | Yes | Yes | Yes |
SpiaRegs | SPI_REGS | 0x0000 6100 | 0x0000 610F | Yes | Yes | Yes |
SpibRegs | SPI_REGS | 0x0000 6110 | 0x0000 611F | Yes | Yes | Yes |
SpicRegs | SPI_REGS | 0x0000 6120 | 0x0000 612F | Yes | Yes | Yes |
UppRegs(3) | UPP_REGS | 0x0000 6200 | 0x0000 62FF | Yes | Yes | Yes |
WdRegs(2) | WD_REGS | 0x0000 7000 | 0x0000 703F | Yes | ||
NmiIntruptRegs(2) | NMI_INTRUPT_REGS | 0x0000 7060 | 0x0000 706F | Yes | ||
XintRegs(2) | XINT_REGS | 0x0000 7070 | 0x0000 707F | Yes | ||
SciaRegs | SCI_REGS | 0x0000 7200 | 0x0000 720F | Yes | ||
ScibRegs | SCI_REGS | 0x0000 7210 | 0x0000 721F | Yes | ||
ScicRegs | SCI_REGS | 0x0000 7220 | 0x0000 722F | Yes | ||
ScidRegs | SCI_REGS | 0x0000 7230 | 0x0000 723F | Yes | ||
I2caRegs | I2C_REGS | 0x0000 7300 | 0x0000 733F | Yes | ||
I2cbRegs | I2C_REGS | 0x0000 7340 | 0x0000 737F | Yes | ||
AdcaRegs | ADC_REGS | 0x0000 7400 | 0x0000 747F | Yes | Yes | |
AdcbRegs | ADC_REGS | 0x0000 7480 | 0x0000 74FF | Yes | Yes | |
AdccRegs | ADC_REGS | 0x0000 7500 | 0x0000 757F | Yes | Yes | |
AdcdRegs | ADC_REGS | 0x0000 7580 | 0x0000 75FF | Yes | Yes | |
InputXbarRegs(3) | INPUT_XBAR_REGS | 0x0000 7900 | 0x0000 791F | Yes | ||
XbarRegs(3) | XBAR_REGS | 0x0000 7920 | 0x0000 793F | Yes | ||
TrigRegs(3) | TRIG_REGS | 0x0000 7940 | 0x0000 794F | Yes | ||
DmaClaSrcSelRegs(2) | DMA_CLA_SRC_SEL_REGS | 0x0000 7980 | 0x0000 798F | Yes | ||
EPwmXbarRegs(3) | EPWM_XBAR_REGS | 0x0000 7A00 | 0x0000 7A3F | Yes | ||
OutputXbarRegs(3) | OUTPUT_XBAR_REGS | 0x0000 7A80 | 0x0000 7ABF | Yes | ||
GpioCtrlRegs(3) | GPIO_CTRL_REGS | 0x0000 7C00 | 0x0000 7D7F | Yes | ||
GpioDataRegs(2) | GPIO_DATA_REGS | 0x0000 7F00 | 0x0000 7F2F | Yes | Yes | |
UsbaRegs(3) | USB_REGS | 0x0004 0000 | 0x0004 0FFF | Yes | ||
Emif1Regs | EMIF_REGS | 0x0004 7000 | 0x0004 77FF | Yes | ||
Emif2Regs(3) | EMIF_REGS | 0x0004 7800 | 0x0004 7FFF | Yes | ||
CanaRegs | CAN_REGS | 0x0004 8000 | 0x0004 87FF | Yes | ||
CanbRegs | CAN_REGS | 0x0004 A000 | 0x0004 A7FF | Yes | ||
IpcRegs(2) | IPC_REGS_CPU1 IPC_REGS_CPU2 |
0x0005 0000 | 0x0005 0023 | Yes | ||
FlashPumpSemaphoreRegs(2) | FLASH_PUMP_SEMAPHORE_REGS | 0x0005 0024 | 0x0005 0025 | Yes | ||
DevCfgRegs(3) | DEV_CFG_REGS | 0x0005 D000 | 0x0005 D17F | Yes | ||
AnalogSubsysRegs(3) | ANALOG_SUBSYS_REGS | 0x0005 D180 | 0x0005 D1FF | Yes | ||
ClkCfgRegs(4) | CLK_CFG_REGS | 0x0005 D200 | 0x0005 D2FF | Yes | ||
CpuSysRegs(2) | CPU_SYS_REGS | 0x0005 D300 | 0x0005 D3FF | Yes | ||
RomPrefetchRegs(3) | ROM_PREFETCH_REGS | 0x0005 E608 | 0x0005 E60B | Yes | ||
DcsmZ1Regs(2) | DCSM_Z1_REGS | 0x0005 F000 | 0x0005 F02F | Yes | ||
DcsmZ2Regs(2) | DCSM_Z2_REGS | 0x0005 F040 | 0x0005 F05F | Yes | ||
DcsmCommonRegs(2) | DCSM_COMMON_REGS | 0x0005 F070 | 0x0005 F07F | Yes | ||
MemCfgRegs(2) | MEM_CFG_REGS | 0x0005 F400 | 0x0005 F47F | Yes | ||
Emif1ConfigRegs(2) | EMIF1_CONFIG_REGS | 0x0005 F480 | 0x0005 F49F | Yes | ||
Emif2ConfigRegs(3) | EMIF2_CONFIG_REGS | 0x0005 F4A0 | 0x0005 F4BF | Yes | ||
AccessProtectionRegs(2) | ACCESS_PROTECTION_REGS | 0x0005 F4C0 | 0x0005 F4FF | Yes | ||
MemoryErrorRegs(2) | MEMORY_ERROR_REGS | 0x0005 F500 | 0x0005 F53F | Yes | ||
RomWaitStateRegs(3) | ROM_WAIT_STATE_REGS | 0x0005 F540 | 0x0005 F541 | Yes | ||
Flash0CtrlRegs(2) | FLASH_CTRL_REGS | 0x0005 F800 | 0x0005 FAFF | Yes | ||
Flash0EccRegs(2) | FLASH_ECC_REGS | 0x0005 FB00 | 0x0005 FB3F | Yes |
Table 5-5 provides more information about each memory type.
MEMORY TYPE | ECC-CAPABLE | PARITY | SECURITY | HIBERNATE RETENTION | ACCESS PROTECTION |
---|---|---|---|---|---|
M0, M1 | Yes | – | – | Yes | – |
D0, D1 | Yes | – | Yes | – | Yes |
LSx | – | Yes | Yes | – | Yes |
GSx | – | Yes | – | – | Yes |
CPU/CLA MSGRAM | – | Yes | Yes | – | Yes |
Boot ROM | – | – | – | N/A | – |
Secure ROM | – | – | Yes | N/A | – |
Flash | Yes | – | Yes | N/A | N/A |
User-configurable DCSM OTP | Yes | – | Yes | N/A | N/A |
The CPU subsystem has four dedicated ECC-capable RAM blocks: M0, M1, D0, and D1. M0/M1 memories are small nonsecure blocks that are tightly coupled with the CPU (that is, only the CPU has access to them). D0/D1 memories are secure blocks and also have the access-protection feature (CPU write/CPU fetch protection).
RAM blocks which are dedicated to each subsystem and are accessible to its CPU and CLA only, are called local shared RAMs (LSx RAMs).
All LSx RAM blocks have parity. These memories are secure and have the access protection (CPU write/CPU fetch) feature.
By default, these memories are dedicated to the CPU only, and the user could choose to share these memories with the CLA by configuring the MSEL_LSx bit field in the LSxMSEL registers appropriately.
Table 5-6 shows the master access for the LSx RAM.
MSEL_LSx | CLAPGM_LSx | CPU ALLOWED ACCESS | CLA ALLOWED ACCESS | COMMENT |
---|---|---|---|---|
00 | X | All | – | LSx memory is configured as CPU dedicated RAM. |
01 | 0 | All | Data Read Data Write |
LSx memory is shared between CPU and CLA1. |
01 | 1 | Emulation Read Emulation Write |
Fetch Only | LSx memory is CLA1 program memory. |
RAM blocks which are accessible from both the CPU and DMA are called global shared RAMs (GSx RAMs). Each shared RAM block can be owned by either CPU subsystem based on the configuration of respective bits in the GSxMSEL register. Both the CPU and DMA have full read and write access to these memories.
All GSx RAM blocks have parity.
When a GSx RAM block is owned by a CPU subsystem, the CPUx and CPUx.DMA will have full access to that RAM block whereas the other CPUy and CPUy.DMA will only have read access (no fetch/write access).
Table 5-7 shows the master access for the GSx RAM.
GSxMSEL | CPU | INSTRUCTION FETCH | READ | WRITE | CPUx.DMA READ | CPUx.DMA WRITE |
---|---|---|---|---|---|---|
0 | CPU1 | Yes | Yes | Yes | Yes | Yes |
CPU2 | – | Yes | – | Yes | – | |
1 | CPU1 | – | Yes | – | Yes | – |
CPU2 | Yes | Yes | Yes | Yes | Yes |
The GSx RAMs have access protection (CPU write/CPU fetch/DMA write).
These RAM blocks can be used to share data between CPU1 and CPU2. Since these RAMs are used for interprocessor communication, they are also called IPC RAMs. The CPU MSGRAMs have CPU/DMA read/write access from its own CPU subsystem, and CPU/DMA read only access from the other subsystem.
This RAM has parity.
These RAM blocks can be used to share data between the CPU and CLA. The CLA has read and write access to the "CLA to CPU MSGRAM." The CPU has read and write access to the "CPU to CLA MSGRAM." The CPU and CLA both have read access to both MSGRAMs.
This RAM has parity.
Table 5-8 shows the Device Identification Registers.
NAME | ADDRESS | SIZE (x16) | DESCRIPTION | |
---|---|---|---|---|
PARTIDH (CPU1) | 0x0005 D00A | 2 | Device part identification number | |
PARTIDH (CPU2) | 0x0007 0202 | TMS320F28377D | 0x00FF 0300 | |
REVID | 0x0005 D00C | 2 | Silicon revision number | |
Revision 0 | 0x0000 0000 | |||
Revision A | 0x0000 0000 | |||
Revision B | 0x0000 0002 | |||
Revision C | 0x0000 0003 | |||
UID_UNIQUE | 0x0007 03C0 | 2 | Unique identification number. This number is different on each individual device with the same PARTIDH. This can be used as a serial number in the application. This number is present only on TMS Revision C devices. | |
CPU ID | 0x0007 026D | 1 | CPU identification number | |
CPU1 | 0xXX01 | |||
CPU2 | 0xXX02 | |||
JTAG ID | N/A | N/A | JTAG Device ID | 0x0B99 C02F |
Table 5-9 shows a broad view of the peripheral and configuration register accessibility from each bus master. Peripherals can be individually assigned to the CPU1 or CPU2 subsystem (for example, ePWM can be assigned to CPU1 and eQEP assigned to CPU2). Peripherals within peripheral frames 1 or 2 will all be mapped to the respective secondary master as a group (if SPI is assigned to CPUx.DMA, then McBSP is also assigned to CPUx.DMA).
PERIPHERALS (BY BUS ACCESS TYPE) |
CPU1.DMA | CPU1.CLA1 | CPU1 | CPU2 | CPU2.CLA1 | CPU2.DMA |
---|---|---|---|---|---|---|
Peripherals that can be assigned to CPU1 or CPU2 and have common selectable Secondary Masters | ||||||
Peripheral Frame 1: | Y | Y | Y | Y | Y | Y |
Peripheral Frame 1:
|
Y | Y | Y | |||
Peripheral Frame 2:
|
Y | Y | Y | Y | Y | Y |
Peripheral Frame 2:
|
Y | Y | Y | |||
Peripherals that can be assigned to CPU1 or CPU2 subsystems | ||||||
SCI | Y | Y | ||||
I2C | Y | Y | ||||
CAN | Y | Y | ||||
ADC Configuration | Y | Y | Y | Y | ||
EMIF1 | Y | Y | Y | Y | ||
Peripherals and Device Configuration Registers only on CPU1 subsystem | ||||||
EMIF2 | Y | Y | ||||
USB | Y | |||||
Device Capability, Peripheral Reset, Peripheral CPU Select | Y | |||||
GPIO Pin Mapping and Configuration | Y | |||||
Analog System Control | Y | |||||
uPP Message RAMs | Y | Y | ||||
Reset Configuration | Y | |||||
Accessible by only one CPU at a time with Semaphore | ||||||
Clock and PLL Configuration | Y | Y | ||||
Peripherals and Registers with Unique Copies of Registers for each CPU and CLA Master(2) | ||||||
System Configuration (WD, NMIWD, LPM, Peripheral Clock Gating) |
Y | Y | ||||
Flash Configuration(3) | Y | Y | ||||
CPU Timers | Y | Y | ||||
DMA and CLA Trigger Source Select | Y | Y | ||||
GPIO Data(4) | Y | Y | Y | Y | ||
ADC Results | Y | Y | Y | Y | Y | Y |
The CPU is a 32-bit fixed-point processor. This device draws from the best features of digital signal processing; reduced instruction set computing (RISC); and microcontroller architectures, firmware, and tool sets.
The CPU features include a modified Harvard architecture and circular addressing. The RISC features are single-cycle instruction execution, register-to-register operations, and modified Harvard architecture. The microcontroller features include ease of use through an intuitive instruction set, byte packing and unpacking, and bit manipulation. The modified Harvard architecture of the CPU enables instruction and data fetches to be performed in parallel. The CPU can read instructions and data while it writes data simultaneously to maintain the single-cycle instruction operation across the pipeline. The CPU does this over six separate address/data buses.
For more information on CPU architecture and instruction set, see the TMS320C28x CPU and Instruction Set Reference Guide.
The C28x plus floating-point (C28x+FPU) processor extends the capabilities of the C28x fixed-point CPU by adding registers and instructions to support IEEE single-precision floating point operations.
Devices with the C28x+FPU include the standard C28x register set plus an additional set of floating-point unit registers. The additional floating-point unit registers are the following:
All of the floating-point registers, except the repeat block register, are shadowed. This shadowing can be used in high-priority interrupts for fast context save and restore of the floating-point registers.
For more information, see the TMS320C28x Extended Instruction Sets Technical Reference Manual.
The TMU extends the capabilities of a C28x+FPU by adding instructions and leveraging existing FPU instructions to speed up the execution of common trigonometric and arithmetic operations listed in Table 5-10.
INSTRUCTIONS | C EQUIVALENT OPERATION | PIPELINE CYCLES |
---|---|---|
MPY2PIF32 RaH,RbH | a = b * 2pi | 2/3 |
DIV2PIF32 RaH,RbH | a = b / 2pi | 2/3 |
DIVF32 RaH,RbH,RcH | a = b / c | 5 |
SQRTF32 RaH,RbH | a = sqrt(b) | 5 |
SINPUF32 RaH,RbH | a = sin(b * 2pi) | 4 |
COSPUF32 RaH,RbH | a = cos(b * 2pi) | 4 |
ATANPUF32 RaH,RbH | a = atan(b) / 2pi | 4 |
QUADF32 RaH,RbH,RcH,RdH | Operation to assist in calculating ATANPU2 | 5 |
No changes have been made to existing instructions, pipeline or memory bus architecture. All TMU instructions use the existing FPU register set (R0H to R7H) to carry out their operations. A detailed explanation of the workings of the FPU can be found in the TMS320C28x Extended Instruction Sets Technical Reference Manual.
The VCU-II is the second-generation Viterbi, Complex Math, and CRC extension to the C28x CPU. The VCU-II extends the capabilities of the C28x CPU by adding registers and instructions to accelerate the performance of FFTs and communications-based algorithms. The C28x+VCU-II supports the following algorithm types:
Viterbi decoding is commonly used in baseband communications applications. The Viterbi decode algorithm consists of three main parts: branch metric calculations, compare-select (Viterbi butterfly), and a traceback operation. Table 5-11 shows a summary of the VCU performance for each of these operations.
VITERBI OPERATION | VCU CYCLES |
---|---|
Branch Metric Calculation (code rate = 1/2) | 1 |
Branch Metric Calculation (code rate = 1/3) | 2p |
Viterbi Butterfly (add-compare-select) | 2(1) |
Traceback per Stage | 3(2) |
Cyclic redundancy check (CRC) algorithms provide a straightforward method for verifying data integrity over large data blocks, communication packets, or code sections. The C28x+VCU can perform 8-bit, 16-bit, 24-bit, and 32-bit CRCs. For example, the VCU can compute the CRC for a block length of 10 bytes in 10 cycles. A CRC result register contains the current CRC, which is updated whenever a CRC instruction is executed.
Complex math is used in many applications, a few of which are:
The complex FFT is used in spread spectrum communications, as well as in many signal processing algorithms.
Complex filters improve data reliability, transmission distance, and power efficiency. The C28x+VCU can perform a complex I and Q multiply with coefficients (four multiplies) in a single cycle. In addition, the C28x+VCU can read/write the real and imaginary parts of 16-bit complex data to memory in a single cycle.
Table 5-12 shows a summary of the VCU operations enabled by the VCU.
COMPLEX MATH OPERATION | VCU CYCLES | NOTES |
---|---|---|
Add or Subtract | 1 | 32 +/- 32 = 32-bit (Useful for filters) |
Add or Subtract | 1 | 16 +/- 32 = 15-bit (Useful for FFT) |
Multiply | 2p | 16 x 16 = 32-bit |
Multiply and Accumulate (MAC) | 2p | 32 + 32 = 32-bit, 16 x 16 = 32-bit |
RPT MAC | 2p+N | Repeat MAC. Single cycle after the first operation. |
For more information, see the TMS320C28x Extended Instruction Sets Technical Reference Manual.
The CLA is an independent single-precision (32-bit) FPU processor with its own bus structure, fetch mechanism, and pipeline. Eight individual CLA tasks can be specified. Each task is started by software or a peripheral such as the ADC, ePWM, eCAP, eQEP, or CPU Timer 0. The CLA executes one task at a time to completion. When a task completes, the main CPU is notified by an interrupt to the PIE and the CLA automatically begins the next highest-priority pending task. The CLA can directly access the ADC Result registers, ePWM, eCAP, eQEP, Comparator and DAC registers. Dedicated message RAMs provide a method to pass additional data between the main CPU and the CLA.
Figure 5-2 shows the CLA block diagram.
Each CPU has its own 6-channel DMA module. The DMA module provides a hardware method of transferring data between peripherals and/or memory without intervention from the CPU, thereby freeing up bandwidth for other system functions. Additionally, the DMA has the capability to orthogonally rearrange the data as it is transferred as well as “ping-pong” data between buffers. These features are useful for structuring data into blocks for optimal CPU processing.
The DMA module is an event-based machine, meaning it requires a peripheral or software trigger to start a DMA transfer. Although it can be made into a periodic time-driven machine by configuring a timer as the interrupt trigger source, there is no mechanism within the module itself to start memory transfers periodically. The interrupt trigger source for each of the six DMA channels can be configured separately and each channel contains its own independent PIE interrupt to let the CPU know when a DMA transfer has either started or completed. Five of the six channels are exactly the same, while Channel 1 has the ability to be configured at a higher priority than the others.
DMA features include:
Figure 5-3 shows a device-level block diagram of the DMA.
The IPC module supports several methods of interprocessor communication:
Figure 5-4 shows the IPC architecture.
The device boot ROM (on both the CPUs) contains bootloading software. The CPU1 boot ROM does the system initialization before bringing CPU2 out of reset. The device boot ROM is executed each time the device comes out of reset. Users can configure the device to boot to flash (using GET mode) or choose to boot the device through one of the bootable peripherals by configuring the boot mode GPIO pins.
The CPU1 boot ROM, being master, owns the boot mode GPIO and boot configurations. The CPU2 boot ROM either boots to flash (if configured to do so through user configurable DCSM OTP) or enters a WAIT BOOT mode if no OTP is programmed. In WAIT BOOT mode, the CPU1 application instructs the CPU2 boot ROM on how to boot further using boot mode IPC commands supported by CPU2 boot ROM.
Table 5-13 shows the possible boot modes supported on the device. The default boot mode pins are GPIO72 (boot mode pin 1) and GPIO 84 (boot mode pin 0). Users may choose to have weak pullups for boot mode pins if they use a peripheral on these pins as well, so the pullups can be overdriven. On this device, customers can change the factory default boot mode pins by programming user configurable DCSM OTP locations. This is recommended only for cases in which the factory default boot mode pins do not fit into the customer design. More details on the locations to be programmed is available in the TMS320F2837xD Dual-Core Delfino Microcontrollers Technical Reference Manual.
MODE NO. | CPU1 BOOT MODE | CPU2 BOOT MODE | TRST | GPIO72 (BOOT MODE PIN 1) |
GPIO84 (BOOT MODE PIN 0) |
---|---|---|---|---|---|
0 | Parallel I/O | Boot from Master | 0 | 0 | 0 |
1 | SCI Mode | Boot from Master | 0 | 0 | 1 |
2 | Wait Boot Mode | Boot from master | 0 | 1 | 0 |
3 | Get Mode | Boot from Master | 0 | 1 | 1 |
4-7 | EMU Boot Mode (Emulator Connected) | Boot from Master | 1 | X | X |
NOTE
The default behavior of Get mode is boot-to-flash. On unprogrammed devices, using Get mode will result in repeated watchdog resets, which may prevent proper JTAG connection and device initialization. Use Wait mode or another boot mode for unprogrammed devices.
CAUTION
Some reset sources are internally driven by the device. The user must ensure the pins used for boot mode are not actively driven by other devices in the system for these cases. The boot configuration has a provision for changing the boot pins in OTP. For more details, see the TMS320F2837xD Dual-Core Delfino Microcontrollers Technical Reference Manual.
The CPU enters this boot when it detects that TRST is HIGH (in other words, when an emulator/debugger is connected). In this mode, the user can program the EMUBOOTCTRL register (at location 0xD00) to instruct the device on how to boot. If the contents of the EMUBOOTCTRL locations are invalid, then the device would default into WAIT Boot mode. The emulation boot allows users to verify the device boot before programming the boot mode into OTP.
The device in this boot mode loops in the boot ROM. This mode is useful if users want to connect a debugger on a secure device or if users do not want the device to execute an application in flash yet.
The default behavior of Get mode is boot-to-flash. This behavior can be changed by programming the Zx-OTPBOOTCTRL locations in user configurable DCSM OTP. The user configurable DCSM OTP on this device is divided in to two secure zones: Z1 and Z2. The Get mode function in boot ROM first checks if a valid OTPBOOTCTRL value is programmed in Z1. If the answer is yes, then the device boots as per the Z1-OTPBOOTCTRL location. The Z2-OTPBOOTCTRL location is read and decodes only if Z1-OTPBOOTCTRL is invalid or not programmed. If either Zx-OTPBOOTCTRL location is not programmed, then the device defaults to factory default operation, which is to use factory default boot mode pins to boot to flash if the boot mode pins are set to GET MODE. Users can choose the device through which to boot—SPI, I2C, CAN, and USB—by programming proper values into the user configurable DCSM OTP. More details on this can be found in the TMS320F2837xD Dual-Core Delfino Microcontrollers Technical Reference Manual.
Table 5-14 shows the GPIO pins used by each peripheral bootloader. This device supports two sets of GPIOs for each mode, as shown in Table 5-14.
BOOTLOADER | GPIO PINS | NOTES |
---|---|---|
SCI-Boot0 | SCITXDA: GPIO84 SCIRXDA: GPIO85 |
SCIA Boot I/O option 1 (default SCI option when chosen through Boot Mode GPIOs) |
SCI-Boot1 | SCITXDA: GPIO28 SCIRXDA: GPIO29 |
SCIA Boot option 2 – with alternate I/Os. |
Parallel Boot | D0 – GPIO65 D1 – GPIO64 D2 – GPIO58 D3 – GPIO59 D4 – GPIO60 D5 – GPIO61 D6 – GPIO62 D7 – GPIO63 HOST_CTRL – GPIO70 DSP_CTRL – GPIO69 |
|
CAN-Boot0 | CANRXA: GPIO70 CANTXA: GPIO71 |
CAN-A Boot – I/O option 1 |
CAN-Boot1 | CANRXA: GPIO62 CANTXA: GPIO63 |
CAN-A Boot – I/O option 2 |
I2C-Boot0 | SDAA: GPIO91 SCLA: GPIO92 |
I2CA Boot – I/O option 1 |
I2C-Boot1 | SDAA: GPIO32 SCLA: GPIO33 |
I2CA Boot – I/O option 2 |
SPI-Boot0 | SPISIMOA - GPIO58 SPISOMIA - GPIO59 SPICLKA - GPIO60 SPISTEA - GPIO61 |
SPIA Boot – I/O option 1 |
SPI-Boot1 | SPISIMOA – GPIO16 SPISOMIA – GPIO17 SPICLKA – GPIO18 SPISTEA – GPIO19 |
SPIA Boot – I/O option 2 |
USB Boot | USB0DM - GPIO42 USB0DP - GPIO43 |
The USB Bootloader will switch the clock source to the external crystal oscillator (X1 and X2 pins). A 20-MHz crystal should be present on the board if this boot mode is selected. |
The dual code security module (DCSM) prevents access to on-chip secure memories. The term “secure” means access to secure memories and resources is blocked. The term “unsecure” means access is allowed; for example, through a debugging tool such as Code Composer Studio™ (CSS).
The code security mechanism offers protection for two zones, Zone 1 (Z1) and Zone 2 (Z2). The security implementation for both the zones is identical. Each zone has its own dedicated secure resource (OTP memory and secure ROM) and allocated secure resource (CLA, LSx RAM, and flash sectors).
The security of each zone is ensured by its own 128-bit password (CSM password). The password for each zone is stored in an OTP memory location based on a zone-specific link pointer. The link pointer value can be changed to program a different set of security settings (including passwords) in OTP.
CPU-Timers 0, 1, and 2 are identical 32-bit timers with presettable periods and with 16-bit clock prescaling. The timers have a 32-bit count-down register that generates an interrupt when the counter reaches zero. The counter is decremented at the CPU clock speed divided by the prescale value setting. When the counter reaches zero, it is automatically reloaded with a 32-bit period value.
CPU-Timer 0 is for general use and is connected to the PIE block. CPU-Timer 1 is also for general use and is connected to INT13 of the CPU. CPU-Timer 2 is reserved for TI-RTOS. It is connected to INT14 of the CPU. If TI-RTOS is not being used, CPU-Timer 2 is available for general use.
CPU-Timer 2 can be clocked by any one of the following:
The NMIWD module is used to handle system-level errors. There is an NMIWD module for each CPU. The conditions monitored are:
If the CPU does not respond to the latched error condition, then the NMI watchdog will trigger a reset after a programmable time interval. The default time is 65536 SYSCLK cycles.
The watchdog module is the same as the one on previous TMS320C2000 devices, but with an optional lower limit on the time between software resets of the counter. This windowed countdown is disabled by default, so the watchdog is fully backwards-compatible.
The watchdog generates either a reset or an interrupt. It is clocked from the internal oscillator with a selectable frequency divider.
Figure 5-5 shows the various functional blocks within the watchdog module.
TI uses the CLB to offer additional interfacing and control features for select C2000 devices. Functions that would otherwise be accomplished using external logic devices are now provided by on-chip TI solutions. For example, absolute encoder master protocol interfaces such as EnDat and BiSS are now provided as Position Manager solutions. Configuration files, application programmer’s interface (API), and use examples for such solutions are provided with the C2000 controlSUITE software package. In some solutions, the TI-configured CLB is used with other on-chip resources, such as the SPI port or the C28x CPU, to perform more complex functionality. In some cases, external communications transceivers may need to be added.