*
* 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
* 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$
*/
#include <pic18fregs.h>
#include <adc.h>
-void adc_setchannel(unsigned char channel) __naked
+void adc_setchannel(unsigned char channel)
{
-#if 0
-#if defined(__SDCC_ADC_STYLE2455) || defined(__SDCC_ADC_STYLE97J60)
- ADCON0 &= ~(0xf << 2);
- ADCON0 |= channel << 2;
-#else /* all other devices */
- ADCON0 &= ~(0x7 << 3);
- ADCON0 |= channel << 3;
-#endif
-#else
- (void)channel;
-
- __asm
-#if defined(__SDCC_ADC_STYLE2455) || defined(__SDCC_ADC_STYLE97J60)
- movlw 0xc3
-#else /* all other devices */
- movlw 0xc7
-#endif
- andwf _ADCON0, f
-
- movlw 0x01
- movf _PLUSW1, w
-#if defined(__SDCC_ADC_STYLE2455) || defined(__SDCC_ADC_STYLE97J60)
-#else /* all other devices */
- rlcf _WREG, w
+#if defined(__SDCC_ADC_STYLE242)
+ ADCON0 = (ADCON0 & ~(0x07 << 3)) | ((channel & 0x07) << 3);
+#elif defined(__SDCC_ADC_STYLE1220)
+ ADCON0 = (ADCON0 & ~(0x07 << 2)) | ((channel & 0x07) << 2);
+#elif defined(__SDCC_ADC_STYLE2220)
+ ADCON0 = (ADCON0 & ~(0x0f << 2)) | ((channel & 0x0f) << 2);
+#else /* unsupported ADC style */
+#error Unsupported ADC style.
#endif
- rlcf _WREG, w
- rlcf _WREG, w
-
- iorwf _ADCON0, f
-
- return
- __endasm;
-#endif
}