我使用bl-pac来进行开发,我参考c的例程后发现其初始化步骤为:
当我按照例程的方式,通过pac去编写rust程序时发现似乎无法通过pac来进行相关操作。例如在使能XTAL的时候,例程使用如下的方式开启:
BL_Err_Type ATTR_CLOCK_SECTION AON_Power_On_XTAL(void)
{
uint32_t tmpVal = 0;
uint32_t timeOut = 0;
tmpVal = BL_RD_REG(AON_BASE, AON_RF_TOP_AON);
tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_XTAL_AON);
tmpVal = BL_SET_REG_BIT(tmpVal, AON_PU_XTAL_BUF_AON);
BL_WR_REG(AON_BASE, AON_RF_TOP_AON, tmpVal);
/* Polling for ready */
do {
arch_delay_us(10);
timeOut++;
tmpVal = BL_RD_REG(AON_BASE, AON_TSEN);
} while (!BL_IS_REG_BIT_SET(tmpVal, AON_XTAL_RDY) && timeOut < 120);
if (timeOut >= 120) {
return TIMEOUT;
}
return SUCCESS;
}
但在pac中没有相关的aon模块,通过搜索xtal可以找到XTAL32K_SPEC in bl616_pac::hbn::xtal32k - Rust (docs.rs),但这个寄存器在芯片的参考手册中似乎没有相关描述。
如果我使用pac进行开发的话,我应该遵循怎样的初始化流程?