mirror of
https://github.com/halleysfifthinc/AVCLAN-Mockingboard.git
synced 2026-08-07 01:13:18 +00:00
50 lines
2.0 KiB
C
50 lines
2.0 KiB
C
// copyright (C) 2006 Marcin Slonicki <marcin@softservice.com.pl>
|
|
// copyright (C) 2007 Louis Frigon
|
|
// Copyright (C) 2015 Allen Hill <allenofthehills@gmail.com>
|
|
// 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 <avr/interrupt.h>
|
|
#include <avr/io.h>
|
|
#include <avr/xmega.h> // _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(); }
|