工具/软件:Code Composer Studio
你好,你好。
最近,我正在为采用专用通信接口GSPI的3G/HD/SD-SDI串行器芯片GS2972开发驱动程序 (Gennum串行外设接口的缩写)。此接口类似于常规SPI,但有一分钟的差异,因为它在连续的数据字传输中需要一定的时间延迟。时间延迟随所选波特率而变化。如CC2640技术参考中所示 Manual(TRM for Short ),在PHA=0和POL=0模式下,通过SPI进行的典型传输将在每个数据字传输之间脉冲SSI_FSS引脚到高,这肯定会中断GSPI协议。因此,我决定向下操作寄存器。 TRM告诉您如何初始化和配置SSI模块以使其在SPI模式下工作,但却没有详细说明 典型数据传输的过程。 我已经进行了几次试验实验,但仍然无法从SSI数据寄存器读取接收到的数据字,在该数据寄存器中,读取的值始终为零。 Saleelogic Analyzer是一种小型便携式逻辑分析器,它显示在四条传输线上一切顺利。但是,SSI数据寄存器仍然没有产生任何结果。如下所示:
源代码(部件)附在下面,我猜读取过程有问题,但不知道其位置。
//主 dsCfg = HWREG (SSI0_base+SSI_O_CR1); dsCfg &= 0; HWREG (SSI0_base+SSI_O_CR1)= dsCfg; //时钟预分频器,必须为偶数! dsCfg = HWREG (SSI0_BASE + SSI_O_CPSR); dsCfg ==~SSI_CPSR_CPSDVSR_M; dsCfg || 0x2; HWREG (SSI0_BASE + SSI_O_CPSR)= dsCfg; //配置! dsCfg = 0; dsCfg || 0x2 <<SSI_CR0_SCR_S; dsCfg || 0x0 <<SSI_CR0_SPH_S; dsCfg || 0x0 <<SSI_CR0_SP_S; SSI_SSF_SSF_SSF_SSFg_SSF_S; dsCfg= 已 启用;SSF_SSF_SSFg_1;SSF_SSFg_SSF_SSFg_SSF=~= 1;SSF_SSF_SSFg_SSF0;SSF== SSF_SSF_SSFg_SSF0 HWREG (SSI0_base+SSI_O_CR1)= dsCfg; dsCfg = HWREG (SSI0_BASE + SSI_O_SR); fprintf (stderr,"SR (PRE)= 0x%04x\r\n",dsGPIO); dsCfg = 0x40B | 0x8000; HW31(TPO_BASE = USF1<_UFgPI) //开始一个数据字传输 HWREG(SSI0_BASE + SSI_O_DR)= dsCfg; //等待完成 While ((HWREG (SSI0_BASE + SSI_O_SR)& SSI_SR_BSY_M)> 0); //开始一个数据字传输 HWREG(SSI0_BASE + SSI_O_DR)= 0x0000; //等待完成 ,同时((HWREG(SSI0_BASE + SSI_O_SR)和SSI_SR_BSY_M)>0); HWREG(GPIO_BASE | GPI_O_DOUTSET31_0)= 1 <23; //读取数据 IF ((HWREG (SSI0_BASE + SSI_O_RIS)& SSI_MIS_RTMIS_M)> 0){ dataRev[i+]= HWREG(SSI0_BASE + SSI_O_DR); } //打印数据 对于(int j = 0;j < i;j++){ fprintf (stderr,"no.%d:data[0]=0x%04x\r\n",j,dataRev[j]); }
有人能澄清一下吗?我会非常感激的!
提前感谢。
严洁
Sumavision Corp.的软件工程师
2017年3月22日
