/usr/share/sdcc/include/pic16/adc.h is in sdcc-libraries 2.9.0-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 | /*
* A/D conversion module library header
*
* written by Vangelis Rokas, 2004 <vrokas AT otenet.gr>
*
* Devices implemented:
* PIC18F[24][45][28]
* PIC18F2455-style
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* $Id: adc.h 5391 2009-02-27 13:03:40Z tecodev $
*/
#ifndef __ADC_H__
#define __ADC_H__
/* link I/O libarary */
#pragma library io
/* interrupt on/off flag */
#define ADC_INT_OFF 0x00
#define ADC_INT_ON 0x01
/* output format */
#define ADC_FRM_RJUST 0x80
#define ADC_FRM_LJUST 0x00
/* reference voltage configuration (not for 18f242-style ADC) */
#define ADC_VCFG_VDD_VSS 0x00
#define ADC_VCFG_AN3_VSS 0x10
#define ADC_VCFG_VDD_AN2 0x20
#define ADC_VCFG_AN3_AN2 0x30
/* oscillator frequency */
#define ADC_FOSC_2 0x00
#define ADC_FOSC_4 0x04
#define ADC_FOSC_8 0x01
#define ADC_FOSC_16 0x05
#define ADC_FOSC_32 0x02
#define ADC_FOSC_64 0x06
#define ADC_FOSC_RC 0x07
/*
* acquisition time (65j50-style only)
* -- to be ORed with ADC_FOSC
*/
#define ADC_ACQT_0 (0x00 << 3)
#define ADC_ACQT_2 (0x01 << 3)
#define ADC_ACQT_4 (0x02 << 3)
#define ADC_ACQT_6 (0x03 << 3)
#define ADC_ACQT_8 (0x04 << 3)
#define ADC_ACQT_12 (0x05 << 3)
#define ADC_ACQT_16 (0x06 << 3)
#define ADC_ACQT_20 (0x07 << 3)
/*
* calibration enable (65j50-style only)
* -- to be ORed with ADC_FOSC
*/
#define ADC_CAL 0x40
/*
* Distinguishing between ADC-styles:
*
* ADCON0:
* bit 18f242 18f1220 18f2220 18f65j50
* 0 ADON ADON ADON ADON
* 1 - GO GO GO
* 2 GO CHS0 CHS0 CHS0
* 3 CHS0 CHS1 CHS1 CHS1
* 4 CHS1 CHS2 CHS2 CHS2
* 5 CHS2 - CHS3 CHS3
* 6 ADCS0 VCFG0 - VCFG0
* 7 ADCS1 VCFG1 (ADCAL) VCFG1
*
* ADCON1:
* bit 18f242 18f1220 18f2220 18f65j50
* 0 PCFG0 PCFG0 PCFG0 ADCS0
* 1 PCFG1 PCFG1 PCFG1 ADCS1
* 2 PCFG2 PCFG2 PCFG2 ADCS2
* 3 PCFG3 PCFG3 PCFG3 ACQT0
* 4 - PCFG4 VCFG0 ACQT1
* 5 - PCFG5 VCFG1 ACQT2
* 6 ADCS2 PCFG6 - ADCAL
* 7 ADFM - - ADFM
*/
/* 18f242-style */
#if defined(pic18f242) || defined(pic18f252) || defined(pic18f442) || defined(pic18f452) \
|| defined(pic18f248) || defined(pic18f258) || defined(pic18f448) || defined(pic18f458)
#define __SDCC_ADC_STYLE242 1
/* 18f1220-style */
#elif defined(pic18f1220) || defined(pic18f1320)
#define __SDCC_ADC_STYLE1220 1
/* 18f2220-style, ordered by device family */
#elif defined(pic18f2220) || defined(pic18f2320) || defined(pic18f4220) || defined(pic18f4320) \
|| defined(pic18f2221) || defined(pic18f2321) || defined(pic18f4221) || defined(pic18f4321) \
|| defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20) \
|| defined(pic18f2410) || defined(pic18f2510) || defined(pic18f4410) || defined(pic18f4510) \
|| defined(pic18f2420) || defined(pic18f2520) || defined(pic18f4420) || defined(pic18f4520) \
|| defined(pic18f2423) || defined(pic18f2523) || defined(pic18f4423) || defined(pic18f4523) \
|| defined(pic18f2450) || defined(pic18f4450) \
|| defined(pic18f2455) || defined(pic18f2550) || defined(pic18f4455) || defined(pic18f4550) \
|| defined(pic18f2480) || defined(pic18f2580) || defined(pic18f4480) || defined(pic18f4580) \
|| defined(pic18f24j10) || defined(pic18f25j10) || defined(pic18f44j10) || defined(pic18f45j10) \
|| defined(pic18f2515) || defined(pic18f2610) || defined(pic18f4515) || defined(pic18f4610) \
|| defined(pic18f2525) || defined(pic18f2620) || defined(pic18f4525) || defined(pic18f4620) \
|| defined(pic18f2585) || defined(pic18f2680) || defined(pic18f4585) || defined(pic18f4680) \
|| defined(pic18f2682) || defined(pic18f2685) || defined(pic18f4682) || defined(pic18f4685) \
|| defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20) \
|| defined(pic18f6520) || defined(pic18f6620) || defined(pic18f6720) \
|| defined(pic18f6585) || defined(pic18f6680) || defined(pic18f8585) || defined(pic18f8680) \
|| defined(pic18f66j60) || defined(pic18f66j65) || defined(pic18f67j60) \
|| defined(pic18f8520) || defined(pic18f8620) || defined(pic18f8720) \
|| defined(pic18f86j60) || defined(pic18f86j65) || defined(pic18f87j60) \
|| defined(pic18f96j60) || defined(pic18f96j65) || defined(pic18f97j60) \
#define __SDCC_ADC_STYLE2220 1
#elif defined(pic18f65j50) || defined(pic18f66j50) || defined(pic18f66j55) || defined(pic18f67j50) \
|| defined(pic18f85j50) || defined(pic18f86j50) || defined(pic18f86j55) || defined(pic18f87j50) \
#define __SDCC_ADC_STYLE65J50
#else /* unknown device */
#error Device ADC style is unknown, please update your adc.h manually and/or inform the maintainer!
#endif
/* channel selection (CHS field in ADCON0) */
#define ADC_CHN_0 0x00
#define ADC_CHN_1 0x01
#define ADC_CHN_2 0x02
#define ADC_CHN_3 0x03
#define ADC_CHN_4 0x04
#define ADC_CHN_5 0x05
#define ADC_CHN_6 0x06
#define ADC_CHN_7 0x07
#define ADC_CHN_8 0x08
#define ADC_CHN_9 0x09
#define ADC_CHN_10 0x0a
#define ADC_CHN_11 0x0b
#define ADC_CHN_12 0x0c
#define ADC_CHN_13 0x0d
#define ADC_CHN_14 0x0e
#define ADC_CHN_15 0x0f
/* Port configuration (PCFG (and VCFG) field(s) in ADCON1) */
#if defined(__SDCC_ADC_STYLE242)
#define ADC_CFG_8A_0R 0x00
#define ADC_CFG_7A_1R 0x01
#define ADC_CFG_5A_0R 0x02
#define ADC_CFG_4A_1R 0x03
#define ADC_CFG_3A_0R 0x04
#define ADC_CFG_2A_1R 0x05
#define ADC_CFG_0A_0R 0x06
#define ADC_CFG_6A_2R 0x08
#define ADC_CFG_6A_0R 0x09
#define ADC_CFG_5A_1R 0x0a
#define ADC_CFG_4A_2R 0x0b
#define ADC_CFG_3A_2R 0x0c
#define ADC_CFG_2A_2R 0x0d
#define ADC_CFG_1A_0R 0x0e
#define ADC_CFG_1A_2R 0x0f
#elif defined(__SDCC_ADC_STYLE1220)
/*
* These devices use a bitmask in ADCON1 to configure AN0..AN6
* as digital ports (bit set) or analog input (bit clear).
*
* These settings are selected based on their similarity with
* the 2220-style settings; 1220-style is more flexible, though.
*
* Reference voltages are configured via adc_open's config parameter
* using ADC_VCFG_*.
*/
#define ADC_CFG_6A 0x00
#define ADC_CFG_5A 0x20
#define ADC_CFG_4A 0x30
#define ADC_CFG_3A 0x38
#define ADC_CFG_2A 0x3c
#define ADC_CFG_1A 0x3e
#define ADC_CFG_0A 0x3f
#elif defined(__SDCC_ADC_STYLE2220)
/*
* The reference voltage configuration should be factored out into
* the config argument (ADC_VCFG_*) to adc_open to facilitate a
* merger with the 1220-style ADC.
*/
#define ADC_CFG_16A 0x00
/* 15 analog ports cannot be configured! */
#define ADC_CFG_14A 0x01
#define ADC_CFG_13A 0x02
#define ADC_CFG_12A 0x03
#define ADC_CFG_11A 0x04
#define ADC_CFG_10A 0x05
#define ADC_CFG_9A 0x06
#define ADC_CFG_8A 0x07
#define ADC_CFG_7A 0x08
#define ADC_CFG_6A 0x09
#define ADC_CFG_5A 0x0a
#define ADC_CFG_4A 0x0b
#define ADC_CFG_3A 0x0c
#define ADC_CFG_2A 0x0d
#define ADC_CFG_1A 0x0e
#define ADC_CFG_0A 0x0f
/*
* For compatibility only: Combined port and reference voltage selection.
* Consider using ADC_CFG_nA and a separate ADC_VCFG_* instead!
*/
#define ADC_CFG_16A_0R 0x00
#define ADC_CFG_16A_1R 0x10
#define ADC_CFG_16A_2R 0x30
/* Can only select 14 or 16 analog ports ... */
#define ADC_CFG_15A_0R 0x00
#define ADC_CFG_15A_1R 0x10
#define ADC_CFG_15A_2R 0x30
#define ADC_CFG_14A_0R 0x01
#define ADC_CFG_14A_1R 0x11
#define ADC_CFG_14A_2R 0x31
#define ADC_CFG_13A_0R 0x02
#define ADC_CFG_13A_1R 0x12
#define ADC_CFG_13A_2R 0x32
#define ADC_CFG_12A_0R 0x03
#define ADC_CFG_12A_1R 0x13
#define ADC_CFG_12A_2R 0x33
#define ADC_CFG_11A_0R 0x04
#define ADC_CFG_11A_1R 0x14
#define ADC_CFG_11A_2R 0x34
#define ADC_CFG_10A_0R 0x05
#define ADC_CFG_10A_1R 0x15
#define ADC_CFG_10A_2R 0x35
#define ADC_CFG_09A_0R 0x06
#define ADC_CFG_09A_1R 0x16
#define ADC_CFG_09A_2R 0x36
#define ADC_CFG_08A_0R 0x07
#define ADC_CFG_08A_1R 0x17
#define ADC_CFG_08A_2R 0x37
#define ADC_CFG_07A_0R 0x08
#define ADC_CFG_07A_1R 0x18
#define ADC_CFG_07A_2R 0x38
#define ADC_CFG_06A_0R 0x09
#define ADC_CFG_06A_1R 0x19
#define ADC_CFG_06A_2R 0x39
#define ADC_CFG_05A_0R 0x0a
#define ADC_CFG_05A_1R 0x1a
#define ADC_CFG_05A_2R 0x3a
#define ADC_CFG_04A_0R 0x0b
#define ADC_CFG_04A_1R 0x1b
#define ADC_CFG_04A_2R 0x3b
#define ADC_CFG_03A_0R 0x0c
#define ADC_CFG_03A_1R 0x1c
#define ADC_CFG_03A_2R 0x3c
#define ADC_CFG_02A_0R 0x0d
#define ADC_CFG_02A_1R 0x1d
#define ADC_CFG_02A_2R 0x3d
#define ADC_CFG_01A_0R 0x0e
#define ADC_CFG_01A_1R 0x1e
#define ADC_CFG_01A_2R 0x3e
#define ADC_CFG_00A_0R 0x0f
#elif defined(__SDCC_ADC_STYLE65J50)
/*
* These devices use a bitmask in ANCON0/1 to configure
* AN7..0/AN15..8 as digital ports (bit set) or analog
* inputs (bit clear).
*
* These settings are selected based on their similarity with
* the 2220-style settings; 65j50-style is more flexible, though.
*
* Reference voltages are configured via adc_open's config parameter
* using ADC_VCFG_*.
*/
#define ADC_CFG_16A 0x0000
#define ADC_CFG_15A 0x8000
#define ADC_CFG_14A 0xC000
#define ADC_CFG_13A 0xE000
#define ADC_CFG_12A 0xF000
#define ADC_CFG_11A 0xF800
#define ADC_CFG_10A 0xFC00
#define ADC_CFG_9A 0xFE00
#define ADC_CFG_8A 0xFF00
#define ADC_CFG_7A 0xFF80
#define ADC_CFG_6A 0xFFC0
#define ADC_CFG_5A 0xFFE0
#define ADC_CFG_4A 0xFFF0
#define ADC_CFG_3A 0xFFF8
#define ADC_CFG_2A 0xFFFC
#define ADC_CFG_1A 0xFFFE
#define ADC_CFG_0A 0xFFFF
#else /* unhandled ADC style */
#error No supported ADC style selected.
#endif /* ADC_STYLE */
/* initialize AD module */
#if defined(__SDCC_ADC_STYLE65J50)
void adc_open(unsigned char channel, unsigned char fosc, unsigned int pcfg, unsigned char config);
#else
void adc_open(unsigned char channel, unsigned char fosc, unsigned char pcfg, unsigned char config);
#endif
/* shutdown AD module */
void adc_close(void);
/* begin a conversion */
void adc_conv(void);
/* return 1 if AD is performing a conversion, 0 if done */
char adc_busy(void) __naked;
/* get value of conversion */
int adc_read(void) __naked;
/* setup conversion channel */
void adc_setchannel(unsigned char channel);
#endif
|