微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > 关于用TM4C控制ADS1211的问题

关于用TM4C控制ADS1211的问题

时间:10-02 整理:3721RD 点击:

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))  //检查低电平

这个是通过了,就是产生下降沿电平了,而且用示波器看的确有下降沿,可是就是读写不行,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top