Zipwire 通信需要使用 LFAST 寄存器 ,在对 LFAST 寄存器进行读写操作的时候出现访问错误
使用 LFAST 寄存器前需要对其进行 IOREMAP 操作 ,如果直接访问寄存器地址 ,会出现内存访问错误 ,出现上面的报错信息
一.对 LFAST 寄存器进行 IOREMAP 操作 :
typedef volatile struct LFAST_tag zipwire_LfastRegs_t;
zipwire_LfastRegs_t *lpLfastRegs= NULL;
lpLfastRegs = (zipwire_LfastRegs_t*)ioremap((uintptr_t)&LFAST,
sizeof(zipwire_LfastRegs_t));
二. 在 U-boot 里面 Enable LFAST 寄存器时钟
在对 LFAST 寄存器进行了 IOREMAP 的操作后 ,仍然出现了寄存器访问的错误 ,报错信息请参考下面的 “Details” 项里面的内容 :
在 U_BOOT 里面Enable LFAST 的时钟后 ,对 u-boot/arch/arm/cpu/armv8/s32 clock.c 下的 LFAST 寄存器进行操作 :
static void enable_modules_clock( void )
{
/* CRC0 */
writeb( MC_ME_PCTLn_RUNPCm(CFG_RUN_PC), MC_ME_PCTLn(CRC0_PCTL));
/* CRC1 */
writeb( MC_ME_PCTLn_RUNPCm(CFG_RUN_PC), MC_ME_PCTLn(CRC1_PCTL));
/* ENET */
writeb( MC_ME_PCTLn_RUNPCm(CFG_RUN_PC), MC_ME_PCTLn(ENET_PCTL));
/* HPSMI */
writeb( MC_ME_PCTLn_RUNPCm(CFG_RUN_PC), MC_ME_PCTLn(HPSMI_PCTL));
……………………………………………………………………………………
/* LFAST */
writeb(MC_ME_PCTLn_RUNPCm(CFG_RUN_PC), MC_ME_PCTLn(LFAST_PCTL));经过以上修改 ,LFAST 访问错误的问题得以解决
评论