TI中文支持网
TI专业的中文技术问题搜集分享网站

请问TM4C123GH6PZ的SPI读取时,SCLK为什么没有输出时钟信号呢?

我想用M4的SPI模块读取外部ADC的数据,但是发现M4的SCLK并没有输出同步时钟。

谢谢!

step by step:

楼主,

     要不把代码发来看看吧。

Wind:

回复 step by step:

void InitSPI(void)
{SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2);SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);GPIOPinConfigure(GPIO_PH4_SSI2CLK);//GPIOPinConfigure(GPIO_PH5_SSI2FSS);GPIOPinConfigure(GPIO_PH6_SSI2RX);GPIOPinConfigure(GPIO_PH7_SSI2TX);GPIOPinTypeSSI(GPIO_PORTH_BASE, GPIO_PIN_4|GPIO_PIN_6|GPIO_PIN_7);SSIConfigSetExpClk(SSI2_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0,SSI_MODE_MASTER,2000000,16);SSIEnable(SSI2_BASE);while(SSIDataGetNonBlocking(SSI2_BASE, &buffer1)){}
}void SPIRead(void)
{SSIDataGet(SSI2_BASE, &buffer1);buffer1 &= 0x3FFF;buffer2 = buffer1;UARTprintf("Read: %x", buffer2);
}
//-----------------------------------------------------------------------------
// Ö÷oˉêy:Ïòw25x80D′êy¾Y£¬Ö®oó¶á3ö¡£
//-----------------------------------------------------------------------------
int main(void)
{tContext sContext;tRectangle sRect;char cThisChar;char ulIdx;SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_XTAL_16MHZ |SYSCTL_OSC_MAIN);//// 3õê¼»ˉ′®¿ú//lcd_ili932x_init();//3õê¼»ˉLCDÇy¶ˉGrContextInit(&sContext, &g_sLcdDisplay);//3õê¼»ˉí¼Dοalcd_backlight_on();lcd_ili932x_flush(&sContext);sRect.sXMin = 0;sRect.sYMin = 0;sRect.sXMax = GrContextDpyWidthGet(&sContext) - 1;sRect.sYMax = 23;GrContextForegroundSet(&sContext, ClrDarkBlue);GrRectFill(&sContext, &sRect);//ìî3äà¶é«·½¿éGrContextForegroundSet(&sContext, ClrWhite);GrRectDraw(&sContext, &sRect);//¼ó°×é«¿ò¿òGrContextFontSet(&sContext, &g_sFontCm20);GrStringDrawCentered(&sContext, "SPI Demo", -1,GrContextDpyWidthGet(&sContext) / 2, 10, 0);// ÏÔê¾êμÑé±êÖ¾InitConsole();//′®¿ú3õê¼»ˉInitSPI();InitGPIO();SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);// ê1ÄüLEDËùÔú¶Ë¿úPHGPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_7); //ÅäÖÃPN.4ÎaledμÆêä3öGPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_7,GPIO_PIN_7);SysCtlDelay((SysCtlClockGet()/1));// é趨ÿ′ÎÑóê±ê±¼ä£¬t=1 Ñóê±Îa1mswhile(1){GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_7,0);UARTprintf("start/n");//GrStringDraw(&sContext,"SPI is Reading...", -1, 30, 80, 1);//′òó¡DÅÏ¢SPIRead();GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_7,GPIO_PIN_7);UARTprintf("done /n");//GrContextFontSet(&sContext, &g_sFontCm20);////sprintf(dis,"SPI Read: %x",buffer2);//GrStringDraw(&sContext,dis, -1, 30, 80, 1);//′òó¡DÅÏ¢}
}

Michael Sun:

回复 Wind:

没太看明白SSI读取函数里面的数据处理是啥意思,

不过对于SSI来说,需要读取数据时要先发送数据,这样SSI主设备才会产生时钟,发送数据的同时,接收到的数据也会存入buffer,再调用

SSIDataGet就可以把数据读出来。

Wind:

回复 Michael Sun:

感谢您的回复!

可是我想要读取AD的数据,而不想往AD写数据,因此我该发送什么数据呢?

发送数据的时候有时钟输出,那发送数据结束后要获取数据时就没有时钟了呢?

SSI读取函数的数据处理是为了去掉高位不需要的,因为AD只有14位

Wind:

回复 Michael Sun:

您好!

我现在使用的一款ADS8371芯片,这块芯片只有数据输出,没有数据输入,我不知道该怎么用您之前提过的方法?

我使用软件模拟的方法,即主动发送时钟,来判断接收数据,但是这么做效果不好。。。

因此我还是想尽量用硬件SPI,谢谢您!

Michael Sun:

回复 Wind:

对于SPI的时序来说,主要的配置就在是时钟频率、字长、时钟的极性和采样的边沿。这个在SPI设备(ADS8371)中会有明确的描述。M4的SPI按照这个去配置就好。

例如,

SSIConfigSetExpClk(SSI1_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 2000000, 16);

SSI_FRF_MOTO_MODE_0是时钟极性和采样边沿,2000000是频率,16是字长。

接下来就是ADS8371的内部寄存器和配置了,这个按照它的Datasheet去做就行了。

赞(0)
未经允许不得转载:TI中文支持网 » 请问TM4C123GH6PZ的SPI读取时,SCLK为什么没有输出时钟信号呢?
分享到: 更多 (0)