[资料分享] ADS8555驱动分享--DSP28335

[复制链接]
 楼主| xyz549040622 发表于 2019-12-21 10:58 | 显示全部楼层 |阅读模式
本帖最后由 xyz549040622 于 2019-12-21 23:19 编辑
  1. // TI File $Revision: /Final ok version for SH's EVM board/ (Jack's remark: This is Dale's code, better than me)

  2. //###########################################################################
  3. // FILE:    ADS8556-6ch.c
  4. //
  5. // TITLE:   Test ADS8556 for total 6 channels.
  6. // DESCRIPTION:
  7. //###########################################################################


  8. #include "DSP28x_Project.h"     
  9. #define BUF_6CH          6  
  10. #define BUF_Times       48  
  11. #define Result_total   288
  12. #pragma DATA_SECTION(ADS8556_Result,"DMARAML6");
  13. #pragma DATA_SECTION(ADS8556_Buf,"ZONE6DATA");
  14. volatile Uint16 ADS8556_Result[Result_total];
  15. volatile Uint16 ADS8556_Buf[BUF_6CH];
  16. volatile Uint16 *ADCDest;
  17. volatile Uint16 *ADCSource;
  18. volatile Uint16 m;
  19. volatile Uint16 INT_Flag;    // INT finish flag
  20. void Gpio_setup1(void);   
  21. void init_zone6(void);      
  22. void delay_loop(void);
  23. void delay_short(void);
  24. interrupt void xint1_isr(void);

  25. void main(void)
  26. {
  27.    Uint16 i;
  28.    Uint16 j;

  29.    // Step 1. Initialize System Control:
  30.    // PLL, WatchDog, enable Peripheral Clocks
  31.    // This example function is found in the DSP2833x_SysCtrl.c file.
  32.    InitSysCtrl();

  33.    // Step 2. Clear all interrupts and initialize PIE vector table:
  34.    // Disable CPU interrupts
  35.    DINT;

  36.    // Initialize PIE control registers to their default state.
  37.    // The default state is all PIE interrupts disabled and flags
  38.    // are cleared.
  39.    // This function is found in the DSP2833x_PieCtrl.c file.
  40.    InitPieCtrl();

  41.    // Disable CPU interrupts and clear all CPU interrupt flags:
  42.    IER = 0x0000;
  43.    IFR = 0x0000;

  44.    // Initialize the PIE vector table with pointers to the shell Interrupt
  45.    // Service Routines (ISR).
  46.    // This will populate the entire table, even if the interrupt
  47.    // is not used in this example.  This is useful for debug purposes.
  48.    // The shell ISR routines are found in DSP2833x_DefaultIsr.c.
  49.    // This function is found in DSP2833x_PieVect.c.
  50.    InitPieVectTable();

  51.    // Interrupts that are used in this example are re-mapped to
  52.    // ISR functions found within this file.
  53.    EALLOW;        // This is needed to write to EALLOW protected registers
  54.    PieVectTable.XINT1 = &xint1_isr;    // For ADS8556
  55.    EDIS;   // This is needed to disable write to EALLOW protected registers

  56.    // Step 3. Initialize all the Device Peripherals:
  57.    // This function is found in DSP2833x_InitPeripherals.c
  58.    // InitPeripherals(); // Not required for this example

  59.    // Step 4. User specific code:
  60.    
  61.     Gpio_setup1();     // For ADS8556
  62.             
  63.         // Initalize XINTF Zone
  64.     init_zone6();     // For ADS8556
  65.     ////    InitXintf();  // Not required for this program

  66.    // Initialize Tables
  67.    for (i=0; i<BUF_6CH; i++)
  68.    {
  69.     ADS8556_Buf[i] = i;
  70.    }
  71.    for (j=0; j<Result_total; j++)
  72.    {
  73.           ADS8556_Result[j] = j;
  74.    }

  75.    // Enable Xint1 and XINT2 in the PIE: Group 1 interrupt 4 & 5
  76.    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;         
  77.    PieCtrlRegs.PIEIER1.bit.INTx4 = 1;         
  78. //   PieCtrlRegs.PIEIER1.bit.INTx5 = 1;      
  79.    IER |= M_INT1;                             
  80.    EINT;

  81.    // F28335's GPIO12(for ADS8556) is interrupt input for XINT1
  82.    EALLOW;
  83.    GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;  
  84.    GpioCtrlRegs.GPADIR.bit.GPIO12 = 0;  
  85.    GpioCtrlRegs.GPAQSEL1.bit.GPIO12=0;   
  86.    GpioCtrlRegs.GPACTRL.bit.QUALPRD1=0xFF;
  87.    EDIS;

  88.    EALLOW;
  89.    GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12;  
  90.    EDIS;
  91.    XIntruptRegs.XINT1CR.bit.POLARITY = 0;
  92.    XIntruptRegs.XINT1CR.bit.ENABLE = 1;   

  93.    // Step 5. Configure and main loop
  94.         INT_Flag = 0;
  95.     ADCDest   = &ADS8556_Result[0];
  96.         ADCSource = &ADS8556_Buf[0];
  97.     GpioDataRegs.GPASET.bit.GPIO7 = 1;            
  98.     delay_loop();     
  99.     GpioDataRegs.GPACLEAR.bit.GPIO7 = 1;     


  100.         for(;;)
  101. {
  102.     for(m=0; m<BUF_Times; m++)   
  103.     {
  104.            GpioDataRegs.GPASET.bit.GPIO13 = 1;     // Load output latch
  105.     delay_short();

  106.         while(INT_Flag == 0) { }  
  107.         INT_Flag = 0;

  108.     delay_short();
  109.         }            
  110.   }

  111.     //Just sit and loop forever (optional):
  112.    //   for(;;);
  113. }

  114.     // Step 6. Insert all local Interrupt Service Routines (ISRs) and functions here:
  115.         // If local ISRs are used, reassign vector addresses in vector table as shown in Step
  116. interrupt void xint1_isr(void)
  117. {
  118.     unsigned char   n;

  119.    for (n=0; n<BUF_6CH; n++)
  120.    {
  121.      *ADCDest++ = *ADCSource++;
  122.    }

  123.          ADCSource = &ADS8556_Buf[0];
  124.         ADCDest= &ADS8556_Result[ m * 6];
  125.         INT_Flag = 1;  
  126.                
  127.     GpioDataRegs.GPACLEAR.bit.GPIO13 = 1;     // Load output latch
  128.         PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
  129. }


  130. void delay_loop(void)
  131. {
  132.     unsigned char   j;
  133.         unsigned char   k;
  134.     for( j = 100; j > 0; j--)
  135.     for( k = 200; k > 0; k--);   
  136. }

  137. void Gpio_setup1(void)         
  138. {
  139.    EALLOW;
  140.    GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0;     
  141.    GpioDataRegs.GPACLEAR.bit.GPIO15 = 1;   
  142.    GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 0;   
  143.    GpioCtrlRegs.GPADIR.bit.GPIO15 = 1;   
  144.    GpioCtrlRegs.GPAPUD.bit.GPIO14 = 0;   
  145.    GpioDataRegs.GPASET.bit.GPIO14 = 1;     
  146.    GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0;   
  147.    GpioCtrlRegs.GPADIR.bit.GPIO14 = 1;     
  148.    GpioCtrlRegs.GPBPUD.bit.GPIO48 = 0;     
  149.    GpioDataRegs.GPBCLEAR.bit.GPIO48 = 1;   
  150.    GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 0;   
  151.    GpioCtrlRegs.GPBDIR.bit.GPIO48 = 1;   
  152.    GpioCtrlRegs.GPBPUD.bit.GPIO49 = 0;     
  153.    GpioDataRegs.GPBSET.bit.GPIO49 = 1;     
  154.    GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 0;   
  155.    GpioCtrlRegs.GPBDIR.bit.GPIO49 = 1;  
  156.    GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0;   
  157.    GpioDataRegs.GPACLEAR.bit.GPIO7 = 1;
  158.    GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;   
  159.    GpioCtrlRegs.GPADIR.bit.GPIO7 = 1;  
  160.    GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0;   
  161.    GpioDataRegs.GPASET.bit.GPIO5 = 1;  
  162.    GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0;
  163.    GpioCtrlRegs.GPADIR.bit.GPIO5 = 1;   
  164.    GpioCtrlRegs.GPAPUD.bit.GPIO6 = 0;  
  165.    GpioDataRegs.GPASET.bit.GPIO6 = 1;   
  166.    GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 0;  
  167.    GpioCtrlRegs.GPADIR.bit.GPIO6 = 1;  
  168.    GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;     
  169.    GpioDataRegs.GPACLEAR.bit.GPIO16 = 1;   
  170.    GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 0;   
  171.    GpioCtrlRegs.GPADIR.bit.GPIO16 = 1;   
  172.    GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;     
  173.    GpioDataRegs.GPACLEAR.bit.GPIO17 = 1;   
  174.    GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0;   
  175.    GpioCtrlRegs.GPADIR.bit.GPIO17 = 1;  
  176.    GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;   
  177.    GpioDataRegs.GPACLEAR.bit.GPIO18 = 1;
  178.    GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0;   
  179.    GpioCtrlRegs.GPADIR.bit.GPIO18 = 1;     
  180.    GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;   
  181.    GpioDataRegs.GPASET.bit.GPIO19 = 1;   
  182.    GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0;  
  183.    GpioCtrlRegs.GPADIR.bit.GPIO19 = 1;   
  184.    GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;   
  185.    GpioDataRegs.GPACLEAR.bit.GPIO13 = 1;   
  186.    GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;   
  187.    GpioCtrlRegs.GPADIR.bit.GPIO13 = 1;   
  188. }

  189. void init_zone6(void)         
  190. {
  191.     // Make sure the XINTF clock is enabled
  192.         SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;

  193.         // Configure the GPIO for XINTF with a 16-bit data bus
  194.         // This function is in DSP2833x_Xintf.c
  195.         InitXintf16Gpio();

  196.     EALLOW;
  197.     // All Zones---------------------------------
  198.     // Timing for all zones based on XTIMCLK = 1/2 SYSCLKOUT
  199.     XintfRegs.XINTCNF2.bit.XTIMCLK = 1;   // 0 XTIMCLK = SYSCLKOUT
  200.     // Buffer up to 3 writes
  201.     XintfRegs.XINTCNF2.bit.WRBUFF = 3;
  202.     // XCLKOUT is enabled
  203.     XintfRegs.XINTCNF2.bit.CLKOFF = 0;
  204.     // XCLKOUT = XTIMCLK/2
  205.     XintfRegs.XINTCNF2.bit.CLKMODE = 1;   // 0 XCLKOUT = XTIMCLK

  206.     // Zone 6------------------------------------
  207.     // When using ready, ACTIVE must be 1 or greater
  208.     // Lead must always be 1 or greater
  209.     // Zone write timing
  210.     XintfRegs.XTIMING6.bit.XWRLEAD = 3;
  211.     XintfRegs.XTIMING6.bit.XWRACTIVE = 7;
  212.     XintfRegs.XTIMING6.bit.XWRTRAIL = 7;
  213.     // Zone read timing
  214.     XintfRegs.XTIMING6.bit.XRDLEAD = 3;  //1
  215.     XintfRegs.XTIMING6.bit.XRDACTIVE = 7;  //3
  216.     XintfRegs.XTIMING6.bit.XRDTRAIL = 3;  //0

  217.     //  double all Zone read/write lead/active/trail timing
  218.     XintfRegs.XTIMING6.bit.X2TIMING = 1;  // 0 - don't

  219.     // Zone will not sample XREADY signal
  220.     XintfRegs.XTIMING6.bit.USEREADY = 0;
  221.     XintfRegs.XTIMING6.bit.READYMODE = 0;

  222.     // 1,1 = x16 data bus
  223.     // 0,1 = x32 data bus
  224.     // other values are reserved
  225.     XintfRegs.XTIMING6.bit.XSIZE = 3;
  226.     EDIS;

  227.    //Force a pipeline flush to ensure that the write to
  228.    //the last register configured occurs before returning.
  229.    asm(" RPT #7 || NOP");
  230. }

  231. void delay_short(void)
  232. {
  233.     unsigned char   j;
  234.         unsigned char   k;
  235.     for( j = 10; j > 0; j--)
  236.     for( k = 225; k > 0; k--);     
  237. }


  238. //===========================================================================
  239. // No more.
  240. //===========================================================================



internally 发表于 2019-12-23 19:41 | 显示全部楼层
感谢楼主分享!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2841

主题

19330

帖子

110

粉丝
快速回复 在线客服 返回列表 返回顶部