⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adca.c

📁 DSP56F800e HYBRID Controller
💻 C
字号:
/**********************************************************************************************************/
/*										Olaru Marius													  */
/*								      ADCA Module Driver	          	    					    	  */
/**********************************************************************************************************/


#include "Headers.h"



UInt16 info;


                /*   Intrerupere ADCA la sfarsitul unei conversii   */ 
#pragma interrupt saveall 
void isrADCA_interrupt(void)
{
  
  
  enterCritical(); /* Intram intr-o sectiune critica pe perioada intreruperii */ 
  
 
  
  asm(move.w #$0800,X:ADCA_STAT);          /*   curat bitul EOSI      */     
  info =(*(volatile word *)ADCA_RSLT0)>>3; /*   extrag data utila     */ 	
  

  
  
  // printf("dataADCA = %u\n ",data);
  asm(bfset #$2000,X:ADCA_CR1);            /* lansez o noua conversie */  
  
  
  exitCritical();  /* Activam controlerul de intreruperi -> parasim sectiunea critica  */
  
}




                      /* Cofigurare intrerupere modul ADCA */ 
void initIntrADCA()
{
   enterCritical(); /* Intram intr-o sectiune critica pe perioada configurarii */ 


   asm (bfset #$000C,X:IPR9);  /*  setez propritatea intreruperii de sfarsit   */
                               /*     de conversie pentru modulul ADCA         */               
   asm (bfclr #$0300,SR);	   /*   permit toate tipurile de intrerupere       */
 
 
   exitCritical();  /* Activam controlerul de intreruperi -> parasim sectiunea critica  */  		
}





                        /* Initializare modul ADCA */
void ADCA_Init()
{

     enterCritical(); /* Intram intr-o sectiune critica pe perioada configurarii */ 

     asm(move.w #$0800,X:ADCA_STAT);       

   /******************************************************************************************* 
   *																						  *
   *        Configurez registrul de control 1 asociat ADC-ului A							  *
   *																						  *	
   * bit 15                   = 0															  *	
   * bit 14 STOP 			  = 0 => selectez modul de operare normal - curat bitul de stop,  *
   *                                permit initializarea de conversii ADCA                    *
   * bit 13 START CONVERSION  = 0 => inca nu dorim sa-nceapa conversia                        *
   * bit 12 SYNC SELECT       = 1 => conversia poate fi initializata prin setarea             *
   *                              bitului de start sau cu ajutorul semnalului SYNC            *   
   *																						  *
   * bit 11 EOSIE             -  End Of Scan Interrupt Enable                                 *
   *                          = 1 => activez posib. de  generare a intreruperilor ce apar la  *
   *                              sfarsitul unei secvente de conversie                        *
   * bit 10 - 8               = 000 => dezactivez intreruperile ce pot fi generate de         *
   *                                 zero Crossing, Low Limit, High Limit                     *
   * bit  7 - 4  CHNCFG Channel configure                                                     *
   *                          = 0000  Intrarile AN0-1,AN2-3,AN4-5,AN6-7 sunt configurate      * 
   *                                  ca single edge input                                    * 
   *                                                                                          *
   * bit 3                    = 0  - bit rezervat                                             * 
   * bit 2 - 0    ADC Control Mode (SMODE) = 000 -One Sequencial                              *
   *                La start sau Sync samplerurile sunt luate cate unul o data incepand cu    *
   *             SAMPLE0 pana cand pana cand e intalnit primul sample disabled                * 
   *                Dca nu avem disable atunci conversia se  "incheie" la SAMPLE7             * 
   *                                                                                          *
   ********************************************************************************************/

   asm(move.w #$1800,X:ADCA_CR1);

   /*******************************************************************************************
   *																						  *
   *        Configurez registrul de control 2 asociat ADC-ului A                              *
   *                                                                                          *
   * bitii 4:0                = 5 Setez prescaler ce influenteaza frecv de conversie a        * 
   *                              ADC-ului A frecv = 60MHz/(2*(5+1)) = 5 MHz                  *
   *                             valoarea minima este 5                                       *
   *                                                                                          * 
   *******************************************************************************************/

   asm(move.w #$0005,X:ADCA_CR2);

   /*******************************************************************************************
   *																						  * 	
   *       ADCA - High Limit Register														  *
   *																						  *	
   *   Este utilizat pentru a impune o limita superioara pentru valoarea achizitionata        *
   *   Verificarea limitei superioare poate fi dezactivata prin scrierea in registrul         *
   *  ADCA_HLMT 0 ... a valorii 7FF8                                                          *
   *                                                                                          *
   *******************************************************************************************/

   asm(move.w #$7FF8,X:ADCA_HLMT0);

   /*******************************************************************************************
   *																						  *	
   *       ADCA - Low Limit Register														  *
   *																						  *
   *   Este utilizat pentru a impune o limita inferioara pentru valoarea achizitionata		  *	
   *																					      *
   *   Verificarea limitei inferioare poate fi dezactivata prin scrierea in registrul         *
   *  ADCA_LLMT0 ... a valorii 0000                                                           *
   *                                                                                          *
   *******************************************************************************************/

   asm(move.w #$0000,X:ADCA_LLMT0);

   /*******************************************************************************************
   *																						  *	
   *       Configurez registrul ADSDIS - activez numai sample 0								  *			
   *																						  *
   * biti 7 - 0 - 0xFE - activez numai sample 0												  *			
   *																						  *			
   *******************************************************************************************/

   asm(bfset #$00FE,X:ADCA_SDIS);

   /******************************************************************************************
   *																						 *
   *       Configurez registrul ADLST1 si ADSLT2											 *	
   *																						 *
   * selectez canalul AN0 pentru Sample0												     *		
   * selectez canalul AN4 pentru Sample4                                                     *
   *                                                                                         *
   ******************************************************************************************/
   
   asm(move.w #$3210,X:ADCA_LST1);
   asm(move.w #$7654,X:ADCA_LST2);

   /*****************************************************************************************
   *																						*			
   *      ADCA Offset register 0 sunt util. pt ca rez conv +offset sa fie stocat in ADCRSLT	*
   *																						*
   ******************************************************************************************/
   
   asm(move.w #$0000,X:ADCA_OFS0);
   
   
   
    enterCritical(); /* Intram intr-o sectiune critica pe perioada configurarii */ 
}




/********************************************************************************************
*																							*	
*      Trec cele doua ADC-uri din modulul ADCA in modul POWER DOWN							*		
*    activarea bitilor PD2-0 duce la intreruperea conversiei curente						*	
*																							*	
********************************************************************************************/	
void ADCA_POWER_DOWN_MODE(void)
{
   asm(bfset #$0007,X:ADCA_POWER);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -