// copyright (C) 2006 Marcin Slonicki // copyright (C) 2007 Louis Frigon // Copyright (C) 2015 Allen Hill // SPDX-License-Identifier: GPL-3.0-or-later // ATtiny3216 board bring-up: main-clock prescaler + GPIO config for pins not // owned by a peripheral's own init. #include #include #include // _PROTECTED_WRITE #include "board.h" void board_init(void) { // Main clock prescale (CLK_PRESCALE / CLK_PRESCALE_DIV come from the build). _PROTECTED_WRITE(CLKCTRL.MCLKCTRLB, (CLK_PRESCALE | CLK_PRESCALE_DIV)); // Set pins PC2-3, PB0,3-5 as inputs PORTC.DIRCLR = (PIN2_bm | // Unconnected PIN3_bm); // CTS PORTB.DIRCLR = (PIN0_bm | // Unconnected PIN3_bm | // IGN_SENSE PIN4_bm | // Unused, but connected to WOC (PC0) PIN5_bm); // Unused, but connected to WOD (PC1) // Enable pull-up resistor and disable input buffer (reduces any EM caused // pin toggling and saves power) for unused and unconnected pins PORTC.PIN2CTRL = PORT_PULLUPEN_bm | PORT_ISC_INPUT_DISABLE_gc; PORTB.PIN0CTRL = PORT_PULLUPEN_bm | PORT_ISC_INPUT_DISABLE_gc; // TODO: Remove once IGN_SENSE hardware is fixed PORTB.DIRSET = PIN3_bm; PORTB.OUTSET = PIN3_bm; // Output only pins: PA3-5, PB1-2,4-5; PC0-1 // TODO: TxD (PA1), RTS (PA3) is output only, test if RxD needs the input // buffer or if the UART peripheral bypasses it PORTA.PIN3CTRL = PORT_ISC_INPUT_DISABLE_gc; // RTS PORTA.PIN4CTRL = PORT_ISC_INPUT_DISABLE_gc; // WOA PORTA.PIN5CTRL = PORT_ISC_INPUT_DISABLE_gc; // WOB PORTB.PIN1CTRL = PORT_ISC_INPUT_DISABLE_gc; // MIC_CONTROL PORTB.PIN4CTRL = PORT_ISC_INPUT_DISABLE_gc; // non-driving WOC PORTB.PIN5CTRL = PORT_ISC_INPUT_DISABLE_gc; // non-driving WOD PORTC.PIN0CTRL = PORT_ISC_INPUT_DISABLE_gc; // WOC PORTC.PIN1CTRL = PORT_ISC_INPUT_DISABLE_gc; // WOD } void board_interruptsEnable(void) { sei(); }