?? ad.c
字號:
#include "ad.h"
//ad *adptr;
#define ADC_SIZE 16
#define MAX_DAC 4
unsigned int nNewConvert;
void AD_Init(void)
{
/* Set Calibration Register to 0 */
CALIBRATION = 0;
wait_us(2 );
ADCTRL1 = ADC_RESET;
wait_us(2 );
/* Enable AD CTL REGISTER1 */
// ADCTRL1 = ADC_SOFT | ACQ_PS_7 | ADC_SEQ_ACSC;
ADCTRL1 = ADC_SOFT | ACQ_PS_7 ;//| ADC_SEQ_ACSC;
/*----------------------------------------*/
/* Set Maximum Conversion to 15 at a time */
/*----------------------------------------*/
MAXCONV = 0;
/*---------------------------------------------*/
/* set the mux */
/*---------------------------------------------*/
CHSELSEQ1 = 0x0000;
CHSELSEQ2 = 0x0000;
CHSELSEQ3 = 0x1111;
CHSELSEQ4 = 0x1111;
nNewConvert = 0;
/* *(volatile unsigned int *)CHSELSEQ3 = 0xba98;
*(volatile unsigned int *)CHSELSEQ4 = 0xfedc; */
ADC_CONV_NUM_SET(15);
ADCTRL1_PARA_SET(ACQ_PS_0);
ADCTRL1_PARA_SET(ADC_SEQ_ACSC);
ADCTRL1_PARA_SET(CONT_RUN);
// ADCTRL1_PARA_SET(BRG_ENA);
// ADCTRL1_PARA_SET(STEST_ENA);
ADCTRL2_PARA_SET(RST_SEQ1);
ADCTRL2_PARA_SET(EVA_SOC_SEQ1);
ADCTRL2_PARA_SET(SOC_SEQ1);
}
//ADCTRL1參數設定,具體見上表
//使用方法:ADCTRL1_PARA_SET(ACQ_PS_x),ADC時鐘的預定標系數
//ADCTRL1_PARA_SET(CPS),ADC轉換邏輯時鐘的預定標系數
//ADCTRL1_PARA_SET(CONT_RUN),設定排序器工作模式
//ADCTRL1_PARA_SET(SEQ_ACSC),設定級連排序器工作方式
//ADCTRL1_PARA_SET(ADC_RESET),ADC模塊軟件復位
//ADCTRL1_PARA_SET(CAL_ENA),ADC偏差校準使能位
//ADCTRL1_PARA_SET(BRG_ENA),ADC橋使能位
//ADCTRL1_PARA_SET(HI_LO),VREFHI作為ADC輸入的值
//ADCTRL1_PARA_SET(STEST_ENA),使能自測試模式
void ADCTRL1_PARA_SET(unsigned int PARA)
{
ADCTRL1 |= PARA;
}
//ADCTRL1參數設定,具體見上表
//使用方法:ADCTRL1_PARA_SET(ACQ_PS_x),ADC時鐘的預定標系數
//ADCTRL1_PARA_UNSET(CPS),ADC轉換邏輯時鐘的預定標系數為CLK/2;
//ADCTRL1_PARA_UNSET(CONT_RUN),設定排序器工作模式
//ADCTRL1_PARA_UNSET(SEQ_ACSC),設定級連排序器工作方式
//ADCTRL1_PARA_UNSET(ADC_RESET),ADC模塊軟件復位
//ADCTRL1_PARA_UNSET(CAL_ENA),ADC偏差校準使能位
//ADCTRL1_PARA_UNSET(BRG_ENA),ADC橋使能位
//ADCTRL1_PARA_UNSET(HI_LO),VREFHI作為ADC輸入的值
//ADCTRL1_PARA_UNSET(STEST_ENA),使能自測試模式
void ADCTRL1_PARA_UNSET(unsigned int PARA)
{
unsigned int temp,temp2;
temp = ~PARA;
ADCTRL1 &= temp;
}
//ADCTRL2參數獲取,
//使用方法:
//ADCTRL1_PARA_SET(CONT_RUN),測試是否為連續轉換狀態
//是,返回1,否則返回0
unsigned int ADCTRL1_PARA_GET(unsigned int PARA)
{
unsigned int temp;
temp = ADCTRL1;
temp = temp & PARA;
if (temp>0)
return 1;
else
return 0;
}
//ADCTRL2參數設定,
//使用方法:ADCTRL2_PARA_SET(EVB_SOC_SEQ),允許級連的排序器SEQ被EVB啟動
//ADCTRL2_PARA_SET(RST_SEQ1),立即復位排序器
//ADCTRL2_PARA_SET(SOC_SEQ1),通過向這位寫1來軟件啟動SEQ1轉換
//ADCTRL2_PARA_SET(INT_ENA_SEQ1_X),SEQ1的中斷方式使能控制位
//ADCTRL2_PARA_SET(EVA_SOC_SEQ1),允許SEQ1\SEQ被EVA的觸發源啟動
//ADCTRL2_PARA_SET(EXT_SOC_SEQ1),允許外部的ADCSOC引腳上的信號啟動ADC自動轉換
//ADCTRL2_PARA_SET(RST_SEQ2),復位排序器2
//ADCTRL2_PARA_SET(SOC_SEQ2),軟件觸發啟動排序器2
//ADCTRL2_PARA_SET(INT_ENA_SEQ2_X),SEQ2的中斷方式使能控制位
//ADCTRL2_PARA_SET(EVB_SOC_SEQ2),允許SEQ2被EVB的觸發源啟動
void ADCTRL2_PARA_SET(unsigned int PARA)
{
ADCTRL2 |= PARA;
}
//ADCTRL2參數設定,
//使用方法:ADCTRL2_PARA_SET(EVB_SOC_SEQ),允許級連的排序器SEQ被EVB啟動
//ADCTRL2_PARA_SET(RST_SEQ1),立即復位排序器
//ADCTRL2_PARA_SET(SOC_SEQ1),通過向這位寫1來軟件啟動SEQ1轉換
//ADCTRL2_PARA_SET(INT_ENA_SEQ1_X),SEQ1的中斷方式使能控制位
//ADCTRL2_PARA_SET(EVA_SOC_SEQ1),允許SEQ1\SEQ被EVA的觸發源啟動
//ADCTRL2_PARA_SET(EXT_SOC_SEQ1),允許外部的ADCSOC引腳上的信號啟動ADC自動轉換
//ADCTRL2_PARA_SET(RST_SEQ2),復位排序器2
//ADCTRL2_PARA_SET(SOC_SEQ2),軟件觸發啟動排序器2
//ADCTRL2_PARA_SET(INT_ENA_SEQ2_X),SEQ2的中斷方式使能控制位
//ADCTRL2_PARA_SET(EVB_SOC_SEQ2),允許SEQ2被EVB的觸發源啟動
void ADCTRL2_PARA_UNSET(unsigned int PARA)
{
unsigned int temp,temp2;
temp = ~PARA;
ADCTRL2 &= temp;
}
//ADCTRL2參數獲取,
//使用方法:
//ADCTRL2_PARA_SET(SEQ1_BSY),測試SEQ1是否處于忙狀態
//ADCTRL2_PARA_GET(INT_FLAG_SEQ1),測試SEQ!是否發生過中斷事件
//ADCTRL2_PARA_SET(SEQ2_BSY),測試SEQ2是否處于忙狀態
//ADCTRL2_PARA_GET(INT_FLAG_SEQ2),測試SEQ2是否發生過中斷事件
//是,返回1,否則返回0
unsigned int ADCTRL2_PARA_GET(unsigned int PARA)
{
unsigned int temp;
temp = ADCTRL2;
temp = temp & PARA;
if (temp>0)
return 1;
else
return 0;
}
void ADC_CONV_NUM_SET(unsigned int CONV_NUM_VAL)
{
MAXCONV = CONV_NUM_VAL;
}
void ADC_CONV_RESULT_GET(unsigned int *p)
{
unsigned int i,temp;
volatile unsigned int *j;
temp = MAXCONV + 1;
j = Val_RESULT0;
for (i=0;i<temp;i++)
{
*p = *j>>6;
p++;
j++;
}
}
void READ_AD(unsigned int *p)
{
unsigned int TimeOutCtr = 0xffff;
if(ADCTRL1_PARA_GET(CONT_RUN))
{
ADC_CONV_RESULT_GET(p);
}
else
{
while(TimeOutCtr--)
{
/* Finished the Conversion */
if( ADCTRL2_PARA_GET(SEQ1_BSY)>0)
{
break;
}
}
if(TimeOutCtr>0)
{
ADC_CONV_RESULT_GET(p);
}
}
}
void AD_Test(void)
{
unsigned int res[16];
unsigned int i;
ADC_CONV_NUM_SET(15);
ADCTRL1_PARA_SET(ACQ_PS_0);
ADCTRL1_PARA_SET(ADC_SEQ_ACSC);
ADCTRL1_PARA_SET(CONT_RUN);
// ADCTRL1_PARA_SET(BRG_ENA);
// ADCTRL1_PARA_SET(STEST_ENA);
ADCTRL2_PARA_SET(RST_SEQ1);
ADCTRL2_PARA_SET(EVA_SOC_SEQ1);
ADCTRL2_PARA_SET(SOC_SEQ1);
wait_us(3);
// CHSELSEQ1=0x3210;
// CHSELSEQ2=0x7654;
// CHSELSEQ1=0xBA98;
// CHSELSEQ2=0xFEDC;
for(i=0;i<10;i++)
{
wait_second(5);
READ_AD(res);
}
//GPTx_Frequence_Set(GPT2,6);
//GPTxPINT_ENA(GPT2);
// GPTCONx_PARA_SET(EVA_NUM,T2TOADC_2);
//GPTx_ENA(GPT2);
}
void light_value(unsigned int *p,unsigned int maxconv_num)
{
unsigned int res[16];
unsigned int i,j,num,temp;
// CHSELSEQ1=0x3210;
// CHSELSEQ2=0x7654;
// CHSELSEQ1=0xBA98;
// CHSELSEQ2=0xFEDC;
READ_AD(res);
for(i=0;i<2;i++)
{
num=i*8;
temp = 0;
for(j=num;j<(num+8);j++)
{
temp= temp+res[j];
}
*p = temp/8;
p++;
}
//GPTx_Frequence_Set(GPT2,6);
//GPTxPINT_ENA(GPT2);
// GPTCONx_PARA_SET(EVA_NUM,T2TOADC_2);
//GPTx_ENA(GPT2);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -