SPRUIW9C October 2021 – March 2024 TMS320F280033 , TMS320F280034 , TMS320F280034-Q1 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037-Q1 , TMS320F280037C , TMS320F280037C-Q1 , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1
The HIC supports 8 and 16 data lines and host data transfers can be made in 8-bit and 16-bit modes. The host data transfer mode is selected using the byte enable (nBE) pins. In the absence of the nBE pins, host data transfer mode can be selected using the HICMODECR.DW_MODE register.
At the initiator port level, the HIC internal access is restricted to 16-bit and 32-bit modes selectable using the HICHOSTCR.ACCSIZE register. If there is a mismatch between host access mode and initiator port access mode, the HIC internally packs and unpacks the data automatically as needed.
For instance, if host access mode is set to 16-bit using the nBE pins or the HICMODECR.DW_MODE register and initiator port access mode is set to 16-bit using the HICHOSTCR.ACCSIZE register, no data packing or unpacking is done. If host access mode is set to 8-bit and initiator port access mode is set to 16-bit, a single 8-bit access waits for another 8-bit access to pack the two 8-bit accesses into one 16-bit access.
Table 14-4 shows the combinations for write access.
HICMODECR. DW_MODE |
Host Port Write | Initiator Port Write (16-bit Aligned) |
Error | Comment | |||
---|---|---|---|---|---|---|---|
A[7:0] | D[7:0] for 8-bit
DW_MODE D[15:0] for 16-bit DW_MODE |
nBE[1:0] | DWAB[31:0] | DWDB[31:0] | |||
8-bit (0) | 0x0 | B0 | - | No | 8-bit write to even address, waits for packing. | ||
0x1 | B1 | - | BADDRx + 0x0 | [15:0]=B1B0 | No | 8-bit write to odd address, packed into 16-bit. | |
0x2 | B2 | - | No | 8-bit write to even address, waits for packing. | |||
0x3 | B3 | - | BADDRx + 0x1 | [31:16]=B3B2 | No | 8-bit write to odd address, packed into 16-bit. | |
0x1 | B1 | - | BADDRx + 0x0 | [15:0]=B1B0 | No | 8-bit write to odd address, packed into 16-bit with previous even byte data. | |
0x3 | B3 | - | BADDRx + 0x1 | [31:16]=B3XX | No | 8-bit write to odd address, packed into 16-bit with previous even byte data. | |
0xA | B0 | - | No | 8-bit write to even address, waits for packing. | |||
0xA+n (n > 1) |
XX | - | Yes | Consecutive byte writes beyond 16-bit boundary are illegal, previous byte discarded. | |||
16-bit (1) | 0x0 | B1B0 | 2'b00 | BADDRx + 0x0 | [15:0]=B1B0 | No | Full 16-bit write sent through. |
0x1 | B3B2 | 2'b00 | BADDRx + 0x1 | [31:16]=B3B2 | No | Full 16-bit write sent through. | |
0x2 | B5B4 | 2'b00 | BADDRx + 0x2 | [15:0]=B5B4 | No | Full 16-bit write sent through. | |
0x3 | B7B6 | 2'b00 | BADDRx + 0x3 | [31:16]=B7B6 | No | Full 16-bit write sent through. | |
0x0 | XXB0 | 2'b10 | No | 8-bit write to even address, waits for packing. | |||
0x0 | B1XX | 2'b01 | BADDRx + 0x0 | [15:0]=B1B0 | No | 8-bit write to odd address, packed into 16-bit. | |
0x1 | XXB2 | 2'b10 | No | 8-bit write to even address, waits for packing. | |||
0x1 | B3XX | 2'b01 | BADDRx + 0x1 | [31:16]=B3B2 | No | 8-bit write to odd address, packed into 16-bit. | |
0x0 | B1XX | 2'b01 | BADDRx + 0x0 | [15:0]=B1BXX | No | Any odd 8-bit write triggers 16-bit write packed with previous even byte data. | |
0x1 | B3XX | 2'b01 | BADDRx + 0x1 | [31:16]=B3XX | No | Any odd 8-bit write triggers 16-bit write packed with previous even byte data. | |
0xA | XXB0 | 2'b10 | No | 8-bit write to even address, waits for packing. | |||
0xA+n (n > 1) |
XXB0 | 2'b10 | Yes | Consecutive byte writes beyond 16-bit boundary are illegal, previous byte discarded. |
Table 14-5 shows the combinations for read access.
HICMODECR. DW_MODE |
Host Port Read | Initiator Port Read | Comment | ||
---|---|---|---|---|---|
A[7:0] | D[7:0] for 8-bit
DW_MODE D[15:0] for 16-bit DW_MODE |
DRAB[31:0] | DRDB[31:0] | ||
8-bit (0) | 0x0 | B0 | BADDRx + 0x0 | [31:0]=B3B2B1B0 | A random read from the host triggers a 32-bit read on the initiator port. |
0x1 | B1 | A sequential byte read within the aligned 32-bit word is returned from the internal data buffer. | |||
0x2 | B2 | ||||
0x3 | B3 | ||||
0x4 | B4 | BADDRx + 0x2 | [31:0]=B7B6B5B4 | A byte read outside of an aligned 32-bit word boundary triggers a 32-bit read on the initiator port. | |
16-bit (1) | 0x0 | B1B0 | BADDRx + 0x0 | [31:0]=B7B6B5B4 | A random read from the host triggers a 32-bit read on the initiator port. |
0x1 | B3B2 | A sequential 16-bit read within an aligned 32-bit word is returned from the internal data buffer. | |||
0x2 | B5B4 | BADDRx + 0x2 | [31:0]=B3B2B1B0 | A 16-bit read from the host port outside of an aligned 32-bit word triggers a 32-bit read on the initiator port. | |
0x3 | B7B6 | A sequential 16-bit read within an aligned 32-bit word is returned from the internal data buffer. |