00001 /************************************************************************************************** 00002 Title : PIC24F Series ADC Driver 00003 Programmer : Yosuke FURUSAWA 00004 Copyright : Copyright (C) 2008-2010 Yosuke FURUSAWA. 00005 License : 4-clause BSD License 00006 Since : 2008/12/10 00007 00008 Filename : libadc.c 00009 Last up date : 2010/08/13 00010 Kanji-Code : Shift-JIS 00011 TAB Space : 4 00012 **************************************************************************************************/ 00013 00014 00015 /*================================================================================================ 00016 ヘッダファイルをインクルード 00017 =================================================================================================*/ 00018 #include <p24FJ64GA002.h> 00019 00020 #include "types.h" 00021 00022 #include "librtc.h" 00023 #include "libadc.h" 00024 00025 00026 /*================================================================================================= 00027 マクロ定義 00028 =================================================================================================*/ 00029 00030 00031 /*================================================================================================= 00032 グローバル変数 00033 =================================================================================================*/ 00034 ADC_T adc; 00035 00036 00037 /*================================================================================================= 00038 プロトタイプ宣言 00039 =================================================================================================*/ 00040 00041 00042 /************************************************************************************************** 00043 内蔵ADC 割り込み 00044 **************************************************************************************************/ 00045 void __attribute__((interrupt, auto_psv)) _ADC1Interrupt(void) 00046 { 00047 IFS0bits.AD1IF = 0; 00048 00049 /* LPF */ 00050 adc.adc[0] = (ADC1BUF0 + ADC1BUF3 + ADC1BUF6 + ADC1BUF9) >> 2; 00051 adc.adc[1] = (ADC1BUF1 + ADC1BUF4 + ADC1BUF7 + ADC1BUFA) >> 2; 00052 adc.adc[2] = (ADC1BUF2 + ADC1BUF5 + ADC1BUF8 + ADC1BUFB) >> 2; 00053 00054 #ifndef ADC_LOWMEM 00055 adc.cycle = RTC_get_ticks(adc.last, rtc.tick); 00056 adc.last = rtc.tick; 00057 #endif 00058 00059 return; 00060 } 00061 00062 00063 /************************************************************************************************** 00064 ADC 初期化 00065 **************************************************************************************************/ 00066 void ADC_init(void) 00067 { 00068 00069 #ifndef ADC_LOWMEM 00070 adc.last = rtc.tick; 00071 adc.cycle = 0xffff; 00072 #endif 00073 00074 /* 内蔵ADC */ 00075 /* FEDCBA9876543210 */ 00076 AD1CON1 = 0b1000000011100101; 00077 AD1CON2 = 0b0000010000110000; 00078 AD1CON3 = 0b0001111111111111; 00079 AD1PCFG = 0b1111111111111000; 00080 AD1CSSL = 0b0000000000000111; 00081 AD1CHS = 0b0000000000000000; 00082 00083 IPC3bits.AD1IP = 1; 00084 IEC0bits.AD1IE = 1; 00085 IFS0bits.AD1IF = 0; 00086 00087 return; 00088 }