关于用TM4C控制ADS1211的问题
void InitSPI0(void)
{
//初始化SSI0
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); // The SSI3 peripheral must be enabled for use.
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); //GPIO port B needs to be enabled so these pins can be used.
SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 32000, 8); //接收
GPIOPinTypeSSI(GPIO_PORTA_BASE, GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5);
GPIOPinConfigure(GPIO_PA2_SSI0CLK);
GPIOPinConfigure(GPIO_PA4_SSI0RX);
GPIOPinConfigure(GPIO_PA5_SSI0TX);
IntEnable(INT_SSI0);
SSIIntDisable(SSI0_BASE,SSI_RXFF|SSI_RXOR|SSI_RXTO);
SSIEnable(SSI0_BASE);
}
上面是SPI0的初始化
while(!GPIOPinRead(GPIO_PORTA_BASE,GPIO_PIN_3)) //检查高电平
while(GPIOPinRead(GPIO_PORTA_BASE,GPIO_PIN_3)) //检查低电平
SSIDataPutNonBlocking(SSI0_BASE,0x64); /* 设置INSR写入4字节命令字CMR */
SSIDataPutNonBlocking(SSI0_BASE,0x52); //二进制补码,单极性,SDOUT独立,先MSB,REF使用内部 ,
SSIDataPutNonBlocking(SSI0_BASE,0x20); /* 选择半自动校准模式,增益PGA为1,通道1 */
SSIDataPutNonBlocking(SSI0_BASE,0x81); /* 根据抽取率=fxin*TMR/(Fdata*512);计算抽取率 */
SSIDataPutNonBlocking(SSI0_BASE,0x38); /* TMR设置为8;Fdata为1000;Fxin为10M,得到抽取率为312.5 20位有效位 */
OSTimeDly(OS_TICKS_PER_SEC/2);
while(SSIDataGetNonBlocking(SSI0_BASE, &ulDataRxNop)) //接收之前清空FIFO,因为SSI发送数据的同时也在接收数据。不管那你发送数据还是命令
{
}
while(!GPIOPinRead(GPIO_PORTA_BASE,GPIO_PIN_3)) //检查高电平
while(GPIOPinRead(GPIO_PORTA_BASE,GPIO_PIN_3)) //检查低电平
SSIIntEnable(SSI0_BASE,SSI_RXFF|SSI_RXOR|SSI_RXTO);//使能SSI0接收中断
SSIDataPutNonBlocking(SSI0_BASE,0xE4); //读控制寄存器
SSIDataPutNonBlocking(SSI0_BASE,0x00); //产生4个CLK
SSIDataPutNonBlocking(SSI0_BASE,0x00);
SSIDataPutNonBlocking(SSI0_BASE,0x00);
SSIDataPutNonBlocking(SSI0_BASE,0x00);
OSTimeDly(OS_TICKS_PER_SEC*3);
上面是ADS的初始化
我先写入,再读出,是通过SSI的中断读出的,但是产生中断后,发现读出的值全是0,这是为什么?
这个芯片的SPI设定应该没有问题,因为之前是用来读写ADS1254,都没问题
与SPI的初始化SSI_FRF_MOTO_MODE_0有关系么?
ADC1211的SDOUT 连接 TM4C的SSIORX,ADC1211的SDIO 连接 TM4C的SSIOTX,读写的连接也没有错吧?
程序当中可以进入 SPI的中断,说明
while(!GPIOPinRead(GPIO_PORTA_BASE,GPIO_PIN_3)) //检查高电平
while(GPIOPinRead(GPIO_PORTA_BASE,GPIO_PIN_3)) //检查低电平
这个是通过了,就是产生下降沿电平了,而且用示波器看的确有下降沿,可是就是读写不行,