void global_init() { pinPullup(CHRG_P, PU_EN); // Pin change interrupt on USB power sense pin #if HW_VERSION == 1 PCICR |= _BV(PCIE0); PCMSK0 |= _BV(PCINT6); #elif HW_VERSION == 2 PCICR |= _BV(PCIE0); PCMSK0 |= _BV(PCINT7); #else PCICR |= _BV(PCIE2); PCMSK2 |= _BV(PCINT19); #endif //#warning "remove me!" // pinPullup(USB_SENSE_P, PU_EN); // Unused pins #if HW_VERSION == 3 pinPullup(B6, PU_EN); pinPullup(B7, PU_EN); #else pinPullup(D3, PU_EN); pinPullup(D4, PU_EN); #endif }
void buttons_init() { pinMode(BTN_UP_P, INPUT); pinMode(BTN_DOWN_P, INPUT); pinMode(BTN_SELECT_P, INPUT); pinPullup(BTN_UP_P, PULLUP_ENABLE); pinPullup(BTN_DOWN_P, PULLUP_ENABLE); pinPullup(BTN_SELECT_P, PULLUP_ENABLE); bits_set(PCMSK1, _BV(PCINT9)|_BV(PCINT10)|_BV(PCINT11)); BTN_INT_ON(); }
static void init() { // OSCCAL = 71; clock_prescale_set(CPU_DIV); // power_twi_disable(); // power_usart0_disable(); // power_timer0_disable(); // power_timer1_disable(); // power_timer2_disable(); // power_adc_disable(); #if !UART_ENABLE power_usart0_disable(); #endif // Pull-up on unused pins pinPullup(D0, PULLUP_ENABLE); pinPullup(D1, PULLUP_ENABLE); pinPullup(D3, PULLUP_ENABLE); pinPullup(D4, PULLUP_ENABLE); pinPullup(B7, PULLUP_ENABLE); #if PIN_DEBUG != PIN_DEBUG_NONE pinMode(PIN_DEBUG_PIN, OUTPUT); #endif // Pin change interrupt on USB power sense pin PCICR |= _BV(PCIE0); PCMSK0 |= _BV(PCINT6); // Everything else uart_init(); spi_init(); i2c_init(); watchconfig_init(); led_init(); buzzer_init(); battery_init(); ds3231_init(); buttons_init(); millis_init(); pwrmgr_init(); time_init(); alarm_init(); oled_init(); }
void time_init() { pinPullup(RTC_INT_P, PU_EN); #if RTC_SRC != RTC_SRC_INTERNAL EICRA |= _BV(ISC01); EIMSK |= _BV(INT0); #endif time_wake(); }
// Reset to known state (as per what the DS3231 datasheet says) void i2c_resetState() { bit_clr(TWCR, TWEN); // Disable TWI pinMode(SDA, INPUT); pinPullup(SDA, PULLUP_ENABLE); delay(1); // Toggle SDL until SDA goes HIGH or times out byte count = 64; // 64 * 1ms = 64ms timeout while(!pinRead(SDA) && count--) { delay(1); pinWrite(SDL, TOGGLE); } // Back to normal pinMode(SDA, OUTPUT); pinMode(SDL, OUTPUT); pinWrite(SDA, HIGH); pinWrite(SDL, HIGH); }