DSP2812与ads1158通讯源代码!
 
					
				#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
 #include "DSP281x_Examples.h"   // DSP281x Examples Include File
  void InitSystem(void);
  void ConfigureGpio(void);
  void spi_Init(void);
  void delay_loop(int a);
  void spi_xmit(Uint16 a);
  Uint16 ad_read();
  void initADS1158(void);    //初始化ADS1158
//-----------------------------------------------------------------------------
  Uint16 rdata[16];  // received data
  int i = 0;
//------------------------------------------------------------------------------       
  void main(void)
  {
      
      
      InitSystem();  //初始化DSP内核寄存器
      ConfigureGpio(); //配置GPIO口
     // DINT;
 //  InitPieCtrl();
 //  IER = 0x0000;
     // IFR = 0x0000;
//   InitPieVectTable();
      
      spi_Init();
      initADS1158();
   delay_loop(1600);
    //  spi_xmit(0x0000);
   while(1)
   {
     // -------------------------------------------  读寄存器,看数据能否写进ADC
  /* spi_xmit(0x4300);
  // while(SpiaRegs.SPISTS.bit.INT_FLAG==0);
            rdata[i] = SpiaRegs.SPIRXBUF; 
   SpiaRegs.SPICTL.bit.TALK = 0;
         */
      //-----------------------------------------------------------读ADC采样的数据
         while(GpioDataRegs.GPEDAT.bit.GPIOE0 == 1);
          {  
      spi_xmit(0x0000); 
        // while(SpiaRegs.SPISTS.bit.INT_FLAG==0);
   rdata[i] = SpiaRegs.SPIRXBUF;
   SpiaRegs.SPICTL.bit.TALK = 0;
           
          }
       
       i++;
    if(i==16)i=0;
          
    
   }
   
  
   }
//------------------------------------------------------------------------------
   
   void delay_loop(int a)
   {
    long      i;
    for (i = 0; i < a; i++) {}
   }
   void spi_xmit(Uint16 a)
   {
    SpiaRegs.SPICTL.bit.TALK = 0;
    delay_loop(3);
    SpiaRegs.SPICTL.bit.TALK = 1;
    SpiaRegs.SPITXBUF=a; 
 while (SpiaRegs.SPISTS.bit.INT_FLAG==0);
    //delay_loop(16);
}
  void InitSystem(void)
   {
     EALLOW;
     SysCtrlRegs.WDCR= 0x0068;  // 禁止看门狗模块 
     SysCtrlRegs.PLLCR.bit.DIV = 10; // 将CPU的PLL倍频系数设为5
    
     SysCtrlRegs.HISPCP.all = 0x1; // 高速时钟的预定标器设置成除以2
     SysCtrlRegs.LOSPCP.all = 0x2; // 低速时钟的预定标器设置成除以4,spi的bode rate use it
        
      // 根据需要使能各外设模块的时钟输入    
     SysCtrlRegs.PCLKCR.bit.EVAENCLK=0;
        SysCtrlRegs.PCLKCR.bit.EVBENCLK=0;
     SysCtrlRegs.PCLKCR.bit.SCIAENCLK=0;
        SysCtrlRegs.PCLKCR.bit.SCIBENCLK=0;
     SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=0;
     SysCtrlRegs.PCLKCR.bit.SPIENCLK=1;
     SysCtrlRegs.PCLKCR.bit.ECANENCLK=0;
     SysCtrlRegs.PCLKCR.bit.ADCENCLK=0;
    EDIS;
  }
 void ConfigureGpio(void)
  {
 EALLOW;
     GpioMuxRegs.GPAMUX.all = 0x0; //将GPIO口的引脚配置成通用I/O口
        GpioMuxRegs.GPBMUX.all = 0x0;   
     GpioMuxRegs.GPDMUX.all = 0x0; 
     GpioMuxRegs.GPEMUX.all = 0x0; // NOset XINT1
        GpioMuxRegs.GPFMUX.all = 0x000F; //将GPIOF口的引脚配置成外设功能
    
        GpioMuxRegs.GPGMUX.all = 0x0;   
          
     GpioMuxRegs.GPADIR.all = 0xFFFF; //将所有GPIO口配置成数字量out功能
     GpioMuxRegs.GPBDIR.all = 0xFFFF; 
     GpioMuxRegs.GPDDIR.all = 0xFFFF;
     GpioMuxRegs.GPEDIR.all = 0xFFFE; 
     GpioMuxRegs.GPGDIR.all = 0xFFFF;
    
    EDIS;    
   }
 
   void spi_Init(void)
   {
 SpiaRegs.SPICCR.bit.SPISWRESET = 0; //复位SPI的操作标志位
 SpiaRegs.SPICCR.bit.CLKPOLARITY = 1;//下降沿发送,上升沿捕获
 SpiaRegs.SPICCR.bit.SPILBK = 0;// 自检测
 SpiaRegs.SPICCR.bit.SPICHAR  = 0xF; //CHAR位域= 0111表示8位数据传输
 SpiaRegs.SPICTL.bit.OVERRUNINTENA = 0;//禁止接收器溢出中断
 SpiaRegs.SPICTL.bit.CLK_PHASE = 0; 
 SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; //主模式(可以接收或者发送数据)
 SpiaRegs.SPICTL.bit.TALK = 1; //en数据传输
 SpiaRegs.SPICTL.bit.SPIINTENA = 0; //禁止SPI中断
 SpiaRegs.SPIBRR = 62;
 // SPI 波特率     =  LSPCLK / ( SPIBRR + 1)
 //     =  37,5 MHz / ( 124 + 1 )
 //        =  300 kHz
 //将SPI从复位状态释放(进入正常操作模式)
 SpiaRegs.SPICCR.bit.SPISWRESET = 1;
      // Set so breakpoints don't disturb xmission
    SpiaRegs.SPIPRI.bit.FREE = 1; 
}
   void  initADS1158(void)    //初始化ADS1158      要想写进数据,每次写完要清SPI int 标志位,否则数据写不进去
     {
     
       spi_xmit(0x6008);
       delay_loop(16);
    rdata[i++] = SpiaRegs.SPIRXBUF;
    spi_xmit(0x6101);
    delay_loop(16);
       rdata[i++] = SpiaRegs.SPIRXBUF;
     //  spi_xmit(0x6200);
     // delay_loop(10);
  
       spi_xmit(0x6301);
       delay_loop(16);
       rdata[i++] = SpiaRegs.SPIRXBUF;
    spi_xmit(0x6400);
     //  delay_loop(16);
    rdata[i++] = SpiaRegs.SPIRXBUF;
    spi_xmit(0x6500);
    //   delay_loop(16);
       rdata[i++] = SpiaRegs.SPIRXBUF;
       spi_xmit(0x6600);
    delay_loop(16);
       rdata[i++] = SpiaRegs.SPIRXBUF;
    }
 Uint16 ad_read()//读A/D数据。
   {    
     Uint16 b;
     delay_loop(16);    
     SpiaRegs.SPITXBUF = 0x0000;           
     while (SpiaRegs.SPISTS.bit.INT_FLAG==0);
     b = SpiaRegs.SPIRXBUF; 
     return b;
    }
  // ---------------------------------------------------
  // CODE END
  //---------------------------------------------------
 
					
				回复
| 有奖活动 | |
|---|---|
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
| 送您一块开发板,2025年“我要开发板活动”又开始了! | |


 
			
			
			
						
			 我要赚赏金
 我要赚赏金 STM32
STM32 MCU
MCU 通讯及无线技术
通讯及无线技术 物联网技术
物联网技术 电子DIY
电子DIY 板卡试用
板卡试用 基础知识
基础知识 软件与操作系统
软件与操作系统 我爱生活
我爱生活 小e食堂
小e食堂

