mirror of
https://github.com/sweetlilmre/tapuino.git
synced 2026-07-27 19:55:41 +00:00
Control line code for MUX switching
Fixed PROGMEM references for Atmel Studio Added Atmel Studio project files Added new and updated schematic and fritzing files
This commit is contained in:
+195
@@ -0,0 +1,195 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectVersion>6.2</ProjectVersion>
|
||||
<ToolchainName>com.Atmel.AVRGCC8.C</ToolchainName>
|
||||
<ProjectGuid>{4ec26722-9e4b-4e84-94fb-ac9f2dab1ef2}</ProjectGuid>
|
||||
<avrdevice>ATmega328P</avrdevice>
|
||||
<avrdeviceseries>none</avrdeviceseries>
|
||||
<OutputType>Executable</OutputType>
|
||||
<Language>C</Language>
|
||||
<OutputFileName>$(MSBuildProjectName)</OutputFileName>
|
||||
<OutputFileExtension>.elf</OutputFileExtension>
|
||||
<OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
|
||||
<AssemblyName>Tapuino</AssemblyName>
|
||||
<Name>Tapuino</Name>
|
||||
<RootNamespace>Tapuino</RootNamespace>
|
||||
<ToolchainFlavour>Native</ToolchainFlavour>
|
||||
<KeepTimersRunning>true</KeepTimersRunning>
|
||||
<OverrideVtor>false</OverrideVtor>
|
||||
<CacheFlash>true</CacheFlash>
|
||||
<ProgFlashFromRam>true</ProgFlashFromRam>
|
||||
<RamSnippetAddress />
|
||||
<UncachedRange />
|
||||
<OverrideVtorValue />
|
||||
<BootSegment>2</BootSegment>
|
||||
<eraseonlaunchrule>1</eraseonlaunchrule>
|
||||
<AsfFrameworkConfig>
|
||||
<framework-data xmlns="">
|
||||
<options />
|
||||
<configurations />
|
||||
<files />
|
||||
<documentation help="" />
|
||||
<offline-documentation help="" />
|
||||
<dependencies>
|
||||
<content-extension eid="atmel.asf" uuidref="Atmel.ASF" version="3.19.0" />
|
||||
</dependencies>
|
||||
</framework-data>
|
||||
</AsfFrameworkConfig>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||
<ToolchainSettings>
|
||||
<AvrGcc>
|
||||
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
|
||||
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
|
||||
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
|
||||
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
|
||||
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
|
||||
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
|
||||
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
|
||||
<avrgcc.compiler.symbols.DefSymbols>
|
||||
<ListValues>
|
||||
<Value>NDEBUG</Value>
|
||||
<Value>F_CPU=16000000</Value>
|
||||
</ListValues>
|
||||
</avrgcc.compiler.symbols.DefSymbols>
|
||||
<avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
|
||||
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
|
||||
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
|
||||
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
|
||||
<avrgcc.linker.libraries.Libraries>
|
||||
<ListValues>
|
||||
<Value>libm</Value>
|
||||
</ListValues>
|
||||
</avrgcc.linker.libraries.Libraries>
|
||||
</AvrGcc>
|
||||
</ToolchainSettings>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<ToolchainSettings>
|
||||
<AvrGcc>
|
||||
<avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
|
||||
<avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
|
||||
<avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
|
||||
<avrgcc.common.outputfiles.srec>True</avrgcc.common.outputfiles.srec>
|
||||
<avrgcc.common.outputfiles.usersignatures>False</avrgcc.common.outputfiles.usersignatures>
|
||||
<avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
|
||||
<avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
|
||||
<avrgcc.compiler.symbols.DefSymbols>
|
||||
<ListValues>
|
||||
<Value>DEBUG</Value>
|
||||
<Value>F_CPU=16000000</Value>
|
||||
</ListValues>
|
||||
</avrgcc.compiler.symbols.DefSymbols>
|
||||
<avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
|
||||
<avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
|
||||
<avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
|
||||
<avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
|
||||
<avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
|
||||
<avrgcc.linker.libraries.Libraries>
|
||||
<ListValues>
|
||||
<Value>libm</Value>
|
||||
</ListValues>
|
||||
</avrgcc.linker.libraries.Libraries>
|
||||
<avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>
|
||||
</AvrGcc>
|
||||
</ToolchainSettings>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="buffer.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="buffer.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="ccsbcs_avr.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="comms.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="comms.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="config.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="diskio.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="ff.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="ff.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="ffconf.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="fileutils.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="fileutils.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="i2cmaster.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="integer.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="lcd.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="lcd.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="lcdutils.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="lcdutils.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="LightweightRingBuff.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="memstrings.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="memstrings.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="menu.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="menu.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="mmc.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="mmc.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="spi.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="spi.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="tapuino.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="tapuino.h">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="main.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
<Compile Include="twimaster.c">
|
||||
<SubType>compile</SubType>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
|
||||
</Project>
|
||||
@@ -55,8 +55,10 @@
|
||||
|
||||
#define CONTROL_PORT PORTD
|
||||
#define CONTROL_DDR DDRD
|
||||
#define CONTROL_PIN1 6
|
||||
#define CONTROL_PIN2 7
|
||||
#define CONTROL_PIN0 6
|
||||
#define CONTROL_PIN1 7
|
||||
#define CONTROL_SET_BUS0() CONTROL_PORT &= ~(_BV(CONTROL_PIN0) | _BV(CONTROL_PIN1))
|
||||
#define CONTROL_SET_BUS1() { CONTROL_PORT &= ~_BV(CONTROL_PIN1); CONTROL_PORT |= _BV(CONTROL_PIN0); }
|
||||
|
||||
#define KEYS_READ_PORT PORTC
|
||||
#define KEYS_READ_DDR DDRC
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 110 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 32 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 124 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 55 KiB |
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 376 KiB After Width: | Height: | Size: 229 KiB |
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Tapuino.c
|
||||
*
|
||||
* Created: 2014/10/04 04:31:40 PM
|
||||
* Author: sweetlilmre
|
||||
*/
|
||||
|
||||
#ifndef ARDUINO
|
||||
|
||||
#include <avr/io.h>
|
||||
#include "tapuino.h"
|
||||
|
||||
int main(void)
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
tapuino_run();
|
||||
//TODO:: Please write your application code
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
+33
-33
@@ -1,42 +1,42 @@
|
||||
#include <avr/pgmspace.h>
|
||||
#include "memstrings.h"
|
||||
|
||||
prog_char S_DEFAULT_RECORD_DIR[] PROGMEM = "/recorded";
|
||||
prog_char S_NAME_PATTERN[] PROGMEM = "rec-%.4d.tap";
|
||||
prog_char S_RECORDING[] PROGMEM = "Recording";
|
||||
prog_char S_SELECT_RECORD_MODE[] PROGMEM = "Name mode:";
|
||||
prog_char S_REC_MODE_MANUAL[] PROGMEM = "Manual";
|
||||
prog_char S_REC_MODE_AUTO[] PROGMEM = "Auto";
|
||||
prog_char S_ENTER_FILENAME[] PROGMEM = "Enter name";
|
||||
prog_char S_FILENAME_CHARS[] PROGMEM = " abcdefghijklmnopqrstuvwxyz0123456789_-";
|
||||
const char S_DEFAULT_RECORD_DIR[] PROGMEM = "/recorded";
|
||||
const char S_NAME_PATTERN[] PROGMEM = "rec-%.4d.tap";
|
||||
const char S_RECORDING[] PROGMEM = "Recording";
|
||||
const char S_SELECT_RECORD_MODE[] PROGMEM = "Name mode:";
|
||||
const char S_REC_MODE_MANUAL[] PROGMEM = "Manual";
|
||||
const char S_REC_MODE_AUTO[] PROGMEM = "Auto";
|
||||
const char S_ENTER_FILENAME[] PROGMEM = "Enter name";
|
||||
const char S_FILENAME_CHARS[] PROGMEM = " abcdefghijklmnopqrstuvwxyz0123456789_-";
|
||||
|
||||
prog_char S_INIT[] PROGMEM = "Init...";
|
||||
prog_char S_INIT_FAILED[] PROGMEM = "Init failed!";
|
||||
prog_char S_INIT_OK[] PROGMEM = "Init OK.";
|
||||
const char S_INIT[] PROGMEM = "Init...";
|
||||
const char S_INIT_FAILED[] PROGMEM = "Init failed!";
|
||||
const char S_INIT_OK[] PROGMEM = "Init OK.";
|
||||
|
||||
prog_char S_NO_FILES_FOUND[] PROGMEM = "No files found!";
|
||||
prog_char S_SELECT_FILE[] PROGMEM = "Select file:";
|
||||
prog_char S_SELECT_MODE[] PROGMEM = "Select mode:";
|
||||
prog_char S_MODE_PLAY[] PROGMEM = "Play";
|
||||
prog_char S_MODE_RECORD[] PROGMEM = "Record";
|
||||
prog_char S_READY_RECORD[] PROGMEM = "Ready...";
|
||||
prog_char S_PRESS_START[] PROGMEM = "Press START";
|
||||
const char S_NO_FILES_FOUND[] PROGMEM = "No files found!";
|
||||
const char S_SELECT_FILE[] PROGMEM = "Select file:";
|
||||
const char S_SELECT_MODE[] PROGMEM = "Select mode:";
|
||||
const char S_MODE_PLAY[] PROGMEM = "Play";
|
||||
const char S_MODE_RECORD[] PROGMEM = "Record";
|
||||
const char S_READY_RECORD[] PROGMEM = "Ready...";
|
||||
const char S_PRESS_START[] PROGMEM = "Press START";
|
||||
|
||||
prog_char S_MODE_OPTIONS[] PROGMEM = "Options";
|
||||
prog_char S_OPTION_SIGNAL[] PROGMEM = "Invert";
|
||||
prog_char S_OPTION_KEY_REPEAT[] PROGMEM = "Key speed";
|
||||
prog_char S_OPTION_TICKER_SPEED[] PROGMEM = "Ticker speed";
|
||||
prog_char S_OPTION_TICKER_HOLD[] PROGMEM = "Ticker hold";
|
||||
prog_char S_OPTION_REC_FINALIZE[] PROGMEM = "Record finalize";
|
||||
const char S_MODE_OPTIONS[] PROGMEM = "Options";
|
||||
const char S_OPTION_SIGNAL[] PROGMEM = "Invert";
|
||||
const char S_OPTION_KEY_REPEAT[] PROGMEM = "Key speed";
|
||||
const char S_OPTION_TICKER_SPEED[] PROGMEM = "Ticker speed";
|
||||
const char S_OPTION_TICKER_HOLD[] PROGMEM = "Ticker hold";
|
||||
const char S_OPTION_REC_FINALIZE[] PROGMEM = "Record finalize";
|
||||
|
||||
prog_char S_MKDIR_FAILED[] PROGMEM = "MKDIR fail!";
|
||||
prog_char S_CHDIR_FAILED[] PROGMEM = "CHDIR fail!";
|
||||
prog_char S_READ_FAILED[] PROGMEM = "READ fail!";
|
||||
prog_char S_OPEN_FAILED[] PROGMEM = "OPEN fail!";
|
||||
prog_char S_INVALID_TAP[] PROGMEM = "Invalid TAP!";
|
||||
const char S_MKDIR_FAILED[] PROGMEM = "MKDIR fail!";
|
||||
const char S_CHDIR_FAILED[] PROGMEM = "CHDIR fail!";
|
||||
const char S_READ_FAILED[] PROGMEM = "READ fail!";
|
||||
const char S_OPEN_FAILED[] PROGMEM = "OPEN fail!";
|
||||
const char S_INVALID_TAP[] PROGMEM = "Invalid TAP!";
|
||||
|
||||
prog_char S_LOADING[] PROGMEM = "Loading:";
|
||||
prog_char S_OPERATION_COMPLETE[] PROGMEM = "Complete!";
|
||||
prog_char S_OPERATION_ABORTED[] PROGMEM = "Aborted!";
|
||||
const char S_LOADING[] PROGMEM = "Loading:";
|
||||
const char S_OPERATION_COMPLETE[] PROGMEM = "Complete!";
|
||||
const char S_OPERATION_ABORTED[] PROGMEM = "Aborted!";
|
||||
|
||||
prog_char S_TAP_MAGIC_C64[] PROGMEM = "C64-TAPE-RAW";
|
||||
const char S_TAP_MAGIC_C64[] PROGMEM = "C64-TAPE-RAW";
|
||||
|
||||
+35
-35
@@ -3,43 +3,43 @@
|
||||
|
||||
#include <avr/pgmspace.h>
|
||||
|
||||
extern prog_char S_DEFAULT_RECORD_DIR[];
|
||||
extern prog_char S_NAME_PATTERN[];
|
||||
extern prog_char S_RECORDING[];
|
||||
extern prog_char S_SELECT_RECORD_MODE[];
|
||||
extern prog_char S_REC_MODE_MANUAL[];
|
||||
extern prog_char S_REC_MODE_AUTO[];
|
||||
extern prog_char S_ENTER_FILENAME[];
|
||||
extern prog_char S_FILENAME_CHARS[];
|
||||
extern const char S_DEFAULT_RECORD_DIR[];
|
||||
extern const char S_NAME_PATTERN[];
|
||||
extern const char S_RECORDING[];
|
||||
extern const char S_SELECT_RECORD_MODE[];
|
||||
extern const char S_REC_MODE_MANUAL[];
|
||||
extern const char S_REC_MODE_AUTO[];
|
||||
extern const char S_ENTER_FILENAME[];
|
||||
extern const char S_FILENAME_CHARS[];
|
||||
|
||||
extern prog_char S_STARTINGINIT[];
|
||||
extern prog_char S_INITI2COK[];
|
||||
extern prog_char S_INIT[];
|
||||
extern prog_char S_INIT_FAILED[];
|
||||
extern prog_char S_INIT_OK[];
|
||||
extern prog_char S_NO_FILES_FOUND[];
|
||||
extern prog_char S_SELECT_FILE[];
|
||||
extern prog_char S_SELECT_MODE[];
|
||||
extern prog_char S_MODE_PLAY[];
|
||||
extern prog_char S_MODE_RECORD[];
|
||||
extern prog_char S_READY_RECORD[];
|
||||
extern prog_char S_PRESS_START[];
|
||||
extern const char S_STARTINGINIT[];
|
||||
extern const char S_INITI2COK[];
|
||||
extern const char S_INIT[];
|
||||
extern const char S_INIT_FAILED[];
|
||||
extern const char S_INIT_OK[];
|
||||
extern const char S_NO_FILES_FOUND[];
|
||||
extern const char S_SELECT_FILE[];
|
||||
extern const char S_SELECT_MODE[];
|
||||
extern const char S_MODE_PLAY[];
|
||||
extern const char S_MODE_RECORD[];
|
||||
extern const char S_READY_RECORD[];
|
||||
extern const char S_PRESS_START[];
|
||||
|
||||
extern prog_char S_MODE_OPTIONS[];
|
||||
extern prog_char S_OPTION_SIGNAL[];
|
||||
extern prog_char S_OPTION_KEY_REPEAT[];
|
||||
extern prog_char S_OPTION_TICKER_SPEED[];
|
||||
extern prog_char S_OPTION_TICKER_HOLD[];
|
||||
extern prog_char S_OPTION_REC_FINALIZE[];
|
||||
extern const char S_MODE_OPTIONS[];
|
||||
extern const char S_OPTION_SIGNAL[];
|
||||
extern const char S_OPTION_KEY_REPEAT[];
|
||||
extern const char S_OPTION_TICKER_SPEED[];
|
||||
extern const char S_OPTION_TICKER_HOLD[];
|
||||
extern const char S_OPTION_REC_FINALIZE[];
|
||||
|
||||
extern prog_char S_MKDIR_FAILED[];
|
||||
extern prog_char S_CHDIR_FAILED[];
|
||||
extern prog_char S_READ_FAILED[];
|
||||
extern prog_char S_OPEN_FAILED[];
|
||||
extern prog_char S_INVALID_TAP[];
|
||||
extern prog_char S_LOADING[];
|
||||
extern prog_char S_OPERATION_COMPLETE[];
|
||||
extern prog_char S_OPERATION_ABORTED[];
|
||||
extern prog_char S_TAP_MAGIC_C64[];
|
||||
extern const char S_MKDIR_FAILED[];
|
||||
extern const char S_CHDIR_FAILED[];
|
||||
extern const char S_READ_FAILED[];
|
||||
extern const char S_OPEN_FAILED[];
|
||||
extern const char S_INVALID_TAP[];
|
||||
extern const char S_LOADING[];
|
||||
extern const char S_OPERATION_COMPLETE[];
|
||||
extern const char S_OPERATION_ABORTED[];
|
||||
extern const char S_TAP_MAGIC_C64[];
|
||||
|
||||
#endif
|
||||
|
||||
@@ -337,6 +337,11 @@ void handle_mode_options() {
|
||||
value = g_invert_signal;
|
||||
if (handle_option_value(S_MODE_OPTIONS, S_OPTION_SIGNAL, &value, 0, 1, 1)) {
|
||||
g_invert_signal = value;
|
||||
if (value) {
|
||||
CONTROL_SET_BUS1();
|
||||
} else {
|
||||
CONTROL_SET_BUS0();
|
||||
}
|
||||
save = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -506,9 +506,9 @@ int tapuino_hardware_setup(void)
|
||||
MOTOR_PORT |= _BV(MOTOR_PIN);
|
||||
|
||||
// Control pins are output
|
||||
CONTROL_DDR |= _BV(CONTROL_PIN1) | _BV(CONTROL_PIN2);
|
||||
// default both LOW
|
||||
CONTROL_PORT &= ~(_BV(CONTROL_PIN1) | _BV(CONTROL_PIN2));
|
||||
CONTROL_DDR |= _BV(CONTROL_PIN0) | _BV(CONTROL_PIN1);
|
||||
// default both LOW so BUS 0
|
||||
CONTROL_SET_BUS0();
|
||||
|
||||
// keys are all inputs, activate pullups
|
||||
KEYS_READ_DDR &= ~_BV(KEY_SELECT_PIN);
|
||||
|
||||
Reference in New Issue
Block a user