AWR6843: 询问

Part Number: AWR6843

static inline void HWA_doReset(DSSHWACCRegs *ctrlBaseAddr)
{
ctrlBaseAddr->HWACCREG1 = CSL_FINSR(ctrlBaseAddr->HWACCREG1, 6U, 4U, 0x7U);
ctrlBaseAddr->HWACCREG1 = CSL_FINSR(ctrlBaseAddr->HWACCREG1, 6U, 4U, 0x0U);

return;
}

AWR6843dsk中HWA_doReset函数,请问为什么写HWACCREG1寄存器写了四遍,向HWACCREG1 第6-4位写7写了两遍,向HWACCREG1第6-4位写0也写了两遍

  • 你好,

    你贴的这个函数是先给这个寄存器的4~6 bit 幅值7,然后幅值0。你说的两遍是如何看出来的?

    Thanks,

    Chris

  • static inline uint32_t CSL_FINSR(volatile uint32_t reg, uint8_t msb, uint8_t lsb, uint32_t val)
    {
    uint32_t mask;
    uint8_t bits;
    uint32_t value;
    uint32_t tmp;

    bits = (msb - lsb + 1U);
    mask = (1U << bits);
    mask = mask - 1U;
    value = (mask << lsb);
    tmp = (reg & ~value);
    reg = tmp | CSL_FMKR(msb, lsb, val);
    return reg;
    }调用这个函数,不是已经赋给reg一次了,然后又reg等于这个函数,这不是两次赋值吗?

  • 你好,

    这个函数是先读出寄存器的值,然后再把需要幅值与一下。

    Thanks,

    Chris