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.

[参考译文] CCS/CC2640:无法通过SPI从DR寄存器读取接收到的数据

Guru**** 2539500 points
Other Parts Discussed in Thread: CC2640

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/583152/ccs-cc2640-cannot-read-received-data-from-the-dr-register-over-spi

部件号:CC2640

工具/软件: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日

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    您可以查看我们的SPI驱动程序文件,了解更多详细信息(SPICC26XXDMA.c)和driverlib (ssi.c)