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

📄 adcb.c

📁 DSP56F800e HYBRID Controller
💻 C
字号:
#include "Headers.h"











               /*   Intrerupere ADCB la sfarsitul unei conversii   */ 
#pragma interrupt saveall 
void isrADCB_interrupt(void)
{
  register UInt16 data;  
  
  enterCritical(); /* Intram intr-o sectiune critica pe perioada intreruperii*/ 
  
  asm(move.w #$0800,X:ADCB_STAT);          /*   curat bitul EOSI      */     
  data =(*(volatile word *)ADCB_RSLT0)>>3; /*   extrag data utila     */ 	
 // printf("dataADCB = %u\n\n ",data);
  asm(bfset #$2000,X:ADCB_CR1);     

  exitCritical();  /* Activam controlerul de intreruperi -> parasim sectiunea critica  */
    
 }
















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


		asm (bfclr #$0300,SR);		//permit toate tipurile de intrerupere     
        asm (bfset #$0003,X:IPR9);  //intreruperea de SFARSIT DE CONVERSIE PENTRU ADCB
  		                            //ii atribui prioritatea 2   
                    
        exitCritical();  /* Activam controlerul de intreruperi -> parasim sectiunea critica  */
}












                        /* Initializare modul ADCB */
void ADCB_Init()
{

    enterCritical(); /* Intram intr-o sectiune critica pe perioada configurarii */ 
  
    asm(move.w #$0800,X:ADCB_STAT);       

   /**********************************************************************************************
   *                                                                                             *  
   *       Configurez registrul de control 1 asociat ADC-ului B                                  *  
   *        																					 *
   * 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 #$0800,X:ADCB_CR1);

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


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

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

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

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

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

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

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

  /**********************************************************************************************
  *																								*
  *       Configurez registrul ADLST1 si ADSLT2													*	
  *																								*
  * selectez canalul ANB0 pentru Sample0														*
  *																								*	
  **********************************************************************************************/

  asm(move.w #$3210,X:ADCB_LST1);

  /**********************************************************************************************
   *																							*	
   *       ADCB Offset register 0 sunt utilizati pt ca rez conv +offset sa fie stocat in ADCRSLT*
   *																							*
   *********************************************************************************************/

  asm(move.w #$0000,X:ADCB_OFS0);
 
 
 exitCritical();  /* Activam controlerul de intreruperi -> parasim sectiunea critica  */
    
}



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

⌨️ 快捷键说明

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