You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
- #include "config.h"
- #include "adc.h"
- #include "timer.h"
-
- /* Currently using software SPI because it's easy.
- Consider using hardware SPI with DMA on a timer, though. */
-
- #define TRIS_SDATA TRISFbits.TRISF7
- #define R_SDATA PORTFbits.RF7
- #define TRIS_SCLK TRISFbits.TRISF6
- #define LAT_SCLK LATFbits.LATF6
- #define TRIS_CS TRISBbits.TRISB2
- #define LAT_CS LATBbits.LATB2
-
- void adc_init(void)
- {
- TRIS_SDATA = 1;
- LAT_CS = IO_HIGH;
- TRIS_CS = 0;
- LAT_SCLK = IO_HIGH;
- TRIS_SCLK = 0;
- }
-
- int16_t adc_get(void)
- {
- uint16_t v = 0;
- int i;
-
- LAT_CS = IO_LOW;
- for (i = 0; i < 16; i++) {
- v <<= 1;
- if (R_SDATA == IO_HIGH)
- v |= 1;
- LAT_SCLK = IO_LOW;
- nop(); nop(); nop();
- LAT_SCLK = IO_HIGH;
- }
- LAT_CS = IO_HIGH;
-
- /* Sign-extend the 12-bit value */
- if (v & 0x0800)
- v |= 0xF000;
- else
- v &= ~0xF000;
- return (int16_t) v;
- }
|