ZHCAC41 February 2023 TMS320F280025C
状态/标志位让 CPU 可以轮询 CLB 逻辑的状态。例如,在 CLB 中断之后,CPU 可以轮询标志位以确定中断是由数据接收中断还是接收错误中断引起。
可以使用 HLC 寄存器来实施这些状态/标志位。但是,每个标志必须使用一个 HLC 寄存器,因为 HLC 不支持按位与和或指令。例如,HLC R0 寄存器中的非零值可用于指示接收中断,而 R1 中的非零值可用于指示接收错误。
也可以通过直接读取不同 CLB 逻辑块的状态来确定 CLB 逻辑状态。例如,如果 FSM 配置为定义多个状态(例如 IDLE 和 ACTIVE),CPU 可以读取 S0 和 S1 的状态来判断 CLB 逻辑状态。
CPU 可以使用 CLB 存储器映射调试寄存器 CLB_DBG_Rn、CLB_DBG_Cn 和 CLB_DBG_OUT 来确定 CLB 内不同块的状态。以下代码块中显示了使用 HLC 寄存器作为状态位的示例。代码块使用 C2000ware driverlib 函数。
uint32_t chkIntFlag = CLB_getRegister(CCSI2_RX_TILE_BASE, CLB_REG_HLC_R1);
uint32_t rcvIntFlag = CLB_getRegister(CCSI2_RX_TILE_BASE, CLB_REG_HLC_R2);
uint32_t endIntFlag = CLB_getRegister(CCSI2_RX_TILE_BASE, CLB_REG_HLC_R3);
...
// Receive interrupt
if (rcvIntFlag & 0x1)
{
...
// Clear the receive interrupt flag register
CLB_writeInterface(CCSI2_RX_TILE_BASE, CLB_ADDR_HLC_R2, 0x0);
}
// End interrupt
if (endIntFlag & 0x1)
{
...
// Clear the end interrupt flag register
CLB_writeInterface(CCSI2_RX_TILE_BASE, CLB_ADDR_HLC_R3, 0x0);
}
// Check error interrupt
if (chkIntFlag & 0x1)
{
...
// Clear the check error interrupt flag register
CLB_writeInterface(CCSI2_RX_TILE_BASE, CLB_ADDR_HLC_R1, 0x0);
}