Preparing for mk20dx256vlh7

- Not ready yet
- Will require some more changes to Lib/mk20dx.c
This commit is contained in:
Jacob Alexander 2014-12-31 17:13:44 -08:00
parent 40b5665930
commit f5a1e1bcf5
18 changed files with 295 additions and 51 deletions

View file

@ -62,28 +62,28 @@ void analog_init(void)
if (analog_config_bits == 8) {
ADC0_CFG1 = ADC_CFG1_24MHZ + ADC_CFG1_MODE(0);
ADC0_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(3);
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_CFG1 = ADC_CFG1_24MHZ + ADC_CFG1_MODE(0);
ADC1_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(3);
#endif
} else if (analog_config_bits == 10) {
ADC0_CFG1 = ADC_CFG1_12MHZ + ADC_CFG1_MODE(2) + ADC_CFG1_ADLSMP;
ADC0_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(3);
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_CFG1 = ADC_CFG1_12MHZ + ADC_CFG1_MODE(2) + ADC_CFG1_ADLSMP;
ADC1_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(3);
#endif
} else if (analog_config_bits == 12) {
ADC0_CFG1 = ADC_CFG1_12MHZ + ADC_CFG1_MODE(1) + ADC_CFG1_ADLSMP;
ADC0_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(2);
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_CFG1 = ADC_CFG1_12MHZ + ADC_CFG1_MODE(1) + ADC_CFG1_ADLSMP;
ADC1_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(2);
#endif
} else {
ADC0_CFG1 = ADC_CFG1_12MHZ + ADC_CFG1_MODE(3) + ADC_CFG1_ADLSMP;
ADC0_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(2);
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_CFG1 = ADC_CFG1_12MHZ + ADC_CFG1_MODE(3) + ADC_CFG1_ADLSMP;
ADC1_CFG2 = ADC_CFG2_MUXSEL + ADC_CFG2_ADLSTS(2);
#endif
@ -91,12 +91,12 @@ void analog_init(void)
if (analog_reference_internal) {
ADC0_SC2 = ADC_SC2_REFSEL(1); // 1.2V ref
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_SC2 = ADC_SC2_REFSEL(1); // 1.2V ref
#endif
} else {
ADC0_SC2 = ADC_SC2_REFSEL(0); // vcc/ext ref
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_SC2 = ADC_SC2_REFSEL(0); // vcc/ext ref
#endif
}
@ -104,27 +104,27 @@ void analog_init(void)
num = analog_num_average;
if (num <= 1) {
ADC0_SC3 = ADC_SC3_CAL; // begin cal
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_SC3 = ADC_SC3_CAL; // begin cal
#endif
} else if (num <= 4) {
ADC0_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(0);
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(0);
#endif
} else if (num <= 8) {
ADC0_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(1);
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(1);
#endif
} else if (num <= 16) {
ADC0_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(2);
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(2);
#endif
} else {
ADC0_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(3);
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_SC3 = ADC_SC3_CAL + ADC_SC3_AVGE + ADC_SC3_AVGS(3);
#endif
}
@ -140,7 +140,7 @@ static void wait_for_cal(void)
while (ADC0_SC3 & ADC_SC3_CAL) {
// wait
}
#elif defined(_mk20dx256_)
#elif defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
while ((ADC0_SC3 & ADC_SC3_CAL) || (ADC1_SC3 & ADC_SC3_CAL)) {
// wait
}
@ -160,7 +160,7 @@ static void wait_for_cal(void)
//serial_print("ADC0_MG = ");
//serial_phex16(sum);
//serial_print("\n");
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
sum = ADC1_CLPS + ADC1_CLP4 + ADC1_CLP3 + ADC1_CLP2 + ADC1_CLP1 + ADC1_CLP0;
sum = (sum / 2) | 0x8000;
ADC1_PG = sum;
@ -192,7 +192,7 @@ void analogReference(uint8_t type)
analog_reference_internal = 1;
if (calibrating) {
ADC0_SC3 = 0; // cancel cal
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_SC3 = 0; // cancel cal
#endif
}
@ -204,7 +204,7 @@ void analogReference(uint8_t type)
analog_reference_internal = 0;
if (calibrating) {
ADC0_SC3 = 0; // cancel cal
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
ADC1_SC3 = 0; // cancel cal
#endif
}
@ -266,7 +266,7 @@ static const uint8_t channel2sc1a[] = {
5, 14, 8, 9, 13, 12, 6, 7, 15, 4,
0, 19, 3, 21, 26, 22, 23
};
#elif defined(_mk20dx256_)
#elif defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
static const uint8_t channel2sc1a[] = {
5, 14, 8, 9, 13, 12, 6, 7, 15, 4,
0, 19, 3, 19+128, 26, 22, 23,
@ -284,7 +284,7 @@ static const uint8_t channel2sc1a[] = {
// TODO: perhaps this should store the NVIC priority, so it works recursively?
static volatile uint8_t analogReadBusyADC0 = 0;
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
static volatile uint8_t analogReadBusyADC1 = 0;
#endif
@ -300,7 +300,7 @@ int analogRead(uint8_t pin)
index = pin; // 0-13 refer to A0-A13
} else if (pin <= 23) {
index = pin - 14; // 14-23 are A0-A9
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
} else if (pin >= 26 && pin <= 31) {
index = pin - 9; // 26-31 are A15-A20
#endif
@ -323,7 +323,7 @@ int analogRead(uint8_t pin)
if (calibrating) wait_for_cal();
//pin = 5; // PTD1/SE5b, pin 14, analog 0
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
if (channel & 0x80) goto beginADC1;
#endif
@ -350,7 +350,7 @@ startADC0:
yield();
}
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
beginADC1:
__disable_irq();
startADC1:
@ -387,7 +387,7 @@ startADC1:
void analogWriteDAC0(int val)
{
#if defined(_mk20dx256_)
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_)
SIM_SCGC2 |= SIM_SCGC2_DAC0;
if (analog_reference_internal) {
DAC0_C0 = DAC_C0_DACEN; // 1.2V ref is DACREF_1

View file

@ -67,7 +67,7 @@ volatile uint8_t KeyIndex_BufferUsed;
// Scan Module command dictionary
char scanCLIDictName[] = "ADC Test Module Commands";
const CLIDictItem scanCLIDict[] = {
#if defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
#if defined(_mk20dx128_) || defined(_mk20dx256_) || defined(_mk20dx256vlh7_) // ARM
{ "adc", "Read the specified number of values from the ADC at the given pin: <pin> [# of reads]"
NL "\t\t See \033[35mLib/pin_map.teensy3\033[0m for ADC0 channel number.", cliFunc_adc },
{ "adcInit", "Intialize/calibrate ADC: <ADC Resolution> <Vref> <Hardware averaging samples>"
@ -75,7 +75,7 @@ const CLIDictItem scanCLIDict[] = {
NL "\t\t Vref -> 0 (1.2 V), 1 (External)"
NL "\t\tHw Avg Samples -> 0 (disabled), 4, 8, 16, 32", cliFunc_adcInit },
#endif
#if defined(_mk20dx256_) // DAC is only supported on Teensy 3.1
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_) // DAC is only supported on Teensy 3.1
{ "dac", "Set DAC output value, from 0 to 4095 (1/4096 Vref to Vref).", cliFunc_dac },
{ "dacVref", "Set DAC Vref. 0 is 1.2V. 1 is 3.3V.", cliFunc_dacVref },
#endif
@ -94,7 +94,7 @@ inline void Scan_setup()
// Register Scan CLI dictionary
CLI_registerDictionary( scanCLIDict, scanCLIDictName );
}
#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
#elif defined(_mk20dx128_) || defined(_mk20dx256_) || defined(_mk20dx256vlh7_) // ARM
{
// Register Scan CLI dictionary
CLI_registerDictionary( scanCLIDict, scanCLIDictName );
@ -103,7 +103,7 @@ inline void Scan_setup()
VREF_TRM = 0x60;
VREF_SC = 0xE1; // Enable 1.2V Vref
#if defined(_mk20dx256_) // DAC is only supported on Teensy 3.1
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_) // DAC is only supported on Teensy 3.1
// DAC Setup
SIM_SCGC2 |= SIM_SCGC2_DAC0;
DAC0_C0 = DAC_C0_DACEN | DAC_C0_DACRFS; // 3.3V VDDA is DACREF_2
@ -167,7 +167,7 @@ void cliFunc_adc( char* args )
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
{
}
#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
#elif defined(_mk20dx128_) || defined(_mk20dx256_) || defined(_mk20dx256vlh7_) // ARM
{
// Parse code from argument
// NOTE: Only first argument is used
@ -220,7 +220,7 @@ void cliFunc_adcInit( char* args )
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
{
}
#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
#elif defined(_mk20dx128_) || defined(_mk20dx256_) || defined(_mk20dx256vlh7_) // ARM
{
// Parse code from argument
// NOTE: Only first argument is used
@ -335,7 +335,7 @@ void cliFunc_adcInit( char* args )
void cliFunc_dac( char* args )
{
#if defined(_mk20dx256_) // DAC is only supported on Teensy 3.1
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_) // DAC is only supported on Teensy 3.1
// Parse code from argument
// NOTE: Only first argument is used
char* arg1Ptr;
@ -354,7 +354,7 @@ void cliFunc_dac( char* args )
void cliFunc_dacVref( char* args )
{
#if defined(_mk20dx256_) // DAC is only supported on Teensy 3.1
#if defined(_mk20dx256_) || defined(_mk20dx256vlh7_) // DAC is only supported on Teensy 3.1
// Parse code from argument
// NOTE: Only first argument is used
char* arg1Ptr;

View file

@ -61,7 +61,7 @@ void removeKeyValue( uint8_t keyValue );
// UART Receive Buffer Full Interrupt
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
ISR(USART1_RX_vect)
#elif defined(_mk20dx128_) // ARM
#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
void uart0_status_isr(void)
#endif
{
@ -72,7 +72,7 @@ void uart0_status_isr(void)
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
keyValue = UDR1;
#elif defined(_mk20dx128_) // ARM
#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
// UART0_S1 must be read for the interrupt to be cleared
if ( UART0_S1 & UART_S1_RDRF )
{
@ -129,7 +129,7 @@ inline void Scan_setup()
// Reset the keyboard before scanning, we might be in a wierd state
Scan_resetKeyboard();
}
#elif defined(_mk20dx128_) // ARM
#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
{
// Setup the the UART interface for keyboard data input
SIM_SCGC4 |= SIM_SCGC4_UART0; // Disable clock gating
@ -345,7 +345,7 @@ uint8_t Scan_sendData( uint8_t dataPayload )
#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
UDR1 = dataPayload;
#elif defined(_mk20dx128_) // ARM
#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
UART0_D = dataPayload;
#endif