16 #ifdef __MSP430_HAS_CTSD16__
21 void CTSD16_init(uint16_t baseAddress, uint16_t chargePumpBurstRequest,
22 uint8_t referenceSelect)
25 HWREG16(baseAddress + OFS_CTSD16IE) &= 0x0000;
26 HWREG16(baseAddress + OFS_CTSD16IFG) &= 0x0000;
29 HWREG16(baseAddress + OFS_CTSD16CTL) &= ~(CTSD16RRIBURST | CTSD16OFFG |
32 HWREG16(baseAddress + OFS_CTSD16CTL) |= chargePumpBurstRequest | referenceSelect;
37 void CTSD16_initConverter(uint16_t baseAddress, uint8_t converter,
38 uint16_t conversionMode, uint8_t inputChannel)
41 address = baseAddress + (OFS_CTSD16CCTL0 + (converter * 0x06));
44 HWREG16(address) &= ~(CTSD16SC | CTSD16SNGL);
46 HWREG16(address) |= conversionMode;
50 HWREG16(address) &= ~(CTSD16INCH4 | CTSD16INCH3 | CTSD16INCH2 |
51 CTSD16INCH1 | CTSD16INCH0);
53 HWREG16(address) |= inputChannel;
56 void CTSD16_initConverterAdvanced(uint16_t baseAddress,
57 CTSD16_initConverterAdvancedParam *
param)
62 address = baseAddress + (OFS_CTSD16CCTL0 + (
param->converter * 0x06));
65 HWREG16(address) &= ~(CTSD16SC | CTSD16SNGL | CTSD16GRP | CTSD16OSR__32 |
73 HWREG16(address) &= ~(CTSD16RRI | CTSD16INTDLY | CTSD16GAIN2 |
74 CTSD16GAIN1 | CTSD16GAIN0 | CTSD16INCH4 | CTSD16INCH3 | CTSD16INCH2 |
75 CTSD16INCH1 | CTSD16INCH0);
82 void CTSD16_startConverterConversion(uint16_t baseAddress,
87 address = baseAddress + (OFS_CTSD16CCTL0 + (converter * 0x06));
93 void CTSD16_stopConverterConversion(uint16_t baseAddress,
98 address = baseAddress + (OFS_CTSD16CCTL0 + (converter * 0x06));
101 HWREG16(address) &= ~(CTSD16SC);
104 void CTSD16_setConverterDataFormat(uint16_t baseAddress,
110 address = baseAddress + (OFS_CTSD16CCTL0 + (converter * 0x06));
113 HWREG8(address) &= ~CTSD16DF;
115 HWREG8(address) |= dataFormat;
118 void CTSD16_setInputChannel(uint16_t baseAddress,
120 uint8_t inputChannel)
124 address = baseAddress + (OFS_CTSD16INCTL0 + (converter * 0x06));
127 HWREG16(address) &= ~(CTSD16INCH4 | CTSD16INCH3 | CTSD16INCH2 |
128 CTSD16INCH1 | CTSD16INCH0);
130 HWREG16(address) |= inputChannel;
133 void CTSD16_setRailToRailInput(uint16_t baseAddress,
135 uint16_t railToRailInput)
139 address = baseAddress + (OFS_CTSD16INCTL0 + (converter * 0x06));
142 HWREG16(address) &= ~CTSD16RRI;
144 HWREG16(address) |= railToRailInput;
147 void CTSD16_setInterruptDelay(uint16_t baseAddress,
149 uint16_t interruptDelay)
153 address = baseAddress + (OFS_CTSD16INCTL0 + (converter * 0x06));
156 HWREG16(address) &= ~CTSD16INTDLY;
158 HWREG16(address) |= interruptDelay;
162 void CTSD16_setOversampling(uint16_t baseAddress,
164 uint16_t oversampleRatio)
168 address = baseAddress + (OFS_CTSD16CCTL0 + (converter * 0x06));
171 HWREG16(address) |= oversampleRatio;
174 void CTSD16_setGain(uint16_t baseAddress,
180 address = baseAddress + (OFS_CTSD16INCTL0 + (converter * 0x06));
183 HWREG16(address) &= ~(CTSD16GAIN2 | CTSD16GAIN1 | CTSD16GAIN0);
188 uint32_t CTSD16_getResults(uint16_t baseAddress,
191 volatile uint16_t OSR;
193 uint16_t address = baseAddress + (OFS_CTSD16MEM0 + (converter * 0x02));
196 HWREG16(baseAddress + (OFS_CTSD16CCTL0 + (converter * 0x02))) &= ~(CTSD16LSBACC);
197 uint32_t highResult = (uint32_t)
HWREG16(address);
200 HWREG16(baseAddress + (OFS_CTSD16CCTL0 + (converter * 0x02))) |= CTSD16LSBACC;
201 uint16_t lowResult =
HWREG16(address);
202 HWREG16(baseAddress + (OFS_CTSD16CCTL0 + (converter * 0x02))) &= ~(CTSD16LSBACC);
205 OSR =
HWREG16(baseAddress + (OFS_CTSD16CCTL0 + (converter * 0x02))) & (CTSD16OSR0 | CTSD16OSR1);
207 if(OSR == CTSD16_OVERSAMPLE_256)
209 return (highResult << 8) | lowResult;
211 else if(OSR == CTSD16_OVERSAMPLE_128)
213 return (highResult << 5) | lowResult;
215 else if(OSR == CTSD16_OVERSAMPLE_64)
217 return (highResult << 2) | lowResult;
225 uint16_t CTSD16_getHighWordResults(uint16_t baseAddress,
229 uint16_t address = baseAddress + (OFS_CTSD16MEM0 + (converter * 0x02));
232 HWREG16(baseAddress + (OFS_CTSD16CCTL0 + (converter * 0x02))) &= ~(CTSD16LSBACC);
233 uint16_t highResult =
HWREG16(address);
238 uint16_t CTSD16_isRailToRailInputReady(uint16_t baseAddress)
240 return HWREG16(baseAddress + OFS_CTSD16CTL) & CTSD16RRIRDY;
243 void CTSD16_enableInterrupt (uint16_t baseAddress,
248 HWREG16(baseAddress + OFS_CTSD16IE) |= (mask << converter);
252 void CTSD16_disableInterrupt (uint16_t baseAddress,
257 HWREG16(baseAddress + OFS_CTSD16IE) &= ~(mask << converter);
261 void CTSD16_clearInterrupt (uint16_t baseAddress,
265 HWREG16(baseAddress + OFS_CTSD16IFG) &= ~(mask << converter);
268 uint16_t CTSD16_getInterruptStatus (uint16_t baseAddress,
272 return (
HWREG16(baseAddress + OFS_CTSD16IFG) & (mask << converter) );
MPU_initThreeSegmentsParam param