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.

关于用TM4C控制ADS1211的问题

Other Parts Discussed in Thread: ADS1254

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,都没问题