📄 atd.c
字号:
/*------------------------------------------------------------
| ATD MODULE FOR MC9S12DP256B USING ATD0 |
| WRITE: WANG JUN PENG
| DATE : 2004 -05 28
| NOTE :
*/
#define ATD_GLOBALS
#include "includes.h"
void SetADLen(unsigned char len)
{
unsigned char c;
c=(len&0x0f);
if(c==0)c=8;
ATD0_SLEN = c;
c=(c<<3);
_ATD0CTL3.Byte|=c;
}
void InitATD(unsigned char slen)
{
_ATD0CTL2.Byte=0xe2;//11100010
//Enable ATD
//complete Flag Fast Clear
//stop in wait mode
//enable ATD sequence complete interrupt
_ATD0CTL3.MergedBits.FRZ=1;//ADC stoped when enter debug/background mode after current convertion
SetADLen(slen);//Set ATD Sequence length
_ATD0CTL3.Bits.FIFO=0;//Disable FIFO function
_ATD0CTL4.MergedBits.PRS=5;//ATDCLK=Bus Clk/2/(5+1) this is the default set value
_ATD0CTL4.MergedBits.SMP=1;//4 A/D conversion clock periods
_ATD0CTL4.MergedBits.SRES_8=1;//8 bits ATD result
}
void StartATD(unsigned char ch)
{
unsigned char c;
_ATD0CTL2.Bits.ADPU=1;
c=0x90;//Right justified data in the result registers.
//Unsigned data representation in the result registers
//Continuous conversion sequences (scan mode)---0xb0 -- not use
//Sample across several channels.
ATD0_CH = (ch & 0x07);
c|=ATD0_CH;//Max ch value is 7;
_ATD0CTL5.Byte=c;//Start a new ATD convertion by write to _ATD0CTL5
}
void StopATD(void)
{
_ATD0CTL2.Bits.ADPU=0;
}
void readADResultB(void)
{
byte r;
r=ATD0_CH;
ATD0_RxBuf[r]=ATD0DR0L;
r++;
if(r>=ATD0_SLEN)return;
ATD0_RxBuf[r]=ATD0DR1L;
r++;
if(r>=ATD0_SLEN)return;
ATD0_RxBuf[r]=ATD0DR2L;
r++;
if(r>=ATD0_SLEN)return;
ATD0_RxBuf[r]=ATD0DR3L;
r++;
if(r>=ATD0_SLEN)return;
ATD0_RxBuf[r]=ATD0DR4L;
r++;
if(r>=ATD0_SLEN)return;
ATD0_RxBuf[r]=ATD0DR5L;
r++;
if(r>=ATD0_SLEN)return;
ATD0_RxBuf[r]=ATD0DR6L;
r++;
if(r>=ATD0_SLEN)return;
ATD0_RxBuf[r]=ATD0DR7L;
return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -