📄 adca.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 + -