?? 9.1.c
字號:
/**************************************************************
** 功能描述: ADC程序,對ADCINA3和ADCINA2采樣,中斷方式**
**************************************************************/
#include "DSP28_Device.h"
interrupt void adc_isr(void);
//定義全局變量:
Uint16 LoopCount;
Uint16 ConversionCount;
Uint16 Voltage1[10];
Uint16 Voltage2[10];
main()
{
InitSysCtrl();
EALLOW;
SysCtrlRegs.HISPCP.all = 0x3; // HSPCLK = SYSCLKOUT/6
EDIS;
DINT;
IER = 0x0000;
IFR = 0x0000; // 禁止和清除所有CPU中斷
InitPieCtrl();
InitPieVectTable();
InitAdc(); //初始化ADC模塊,該函數在DSP28_Adc.c文件中
EALLOW; //使能寫保護寄存器的寫操作
PieVectTable.ADCINT = &adc_isr; //把用戶中斷服務的入口地址
//賦給中斷向量表頭文件中的對應向量
EDIS; // 禁止寫保護寄存器的寫操作
PieCtrlRegs.PIEIER1.bit.INTx6 = 1; //使能PIE中的ADCINT中斷
IER |= M_INT1; // // 使能 CPU 中斷 1,使能全部 INT1
EINT; // 使能全局中斷 INTM
ERTM; // 使能全局實時中斷 DBGM
LoopCount = 0; //循環計數器清零
ConversionCount = 0; //當前轉化結果數清零
// 配置 ADC
AdcRegs.ADCMAXCONV.all = 0x0001; // 設置SEQ1的2個轉化通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // 設置SEQ1的 ADCINA3 作為第
//一轉換通道
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x2; // 設置SEQ1的 ADCINA2 作為第
//二轉換通道
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1; // 使能 EVASOC 去啟動 SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // 使能 SEQ1 中斷 (每次 EOS)
// 配置 EVA
// 假設EVA已經在 InitSysCtrl()中使能;
EvaRegs.T1CMPR =0x0080; // 設置 T1 比較值
EvaRegs.T1PR = 0xFFFF; // 設置周期寄存器
EvaRegs.GPTCONA.bit.T1TOADC = 1; // 使能EVA中的 EVASOC(下溢中斷啟動ADC)
EvaRegs.T1CON.all = 0x1042; // 使能定時器1比較操作 (增計數模式 )
//等ADC轉換
while (1)
{
LoopCount++;
}
}
interrupt void adc_isr(void)
{
Voltage1[ConversionCount] = AdcRegs.ADCRESULT0;
Voltage2[ConversionCount] = AdcRegs.ADCRESULT1;
// 如果已記錄了40次轉化,則重新開始轉換
if(ConversionCount == 9)
{
ConversionCount = 0;
}
else ConversionCount++;
// 重新初始化下一次ADC轉換
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // 復位 SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // 清 INT SEQ1位
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // 清中斷應答信號,準備接收下一次中斷
return;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -