我们想要使用365内的RTC时钟,但在内核启动时在初始化RTC时会挂起,于是看驱动中发现停在下面红色标注的地方:
Rtc-davinci-dm365.c:
static int rtcss_write_rtc(unsigned long val, u8 addr)
{
u32 new_ctrl, int_ena, int_flg;
int retval = 0;
int_ena = rtcif_read(DM365_RTCIF_INT_ENA_REG);
int_ena |= (DM365_RTCIF_INT_ENA_RTCSS_INTENA |
DM365_RTCIF_INT_ENA_RTCIF_INTENA);
rtcif_write(int_ena, DM365_RTCIF_INT_ENA_REG);
int_flg = rtcif_read(DM365_RTCIF_INT_FLG_REG);
int_flg |= (DM365_RTCIF_INT_FLG_RTCSS_INTFLG |
DM365_RTCIF_INT_FLG_RTCIF_INTFLG);
rtcif_write(int_flg, DM365_RTCIF_INT_FLG_REG);
new_ctrl = rtcif_read(DM365_RTCIF_DMA_CMD_REG);
new_ctrl &= ~DM365_RTCIF_DMA_CMD_SIZE_2WORD;
new_ctrl &= ~(DM365_RTCIF_DMA_CMD_BYTEENA0_MASK |
DM365_RTCIF_DMA_CMD_BYTEENA1_MASK);
new_ctrl |= (DM365_RTCIF_DMA_CMD_BYTEENA0_LSB | addr);
if (new_ctrl & DM365_RTCIF_DMA_CMD_BUSY) {
while (rtcif_read(DM365_RTCIF_DMA_CMD_REG) &
DM365_RTCIF_DMA_CMD_BUSY) ;}
rtcif_write(new_ctrl, DM365_RTCIF_DMA_CMD_REG);
rtcif_write(0,DM365_RTCIF_INT_ENA_REG);
while (rtcif_read(DM365_RTCIF_INT_ENA_REG) &
DM365_RTCIF_INT_ENA_RTCIF_INTENA) ;
rtcif_write(val, DM365_RTCIF_DMA_DATA0_REG);
return retval;
}
貌似是PRTCIF没有产生中断,PRTCSS没有起来? 但具体原因是什么没有查到,板子上时钟电池都没问题。
另外在sprufj0b.pdf中查到PRTCSS Normal Mode 启动过程要设置PWRST和PWRCNTON,这个设置对于开发板也不是太清楚,不知道是不是和这个有关?
很着急!希望TI专家帮忙解决下!