This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SysCtlPeripheralEnable函数是怎么实现控制位置位功能的?



请教:

TivaWare库函数里面有个:

ROM_SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER2);

函数的定义是:
 SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER2);

其中函数参数的定义是#define SYSCTL_PERIPH_TIMER2    0xf0000402     //Timer 2

要对TIMER2外设clock使能,要对RCGCTIMER寄存器配置,它的地址是0x400F.E604, Timer2控制位对应在其中的bit-2,所以要将RCGCTIMER里面的bit-2置1,就能达到目的。

但是我跟踪了一下SysCtlPeripheralEnable( SYSCTL_PERIPH_TIMER2)函数,将具体的置代入,函数里面是个HWREG的宏定义,最后我得到结果是

(*(volatile uint32_t *) (0x43FC_C088)) = 1;

但是我弄不明白,这句怎么能实现上面所说的功能呢?

多谢解答!

 

 

  • 原函数是这样来的

    void
    SysCtlPeripheralEnable(uint32_t ui32Peripheral)
    {
        //
        // Check the arguments.
        //
        ASSERT(_SysCtlPeripheralValid(ui32Peripheral));
    
        //
        // Enable this peripheral.
        //
        HWREGBITW(SYSCTL_RCGCBASE + ((ui32Peripheral & 0xff00) >> 8),
                  ui32Peripheral & 0xff) = 1;
    }

    而SYSCTL_RCGCBASE的基地址为0x400F.E000,算下来寄存器的地址为0x400F.E402

    而不是你所说的0x43FC_C088