diff --git a/OpenHab/org.openhab.binding.meycan/.vscode/launch.json b/OpenHab/org.openhab.binding.meycan/.vscode/launch.json new file mode 100644 index 0000000..8ea10f1 --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/.vscode/launch.json @@ -0,0 +1,13 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Debug (Attach) - openHAB", + "request": "attach", + "hostName": "localhost", + "port": 5005, + "preLaunchTask": "Build" + } + ] +} \ No newline at end of file diff --git a/OpenHab/org.openhab.binding.meycan/.vscode/tasks.json b/OpenHab/org.openhab.binding.meycan/.vscode/tasks.json new file mode 100644 index 0000000..8122c9a --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/.vscode/tasks.json @@ -0,0 +1,149 @@ +{ + "version": "2.0.0", + "options": { + "env": { + "openhab_home": "C://source//openhab_runtime", + "openhab_runtime": "C://source//openhab_runtime//runtime", + "openhab_addons": "C://source//openhab_runtime//addons", + "openhab_logs": "C://source//openhab_runtime//userdata/logs", + "dist" : "org.openhab.binding.meycan-4.0.0-SNAPSHOT.jar" + } + }, + "tasks": [ + { + "label": "Start openHAB (Debug)", + "type": "shell", + "isBackground": true, + "command": "$openhab_home/start.sh debug", + "windows": { + "command": "& $env:openhab_home/start.bat debug" + }, + "presentation": { + "reveal": "always", + "panel": "new" + }, + "problemMatcher": [] + }, + { + "label": "Stop openHAB", + "type": "shell", + "command": "$openhab_runtime/bin/stop", + "windows": { + "command": "& $env:openhab_runtime/bin/stop.bat" + }, + "problemMatcher": [] + }, + { + "label": "mvn Compile (Release)", + "type": "shell", + "command": "mvn", + "args": [ + "clean", + "install" + ], + "problemMatcher": [] + }, + { + "label": "mvn Compile (Online)", + "type": "shell", + "command": "mvn", + "args": [ + "clean", + "install", + "-DskipChecks" + ], + "problemMatcher": [] + }, + { + "label": "mvn Compile (Offline)", + "type": "shell", + "command": "mvn", + "args": [ + "-o", + "clean", + "install", + "-DskipChecks" + ], + "problemMatcher": [] + }, + { + "label": "Copy Distribution to Addons", + "type": "shell", + "command": "cp", + "args": [ + "${workspaceFolder}/target/$dist", + "$openhab_addons" + ], + "windows": { + "command": "copy", + "args": [ + "${workspaceFolder}/target/$env:dist", + "$env:openhab_addons" + ] + }, + "dependsOn": [ + "mvn Compile (Offline)" + ], + "problemMatcher": [] + }, + { + "label": "Build", + "dependsOn": [ + "Copy Distribution to Addons" + ], + "problemMatcher": [] + }, + { + "label": "Tail events.log", + "type": "shell", + "command": "tail", + "args": [ + "-n", + "50", + "-F", + "$openhab_logs/events.log" + ], + "windows": { + "command": "Get-Content", + "args": [ + "-Last", + "50", + "-Path", + "$env:openhab_logs/events.log", + "-Wait" + ] + }, + "presentation": { + "reveal": "always", + "panel": "new" + }, + "problemMatcher": [] + }, + { + "label": "Tail openhab.log", + "type": "shell", + "command": "tail", + "args": [ + "-n", + "50", + "-F", + "$openhab_logs/openhab.log" + ], + "windows": { + "command": "Get-Content", + "args": [ + "-Last", + "50", + "-Path", + "$env:openhab_logs/openhab.log", + "-Wait" + ] + }, + "presentation": { + "reveal": "always", + "panel": "new" + }, + "problemMatcher": [] + } + ] +} \ No newline at end of file diff --git a/OpenHab/org.openhab.binding.meycan/NOTICE b/OpenHab/org.openhab.binding.meycan/NOTICE new file mode 100644 index 0000000..38d625e --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/NOTICE @@ -0,0 +1,13 @@ +This content is produced and maintained by the openHAB project. + +* Project home: https://www.openhab.org + +== Declared Project Licenses + +This program and the accompanying materials are made available under the terms +of the Eclipse Public License 2.0 which is available at +https://www.eclipse.org/legal/epl-2.0/. + +== Source Code + +https://github.com/openhab/openhab-addons diff --git a/OpenHab/org.openhab.binding.meycan/README.md b/OpenHab/org.openhab.binding.meycan/README.md new file mode 100644 index 0000000..5cda91d --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/README.md @@ -0,0 +1,94 @@ +# MeyCan Binding + +_Give some details about what this binding is meant for - a protocol, system, specific device._ + +_If possible, provide some resources like pictures (only PNG is supported currently), a video, etc. to give an impression of what can be done with this binding._ +_You can place such resources into a `doc` folder next to this README.md._ + +_Put each sentence in a separate line to improve readability of diffs._ + +## Supported Things + +_Please describe the different supported things / devices including their ThingTypeUID within this section._ +_Which different types are supported, which models were tested etc.?_ +_Note that it is planned to generate some part of this based on the XML files within ```src/main/resources/OH-INF/thing``` of your binding._ + +- `bridge`: Short description of the Bridge, if any +- `sample`: Short description of the Thing with the ThingTypeUID `sample` + +## Discovery + +_Describe the available auto-discovery features here._ +_Mention for what it works and what needs to be kept in mind when using it._ + +## Binding Configuration + +_If your binding requires or supports general configuration settings, please create a folder ```cfg``` and place the configuration file ```.cfg``` inside it._ +_In this section, you should link to this file and provide some information about the options._ +_The file could e.g. look like:_ + +``` +# Configuration for the MeyCan Binding +# +# Default secret key for the pairing of the MeyCan Thing. +# It has to be between 10-40 (alphanumeric) characters. +# This may be changed by the user for security reasons. +secret=openHABSecret +``` + +_Note that it is planned to generate some part of this based on the information that is available within ```src/main/resources/OH-INF/binding``` of your binding._ + +_If your binding does not offer any generic configurations, you can remove this section completely._ + +## Thing Configuration + +_Describe what is needed to manually configure a thing, either through the UI or via a thing-file._ +_This should be mainly about its mandatory and optional configuration parameters._ + +_Note that it is planned to generate some part of this based on the XML files within ```src/main/resources/OH-INF/thing``` of your binding._ + +### `sample` Thing Configuration + +| Name | Type | Description | Default | Required | Advanced | +|-----------------|---------|---------------------------------------|---------|----------|----------| +| hostname | text | Hostname or IP address of the device | N/A | yes | no | +| password | text | Password to access the device | N/A | yes | no | +| refreshInterval | integer | Interval the device is polled in sec. | 600 | no | yes | + +## Channels + +_Here you should provide information about available channel types, what their meaning is and how they can be used._ + +_Note that it is planned to generate some part of this based on the XML files within ```src/main/resources/OH-INF/thing``` of your binding._ + +| Channel | Type | Read/Write | Description | +|---------|--------|------------|-----------------------------| +| control | Switch | RW | This is the control channel | + +## Full Example + +_Provide a full usage example based on textual configuration files._ +_*.things, *.items examples are mandatory as textual configuration is well used by many users._ +_*.sitemap examples are optional._ + +### Thing Configuration + +```java +Example thing configuration goes here. +``` +### Item Configuration + +```java +Example item configuration goes here. +``` + +### Sitemap Configuration + +```perl +Optional Sitemap configuration goes here. +Remove this section, if not needed. +``` + +## Any custom content here! + +_Feel free to add additional sections for whatever you think should also be mentioned about your binding!_ diff --git a/OpenHab/org.openhab.binding.meycan/pom.xml b/OpenHab/org.openhab.binding.meycan/pom.xml new file mode 100644 index 0000000..29aa029 --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/pom.xml @@ -0,0 +1,17 @@ + + + + 4.0.0 + + + org.openhab.addons.bundles + org.openhab.addons.reactor.bundles + 4.0.0-SNAPSHOT + + + org.openhab.binding.meycan + + openHAB Add-ons :: Bundles :: MeyCan Binding + + diff --git a/OpenHab/org.openhab.binding.meycan/src/main/feature/feature.xml b/OpenHab/org.openhab.binding.meycan/src/main/feature/feature.xml new file mode 100644 index 0000000..9038646 --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/src/main/feature/feature.xml @@ -0,0 +1,9 @@ + + + mvn:org.openhab.core.features.karaf/org.openhab.core.features.karaf.openhab-core/${ohc.version}/xml/features + + + openhab-runtime-base + mvn:org.openhab.addons.bundles/org.openhab.binding.meycan/${project.version} + + diff --git a/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanBindingConstants.java b/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanBindingConstants.java new file mode 100644 index 0000000..90a2a8b --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanBindingConstants.java @@ -0,0 +1,34 @@ +/** + * Copyright (c) 2010-2023 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.meycan.internal; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.openhab.core.thing.ThingTypeUID; + +/** + * The {@link MeyCanBindingConstants} class defines common constants, which are + * used across the whole binding. + * + * @author Martin Linkwitz - Initial contribution + */ +@NonNullByDefault +public class MeyCanBindingConstants { + + private static final String BINDING_ID = "meycan"; + + // List of all Thing Type UIDs + public static final ThingTypeUID THING_TYPE_SAMPLE = new ThingTypeUID(BINDING_ID, "sample"); + + // List of all Channel ids + public static final String CHANNEL_1 = "channel1"; +} diff --git a/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanConfiguration.java b/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanConfiguration.java new file mode 100644 index 0000000..6275a11 --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanConfiguration.java @@ -0,0 +1,31 @@ +/** + * Copyright (c) 2010-2023 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.meycan.internal; + +import org.eclipse.jdt.annotation.NonNullByDefault; + +/** + * The {@link MeyCanConfiguration} class contains fields mapping thing configuration parameters. + * + * @author Martin Linkwitz - Initial contribution + */ +@NonNullByDefault +public class MeyCanConfiguration { + + /** + * Sample configuration parameters. Replace with your own. + */ + public String hostname = ""; + public String password = ""; + public int refreshInterval = 600; +} diff --git a/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanHandler.java b/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanHandler.java new file mode 100644 index 0000000..d3ad2ad --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanHandler.java @@ -0,0 +1,104 @@ +/** + * Copyright (c) 2010-2023 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.meycan.internal; + +import static org.openhab.binding.meycan.internal.MeyCanBindingConstants.*; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.openhab.core.thing.ChannelUID; +import org.openhab.core.thing.Thing; +import org.openhab.core.thing.ThingStatus; +import org.openhab.core.thing.binding.BaseThingHandler; +import org.openhab.core.types.Command; +import org.openhab.core.types.RefreshType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The {@link MeyCanHandler} is responsible for handling commands, which are + * sent to one of the channels. + * + * @author Martin Linkwitz - Initial contribution + */ +@NonNullByDefault +public class MeyCanHandler extends BaseThingHandler { + + private final Logger logger = LoggerFactory.getLogger(MeyCanHandler.class); + + private @Nullable MeyCanConfiguration config; + + public MeyCanHandler(Thing thing) { + super(thing); + } + + @Override + public void handleCommand(ChannelUID channelUID, Command command) { + if (CHANNEL_1.equals(channelUID.getId())) { + if (command instanceof RefreshType) { + // TODO: handle data refresh + } + + // TODO: handle command + + // Note: if communication with thing fails for some reason, + // indicate that by setting the status with detail information: + // updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, + // "Could not control device at IP address x.x.x.x"); + } + } + + @Override + public void initialize() { + config = getConfigAs(MeyCanConfiguration.class); + + // TODO: Initialize the handler. + // The framework requires you to return from this method quickly, i.e. any network access must be done in + // the background initialization below. + // Also, before leaving this method a thing status from one of ONLINE, OFFLINE or UNKNOWN must be set. This + // might already be the real thing status in case you can decide it directly. + // In case you can not decide the thing status directly (e.g. for long running connection handshake using WAN + // access or similar) you should set status UNKNOWN here and then decide the real status asynchronously in the + // background. + + // set the thing status to UNKNOWN temporarily and let the background task decide for the real status. + // the framework is then able to reuse the resources from the thing handler initialization. + // we set this upfront to reliably check status updates in unit tests. + updateStatus(ThingStatus.UNKNOWN); + + // Example for background initialization: + scheduler.execute(() -> { + boolean thingReachable = true; // + // when done do: + if (thingReachable) { + updateStatus(ThingStatus.ONLINE); + } else { + updateStatus(ThingStatus.OFFLINE); + } + }); + + // These logging types should be primarily used by bindings + // logger.trace("Example trace message"); + // logger.debug("Example debug message"); + // logger.warn("Example warn message"); + // + // Logging to INFO should be avoided normally. + // See https://www.openhab.org/docs/developer/guidelines.html#f-logging + + // Note: When initialization can NOT be done set the status with more details for further + // analysis. See also class ThingStatusDetail for all available status details. + // Add a description to give user information to understand why thing does not work as expected. E.g. + // updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.CONFIGURATION_ERROR, + // "Can not access device as username and/or password are invalid"); + } +} diff --git a/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanHandlerFactory.java b/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanHandlerFactory.java new file mode 100644 index 0000000..cebd25d --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/src/main/java/org/openhab/binding/meycan/internal/MeyCanHandlerFactory.java @@ -0,0 +1,55 @@ +/** + * Copyright (c) 2010-2023 Contributors to the openHAB project + * + * See the NOTICE file(s) distributed with this work for additional + * information. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0 + * + * SPDX-License-Identifier: EPL-2.0 + */ +package org.openhab.binding.meycan.internal; + +import static org.openhab.binding.meycan.internal.MeyCanBindingConstants.*; + +import java.util.Set; + +import org.eclipse.jdt.annotation.NonNullByDefault; +import org.eclipse.jdt.annotation.Nullable; +import org.openhab.core.thing.Thing; +import org.openhab.core.thing.ThingTypeUID; +import org.openhab.core.thing.binding.BaseThingHandlerFactory; +import org.openhab.core.thing.binding.ThingHandler; +import org.openhab.core.thing.binding.ThingHandlerFactory; +import org.osgi.service.component.annotations.Component; + +/** + * The {@link MeyCanHandlerFactory} is responsible for creating things and thing + * handlers. + * + * @author Martin Linkwitz - Initial contribution + */ +@NonNullByDefault +@Component(configurationPid = "binding.meycan", service = ThingHandlerFactory.class) +public class MeyCanHandlerFactory extends BaseThingHandlerFactory { + + private static final Set SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_SAMPLE); + + @Override + public boolean supportsThingType(ThingTypeUID thingTypeUID) { + return SUPPORTED_THING_TYPES_UIDS.contains(thingTypeUID); + } + + @Override + protected @Nullable ThingHandler createHandler(Thing thing) { + ThingTypeUID thingTypeUID = thing.getThingTypeUID(); + + if (THING_TYPE_SAMPLE.equals(thingTypeUID)) { + return new MeyCanHandler(thing); + } + + return null; + } +} diff --git a/OpenHab/org.openhab.binding.meycan/src/main/resources/OH-INF/addon/addon.xml b/OpenHab/org.openhab.binding.meycan/src/main/resources/OH-INF/addon/addon.xml new file mode 100644 index 0000000..a2fa66a --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/src/main/resources/OH-INF/addon/addon.xml @@ -0,0 +1,10 @@ + + + + binding + MeyCan Binding + This is the binding for MeyCan. + + diff --git a/OpenHab/org.openhab.binding.meycan/src/main/resources/OH-INF/i18n/meycan.properties b/OpenHab/org.openhab.binding.meycan/src/main/resources/OH-INF/i18n/meycan.properties new file mode 100644 index 0000000..0c2f440 --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/src/main/resources/OH-INF/i18n/meycan.properties @@ -0,0 +1,3 @@ +# FIXME: please add all English translations to this file so the texts can be translated using Crowdin +# FIXME: to generate the content of this file run: mvn i18n:generate-default-translations +# FIXME: see also: https://www.openhab.org/docs/developer/utils/i18n.html diff --git a/OpenHab/org.openhab.binding.meycan/src/main/resources/OH-INF/thing/thing-types.xml b/OpenHab/org.openhab.binding.meycan/src/main/resources/OH-INF/thing/thing-types.xml new file mode 100644 index 0000000..6955c37 --- /dev/null +++ b/OpenHab/org.openhab.binding.meycan/src/main/resources/OH-INF/thing/thing-types.xml @@ -0,0 +1,48 @@ + + + + + + + + + Sample thing for MeyCan Binding + + + + + + + + network-address + + Hostname or IP address of the device + + + password + + Password to access the device + + + + Interval the device is polled in sec. + 600 + true + + + + + + + Number:Temperature + + Sample channel for MeyCan Binding + + diff --git a/Software/Switch/Swtich/MeyCan.cpp b/Software/Switch/Swtich/MeyCan.cpp new file mode 100644 index 0000000..6609c9b --- /dev/null +++ b/Software/Switch/Swtich/MeyCan.cpp @@ -0,0 +1,185 @@ +#include "MeyCan.h"; +#include ; +#include ; + + +PinState MeyPins[8]; +MCP2515* canInterfaces[4]; +uint16_t myDeviceId; + + +void SetupMeyCan() +{ + for (int i = 0; i < sizeof(MeyPins) / sizeof(PinState); i++) + { + pinMode(MeyPins[i].pin_id, OUTPUT); + digitalWrite(MeyPins[i].pin_id, LOW); + MeyPins[i].pin_state = false; + } + CalculateMyDeviceId(); + + for (int i = 0; i < sizeof(canInterfaces) / sizeof(MCP2515*); i++) { + + canInterfaces[i]->reset(); + canInterfaces[i]->setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz + canInterfaces[i]->setNormalMode(); + + + SendVersionPackage(canInterfaces[i]); + } +} + +void SetCanInterface(byte index, byte pinId) +{ + canInterfaces[index] = new MCP2515(pinId); +} + +void SetMeyPin(byte index, byte meyPinId, byte pinId) +{ + MeyPins[index] = PinState(); + MeyPins[index].Init(pinId, (byte) meyPinId); + + canInterfaces[index] = new MCP2515(pinId); +} + +void HandleFrame(can_frame *frame) +{ + HandleTriggerMeypinCanPackage(frame); +} + +void HandleTriggerMeypinCanPackage(can_frame *frame) +{ + if (GetPackageType(frame->can_id) == TRIGGER_SWITCH_CAN_ID) + { + uint16_t adressedDeviceId = ((uint16_t )frame->data[0] << 8) | frame->data[1] ; + if (adressedDeviceId != myDeviceId) return; + + + int meyPinId = frame->data[2]; + bool state = frame->data[3] > 0; + + PinState *adressedPin = NULL; + for (int i = 0; i < sizeof(MeyPins) / sizeof(PinState); i++) + if (MeyPins[i].meyPinId == meyPinId) + { + adressedPin = &MeyPins[i]; + break; + } + + if (adressedPin != NULL) + { + if (adressedPin->is_input == true) + { + pinMode(adressedPin->pin_id, OUTPUT); + adressedPin->is_input = false; + } + + bool pinChanged = adressedPin->pin_state != state; + adressedPin->pin_state = state; + + if (pinChanged) { + digitalWrite(adressedPin->pin_id, state); + SendSwitchedTriggeredCanPackage(adressedPin->meyPinId, state); + } + + } + } +} + +byte CircularShift(byte b) +{ + return (b << 1) | (b >> 7 & 1); +} + +uint16_t GetDeviceId(uint32_t canFrameId) +{ + return canFrameId & 0xFFFF; +} + +uint16_t GetPackageType(uint32_t canFrameId) +{ + return (canFrameId / 0x10000) & 0xFFF; +} + +byte GetDeviceIdLow() { + return (SIGROW.SERNUM0 ^ + CircularShift(SIGROW.SERNUM2) << 1 ^ + CircularShift( CircularShift(SIGROW.SERNUM4)) ^ + CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); +} + +byte GetDeviceIdHigh() { + return (SIGROW.SERNUM1 ^ + CircularShift(SIGROW.SERNUM3) << 1 ^ + CircularShift( CircularShift(SIGROW.SERNUM5)) ^ + CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); +} + +uint32_t CreateCanId(uint16_t commandId) +{ + return ((((uint32_t)commandId) & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG; +} + +void SendVersionPackage(MCP2515 *interface) +{ + can_frame toSend; + toSend.can_id = CreateCanId(HELP_PACKAGE_CAN_ID); + toSend.can_dlc = 6; + + toSend.data[0] = SOFTWARE_VERSION_HIGH; + toSend.data[1] = SOFTWARE_VERSION_LOW; + toSend.data[2] = HARDWARE_VERSION_HIGH; + toSend.data[3] = HARDWARE_VERSION_LOW; + toSend.data[4] = (myDeviceId >> 8) & 0xFF; + toSend.data[5] = myDeviceId & 0xFF; + + DoSendCanPkg(interface, &toSend); +} + +void SendDoTriggerSwitchCanPackage(uint16_t targetCanId, byte pinId, byte state) +{ + can_frame toSend; + + toSend.can_id = CreateCanId(TRIGGER_SWITCH_CAN_ID); + toSend.can_dlc = 4; + toSend.data[0] = (targetCanId & 0xFF00) >> 8; + toSend.data[1] = targetCanId & 0xFF; + toSend.data[2] = pinId; + toSend.data[3] = state; + + DoSendCanPkg(&toSend); + HandleFrame(&toSend); +} + +void SendSwitchedTriggeredCanPackage(byte pinId, int state) +{ + can_frame toSend; + toSend.can_id = CreateCanId(SWITCH_TRIGGERED_CAN_ID); + toSend.can_dlc = 2; + toSend.data[0] = pinId; + toSend.data[1] = state; + + DoSendCanPkg(&toSend); +} + +void DoSendCanPkg(can_frame *frame) +{ + for (int i = 0; i < sizeof(canInterfaces) / sizeof(MCP2515*); i++) + DoSendCanPkg(canInterfaces[i], frame); +} + +void DoSendCanPkg(MCP2515* interface, can_frame *frame) +{ + byte cnt = 0; + while (interface->sendMessage(frame)) + { + if (++cnt > 10) return; + } +} + +void CalculateMyDeviceId() +{ + myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow(); +} diff --git a/Software/Switch/Swtich/MeyCan.h b/Software/Switch/Swtich/MeyCan.h new file mode 100644 index 0000000..51f6ca9 --- /dev/null +++ b/Software/Switch/Swtich/MeyCan.h @@ -0,0 +1,67 @@ +#ifndef MEYCAN_H +#define MEYCAN_H + +#include +#include + + +typedef struct +{ + int pin_id; + bool pin_state; + bool is_input; + byte meyPinId; + + PinState() {} + void Init(int pin_id, byte meyPinId) + { + this->pin_id = pin_id; + this->pin_state = true; + this->is_input = true; + this->meyPinId = meyPinId; + } +} PinState; + + +/* START MEYCAN */ + +const byte SOFTWARE_VERSION_HIGH = 5; +const byte SOFTWARE_VERSION_LOW = 0; +const byte HARDWARE_VERSION_HIGH = 7; +const byte HARDWARE_VERSION_LOW = 0; + +const uint16_t HELP_PACKAGE_CAN_ID = 0x0FFFUL; +const uint16_t SWITCH_TRIGGERED_CAN_ID = 0x0050; +const uint16_t TRIGGER_SWITCH_CAN_ID = 0x0055; + +extern MCP2515* canInterfaces[4]; + +void SetCanInterface(byte index, byte pinId); +void SetMeyPin(byte index, byte meyPinId, byte pinId); + +void SetupMeyCan(); + +void HandleFrame(can_frame *frame); +void HandleTriggerMeypinCanPackage(can_frame *frame); +byte CircularShift(byte b); +uint16_t GetDeviceId(uint32_t canFrameId); +uint16_t GetPackageType(uint32_t canFrameId); +byte GetDeviceIdLow(); + +byte GetDeviceIdHigh(); + +uint32_t CreateCanId(uint16_t commandId); +void SendVersionPackage(MCP2515 *interface); + +void SendSwitchedTriggeredCanPackage(byte pinId, int state); +void SendDoTriggerSwitchCanPackage(uint16_t targetCanId, byte pinId, byte state); + +void DoSendCanPkg(can_frame *frame); +void DoSendCanPkg(MCP2515 *interface, can_frame *frame); + +void CalculateMyDeviceId(); + +/* STOP MEYCAN */ + + +#endif diff --git a/Software/Switch/Swtich/MeyRule.cpp b/Software/Switch/Swtich/MeyRule.cpp new file mode 100644 index 0000000..fb376a5 --- /dev/null +++ b/Software/Switch/Swtich/MeyRule.cpp @@ -0,0 +1,97 @@ +#include "MeyRule.h" +#include "MeyCan.h" +#include +#include ; + +RemotePinInfo remotePinInfo = RemotePinInfo(); +Rule *rules = NULL; + +void PutRule(Rule *rule) +{ + if (rules == NULL) + rules = rule; + else + rules->AddRule(rule); +} + +void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId) +{ + Rule *rule = new Rule(); + + rule->sourceDevId = sourceDevId; + rule->sourceMeyPinId = sourceMeyPinId; + rule->targetDevId = targetDevId; + rule->targetMeyPinId = targetMeyPinId; + rule->toggle = false; + rule->inverse = false; + + PutRule(rule); +} + +void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId) +{ + Rule *rule = new Rule(); + + rule->sourceDevId = sourceDevId; + rule->sourceMeyPinId = sourceMeyPinId; + rule->targetDevId = targetDevId; + rule->targetMeyPinId = targetMeyPinId; + rule->toggle = true; + rule->inverse = false; + + PutRule(rule); +} + +void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId) +{ + Rule *rule = new Rule(); + + rule->sourceDevId = sourceDevId; + rule->sourceMeyPinId = sourceMeyPinId; + rule->targetDevId = targetDevId; + rule->targetMeyPinId = targetMeyPinId; + rule->toggle = true; + rule->inverse = true; + + PutRule(rule); +} + + + +void CheckRule(uint16_t deviceId, uint8_t dt, uint8_t state, Rule *rule) +{ + RemotePinInfo *currentPinState = remotePinInfo.FindOrAdd(rule->targetDevId); + + if (currentPinState == NULL) return; + + bool pinState = state > 0; + if (rule->inverse) + pinState = !pinState; + + if (rule->toggle) + pinState = (currentPinState->getPinState(rule->targetMeyPinId) ^ true); + + + SendDoTriggerSwitchCanPackage(rule->targetDevId, rule->targetMeyPinId, pinState); + // //digitalWrite(foundPinId->pin_id, pinState); + // //foundPinId->pin_state = pinState; + // + currentPinState->setPinState(rule->targetMeyPinId, pinState); + + + +} + + +void HandleRules(can_frame *frame) +{ + if (rules == NULL) return; + if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID) + { + uint16_t deviceId = GetDeviceId(frame->can_id); + uint8_t dt = frame->data[1]; + uint8_t state = frame->data[0]; + + rules->Traverse(deviceId, dt, state, CheckRule); + } +} diff --git a/Software/Switch/Swtich/MeyRule.h b/Software/Switch/Swtich/MeyRule.h new file mode 100644 index 0000000..5105b6a --- /dev/null +++ b/Software/Switch/Swtich/MeyRule.h @@ -0,0 +1,110 @@ +#ifndef MEYRULE_H +#define MEYRULE_H + +#include +#include ; + +struct Rule +{ + uint16_t sourceDevId; + byte sourceMeyPinId; + uint16_t targetDevId; + byte targetMeyPinId; + bool toggle; + bool inverse; + Rule *nextRule = NULL; + + void AddRule(Rule *rule) + { + if (this->nextRule == NULL) + { + this->nextRule = rule; + rule->nextRule = NULL; + } else { + this->nextRule->AddRule(rule); + } + } + + void Traverse( uint16_t deviceId, uint8_t dt, uint8_t state, void (*handle)(uint16_t, uint8_t, uint8_t, Rule*)) + { + + if ( this->sourceDevId == deviceId && this->sourceMeyPinId == state) + handle(deviceId, dt, state, this); + + if (this->nextRule != NULL) + this->nextRule->Traverse(deviceId, dt, state, handle); + + } +}; + + +typedef struct RemotePinInfo +{ + const byte MAX_REMOTE_PIN_COUNT = 64; + uint16_t DeviceId = 0; // the id of the device + uint8_t pinState = 0; // bitmap of 8 MeyPin states of the device. 0000 0100, MeyPin #3 is HIGH in this example + RemotePinInfo *next = NULL; + + bool getPinState(byte meyPin) + { + return (this->pinState >> (meyPin - 1)) & 1; + } + + void setPinState(byte meyPin, bool state) + { + if (state) + this->pinState = this->pinState | (1 << (meyPin - 1)); // 0001 0000 + else + this->pinState = this->pinState & (~(1 << (meyPin - 1))); // 1110 1111 -> not + } + + + int16_t Count() + { + if (this->next == NULL) return 1; + return this->next->Count() + 1; + } + + RemotePinInfo* FindOrAdd(uint16_t deviceId, byte count = 0) + { + if (count > MAX_REMOTE_PIN_COUNT) + return NULL; + + + if (this->DeviceId == 0 && this->pinState == 0) + { + this->DeviceId = deviceId; + this->pinState = 0; + } + + if (this->DeviceId == deviceId) + { + //ToggleDebug(); + return this; + } + + if (next != NULL) + { + return next->FindOrAdd(deviceId, count + 1); + } + + RemotePinInfo *theNext = new RemotePinInfo; + theNext->DeviceId = deviceId; + theNext->pinState = 0; + theNext->next = NULL; + + this->next = theNext; + return this->next; + } + +}; + +extern RemotePinInfo remotePinInfo; +extern Rule *rules; + +void AddSimple(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId); +void AddToggle(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId); +void AddToggleInverse(uint16_t sourceDevId, byte sourceMeyPinId, uint16_t targetDevId, byte targetMeyPinId); +void HandleRules(can_frame *frame); +void PutRule(Rule *rule); +#endif diff --git a/Software/Switch/Swtich/Swtich.ino b/Software/Switch/Swtich/Swtich.ino index 75bdd86..62aad6c 100644 --- a/Software/Switch/Swtich/Swtich.ino +++ b/Software/Switch/Swtich/Swtich.ino @@ -1,527 +1,69 @@ #include ; #include ; +#include "MeyCan.h"; +#include "MeyRule.h"; -const byte SoftwareVersionHigh = 3; -const byte SoftwareVersionLow = 1; -const byte HardwareVersionHigh = 6; -const byte HardwareVersionLow = 0; -const uint32_t HELP_PACKAGE_CAN_ID = 0xFFFF; -const uint32_t SWITCH_TRIGGERED_CAN_ID = 0x050; -const uint32_t TRIGGER_SWITCH_CAN_ID = 0x055; -const uint32_t DEBUG_CAN_ID = 0x000; - -struct can_frame _frame; - -typedef struct -{ - uint32_t sourceDevId; - byte sourceMeyPinId; - uint32_t targetDevId; - byte targetMeyPinId; - bool toggle; - bool inverse; - - void InitSimple(uint32_t sourceDevId, byte sourceMeyPinId, uint32_t targetDevId, byte targetMeyPinId) - { - this->sourceDevId = sourceDevId; - this->sourceMeyPinId = sourceMeyPinId; - this->targetDevId = targetDevId; - this->targetMeyPinId = targetMeyPinId; - toggle = false; - inverse = false; - } - - void InitToggle(uint32_t sourceDevId, byte sourceMeyPinId, uint32_t targetDevId, byte targetMeyPinId) - { - this->sourceDevId = sourceDevId; - this->sourceMeyPinId = sourceMeyPinId; - this->targetDevId = targetDevId; - this->targetMeyPinId = targetMeyPinId; - toggle = true; - inverse = false; - } - - void InitToggleInverse(uint32_t sourceDevId, byte sourceMeyPinId, uint32_t targetDevId, byte targetMeyPinId) - { - this->sourceDevId = sourceDevId; - this->sourceMeyPinId = sourceMeyPinId; - this->targetDevId = targetDevId; - this->targetMeyPinId = targetMeyPinId; - toggle = true; - inverse = true; - } -} Rule; - -typedef struct -{ - int pin_id; - bool pin_state; - bool is_input; - byte meyPinId; - - PinState() {} - void Init(int pin_id, byte meyPinId) - { - this->pin_id = pin_id; - this->pin_state = true; - this->is_input = true; - this->meyPinId = meyPinId; - } -} PinState; - -struct RemotePinInfo -{ - const byte MAX_REMOTE_PIN_COUNT = 50; - uint16_t DeviceId = 0; // the id of the device - uint16_t pinState = 0; // bitmap of 8 MeyPin states of the device. 0000 0100, MeyPin #3 is HIGH in this example - RemotePinInfo *next = NULL; - - bool getPinState(byte meyPin) - { - return (this->pinState >> (meyPin - 1)) & 1; - } - - void setPinState(byte meyPin, bool state) - { - if (state) - this->pinState = this->pinState | (1 << (meyPin - 1)); // 0001 0000 - else - this->pinState = this->pinState & (~(1 << (meyPin - 1))); // 1110 1111 -> not - } - - - int16_t Count() - { - if (this->next == NULL) return 1; - return this->next->Count() + 1; - } - - RemotePinInfo* FindOrAdd(uint16_t deviceId, byte count = 0) - { - if (count > MAX_REMOTE_PIN_COUNT) - return NULL; - - - if (this->DeviceId == 0 && this->pinState == 0) - { - this->DeviceId = deviceId; - this->pinState = 0; - } - - if (this->DeviceId == deviceId) - { - //ToggleDebug(); - return this; - } - - if (next != NULL) - { - return next->FindOrAdd(deviceId, count + 1); - } - - RemotePinInfo *theNext = new RemotePinInfo; - theNext->DeviceId = deviceId; - theNext->pinState = 0; - theNext->next = NULL; - - this->next = theNext; - return this->next; - } - -}; - -struct RemotePinInfo remotePinInfos = RemotePinInfo(); -PinState MeyPins[8]; - -bool flag = false; -int16_t myDeviceId; - -Rule Rules[16]; - -MCP2515 mcp2515_0(PIN_PA2); -MCP2515 mcp2515_1(PIN_PA3); -MCP2515 mcp2515_2(PIN_PB0); -MCP2515 mcp2515_3(PIN_PB1); +struct can_frame incomingCanFrame; void setup() { SPI.begin(); - - - Rules[0] = Rule(); - Rules[0].InitToggleInverse(0x051F, 5, 0x3D2D, 4); // Lichtschalter Wohnzimmer Licht 1 - Rules[1] = Rule(); - Rules[1].InitToggleInverse(0x051F, 5, 0x3D2D, 3); // Lichtschalter Wohnzimmer Licht 2 - - Rules[2] = Rule(); - Rules[2].InitToggle(0x05df, 1, 0x3D2D, 4); // Licht 1 von Terassenschalter - Rules[3] = Rule(); - Rules[3].InitToggle(0x05df, 1, 0x3D2D, 3); // Licht 2 von Terassenschalter - - Rules[4] = Rule(); - Rules[4].InitToggle(0x0769, 1, 0x3D2D, 6); // Eingangstür Flur Licht 2 - Rules[5] = Rule(); - Rules[5].InitToggle(0x0769, 1, 0x9829, 1); //Eingangstür Flur Licht 1 - - Rules[6] = Rule(); - Rules[6].InitSimple(0x051F, 3, 0x3D2D, 1); // Licht 1 Wochzimmer Eingangstür - Rules[7] = Rule(); - Rules[7].InitSimple(0x051F, 4, 0x3D2D, 2); // Licht 2 Wochzimmer Eingangstür - - Rules[8] = Rule(); - Rules[8].InitToggle(0x1177, 1, 0x3D2D, 7); // Licht Papa Büro - - Rules[9] = Rule(); - Rules[9].InitToggle(0x05A1, 1, 0x3D2D, 6); // Flurlicht von Papas Büro - - Rules[10] = Rule(); - Rules[10].InitToggle(0x05A1, 1, 0x9829, 1); // Flurlicht von Papas Büro - - Rules[11] = Rule(); - Rules[11].InitToggle(0x01EF, 1, 0x3D2D, 6); // Flurlicht von Papas Büro - Rules[12] = Rule(); - Rules[12].InitToggle(0x01EF, 1, 0x9829, 1); // Flurlicht von Papas Büro# - - Rules[13] = Rule(); - Rules[13].InitToggle(0x0196, 3, 0x3D2D, 6); // Flurlicht von Papas Büro - - Rules[14] = Rule(); - Rules[14].InitToggle(0x0196, 3, 0x9829, 1); // Flurlicht von Papas Büro - - Rules[15] = Rule(); - Rules[15].InitToggle(0x0632, 1, 0x9829, 5); // Flurlicht von Papas Büro - - delay(10); - MeyPins[0] = PinState(); - MeyPins[0].Init(PIN_PC7, (byte) 1); - - MeyPins[1] = PinState(); - MeyPins[1].Init(PIN_PC6, (byte) 2); - - MeyPins[2] = PinState(); - MeyPins[2].Init(PIN_PC5, (byte) 3); - - MeyPins[3] = PinState(); - MeyPins[3].Init(PIN_PC4, (byte) 4); - - MeyPins[4] = PinState(); - MeyPins[4].Init(PIN_PC3, (byte) 5); - - MeyPins[5] = PinState(); - MeyPins[5].Init(PIN_PC2, (byte) 6); - - MeyPins[6] = PinState(); - MeyPins[6].Init(PIN_PC1, (byte) 7); - - MeyPins[7] = PinState(); - MeyPins[7].Init(PIN_PC0, (byte) 8); - + AddToggleInverse(0x051F, 5, 0x3D2D, 4); // Lichtschalter Wohnzimmer Licht 1 + AddToggleInverse(0x051F, 5, 0x3D2D, 3); // Lichtschalter Wohnzimmer Licht 2 + AddToggle(0x05df, 1, 0x3D2D, 4); // Licht 1 von Terassenschalter + AddToggle(0x05df, 1, 0x3D2D, 3); // Licht 2 von Terassenschalter + AddToggle(0x0769, 1, 0x3D2D, 6); // Eingangstür Flur Licht 2 + AddToggle(0x0769, 1, 0x9829, 1); //Eingangstür Flur Licht 1 + AddSimple(0x051F, 3, 0x3D2D, 1); // Licht 1 Wochzimmer Eingangstür + AddSimple(0x051F, 4, 0x3D2D, 2); // Licht 2 Wochzimmer Eingangstür + AddToggle(0x1177, 1, 0x3D2D, 7); // Licht Papa Büro + AddToggle(0x05A1, 1, 0x3D2D, 6); // Flurlicht von Papas Büro + AddToggle(0x05A1, 1, 0x9829, 1); // Flurlicht von Papas Büro + AddToggle(0x01EF, 1, 0x3D2D, 6); // Flurlicht von Papas Büro + AddToggle(0x01EF, 1, 0x9829, 1); // Flurlicht von Papas Büro + AddToggle(0x0196, 3, 0x3D2D, 6); // Flurlicht von Papas Büro + AddToggle(0x0196, 3, 0x9829, 1); // Flurlicht von Papas Büro + AddToggle(0x0632, 1, 0x9829, 5); // Flurlicht von Papas Büro _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); + delay(10); // a bit delay for mcp2515 to get the clock - mcp2515_0.reset(); - mcp2515_0.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - mcp2515_0.setNormalMode(); + SetMeyPin(0, 1, PIN_PC7); + SetMeyPin(1, 2, PIN_PC6); + SetMeyPin(2, 3, PIN_PC5); + SetMeyPin(3, 4, PIN_PC4); + SetMeyPin(4, 5, PIN_PC3); + SetMeyPin(5, 6, PIN_PC2); + SetMeyPin(6, 7, PIN_PC1); + SetMeyPin(7, 8, PIN_PC0); - mcp2515_1.reset(); - mcp2515_1.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - mcp2515_1.setNormalMode(); + SetCanInterface(0, PIN_PA2); + SetCanInterface(1, PIN_PA3); + SetCanInterface(2, PIN_PB0); + SetCanInterface(3, PIN_PB1); - mcp2515_2.reset(); - mcp2515_2.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - mcp2515_2.setNormalMode(); - mcp2515_3.reset(); - mcp2515_3.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - mcp2515_3.setNormalMode(); - - for (int i = 0; i < sizeof(MeyPins) / sizeof(PinState); i++) - { - pinMode(MeyPins[i].pin_id, OUTPUT); - - digitalWrite(MeyPins[i].pin_id, LOW); - - } - CalculateMyDeviceId(); - - SendSerialPackage(&mcp2515_0); - SendSerialPackage(&mcp2515_1); - SendSerialPackage(&mcp2515_2); - SendSerialPackage(&mcp2515_3); - -} - -bool debugState = false; -void ToggleDebug() -{ - debugState = debugState ^ true; - if (debugState) - digitalWrite(PIN_PC1, HIGH); - else - digitalWrite(PIN_PC1, LOW); + SetupMeyCan(); } void loop() { - if (mcp2515_0.readMessage(&_frame) == MCP2515::ERROR_OK) + for (int i = 0; i < sizeof(canInterfaces) / sizeof(MCP2515*); i++) { - - DoSendCanPkg(&mcp2515_1, &_frame); - DoSendCanPkg(&mcp2515_2, &_frame); - DoSendCanPkg(&mcp2515_3, &_frame); - HandleFrame(&_frame); - } - if (mcp2515_1.readMessage(&_frame) == MCP2515::ERROR_OK) - { - DoSendCanPkg(&mcp2515_0, &_frame); - DoSendCanPkg(&mcp2515_2, &_frame); - DoSendCanPkg(&mcp2515_3, &_frame); - HandleFrame(&_frame); - } - if (mcp2515_2.readMessage(&_frame) == MCP2515::ERROR_OK) - { - DoSendCanPkg(&mcp2515_0, &_frame); - DoSendCanPkg(&mcp2515_1, &_frame); - DoSendCanPkg(&mcp2515_3, &_frame); - HandleFrame(&_frame); - } - if (mcp2515_3.readMessage(&_frame) == MCP2515::ERROR_OK) - { - DoSendCanPkg(&mcp2515_0, &_frame); - DoSendCanPkg(&mcp2515_1, &_frame); - DoSendCanPkg(&mcp2515_2, &_frame);; - HandleFrame(&_frame); - } -} - -void HandleFrame(can_frame *frame) -{ - // ToggleDebug(); - HandleMeyPinTriggeredCanPackage(frame); - HandleTriggerMeypinCanPackage(frame); - // Handle rules needs to be the last call - HandleRules(frame); -} - -// this method will save the state of the triggered pin to be present for the rules -void HandleMeyPinTriggeredCanPackage(can_frame *frame) -{ - if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID) - { - - RemotePinInfo *currentPinState = remotePinInfos.FindOrAdd(GetDeviceId(frame->can_id) ); - - - if (currentPinState == NULL) + if (canInterfaces[i]->readMessage(&incomingCanFrame) == MCP2515::ERROR_OK) { - int16_t test2[3]; - test2[0] = 'S'; - test2[1] = 'O'; - test2[2] = 'S'; - // SendDebugCanPackage(&mcp2515_3, test2, sizeof(test2) / sizeof(int16_t)); - return; - } - - int16_t test[1]; - test[0] = remotePinInfos.Count(); - // SendDebugCanPackage(&mcp2515_3, test, sizeof(test) / sizeof(int16_t)); - - currentPinState->setPinState(frame->data[0], frame->data[1]); - - - } -} - -void HandleTriggerMeypinCanPackage(can_frame *frame) -{ - if (GetPackageType(frame->can_id) == TRIGGER_SWITCH_CAN_ID && (GetDeviceId(frame->can_id) == GetMyDeviceId())) - { - int meyPinId = frame->data[2]; - bool state = frame->data[3] > 0; - - PinState *adressedPin; - for (int i = 0; i < sizeof(MeyPins) / sizeof(PinState); i++) - if (MeyPins[i].meyPinId == meyPinId) + // A received CAN Frame is forwarded to all other MCPs given, but not to the receiving one (no echo ) + for (int j = 0; j < sizeof(canInterfaces) / sizeof(MCP2515*); j++) { - adressedPin = &MeyPins[i]; - break; + if (j == i) continue; // thats for the echo + DoSendCanPkg(canInterfaces[j], &incomingCanFrame); } - if (adressedPin != NULL) - { - if (adressedPin->is_input == true) - { - pinMode(adressedPin->pin_id, OUTPUT); - adressedPin->is_input = false; - } - adressedPin->pin_state = state; - digitalWrite(adressedPin->pin_id, state); - } - - } -} - -void HandleRules(can_frame *frame) -{ - if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID) - { - uint16_t deviceId = GetDeviceId(frame->can_id); - uint8_t dt = _frame.data[1]; - uint8_t state = frame->data[0]; - - for (int i = 0; i < sizeof(Rules) / sizeof(Rule); i++) - { - if ( Rules[i].sourceDevId == deviceId) - if (Rules[i].sourceMeyPinId == state) - HandleRule(&Rules[i], dt ); + HandleFrame(&incomingCanFrame); + HandleRules(&incomingCanFrame); } } } - -void HandleRule(Rule *rule, byte state) -{ - struct RemotePinInfo *currentPinState = remotePinInfos.FindOrAdd(rule->targetDevId); - - if (currentPinState == NULL) - { - return; - } - - int pinState = state > 0; - if (rule->inverse) - pinState = !pinState; - - - if (rule->toggle) - { - pinState = (currentPinState->getPinState(rule->targetMeyPinId) ^ true) > 0; - } - - SendDoTriggerSwitchCanPackage(&mcp2515_0, rule->targetDevId, rule->targetMeyPinId, pinState); - SendDoTriggerSwitchCanPackage(&mcp2515_1, rule->targetDevId, rule->targetMeyPinId, pinState); - SendDoTriggerSwitchCanPackage(&mcp2515_2, rule->targetDevId, rule->targetMeyPinId, pinState); - SendDoTriggerSwitchCanPackage(&mcp2515_3, rule->targetDevId, rule->targetMeyPinId, pinState); - //digitalWrite(foundPinId->pin_id, pinState); - //foundPinId->pin_state = pinState; - - HandleFrame(&_frame); - currentPinState->setPinState(rule->targetMeyPinId, pinState); - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); -} - -uint16_t GetDeviceId(uint32_t canFrameId) -{ - return canFrameId & 0xFFFF; -} - -uint32_t GetPackageType(uint32_t canFrameId) -{ - return (canFrameId / 0x10000) & 0xFFF; -} - -uint32_t CreateCanId(uint16_t commandId) -{ - return ((commandId & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG; -} - -uint32_t CreateCanId(uint16_t commandId, uint16_t deviceId) -{ - return ((commandId & 0xFFF) * 0x10000) | deviceId | CAN_EFF_FLAG; -} - -void CalculateMyDeviceId() -{ - myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow(); -} - -uint16_t GetMyDeviceId() -{ - return myDeviceId; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); -} - -void SendSerialPackage(MCP2515 *interface) -{ - _frame.can_id = CreateCanId(HELP_PACKAGE_CAN_ID); - _frame.can_dlc = 4; - - _frame.data[0] = SoftwareVersionHigh; - _frame.data[1] = SoftwareVersionLow; - _frame.data[2] = HardwareVersionHigh; - _frame.data[3] = HardwareVersionLow; - DoSendCanPkg(interface, &_frame); -} - -void SendSwitchedTriggeredCanPackage(MCP2515 *interface, byte pinId, int state) -{ - _frame.can_id = CreateCanId(SWITCH_TRIGGERED_CAN_ID); - _frame.can_dlc = 2; - _frame.data[0] = pinId; - _frame.data[1] = state; - DoSendCanPkg(interface, &_frame); -} - - -void SendDoTriggerSwitchCanPackage(MCP2515 *interface, uint16_t targetCanId, byte pinId, byte state) -{ - _frame.can_id = CreateCanId(TRIGGER_SWITCH_CAN_ID, targetCanId); - _frame.can_dlc = 4; - _frame.data[0] = (targetCanId & 0xFF00) >> 8; - _frame.data[1] = targetCanId & 0xFF; - _frame.data[2] = pinId; - _frame.data[3] = state; - - DoSendCanPkg(interface, &_frame); - -} - -void DoSendCanPkg(MCP2515 *interface, can_frame *frame) -{ - // ToggleDebug(); - byte cnt = 0; - while (interface->sendMessage(&_frame)) { - cnt++; - if (cnt > 10) return; - } - -} -void SendDebugCanPackage(MCP2515 *interface, int16_t *data, int len) -{ - can_frame frame = can_frame(); - frame.can_id = 0; - frame.can_id = CreateCanId(DEBUG_CAN_ID); - - - frame.can_dlc = len * 2; - - for (int i = 0; i < frame.can_dlc / 2; i++) - { - frame.data[2 * i] = ((byte[])data)[2 * i + 1]; - frame.data[2 * i + 1] = ((byte[])data)[2 * i]; - } - - DoSendCanPkg(interface, &frame); -} diff --git a/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.hex b/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.hex index 83434db..4cf5266 100644 --- a/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.hex +++ b/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.hex @@ -1,318 +1,257 @@ -:1000000050C0000073C0000071C000006FC000004D -:100010006DC000006BC0000069C0000067C0000038 -:1000200065C0000063C0000061C000005FC0000048 -:100030005DC000005BC0000059C0000057C0000058 -:1000400055C0000053C0000051C000004FC0000068 -:100050004DC000004BC0000049C0000047C0000078 -:1000600045C00000A8C6000041C000003FC000001D -:100070003DC000003BC0000039C0000037C0000098 -:1000800035C0000033C0000031C000002FC00000A8 -:100090002DC000002BC0000029C0000027C00000B8 -:1000A000110711241FBECFEFCDBFDFE3DEBF1CE37E -:1000B000A0E0BCE3E0EBF3E102C005900D92AE30AE -:1000C000B107D9F72CE3AEE0BCE301C01D92A43721 -:1000D000B207E1F710E0C1E5D0E003C02197FE01CF -:1000E000C9D7C035D107D1F7B6D604C989CF90E0BA -:1000F000FC01E957FC4A20812F3F51F0825A9C4A6B -:10010000DC01EC91B0E2EB9FF0011124FC5F218354 -:10011000089580912D3C811117C010922E3C1092B1 -:100120002F3C1092303C1092313C1092323C109295 -:10013000333C1092343C1092353C1092363C109275 -:10014000373C81E080932D3C8091E3058C7F90913A -:100150002C3C892B8093E305911117C084E0C7DF05 -:1001600086E0C5DF8091C10884608093C1088091DA -:10017000C00881628093C0089091673C8091683C80 -:100180009093C0088093C1080895913021F48EE0C7 -:10019000AEDF80E1E6CF923029F78EE1A8DF80E282 -:1001A000E0CF00008093C4088091C30887FFFCCF94 -:1001B0008091C4080895282F30E0F901E957FC4ADE -:1001C00040814F3F09F450C0893258F4F901EC5F87 -:1001D000FC4AE081EE2329F0E13099F010F0E6309E -:1001E00020F1F901E25AFC4AE081A0E2EA9FF00125 -:1001F0001124FC5F8081842321F1611120C046839A -:100200000895F901EB5CFC4A5081533008F05F5FC0 -:100210007091010A81E090E001C0880F5A95EAF7D9 -:10022000809587238093010ADCCF80E1E89FF0016D -:100230001124E05AF54F81818F7E8183D2CF45838F -:1002400008952B5C3C4AD9018C91309771F08F3F17 -:1002500061F07096E80FF11D9FB7F89480816111ED -:1002600007C0877F80839FBF0895F0E0E0E0F4CF70 -:100270008860F8CF8FB7F8942091103C3091113CF2 -:100280004091123C5091133CE091AA0AF091AB0AC4 -:100290009091A60A90FF08C02F5F3F4F4F4F5F4FCE -:1002A000E091AA0AF091AB0A8FBFA8EEB3E0AFD6F7 -:1002B00023E0F695E7952A95E1F76E0F7F1F811DE4 -:1002C000911D0895CF92DF92EF92FF92D3DF6B01E1 -:1002D0007C0120E1C20E27E2D21EE11CF11C80E16C -:1002E000C81687E2D806E104F10430F4C3DFC6166D -:1002F000D706E806F906D0F3BDDF6C157D058E053F -:100300009F05D0F3FF90EF90DF90CF9008958F92EC -:100310009F92AF92BF92CF92DF92EF92FF920F9394 -:10032000CF93DF93FC018081893210F461E043DFD9 -:1003300080912E3C882319F081FF0DC07894DF91C5 -:10034000CF910F91FF90EF90DF90CF90BF90AF9043 -:100350009F908F90089580FFF2CF8090303C9090D6 -:10036000313CA090323CB090333CC12CD12C760172 -:10037000E0E09401A501B601C701A0E06FD681F1CC -:10038000217030E040E050E060E070E080E090E01C -:1003900065D6D1F0B0E0A0E0E03370F4AE2FA695C2 -:1003A000A695A695F0E2AF9FD0011124A05FBB4FA8 -:1003B0008E2F8770A80FB11DCE2FD0E0C85DD34C13 -:1003C00088899C91892B8C939401A501B601C70162 -:1003D00001E029D649015A016B017C01EF5FC9CFC9 -:1003E0008090343C9090353CA090363CB090373CA7 -:1003F000C12CD12C7601E0E29401A501B601C70120 -:10040000A0E02CD609F49BCF217030E040E050E012 -:1004100060E070E080E090E021D6D1F0B0E0A0E0B4 -:10042000E03370F4AE2FA695A695A69580E2A89F1E -:10043000D0011124A05FBB4F8E2F8770A80FB11D74 -:10044000CE2FD0E0C85DD34C88899C91892B8C93AA -:100450009401A501B601C70101E0E5D549015A01A2 -:100460006B017C01EF5FC8CFE0E0F1E14481968150 -:10047000308522858485990F911D990F9427330F1C -:10048000311D330F311D9327229520FB279527F926 -:100490009227829589270895E0E0F1E143819581D3 -:1004A000378121858385990F911D990F9427330FEB -:1004B000311D330F311D9327229520FB279527F9F6 -:1004C0009227829589270895CF92DF92EF92FF922B -:1004D000CF93DF9361E085E16EDEC090183CD09051 -:1004E000193CE0901A3CF0901B3CC7019F7080358E -:1004F000910571F5A60180E0C0E0DCE398819817D2 -:1005000038F129813A81232B31F42B813C81232B33 -:1005100011F449835A8329813A8142175307F9F02C -:100520002D813E812115310519F08F5FE901E6CF5C -:1005300087E090E0B1D5FC0182E3808313821482CE -:1005400015821682C182D282ED83FE83309741F4F8 -:10055000DF91CF91FF90EF90DF90CF900895FE0153 -:10056000438154812091203C2150330B81E090E065 -:1005700002C0880F991F2A95E2F72091213C22237F -:1005800029F0842B952B83839483E2CF80959095DB -:1005900084239523F8CF6F927F928F929F92AF9290 -:1005A000BF92CF92DF92EF92FF920F93CF93DF93A0 -:1005B0003C0180912E3C882319F081FF1BC0F894E8 -:1005C00081E38093C00884E08093C108F3018081B7 -:1005D000893208F09CC060E0DF91CF910F91FF90CD +:1000000050C0000068C0000066C0000064C000006E +:1000100062C0000060C000005EC000005CC0000064 +:100020005AC0000058C0000056C0000054C0000074 +:1000300052C0000050C000004EC000004CC0000084 +:100040004AC0000048C0000046C0000044C0000094 +:1000500042C0000040C000003EC000003CC00000A4 +:100060003AC0000072C5000036C0000034C0000075 +:1000700032C0000030C000002EC000002CC00000C4 +:100080002AC0000028C0000026C0000024C00000D4 +:1000900022C0000020C000001EC000001CC00000E4 +:1000A000DB0511241FBECFEFCDBFDFE3DEBF2CE3A6 +:1000B000A0E0BCE301C01D92A838B207E1F710E050 +:1000C000C1E5D0E003C02197FE011BD7C035D107A1 +:1000D000D1F78BD531C794CF90E0FC01EE52F04BB5 +:1000E00020812F3F51F08755904BDC01EC91B0E21D +:1000F000EB9FF0011124FC5F218308958091433C24 +:10010000811117C01092443C1092453C1092463C1D +:100110001092473C1092483C1092493C10924A3C45 +:1001200010924B3C10924C3C10924D3C81E08093DD +:10013000433C8091E3058C7F9091423C892B8093D6 +:10014000E305911117C084E0C7DF86E0C5DF809129 +:10015000C10884608093C1088091C0088162809347 +:10016000C00890917D3C80917E3C9093C008809324 +:10017000C1080895913021F48EE0AEDF80E1E6CF32 +:10018000923029F78EE1A8DF80E2E0CF0000809373 +:10019000C4088091C30887FFFCCF8091C4080895EC +:1001A000282F30E0F901EE52F04B40814F3F09F427 +:1001B00050C0893258F4F901E95AF04BE081EE233E +:1001C00029F0E13099F010F0E63020F1F901E7551F +:1001D000F04BE081A0E2EA9FF0011124FC5F8081F6 +:1001E000842321F1611120C046830895F901E0586C +:1001F000F04B5081533008F05F5F7091010A81E04D +:1002000090E001C0880F5A95EAF780958723809384 +:10021000010ADCCF80E1E89FF0011124E05AF54F9C +:1002200081818F7E8183D2CF458308952058304BC2 +:10023000D9018C91309771F08F3F61F07096E80F83 +:10024000F11D9FB7F8948081611107C0877F80837B +:100250009FBF0895F0E0E0E0F4CF8860F8CF8FB75B +:10026000F8942091103C3091113C4091123C5091F7 +:10027000133CE091AA0AF091AB0A9091A60A90FF74 +:1002800008C02F5F3F4F4F4F5F4FE091AA0AF09198 +:10029000AB0A8FBFA8EEB3E001D623E0F695E79551 +:1002A0002A95E1F76E0F7F1F811D911D08958F9292 +:1002B0009F92AF92BF92CF92DF92EF92FF924B014B +:1002C0005C01CDDF6B017C01A8EEB3E0A5019401D8 +:1002D000E5D5C60ED71EE81EF91EC616D706E806D7 +:1002E000F90610F4BCDFF9CFBADF6C157D058E0579 +:1002F0009F05D0F3FF90EF90DF90CF90BF90AF902D +:100300009F908F9008958F929F92AF92BF92CF92BD +:10031000DF92EF92FF920F93CF93DF93FC018081E6 +:10032000893210F461E03CDF8091443C882319F06D +:1003300081FF0DC07894DF91CF910F91FF90EF90E6 +:10034000DF90CF90BF90AF909F908F90089580FFE7 +:10035000F2CF8090463C9090473CA090483CB090B3 +:10036000493CC12CD12C7601E0E09401A501B601F5 +:10037000C701A0E0BAD581F1217030E040E050E043 +:1003800060E070E080E090E0B0D5D1F0B0E0A0E0B7 +:10039000E03370F4AE2FA695A695A695F0E2AF9F38 +:1003A000D0011124A05FBB4F8E2F8770A80FB11D05 +:1003B000CE2FD0E0C25CD34C88899C91892B8C9342 +:1003C0009401A501B601C70101E074D549015A01A4 +:1003D0006B017C01EF5FC9CF80904A3C90904B3C11 +:1003E000A0904C3CB0904D3CC12CD12C7601E0E269 +:1003F0009401A501B601C701A0E077D509F49BCF10 +:10040000217030E040E050E060E070E080E090E09B +:100410006CD5D1F0B0E0A0E0E03370F4AE2FA6953B +:10042000A695A69580E2A89FD0011124A05FBB4F9E +:100430008E2F8770A80FB11DCE2FD0E0C25CD34C99 +:1004400088899C91892B8C939401A501B601C701E1 +:1004500001E030D549015A016B017C01EF5FC8CF43 +:100460006F927F928F929F92AF92BF92CF92DF92C4 +:10047000EF92FF920F93CF93DF933C018091443C26 +:10048000882319F081FF1BC0F89481E38093C00892 +:1004900084E08093C108F3018081893208F09CC018 +:1004A00060E0DF91CF910F91FF90EF90DF90CF90C0 +:1004B000BF90AF909F908F907F906F9071CE80FF94 +:1004C000E4CF8090463C9090473CA090483CB09050 +:1004D000493CC12CD12C7601B0E09401A501B601B4 +:1004E000C701A0E002D591F1217030E040E050E07A +:1004F00060E070E080E090E0F8D4E1F0D0E0C0E0AF +:10050000B03370F4CB2FC695C695C69580E2C89FD0 +:10051000E0011124C05FDB4F8B2F8770C80FD11D06 +:100520008B2F90E02881825C934CFC01208B88818A +:10053000887F88839401A501B601C70101E0BAD480 +:1005400049015A016B017C01BF5FC7CF80904A3CD3 +:1005500090904B3CA0904C3CB0904D3CC12CD12C89 +:100560007601B0E29401A501B601C701A0E0BDD4B7 +:1005700009F48BCF217030E040E050E060E070E0A3 +:1005800080E090E0B2D4E1F0D0E0C0E0B03370F4AD +:10059000CB2FC695C695C695F0E2CF9FE0011124FA +:1005A000C05FDB4F8B2F8770C80FD11D8B2F90E062 +:1005B0002881825C934CFC01208B8881887F888312 +:1005C0009401A501B601C70101E074D449015A01A3 +:1005D0006B017C01BF5FC6CFDF91CF910F91FF9080 :1005E000EF90DF90CF90BF90AF909F908F907F90D3 -:1005F0006F90E1CD80FFE4CF8090303C9090313C13 -:10060000A090323CB090333CC12CD12C7601B0E0AC -:100610009401A501B601C701A0E020D591F1217098 -:1006200030E040E050E060E070E080E090E016D51F -:10063000E1F0D0E0C0E0B03370F4CB2FC695C695A2 -:10064000C69580E2C89FE0011124C05FDB4F8B2F6D -:100650008770C80FD11D8B2F90E02881885D934C47 -:10066000FC01208B8881887F88839401A501B601D5 -:10067000C70101E0D8D449015A016B017C01BF5F79 -:10068000C7CF8090343C9090353CA090363CB090E1 -:10069000373CC12CD12C7601B0E29401A501B60102 -:1006A000C701A0E0DBD409F48BCF217030E040E03B -:1006B00050E060E070E080E090E0D0D4E1F0D0E085 -:1006C000C0E0B03370F4CB2FC695C695C695F0E266 -:1006D000CF9FE0011124C05FDB4F8B2F8770C80FC5 -:1006E000D11D8B2F90E02881885D934CFC01208BDD -:1006F0008881887F88839401A501B601C70101E044 -:1007000092D449015A016B017C01BF5FC6CFDF91D2 -:10071000CF910F91FF90EF90DF90CF90BF90AF906F -:100720009F908F907F906F900895FF920F931F93EB -:10073000CF93DF93EC01F62E042F122F2CDF85E0F0 -:1007400030DD8F2D2EDD802F2CDD812F2ADDCE0197 -:10075000DF91CF911F910F91FF90D9CDDF92EF9252 -:10076000FF920F931F93CF93DF937C01C62FD42E5C -:10077000152F022F10DF82E014DD8C2F12DDCD2D1E -:10078000D12F0C0F1D2F111DC017D10719F0899102 -:1007900008DDFACFC701DF91CF911F910F91FF9034 -:1007A000EF90DF90B4CD0F931F93CF93DF93EC01C5 -:1007B000062F142FF0DE82E0F4DC802FF2DC812F94 -:1007C000F0DCCE01DF91CF911F910F91A0CDDF9290 -:1007D000EF92FF920F931F93CF93DF937C01C62F6D -:1007E000D42E152F022FD7DE83E0DBDC8C2FD9DC53 -:1007F000CD2DD12F0C0F1D2F111DC017D10721F0AA -:1008000080E0CFDC8993F9CFC701DF91CF911F91B1 -:100810000F91FF90EF90DF907ACD1F93CF93DF93EE -:10082000EC01162FB8DE83E0BCDC812FBADC80E05F -:10083000B8DC182FCE016BDD812FDF91CF911F9196 -:1008400008954F925F926F927F928F929F92AF9294 -:10085000BF92CF92DF92EF92FF921F93CF93DF93DD -:10086000CDB7DEB72D97CDBFDEBF10911C3C193040 -:1008700008F061C04091183C5091193C60911A3CBD -:1008800070911B3C6A017B01CC24F7FCC394DD24EE -:10089000EE24FF244A015B0188249924AA2420E441 -:1008A000B22244244A94542C642CBFE17B2EC11004 -:1008B00006C044244A94A7E05A2E612C712C44218E -:1008C000552166217721CC20C9F14C835B83AB0194 -:1008D00066277727242F23702860342F330F330F98 -:1008E000330F307E232B2A83F5E056954795FA95F2 -:1008F000E1F74983212F89288A288B2809F0206471 -:100900007C012D83412F50E060E27CE3CE0106960E -:10091000E8D425E0210FAE014F5F5F4F61E4C701CE -:100920001DDF28E048E060E4C701FFDE60E4C701A6 -:1009300074DF807789F084E090E010C09A0153E082 -:10094000369527955A95E1F729834295440F407EC5 -:100950004A831C821B82CECF90E080E02D96CDBFD3 -:10096000DEBFDF91CF911F91FF90EF90DF90CF908E -:10097000BF90AF909F908F907F906F905F904F90BF -:1009800008950F931F93CF93DF938C01C8E1DCE3AD -:100990008091143C9091153CB0E0A0E0AF6FBF682F -:1009A00088839983AA83BB8386E08C8393E09887AE -:1009B00019868A871B8658DD8C876EDD8D87C80176 -:1009C000DF91CF911F910F913CCF9F92AF92BF9239 -:1009D000CF92DF92EF92FF920F931F93CF93DF930B -:1009E000CDB7DEB72597CDBFDEBF5C018B01000F11 -:1009F000111F000F111FF801E35DFC4A25E0AE0155 -:100A00004F5F5F4F6181E3DE8A81C98098E0C99EB4 -:100A100060011124282F30E055E0359527955A952F -:100A2000E1F7C20ED31E0D2C000CEE08FF0883FF69 -:100A300020C092E0CC0CDD1CEE1CFF1C9A95D1F777 -:100A40008370C80ED11CE11CF11CFE2CED2CDC2C9B -:100A5000CC248B81C80ED11CE11CF11CFE2CED2C8A -:100A6000DC2CCC248C81C80ED11CE11CF11C6894B8 -:100A7000F7F88D818F70982EE8E081E090E0E9151D -:100A800028F1F801E35DFC4A6081C501C6DE83FF01 -:100A900002C06894F6F8C092183CD092193CE092DB -:100AA0001A3CF0921B3C90921C3C035D1C4A292D81 -:100AB00040E25CE3F8016281C50189DE20E0F801D3 -:100AC00043816CE2C50131DE90E080E02596CDBF28 -:100AD000DEBFDF91CF911F910F91FF90EF90DF90DC -:100AE000CF90BF90AF909F9008951F93CF93DF93C7 -:100AF000EC0151DD80EA55DB80E053DB182FCE019D -:100B000006DC70E060E010FD04C011FF07C061E08A -:100B100070E0CE01DF91CF911F9157CF85E090E03B -:100B2000DF91CF911F910895CF92DF92EF92FF92C4 -:100B30001F93CF93DF93EC01162F262F40EE6FE02B -:100B4000F4DD8FB7F894C090103CD090113CE09049 -:100B5000123CF090133C8FBF8AE0C80ED11CE11C00 -:100B6000F11C2FB7F8948091103C9091113CA0910A -:100B7000123CB091133C2FBF8C159D05AE05BF05EF -:100B800090F46EE0CE0149DE807E1813EACF81E05A -:100B900091E0892790E0DF91CF911F91FF90EF9036 -:100BA000DF90CF90089580E0F3CF0F931F93CF9302 -:100BB000DF93EC0160E8B8DF8C01892B61F440E041 -:100BC0006AE2CE01F0DD40E969E2CE01ECDD42E807 -:100BD00068E2CE01E8DDC801DF91CF911F910F914E -:100BE000089560E0A1CF7F928F929F92AF92BF92C3 -:100BF000CF92DF92EF92FF920F931F93CF93DF93E9 -:100C0000CDB7DEB7A297CDBFDEBF8C01C4DC80ECD0 -:100C1000C8DAC8017CDB56DBCE0101967C018EE090 -:100C2000F70111928A95E9F72EE0A70160E3C80168 -:100C300095DD2EE0A70160E4C80190DD2EE0A7015C -:100C400060E5C8018BDD40E060E6C801ACDD40E056 -:100C500060E7C801A8DD43EA6BE2C801A4DD24E037 -:100C600047E660E6C80161DD21E047E660E7C801CC -:100C70005CDD8CE0E8EFF2E5DE011F9601900D925D -:100C80008A95E1F74E01FFE08F0E911CB12CA12C4B -:100C900028E0722EF401E190F1904F0160E8C80164 -:100CA00043DF6C01892B09F065C0F2E0EF16F10417 -:100CB00009F472C058F4E114F10409F473C0EA9421 -:100CC000EF2889F0CC24C394D12C54C0E4E0EE1674 -:100CD000F10409F465C008F461C085E0E816F10488 -:100CE00089F768E101C064E091E0A916B10409F058 -:100CF0005BC01E8E1D8E7C8E1B8E24E0AE01455E79 -:100D00005F4FC8012BDDEFEFAE1ABE0AF6E0AF165B -:100D1000B10409F0BFCF1F8E18A281E090E089A333 -:100D20009AA37E018FE1E80EF11C4E0193E2890E39 -:100D3000911C98E0792EF701A190B1907F0160E8B5 -:100D4000C801F2DE6C01892BA9F41E8E1D8E7C8EEB -:100D50001B8EA114B10469F1AA94AB2809F0B2CF9B -:100D600064E224E0AE01455E5F4FC801F7DC8E14FB -:100D70009F0409F7C601A296CDBFDEBFDF91CF91D8 -:100D80001F910F91FF90EF90DF90CF90BF90AF90A9 -:100D90009F908F907F90089568E0A6CF60E1A4CFE8 -:100DA00064E1A2CF60E0A0CF1B8E1C8E1E8E1D8E34 -:100DB000A4CF60E2D6CF1F920F920FB60F921124EC -:100DC0008F939F93AF93BF938091103C9091113C70 -:100DD000A091123CB091133C0196A11DB11D8093CE -:100DE000103C9093113CA093123CB093133C81E0D3 -:100DF0008093A60ABF91AF919F918F910F900FBEE4 -:100E00000F901F9018951F93CF93DF93EC01162F2F -:100E100080D91883812F6BD9CE01DF91CF911F919B -:100E200076CAE7E6FCE384E0818381E38083E8E23D -:100E3000FCE31582148262E08CE69CE3E4DF63E06D -:100E40008BE69CE3E0DF68E08AE69CE3DCDF69E0B8 -:100E500089E69CE3D8CF91E088ED84BF9093610050 -:100E60008091020685608093020680910006816071 -:100E700080930006809102068F7C80658093020635 -:100E80001092E20582E08093E4059093030A8EEFCE -:100E90008093270A8093260A80E880932D0A809306 -:100EA0002B0A8093290A80932C0A80932A0A809324 -:100EB000280A89E08093000A87E08093E505E0E84E -:100EC000FAE037E02EEF90E885E0318324879587BC -:100ED00080837096E03C4AE0F407B9F71092A10ACB -:100EE0008FE39FE18093AC0A9093AD0A8091A50AAD -:100EF00081608093A50A1092A00A8091A00A816067 -:100F00008093A00A789405D980916000806890E071 -:100F100028ED24BF809360008CE69CE364DE8CE6C1 -:100F20009CE343DE8CE69CE35CDE8BE69CE35BDECD -:100F30008BE69CE33ADE8BE69CE353DE8AE69CE399 -:100F400052DE8AE69CE331DE8AE69CE34ADE89E6ED -:100F50009CE349DE89E69CE328DE89E69CE341DEEA -:100F600083DAC82F99DA9C2F8093143C9093153C18 -:100F70008CE69CE306DD8BE69CE303DD8AE69CE3DE -:100F800000DD89E69CE3FDDCC0E0D0E08CE69CE37C -:100F9000ACDD892B51F48BE69CE353DC8AE69CE3C1 -:100FA00050DC89E69CE34DDC8FDA8BE69CE39DDD2B -:100FB000892B51F48CE69CE344DC8AE69CE341DC1B -:100FC00089E69CE33EDC80DA8AE69CE38EDD892BB1 -:100FD00051F48CE69CE335DC8BE69CE332DC89E65D -:100FE0009CE32FDC71DA89E69CE37FDD892B51F4E9 -:100FF0008CE69CE326DC8BE69CE323DC8AE69CE320 -:1010000020DC62DA5FD9209709F2FAD7BFCF38D057 -:10101000A59F900DB49F900DA49F800D911D11244C -:10102000089597FD1094002E083098F00850232F53 -:10103000342F452F562F672F782F892F912DF4CFDE -:101040001594979587957795679557954795379513 -:1010500027950A95AAF71124002D08950024A7FDCD -:1010600000942A173005400550056005700580057D -:1010700090050895EE0FFF1F0590F491E02D09945F -:10108000A29FB001B39FC001A39F01D0B29F700D7A -:10109000811D1124911D08950F931F93CF93DF930A -:1010A0008230910510F482E090E0E091723CF09182 -:1010B000733C30E020E0B0E0A0E0309799F42115D7 -:1010C000310509F44AC0281B390B24303105D8F505 -:1010D0008A819B816115710589F1FB01828393836C -:1010E000FE0111C0408151810281138148175907C7 -:1010F000E0F04817590799F4109761F012960C9395 -:10110000129713961C933296CF01DF91CF911F91C6 -:101110000F9108950093723C1093733CF4CF211506 -:10112000310551F04217530738F0A901DB019A014C -:10113000BD01DF01F801C1CFEF01F9CF8093723C0F -:101140009093733CCDCFFE01E20FF31F81939193F7 -:101150002250310928833983D7CF2091703C3091B8 -:10116000713C232B41F42091093C30910A3C20939F -:10117000703C3093713C2091073C3091083C211524 -:10118000310541F42DB73EB740910B3C50910C3CDA -:10119000241B350BE091703CF091713CE217F30792 -:1011A000A0F42E1B3F0B2817390778F0AC014E5FD7 -:1011B0005F4F2417350748F04E0F5F1F4093703C78 -:1011C0005093713C819391939FCFF0E0E0E09CCFEE -:1011D000CF93DF930097E9F0FC01329712821382DC -:1011E000A091723CB091733CED0130E020E010978B -:1011F000A1F420813181820F931F2091703C3091A6 -:10120000713C2817390709F061C0E093703CF093F6 -:10121000713CDF91CF910895EA01CE17DF07E8F521 -:101220004A815B819E0141155105B1F7E901EA83CD -:10123000FB8349915991C40FD51FEC17FD0761F449 -:10124000808191810296840F951FE901888399839B -:10125000828193818A839B83F0E0E0E012968D91F6 -:101260009C9113970097B9F52D913C911197CD0161 -:101270000296820F931F2091703C3091713C281789 -:10128000390739F6309751F51092723C1092733C41 -:10129000A093703CB093713CBCCFC283D383408198 -:1012A0005181840F951FC817D90761F44E5F5F4FB6 -:1012B00088819981480F591F408351838A819B817E -:1012C000828393832115310509F0B0CFE093723CFE -:1012D000F093733C9ECFFD01DC01C0CF12821382DC -:1012E000D7CFFB01DC0102C001900D92415050406C -:0812F000D8F70895F894FFCF30 -:1012F80000000100020003000400050000000000D7 -:1013080000000000000000000005010101010101CA -:1013180000000000000000000000000000000000C5 -:10132800000002030060616601707176020001022C -:101338000304050607000102030405000102030473 -:101348000506070001020304050607000102030061 -:10135800010203040506000000000000000001016E -:101368000101010102020202020202020303030355 -:101378000303030304040404050505050505050125 -:101388000204081020408001020408102001020411 -:101398000810204080010204081020408001020447 -:0813A8000801020408102040B6 -:0E13B000320000000000000000743C800000CD +:1005F0006F900895FF920F931F93CF93DF93EC01B9 +:10060000F62E042F122F2CDF85E0C0DD8F2DBEDDEE +:10061000802FBCDD812FBADDCE01DF91CF911F91FC +:100620000F91FF9070CEDF92EF92FF920F931F9386 +:10063000CF93DF937C01C62FD42E152F022F10DF0E +:1006400082E0A4DD8C2FA2DDCD2DD12F0C0F1D2F2C +:10065000111DC017D10719F0899198DDFACFC70194 +:10066000DF91CF911F910F91FF90EF90DF904BCED4 +:100670000F931F93CF93DF93EC01062F142FF0DE1F +:1006800082E084DD802F82DD812F80DDCE01DF914D +:10069000CF911F910F9137CE1F93CF93DF93EC0132 +:1006A000162FDEDE83E072DD812F70DD80E06EDDEF +:1006B000182FCE0128DE812FDF91CF911F91089551 +:1006C000CF92DF92EF92FF921F93CF93DF93EC01D3 +:1006D000162F262F40EE6FE08DDF8FB7F894C09075 +:1006E000103CD090113CE090123CF090133C8FBF36 +:1006F0008AE0C80ED11CE11CF11C2FB7F894809140 +:10070000103C9091113CA091123CB091133C2FBF32 +:100710008C159D05AE05BF0590F46EE0CE01BCDFE3 +:10072000807E1813EACF81E091E0892790E0DF9185 +:10073000CF911F91FF90EF90DF90CF90089580E0D0 +:10074000F3CF0F931F93CF93DF93EC0160E8B8DFF3 +:100750008C01892B61F440E06AE2CE0189DF40E937 +:1007600069E2CE0185DF42E868E2CE0181DFC8019F +:10077000DF91CF911F910F91089560E0A1CF7F92FB +:100780008F929F92AF92BF92CF92DF92EF92FF92A1 +:100790000F931F93CF93DF93CDB7DEB7A297CDBF53 +:1007A000DEBF8C015DDE80ECF1DCC801ACDD6AE00F +:1007B00070E080E090E07BDDCE0101967C018EE070 +:1007C000F70111928A95E9F72EE0A70160E3C801CD +:1007D0002ADF2EE0A70160E4C80125DF2EE0A70193 +:1007E00060E5C80120DF40E060E6C80141DF40E08D +:1007F00060E7C8013DDF43EA6BE2C80139DF24E06E +:1008000047E660E6C801F6DE21E047E660E7C8019A +:10081000F1DE8CE0ECE3FFE4DE011F9601900D9227 +:100820008A95E1F74E01FFE08F0E911CB12CA12CAF +:1008300028E0722EF401E190F1904F0160E8C801C8 +:100840003FDF6C01892B09F065C0F2E0EF16F1047F +:1008500009F472C058F4E114F10409F473C0EA9485 +:10086000EF2889F0CC24C394D12C54C0E4E0EE16D8 +:10087000F10409F465C008F461C085E0E816F104EC +:1008800089F768E101C064E091E0A916B10409F0BC +:100890005BC01E8E1D8E7C8E1B8E24E0AE01455EDD +:1008A0005F4FC801C0DEEFEFAE1ABE0AF6E0AF162A +:1008B000B10409F0BFCF1F8E18A281E090E089A398 +:1008C0009AA37E018FE1E80EF11C4E0193E2890E9E +:1008D000911C98E0792EF701A190B1907F0160E81A +:1008E000C801EEDE6C01892BA9F41E8E1D8E7C8E54 +:1008F0001B8EA114B10469F1AA94AB2809F0B2CF00 +:1009000064E224E0AE01455E5F4FC8018CDE8E14C8 +:100910009F0409F7C601A296CDBFDEBFDF91CF913C +:100920001F910F91FF90EF90DF90CF90BF90AF900D +:100930009F908F907F90089568E0A6CF60E1A4CF4C +:1009400064E1A2CF60E0A0CF1B8E1C8E1E8E1D8E98 +:10095000A4CF60E2D6CF2F923F924F925F926F92D8 +:100960007F928F929F92AF92BF92CF92DF92EF923F +:10097000FF920F931F93CF93DF93CDB7DEB76397AB +:10098000CDBFDEBF7C018091143C9091153C092EB7 +:10099000000CAA0BBB0BAF6FBF688093003C909319 +:1009A000013CA093023CB093033C84E08093043C60 +:1009B00083E08093083C81E08093093C86E080934B +:1009C0000A3C10920B3C4BE0942E5E0184E1A80E91 +:1009D000B11C8091043C893008F08BC086E0E8E4CB +:1009E000FFE4DE011E9601900D928A95E1F73E012B +:1009F000EEE06E0E711CF301C190D1903F018601B3 +:100A0000000F111FF801EC0DFD1DE25BF04B808023 +:100A1000682DC70141DE83FD93C07090043CF8E06F +:100A2000F71508F466C08091003C9091013CA091BC +:100A3000023CB091033CAC01BD01442777FD4395D6 +:100A4000552766277727242FAC01BD01442755275A +:100A50006627707422242A94322C422CFFE15F2EE8 +:100A6000211106C022242A94E7E03E2E412C512C6D +:100A700082219321A421B521222309F453C08C8320 +:100A80009B83CD01AA27BB27282F220F220F220FDD +:100A9000207E382F33703860232B2A8335E09695DB +:100AA00087953A95E1F78983872D452B462B472B70 +:100AB00009F080648D83472D50E068E07CE3CE012F +:100AC000069631D225E0270D0C0D1D1DF801E25BC5 +:100AD000F04BAE014F5F5F4F6181C701A4DD28E09D +:100AE00048E0682DC70186DD682DC701D5DD807718 +:100AF00019F09A9491106DCF6396CDBFDEBFDF9150 +:100B0000CF911F910F91FF90EF90DF90CF90BF900A +:100B1000AF909F908F907F906F905F904F903F909D +:100B20002F9008959C0193E0369527959A95E1F7CB +:100B300029838295880F807E8A831C821B82B4CF92 +:100B40006A147B0409F057CFD4CF1F920F920FB6CF +:100B50000F9211248F939F93AF93BF938091103C7A +:100B60009091113CA091123CB091133C0196A11DB3 +:100B7000B11D8093103C9093113CA093123CB09314 +:100B8000133C81E08093A60ABF91AF919F918F9112 +:100B90000F900FBE0F901F9018951F93CF93DF9368 +:100BA000EC01162FABDA1883812F96DACE01DF9194 +:100BB000CF911F91A8CBEDE7FCE384E0818381E333 +:100BC0008083EEE3FCE31582148262E082E89CE31A +:100BD000E4DF63E081E89CE3E0DF68E080E89CE339 +:100BE000DCDF69E08FE79CE3D8CF91E088ED84BF3C +:100BF0009093610080910206856080930206809147 +:100C00000006816080930006809102068F7C8065DB +:100C1000809302061092E20582E08093E4059093AF +:100C2000030A8EEF8093270A8093260A80E8809338 +:100C30002D0A80932B0A8093290A80932C0A809393 +:100C40002A0A8093280A89E08093000A87E080932B +:100C5000E505E0E8FAE0C7E09EEF80E8D5E0C18373 +:100C600094878587D0837096E03C2AE0F207B9F735 +:100C70001092A10A8FE39FE18093AC0A9093AD0A92 +:100C80008091A50A81608093A50A1092A00A8091A4 +:100C9000A00A81608093A00A789430DA6AE070E05C +:100CA00080E090E004DB85E190E08093163C909337 +:100CB000173C81E08093183C8093193C80931A3C48 +:100CC00024E130E020931B3C30931C3C80931D3C7E +:100CD00080931E3C92E090931F3C23E130E02093F0 +:100CE000203C3093213C8093223C8093233C93E032 +:100CF0009093243C22E130E02093253C3093263C25 +:100D00008093273C8093283C94E09093293C21E1F8 +:100D100030E020932A3C30932B3C80932C3C8093F2 +:100D20002D3CD0932E3C20E130E020932F3C30939B +:100D3000303C8093313C8093323C96E09093333C3E +:100D40002FE030E02093343C3093353C8093363CA8 +:100D50008093373CC093383C2EE030E02093393C00 +:100D600030933A3C80933B3C80933C3C88E08093BA +:100D70003D3C80916000806890E028ED24BF809326 +:100D8000600082E89CE3FBDC82E89CE3DADC82E83A +:100D90009CE3F3DC81E89CE3F2DC81E89CE3D1DCBA +:100DA00081E89CE3EADC80E89CE3E9DC80E89CE302 +:100DB000C8DC80E89CE3E1DC8FE79CE3E0DC8FE7C4 +:100DC0009CE3BFDC8FE79CE3D8DCC6E1DCE38EE389 +:100DD000E82E8CE3F82EEC16FD0651F0188119323E +:100DE00028F4812F79D960E0812FDAD92596F3CFC5 +:100DF000F0910411809106117091081160910A110F +:100E000090910C11E091031120910511509107115F +:100E10004091091130910B11880F811D880F8F2788 +:100E2000770F711D770F711D8727629560FB67959E +:100E300067F9862792959827822F880F811D880F42 +:100E40008E27252F220F211D220F211D8227242FBF +:100E5000229520FB279527F98227232F2295822789 +:100E60008093143C9093153C82E89CE374DD81E808 +:100E70009CE371DD80E89CE36EDD8FE79CE36BDD36 +:100E8000C0E0D0E082E89CE366DD68EE73E080E0DD +:100E900090E00DDA2097B1F3B3D8F4CF38D0A59F06 +:100EA000900DB49F900DA49F800D911D1124089565 +:100EB00097FD1094002E083098F00850232F342FFF +:100EC000452F562F672F782F892F912DF4CF15940A +:100ED0009795879577956795579547953795279572 +:100EE0000A95AAF71124002D08950024A7FD009467 +:100EF0002A173005400550056005700580059005EE +:100F00000895EE0FFF1F0590F491E02D0994A29F24 +:100F1000B001B39FC001A39F01D0B29F700D811D8E +:100F20001124911D0895FB01DC0102C001900D9276 +:0C0F300041505040D8F70895F894FFCFCE +:100F3C000000010002000300040005000000010095 +:100F4C00020030313640414650515600000000003E +:100F5C00000000000000000005010101010101007A +:100F6C000000000000000000000000000000000075 +:100F7C00000203000001020304050607000102033E +:100F8C000405000102030405060700010203040521 +:100F9C00060700010203000102030405060000001D +:100FAC000000000000010101010101020202020225 +:100FBC0002020203030303030303030404040405F2 +:100FCC0005050505050501020408102040800102F5 +:100FDC0004081020010204081020408001020408BB +:0F0FEC0010204080010204080102040810204078 :00000001FF diff --git a/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.lst b/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.lst index 9a3382d..fd8f337 100644 --- a/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.lst +++ b/Software/Switch/Swtich/Swtich.ino_atmega809_8000000L.lst @@ -1,5 +1,5 @@ -C:\Users\Martin\AppData\Local\Temp\arduino_build_93758/Swtich.ino.elf: file format elf32-avr +C:\Users\Martin\AppData\Local\Temp\arduino_build_427645/Swtich.ino.elf: file format elf32-avr Disassembly of section .text: @@ -7,227 +7,202 @@ Disassembly of section .text: 00000000 <__vectors>: __vectors(): ../../../../../crt1/gcrt1.S:61 - 0: 50 c0 rjmp .+160 ; 0xa2 <__ctors_end> - 2: 00 00 nop + 0: 50 c0 rjmp .+160 ; 0xa2 <__ctors_end> + 2: 00 00 nop ../../../../../crt1/gcrt1.S:67 - 4: 73 c0 rjmp .+230 ; 0xec <__bad_interrupt> - 6: 00 00 nop + 4: 68 c0 rjmp .+208 ; 0xd6 <__bad_interrupt> + 6: 00 00 nop ../../../../../crt1/gcrt1.S:68 - 8: 71 c0 rjmp .+226 ; 0xec <__bad_interrupt> - a: 00 00 nop + 8: 66 c0 rjmp .+204 ; 0xd6 <__bad_interrupt> + a: 00 00 nop ../../../../../crt1/gcrt1.S:69 - c: 6f c0 rjmp .+222 ; 0xec <__bad_interrupt> - e: 00 00 nop + c: 64 c0 rjmp .+200 ; 0xd6 <__bad_interrupt> + e: 00 00 nop ../../../../../crt1/gcrt1.S:70 - 10: 6d c0 rjmp .+218 ; 0xec <__bad_interrupt> - 12: 00 00 nop + 10: 62 c0 rjmp .+196 ; 0xd6 <__bad_interrupt> + 12: 00 00 nop ../../../../../crt1/gcrt1.S:71 - 14: 6b c0 rjmp .+214 ; 0xec <__bad_interrupt> - 16: 00 00 nop + 14: 60 c0 rjmp .+192 ; 0xd6 <__bad_interrupt> + 16: 00 00 nop ../../../../../crt1/gcrt1.S:72 - 18: 69 c0 rjmp .+210 ; 0xec <__bad_interrupt> - 1a: 00 00 nop + 18: 5e c0 rjmp .+188 ; 0xd6 <__bad_interrupt> + 1a: 00 00 nop ../../../../../crt1/gcrt1.S:73 - 1c: 67 c0 rjmp .+206 ; 0xec <__bad_interrupt> - 1e: 00 00 nop + 1c: 5c c0 rjmp .+184 ; 0xd6 <__bad_interrupt> + 1e: 00 00 nop ../../../../../crt1/gcrt1.S:74 - 20: 65 c0 rjmp .+202 ; 0xec <__bad_interrupt> - 22: 00 00 nop + 20: 5a c0 rjmp .+180 ; 0xd6 <__bad_interrupt> + 22: 00 00 nop ../../../../../crt1/gcrt1.S:75 - 24: 63 c0 rjmp .+198 ; 0xec <__bad_interrupt> - 26: 00 00 nop + 24: 58 c0 rjmp .+176 ; 0xd6 <__bad_interrupt> + 26: 00 00 nop ../../../../../crt1/gcrt1.S:76 - 28: 61 c0 rjmp .+194 ; 0xec <__bad_interrupt> - 2a: 00 00 nop + 28: 56 c0 rjmp .+172 ; 0xd6 <__bad_interrupt> + 2a: 00 00 nop ../../../../../crt1/gcrt1.S:77 - 2c: 5f c0 rjmp .+190 ; 0xec <__bad_interrupt> - 2e: 00 00 nop + 2c: 54 c0 rjmp .+168 ; 0xd6 <__bad_interrupt> + 2e: 00 00 nop ../../../../../crt1/gcrt1.S:78 - 30: 5d c0 rjmp .+186 ; 0xec <__bad_interrupt> - 32: 00 00 nop + 30: 52 c0 rjmp .+164 ; 0xd6 <__bad_interrupt> + 32: 00 00 nop ../../../../../crt1/gcrt1.S:79 - 34: 5b c0 rjmp .+182 ; 0xec <__bad_interrupt> - 36: 00 00 nop + 34: 50 c0 rjmp .+160 ; 0xd6 <__bad_interrupt> + 36: 00 00 nop ../../../../../crt1/gcrt1.S:80 - 38: 59 c0 rjmp .+178 ; 0xec <__bad_interrupt> - 3a: 00 00 nop + 38: 4e c0 rjmp .+156 ; 0xd6 <__bad_interrupt> + 3a: 00 00 nop ../../../../../crt1/gcrt1.S:81 - 3c: 57 c0 rjmp .+174 ; 0xec <__bad_interrupt> - 3e: 00 00 nop + 3c: 4c c0 rjmp .+152 ; 0xd6 <__bad_interrupt> + 3e: 00 00 nop ../../../../../crt1/gcrt1.S:82 - 40: 55 c0 rjmp .+170 ; 0xec <__bad_interrupt> - 42: 00 00 nop + 40: 4a c0 rjmp .+148 ; 0xd6 <__bad_interrupt> + 42: 00 00 nop ../../../../../crt1/gcrt1.S:83 - 44: 53 c0 rjmp .+166 ; 0xec <__bad_interrupt> - 46: 00 00 nop + 44: 48 c0 rjmp .+144 ; 0xd6 <__bad_interrupt> + 46: 00 00 nop ../../../../../crt1/gcrt1.S:84 - 48: 51 c0 rjmp .+162 ; 0xec <__bad_interrupt> - 4a: 00 00 nop + 48: 46 c0 rjmp .+140 ; 0xd6 <__bad_interrupt> + 4a: 00 00 nop ../../../../../crt1/gcrt1.S:85 - 4c: 4f c0 rjmp .+158 ; 0xec <__bad_interrupt> - 4e: 00 00 nop + 4c: 44 c0 rjmp .+136 ; 0xd6 <__bad_interrupt> + 4e: 00 00 nop ../../../../../crt1/gcrt1.S:86 - 50: 4d c0 rjmp .+154 ; 0xec <__bad_interrupt> - 52: 00 00 nop + 50: 42 c0 rjmp .+132 ; 0xd6 <__bad_interrupt> + 52: 00 00 nop ../../../../../crt1/gcrt1.S:87 - 54: 4b c0 rjmp .+150 ; 0xec <__bad_interrupt> - 56: 00 00 nop + 54: 40 c0 rjmp .+128 ; 0xd6 <__bad_interrupt> + 56: 00 00 nop ../../../../../crt1/gcrt1.S:88 - 58: 49 c0 rjmp .+146 ; 0xec <__bad_interrupt> - 5a: 00 00 nop + 58: 3e c0 rjmp .+124 ; 0xd6 <__bad_interrupt> + 5a: 00 00 nop ../../../../../crt1/gcrt1.S:89 - 5c: 47 c0 rjmp .+142 ; 0xec <__bad_interrupt> - 5e: 00 00 nop + 5c: 3c c0 rjmp .+120 ; 0xd6 <__bad_interrupt> + 5e: 00 00 nop ../../../../../crt1/gcrt1.S:90 - 60: 45 c0 rjmp .+138 ; 0xec <__bad_interrupt> - 62: 00 00 nop + 60: 3a c0 rjmp .+116 ; 0xd6 <__bad_interrupt> + 62: 00 00 nop ../../../../../crt1/gcrt1.S:91 - 64: a8 c6 rjmp .+3408 ; 0xdb6 <__vector_25> - 66: 00 00 nop + 64: 72 c5 rjmp .+2788 ; 0xb4a <__vector_25> + 66: 00 00 nop ../../../../../crt1/gcrt1.S:92 - 68: 41 c0 rjmp .+130 ; 0xec <__bad_interrupt> - 6a: 00 00 nop + 68: 36 c0 rjmp .+108 ; 0xd6 <__bad_interrupt> + 6a: 00 00 nop ../../../../../crt1/gcrt1.S:93 - 6c: 3f c0 rjmp .+126 ; 0xec <__bad_interrupt> - 6e: 00 00 nop + 6c: 34 c0 rjmp .+104 ; 0xd6 <__bad_interrupt> + 6e: 00 00 nop ../../../../../crt1/gcrt1.S:94 - 70: 3d c0 rjmp .+122 ; 0xec <__bad_interrupt> - 72: 00 00 nop + 70: 32 c0 rjmp .+100 ; 0xd6 <__bad_interrupt> + 72: 00 00 nop ../../../../../crt1/gcrt1.S:95 - 74: 3b c0 rjmp .+118 ; 0xec <__bad_interrupt> - 76: 00 00 nop + 74: 30 c0 rjmp .+96 ; 0xd6 <__bad_interrupt> + 76: 00 00 nop ../../../../../crt1/gcrt1.S:96 - 78: 39 c0 rjmp .+114 ; 0xec <__bad_interrupt> - 7a: 00 00 nop + 78: 2e c0 rjmp .+92 ; 0xd6 <__bad_interrupt> + 7a: 00 00 nop ../../../../../crt1/gcrt1.S:97 - 7c: 37 c0 rjmp .+110 ; 0xec <__bad_interrupt> - 7e: 00 00 nop + 7c: 2c c0 rjmp .+88 ; 0xd6 <__bad_interrupt> + 7e: 00 00 nop ../../../../../crt1/gcrt1.S:98 - 80: 35 c0 rjmp .+106 ; 0xec <__bad_interrupt> - 82: 00 00 nop + 80: 2a c0 rjmp .+84 ; 0xd6 <__bad_interrupt> + 82: 00 00 nop ../../../../../crt1/gcrt1.S:99 - 84: 33 c0 rjmp .+102 ; 0xec <__bad_interrupt> - 86: 00 00 nop + 84: 28 c0 rjmp .+80 ; 0xd6 <__bad_interrupt> + 86: 00 00 nop ../../../../../crt1/gcrt1.S:100 - 88: 31 c0 rjmp .+98 ; 0xec <__bad_interrupt> - 8a: 00 00 nop + 88: 26 c0 rjmp .+76 ; 0xd6 <__bad_interrupt> + 8a: 00 00 nop ../../../../../crt1/gcrt1.S:101 - 8c: 2f c0 rjmp .+94 ; 0xec <__bad_interrupt> - 8e: 00 00 nop + 8c: 24 c0 rjmp .+72 ; 0xd6 <__bad_interrupt> + 8e: 00 00 nop ../../../../../crt1/gcrt1.S:102 - 90: 2d c0 rjmp .+90 ; 0xec <__bad_interrupt> - 92: 00 00 nop + 90: 22 c0 rjmp .+68 ; 0xd6 <__bad_interrupt> + 92: 00 00 nop ../../../../../crt1/gcrt1.S:103 - 94: 2b c0 rjmp .+86 ; 0xec <__bad_interrupt> - 96: 00 00 nop + 94: 20 c0 rjmp .+64 ; 0xd6 <__bad_interrupt> + 96: 00 00 nop ../../../../../crt1/gcrt1.S:104 - 98: 29 c0 rjmp .+82 ; 0xec <__bad_interrupt> - 9a: 00 00 nop + 98: 1e c0 rjmp .+60 ; 0xd6 <__bad_interrupt> + 9a: 00 00 nop ../../../../../crt1/gcrt1.S:105 - 9c: 27 c0 rjmp .+78 ; 0xec <__bad_interrupt> + 9c: 1c c0 rjmp .+56 ; 0xd6 <__bad_interrupt> ... 000000a0 <__ctors_start>: __trampolines_start(): - a0: 11 07 cpc r17, r17 + a0: db 05 cpc r29, r11 000000a2 <__ctors_end>: __dtors_end(): ../../../../../crt1/gcrt1.S:230 - a2: 11 24 eor r1, r1 + a2: 11 24 eor r1, r1 ../../../../../crt1/gcrt1.S:231 - a4: 1f be out 0x3f, r1 ; 63 + a4: 1f be out 0x3f, r1 ; 63 ../../../../../crt1/gcrt1.S:232 - a6: cf ef ldi r28, 0xFF ; 255 + a6: cf ef ldi r28, 0xFF ; 255 ../../../../../crt1/gcrt1.S:234 - a8: cd bf out 0x3d, r28 ; 61 + a8: cd bf out 0x3d, r28 ; 61 ../../../../../crt1/gcrt1.S:236 - aa: df e3 ldi r29, 0x3F ; 63 + aa: df e3 ldi r29, 0x3F ; 63 ../../../../../crt1/gcrt1.S:237 - ac: de bf out 0x3e, r29 ; 62 + ac: de bf out 0x3e, r29 ; 62 -000000ae <__do_copy_data>: -__do_copy_data(): -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2409 - ae: 1c e3 ldi r17, 0x3C ; 60 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2410 - b0: a0 e0 ldi r26, 0x00 ; 0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2411 - b2: bc e3 ldi r27, 0x3C ; 60 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2412 - b4: e0 eb ldi r30, 0xB0 ; 176 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2413 - b6: f3 e1 ldi r31, 0x13 ; 19 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2414 - b8: 02 c0 rjmp .+4 ; 0xbe <__do_copy_data+0x10> -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2417 - ba: 05 90 lpm r0, Z+ -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2422 - bc: 0d 92 st X+, r0 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2424 - be: ae 30 cpi r26, 0x0E ; 14 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2425 - c0: b1 07 cpc r27, r17 -/home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2426 - c2: d9 f7 brne .-10 ; 0xba <__do_copy_data+0xc> - -000000c4 <__do_clear_bss>: +000000ae <__do_clear_bss>: __do_clear_bss(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2441 - c4: 2c e3 ldi r18, 0x3C ; 60 + ae: 2c e3 ldi r18, 0x3C ; 60 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2442 - c6: ae e0 ldi r26, 0x0E ; 14 + b0: a0 e0 ldi r26, 0x00 ; 0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2443 - c8: bc e3 ldi r27, 0x3C ; 60 + b2: bc e3 ldi r27, 0x3C ; 60 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2444 - ca: 01 c0 rjmp .+2 ; 0xce <.do_clear_bss_start> + b4: 01 c0 rjmp .+2 ; 0xb8 <.do_clear_bss_start> -000000cc <.do_clear_bss_loop>: +000000b6 <.do_clear_bss_loop>: /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2446 - cc: 1d 92 st X+, r1 + b6: 1d 92 st X+, r1 -000000ce <.do_clear_bss_start>: +000000b8 <.do_clear_bss_start>: /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2448 - ce: a4 37 cpi r26, 0x74 ; 116 + b8: a8 38 cpi r26, 0x88 ; 136 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2449 - d0: b2 07 cpc r27, r18 + ba: b2 07 cpc r27, r18 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2450 - d2: e1 f7 brne .-8 ; 0xcc <.do_clear_bss_loop> + bc: e1 f7 brne .-8 ; 0xb6 <.do_clear_bss_loop> -000000d4 <__do_global_ctors>: +000000be <__do_global_ctors>: __do_global_ctors(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2466 - d4: 10 e0 ldi r17, 0x00 ; 0 + be: 10 e0 ldi r17, 0x00 ; 0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2467 - d6: c1 e5 ldi r28, 0x51 ; 81 + c0: c1 e5 ldi r28, 0x51 ; 81 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2468 - d8: d0 e0 ldi r29, 0x00 ; 0 + c2: d0 e0 ldi r29, 0x00 ; 0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2472 - da: 03 c0 rjmp .+6 ; 0xe2 <__do_global_ctors+0xe> + c4: 03 c0 rjmp .+6 ; 0xcc <__do_global_ctors+0xe> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2474 - dc: 21 97 sbiw r28, 0x01 ; 1 + c6: 21 97 sbiw r28, 0x01 ; 1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2480 - de: fe 01 movw r30, r28 + c8: fe 01 movw r30, r28 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2481 - e0: c9 d7 rcall .+3986 ; 0x1074 <__tablejump2__> + ca: 1b d7 rcall .+3638 ; 0xf02 <__tablejump2__> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2483 - e2: c0 35 cpi r28, 0x50 ; 80 + cc: c0 35 cpi r28, 0x50 ; 80 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2484 - e4: d1 07 cpc r29, r17 + ce: d1 07 cpc r29, r17 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2489 - e6: d1 f7 brne .-12 ; 0xdc <__do_global_ctors+0x8> + d0: d1 f7 brne .-12 ; 0xc6 <__do_global_ctors+0x8> ../../../../../crt1/gcrt1.S:314 - e8: b6 d6 rcall .+3436 ; 0xe56
+ d2: 8b d5 rcall .+2838 ; 0xbea
../../../../../crt1/gcrt1.S:315 - ea: 04 c9 rjmp .-3576 ; 0xfffff2f4 <__eeprom_end+0xff7ef2f4> + d4: 31 c7 rjmp .+3682 ; 0xf38 <_exit> -000000ec <__bad_interrupt>: +000000d6 <__bad_interrupt>: __vector_38(): ../../../../../crt1/gcrt1.S:209 - ec: 89 cf rjmp .-238 ; 0x0 <__vectors> + d6: 94 cf rjmp .-216 ; 0x0 <__vectors> -000000ee : -pinMode.part.1.constprop.29(): +000000d8 : +pinMode.part.1.constprop.23(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:31 #include "wiring_private.h" #include "pins_arduino.h" @@ -235,29 +210,29 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. void pinMode(uint8_t pin, uint8_t mode) { uint8_t bit_mask = digitalPinToBitMask(pin); - ee: 90 e0 ldi r25, 0x00 ; 0 - f0: fc 01 movw r30, r24 - f2: e9 57 subi r30, 0x79 ; 121 - f4: fc 4a sbci r31, 0xAC ; 172 - f6: 20 81 ld r18, Z + d8: 90 e0 ldi r25, 0x00 ; 0 + da: fc 01 movw r30, r24 + dc: ee 52 subi r30, 0x2E ; 46 + de: f0 4b sbci r31, 0xB0 ; 176 + e0: 20 81 ld r18, Z C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:33 if ((bit_mask == NOT_A_PIN) || (mode > INPUT_PULLUP)) - f8: 2f 3f cpi r18, 0xFF ; 255 - fa: 51 f0 breq .+20 ; 0x110 <__EEPROM_REGION_LENGTH__+0x10> + e2: 2f 3f cpi r18, 0xFF ; 255 + e4: 51 f0 breq .+20 ; 0xfa C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:36 return; PORT_t *port = digitalPinToPortStruct(pin); - fc: 82 5a subi r24, 0xA2 ; 162 - fe: 9c 4a sbci r25, 0xAC ; 172 - 100: dc 01 movw r26, r24 - 102: ec 91 ld r30, X - 104: b0 e2 ldi r27, 0x20 ; 32 - 106: eb 9f mul r30, r27 - 108: f0 01 movw r30, r0 - 10a: 11 24 eor r1, r1 - 10c: fc 5f subi r31, 0xFC ; 252 + e6: 87 55 subi r24, 0x57 ; 87 + e8: 90 4b sbci r25, 0xB0 ; 176 + ea: dc 01 movw r26, r24 + ec: ec 91 ld r30, X + ee: b0 e2 ldi r27, 0x20 ; 32 + f0: eb 9f mul r30, r27 + f2: f0 01 movw r30, r0 + f4: 11 24 eor r1, r1 + f6: fc 5f subi r31, 0xFC ; 252 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:43 return; @@ -265,7 +240,7 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. { /* Configure direction as output */ port->DIRSET = bit_mask; - 10e: 21 83 std Z+1, r18 ; 0x01 + f8: 21 83 std Z+1, r18 ; 0x01 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:75 } @@ -273,10 +248,10 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. SREG = status; } } - 110: 08 95 ret + fa: 08 95 ret -00000112 : -_ZN8SPIClass5beginEv.constprop.25(): +000000fc : +_ZN8SPIClass5beginEv.constprop.19(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:131 config(DEFAULT_SPI_SETTINGS); } @@ -284,32 +259,32 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. void SPIClass::init() { if (initialized) - 112: 80 91 2d 3c lds r24, 0x3C2D ; 0x803c2d - 116: 81 11 cpse r24, r1 - 118: 17 c0 rjmp .+46 ; 0x148 + fc: 80 91 43 3c lds r24, 0x3C43 ; 0x803c43 + 100: 81 11 cpse r24, r1 + 102: 17 c0 rjmp .+46 ; 0x132 <__EEPROM_REGION_LENGTH__+0x32> C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:133 return; interruptMode = SPI_IMODE_NONE; - 11a: 10 92 2e 3c sts 0x3C2E, r1 ; 0x803c2e + 104: 10 92 44 3c sts 0x3C44, r1 ; 0x803c44 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:134 interruptSave = 0; - 11e: 10 92 2f 3c sts 0x3C2F, r1 ; 0x803c2f + 108: 10 92 45 3c sts 0x3C45, r1 ; 0x803c45 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:135 interruptMask_lo = 0; - 122: 10 92 30 3c sts 0x3C30, r1 ; 0x803c30 - 126: 10 92 31 3c sts 0x3C31, r1 ; 0x803c31 - 12a: 10 92 32 3c sts 0x3C32, r1 ; 0x803c32 - 12e: 10 92 33 3c sts 0x3C33, r1 ; 0x803c33 + 10c: 10 92 46 3c sts 0x3C46, r1 ; 0x803c46 + 110: 10 92 47 3c sts 0x3C47, r1 ; 0x803c47 + 114: 10 92 48 3c sts 0x3C48, r1 ; 0x803c48 + 118: 10 92 49 3c sts 0x3C49, r1 ; 0x803c49 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:136 interruptMask_hi = 0; - 132: 10 92 34 3c sts 0x3C34, r1 ; 0x803c34 - 136: 10 92 35 3c sts 0x3C35, r1 ; 0x803c35 - 13a: 10 92 36 3c sts 0x3C36, r1 ; 0x803c36 - 13e: 10 92 37 3c sts 0x3C37, r1 ; 0x803c37 + 11c: 10 92 4a 3c sts 0x3C4A, r1 ; 0x803c4a + 120: 10 92 4b 3c sts 0x3C4B, r1 ; 0x803c4b + 124: 10 92 4c 3c sts 0x3C4C, r1 ; 0x803c4c + 128: 10 92 4d 3c sts 0x3C4D, r1 ; 0x803c4d C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:137 initialized = true; - 142: 81 e0 ldi r24, 0x01 ; 1 - 144: 80 93 2d 3c sts 0x3C2D, r24 ; 0x803c2d + 12c: 81 e0 ldi r24, 0x01 ; 1 + 12e: 80 93 43 3c sts 0x3C43, r24 ; 0x803c43 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:99 void SPIClass::begin() @@ -317,23 +292,23 @@ void SPIClass::begin() init(); PORTMUX.TWISPIROUTEA = _uc_mux | (PORTMUX.TWISPIROUTEA & ~3); - 148: 80 91 e3 05 lds r24, 0x05E3 ; 0x8005e3 - 14c: 8c 7f andi r24, 0xFC ; 252 - 14e: 90 91 2c 3c lds r25, 0x3C2C ; 0x803c2c - 152: 89 2b or r24, r25 - 154: 80 93 e3 05 sts 0x05E3, r24 ; 0x8005e3 + 132: 80 91 e3 05 lds r24, 0x05E3 ; 0x8005e3 + 136: 8c 7f andi r24, 0xFC ; 252 + 138: 90 91 42 3c lds r25, 0x3C42 ; 0x803c42 + 13c: 89 2b or r24, r25 + 13e: 80 93 e3 05 sts 0x05E3, r24 ; 0x8005e3 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:102 // MISO is set to input by the controller if(_uc_mux == SPI_MUX) - 158: 91 11 cpse r25, r1 - 15a: 17 c0 rjmp .+46 ; 0x18a + 142: 91 11 cpse r25, r1 + 144: 17 c0 rjmp .+46 ; 0x174 <__EEPROM_REGION_LENGTH__+0x74> pinMode(): - 15c: 84 e0 ldi r24, 0x04 ; 4 - 15e: c7 df rcall .-114 ; 0xee - 160: 86 e0 ldi r24, 0x06 ; 6 - 162: c5 df rcall .-118 ; 0xee -_ZN8SPIClass5beginEv.constprop.25(): + 146: 84 e0 ldi r24, 0x04 ; 4 + 148: c7 df rcall .-114 ; 0xd8 + 14a: 86 e0 ldi r24, 0x06 ; 6 + 14c: c5 df rcall .-118 ; 0xd8 +_ZN8SPIClass5beginEv.constprop.19(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:123 pinMode(PIN_SPI_SCK_PINSWAP_2, OUTPUT); } @@ -341,16 +316,16 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. // We don't need HW SS since salve/master mode is selected via registers SPI0.CTRLB |= (SPI_SSD_bm); - 164: 80 91 c1 08 lds r24, 0x08C1 ; 0x8008c1 - 168: 84 60 ori r24, 0x04 ; 4 - 16a: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 + 14e: 80 91 c1 08 lds r24, 0x08C1 ; 0x8008c1 + 152: 84 60 ori r24, 0x04 ; 4 + 154: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:124 SPI0.CTRLA |= (SPI_ENABLE_bm | SPI_MASTER_bm); - 16e: 80 91 c0 08 lds r24, 0x08C0 ; 0x8008c0 - 172: 81 62 ori r24, 0x21 ; 33 - 174: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 - 178: 90 91 67 3c lds r25, 0x3C67 ; 0x803c67 - 17c: 80 91 68 3c lds r24, 0x3C68 ; 0x803c68 + 158: 80 91 c0 08 lds r24, 0x08C0 ; 0x8008c0 + 15c: 81 62 ori r24, 0x21 ; 33 + 15e: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 + 162: 90 91 7d 3c lds r25, 0x3C7D ; 0x803c7d + 166: 80 91 7e 3c lds r24, 0x3C7E ; 0x803c7e config(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:142 initialized = true; @@ -359,11 +334,11 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. void SPIClass::config(SPISettings settings) { SPI0.CTRLA = settings.ctrla; - 180: 90 93 c0 08 sts 0x08C0, r25 ; 0x8008c0 + 16a: 90 93 c0 08 sts 0x08C0, r25 ; 0x8008c0 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:143 SPI0.CTRLB = settings.ctrlb; - 184: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 -_ZN8SPIClass5beginEv.constprop.25(): + 16e: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 +_ZN8SPIClass5beginEv.constprop.19(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:127 // We don't need HW SS since salve/master mode is selected via registers SPI0.CTRLB |= (SPI_SSD_bm); @@ -371,7 +346,7 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. config(DEFAULT_SPI_SETTINGS); } - 188: 08 95 ret + 172: 08 95 ret C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:108 { pinMode(PIN_SPI_MOSI, OUTPUT); @@ -379,14 +354,14 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. } #if defined(SPI_MUX_PINSWAP_1) else if(_uc_mux == SPI_MUX_PINSWAP_1) - 18a: 91 30 cpi r25, 0x01 ; 1 - 18c: 21 f4 brne .+8 ; 0x196 + 174: 91 30 cpi r25, 0x01 ; 1 + 176: 21 f4 brne .+8 ; 0x180 <__EEPROM_REGION_LENGTH__+0x80> pinMode(): - 18e: 8e e0 ldi r24, 0x0E ; 14 - 190: ae df rcall .-164 ; 0xee - 192: 80 e1 ldi r24, 0x10 ; 16 - 194: e6 cf rjmp .-52 ; 0x162 -_ZN8SPIClass5beginEv.constprop.25(): + 178: 8e e0 ldi r24, 0x0E ; 14 + 17a: ae df rcall .-164 ; 0xd8 + 17c: 80 e1 ldi r24, 0x10 ; 16 + 17e: e6 cf rjmp .-52 ; 0x14c <__EEPROM_REGION_LENGTH__+0x4c> +_ZN8SPIClass5beginEv.constprop.19(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:115 pinMode(PIN_SPI_MOSI_PINSWAP_1, OUTPUT); pinMode(PIN_SPI_SCK_PINSWAP_1, OUTPUT); @@ -394,16 +369,16 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. #endif #if defined(SPI_MUX_PINSWAP_2) else if(_uc_mux == SPI_MUX_PINSWAP_2) - 196: 92 30 cpi r25, 0x02 ; 2 - 198: 29 f7 brne .-54 ; 0x164 + 180: 92 30 cpi r25, 0x02 ; 2 + 182: 29 f7 brne .-54 ; 0x14e <__EEPROM_REGION_LENGTH__+0x4e> pinMode(): - 19a: 8e e1 ldi r24, 0x1E ; 30 - 19c: a8 df rcall .-176 ; 0xee - 19e: 80 e2 ldi r24, 0x20 ; 32 - 1a0: e0 cf rjmp .-64 ; 0x162 + 184: 8e e1 ldi r24, 0x1E ; 30 + 186: a8 df rcall .-176 ; 0xd8 + 188: 80 e2 ldi r24, 0x20 ; 32 + 18a: e0 cf rjmp .-64 ; 0x14c <__EEPROM_REGION_LENGTH__+0x4c> -000001a2 : -_ZN8SPIClass8transferEh.constprop.16(): +0000018c : +_ZN8SPIClass8transferEh.constprop.17(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:304 * The following NOP introduces a small delay that can prevent the wait * loop from iterating when running at the maximum speed. This gives @@ -411,24 +386,24 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. * speeds it is unnoticed. */ asm volatile("nop"); - 1a2: 00 00 nop + 18c: 00 00 nop C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:306 SPI0.DATA = data; - 1a4: 80 93 c4 08 sts 0x08C4, r24 ; 0x8008c4 + 18e: 80 93 c4 08 sts 0x08C4, r24 ; 0x8008c4 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:307 while ((SPI0.INTFLAGS & SPI_RXCIF_bm) == 0); // wait for complete send - 1a8: 80 91 c3 08 lds r24, 0x08C3 ; 0x8008c3 - 1ac: 87 ff sbrs r24, 7 - 1ae: fc cf rjmp .-8 ; 0x1a8 + 192: 80 91 c3 08 lds r24, 0x08C3 ; 0x8008c3 + 196: 87 ff sbrs r24, 7 + 198: fc cf rjmp .-8 ; 0x192 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:308 return SPI0.DATA; // read data back - 1b0: 80 91 c4 08 lds r24, 0x08C4 ; 0x8008c4 + 19a: 80 91 c4 08 lds r24, 0x08C4 ; 0x8008c4 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:309 } - 1b4: 08 95 ret + 19e: 08 95 ret -000001b6 : +000001a0 : digitalWrite.part.2(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137 } @@ -437,17 +412,17 @@ void digitalWrite(uint8_t pin, uint8_t val) { /* Get bit mask for pin */ uint8_t bit_mask = digitalPinToBitMask(pin); - 1b6: 28 2f mov r18, r24 - 1b8: 30 e0 ldi r19, 0x00 ; 0 - 1ba: f9 01 movw r30, r18 - 1bc: e9 57 subi r30, 0x79 ; 121 - 1be: fc 4a sbci r31, 0xAC ; 172 - 1c0: 40 81 ld r20, Z + 1a0: 28 2f mov r18, r24 + 1a2: 30 e0 ldi r19, 0x00 ; 0 + 1a4: f9 01 movw r30, r18 + 1a6: ee 52 subi r30, 0x2E ; 46 + 1a8: f0 4b sbci r31, 0xB0 ; 176 + 1aa: 40 81 ld r20, Z C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:138 if (bit_mask == NOT_A_PIN) - 1c2: 4f 3f cpi r20, 0xFF ; 255 - 1c4: 09 f4 brne .+2 ; 0x1c8 - 1c6: 50 c0 rjmp .+160 ; 0x268 + 1ac: 4f 3f cpi r20, 0xFF ; 255 + 1ae: 09 f4 brne .+2 ; 0x1b2 + 1b0: 50 c0 rjmp .+160 ; 0x252 turnOffPWM(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:97 static void turnOffPWM(uint8_t pin) @@ -456,16 +431,16 @@ static void turnOffPWM(uint8_t pin) /* Get pin's timer */ uint8_t timer = digitalPinToTimer(pin); - 1c8: 89 32 cpi r24, 0x29 ; 41 - 1ca: 58 f4 brcc .+22 ; 0x1e2 - 1cc: f9 01 movw r30, r18 - 1ce: ec 5f subi r30, 0xFC ; 252 - 1d0: fc 4a sbci r31, 0xAC ; 172 - 1d2: e0 81 ld r30, Z + 1b2: 89 32 cpi r24, 0x29 ; 41 + 1b4: 58 f4 brcc .+22 ; 0x1cc + 1b6: f9 01 movw r30, r18 + 1b8: e9 5a subi r30, 0xA9 ; 169 + 1ba: f0 4b sbci r31, 0xB0 ; 176 + 1bc: e0 81 ld r30, Z C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:98 if (timer == NOT_ON_TIMER) - 1d4: ee 23 and r30, r30 - 1d6: 29 f0 breq .+10 ; 0x1e2 + 1be: ee 23 and r30, r30 + 1c0: 29 f0 breq .+10 ; 0x1cc C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:104 return; @@ -473,11 +448,11 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. TCB_t *timerB; switch (timer) - 1d8: e1 30 cpi r30, 0x01 ; 1 - 1da: 99 f0 breq .+38 ; 0x202 - 1dc: 10 f0 brcs .+4 ; 0x1e2 - 1de: e6 30 cpi r30, 0x06 ; 6 - 1e0: 20 f1 brcs .+72 ; 0x22a + 1c2: e1 30 cpi r30, 0x01 ; 1 + 1c4: 99 f0 breq .+38 ; 0x1ec + 1c6: 10 f0 brcs .+4 ; 0x1cc + 1c8: e6 30 cpi r30, 0x06 ; 6 + 1ca: 20 f1 brcs .+72 ; 0x214 digitalWrite.part.2(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:150 turnOffPWM(pin); @@ -486,33 +461,33 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. /* Get port */ PORT_t *port = digitalPinToPortStruct(pin); - 1e2: f9 01 movw r30, r18 - 1e4: e2 5a subi r30, 0xA2 ; 162 - 1e6: fc 4a sbci r31, 0xAC ; 172 - 1e8: e0 81 ld r30, Z - 1ea: a0 e2 ldi r26, 0x20 ; 32 - 1ec: ea 9f mul r30, r26 - 1ee: f0 01 movw r30, r0 - 1f0: 11 24 eor r1, r1 - 1f2: fc 5f subi r31, 0xFC ; 252 + 1cc: f9 01 movw r30, r18 + 1ce: e7 55 subi r30, 0x57 ; 87 + 1d0: f0 4b sbci r31, 0xB0 ; 176 + 1d2: e0 81 ld r30, Z + 1d4: a0 e2 ldi r26, 0x20 ; 32 + 1d6: ea 9f mul r30, r26 + 1d8: f0 01 movw r30, r0 + 1da: 11 24 eor r1, r1 + 1dc: fc 5f subi r31, 0xFC ; 252 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:153 /* Output direction */ if (port->DIR & bit_mask) - 1f4: 80 81 ld r24, Z - 1f6: 84 23 and r24, r20 - 1f8: 21 f1 breq .+72 ; 0x242 + 1de: 80 81 ld r24, Z + 1e0: 84 23 and r24, r20 + 1e2: 21 f1 breq .+72 ; 0x22c C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:156 { /* Set output to value */ if (val == LOW) - 1fa: 61 11 cpse r22, r1 - 1fc: 20 c0 rjmp .+64 ; 0x23e + 1e4: 61 11 cpse r22, r1 + 1e6: 20 c0 rjmp .+64 ; 0x228 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:158 { /* If LOW */ port->OUTCLR = bit_mask; - 1fe: 46 83 std Z+6, r20 ; 0x06 - 200: 08 95 ret + 1e8: 46 83 std Z+6, r20 ; 0x06 + 1ea: 08 95 ret turnOffPWM(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:109 switch (timer) @@ -521,30 +496,30 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. case TIMERA0: /* Bit position will give output channel */ bit_pos = digitalPinToBitPosition(pin); - 202: f9 01 movw r30, r18 - 204: eb 5c subi r30, 0xCB ; 203 - 206: fc 4a sbci r31, 0xAC ; 172 - 208: 50 81 ld r21, Z + 1ec: f9 01 movw r30, r18 + 1ee: e0 58 subi r30, 0x80 ; 128 + 1f0: f0 4b sbci r31, 0xB0 ; 176 + 1f2: 50 81 ld r21, Z C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:112 /* Disable corresponding channel */ if (bit_pos >= 3) ++bit_pos; /* Upper 3 bits are shifted by 1 */ - 20a: 53 30 cpi r21, 0x03 ; 3 - 20c: 08 f0 brcs .+2 ; 0x210 - 20e: 5f 5f subi r21, 0xFF ; 255 + 1f4: 53 30 cpi r21, 0x03 ; 3 + 1f6: 08 f0 brcs .+2 ; 0x1fa + 1f8: 5f 5f subi r21, 0xFF ; 255 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:113 TCA0.SPLIT.CTRLB &= ~(1 << (TCA_SPLIT_LCMP0EN_bp + bit_pos)); - 210: 70 91 01 0a lds r23, 0x0A01 ; 0x800a01 - 214: 81 e0 ldi r24, 0x01 ; 1 - 216: 90 e0 ldi r25, 0x00 ; 0 - 218: 01 c0 rjmp .+2 ; 0x21c - 21a: 88 0f add r24, r24 - 21c: 5a 95 dec r21 - 21e: ea f7 brpl .-6 ; 0x21a - 220: 80 95 com r24 - 222: 87 23 and r24, r23 - 224: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 - 228: dc cf rjmp .-72 ; 0x1e2 + 1fa: 70 91 01 0a lds r23, 0x0A01 ; 0x800a01 + 1fe: 81 e0 ldi r24, 0x01 ; 1 + 200: 90 e0 ldi r25, 0x00 ; 0 + 202: 01 c0 rjmp .+2 ; 0x206 + 204: 88 0f add r24, r24 + 206: 5a 95 dec r21 + 208: ea f7 brpl .-6 ; 0x204 + 20a: 80 95 com r24 + 20c: 87 23 and r24, r23 + 20e: 80 93 01 0a sts 0x0A01, r24 ; 0x800a01 + 212: dc cf rjmp .-72 ; 0x1cc C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:123 case TIMERB0: case TIMERB1: @@ -552,20 +527,20 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. case TIMERB3: timerB = (TCB_t *)&TCB0 + (timer - TIMERB0); - 22a: 80 e1 ldi r24, 0x10 ; 16 - 22c: e8 9f mul r30, r24 - 22e: f0 01 movw r30, r0 - 230: 11 24 eor r1, r1 - 232: e0 5a subi r30, 0xA0 ; 160 - 234: f5 4f sbci r31, 0xF5 ; 245 + 214: 80 e1 ldi r24, 0x10 ; 16 + 216: e8 9f mul r30, r24 + 218: f0 01 movw r30, r0 + 21a: 11 24 eor r1, r1 + 21c: e0 5a subi r30, 0xA0 ; 160 + 21e: f5 4f sbci r31, 0xF5 ; 245 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:126 /* Disable TCB compare channel */ timerB->CTRLB &= ~(TCB_CCMPEN_bm); - 236: 81 81 ldd r24, Z+1 ; 0x01 - 238: 8f 7e andi r24, 0xEF ; 239 - 23a: 81 83 std Z+1, r24 ; 0x01 - 23c: d2 cf rjmp .-92 ; 0x1e2 + 220: 81 81 ldd r24, Z+1 ; 0x01 + 222: 8f 7e andi r24, 0xEF ; 239 + 224: 81 83 std Z+1, r24 ; 0x01 + 226: d2 cf rjmp .-92 ; 0x1cc digitalWrite.part.2(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:167 port->OUTTGL = bit_mask; @@ -574,8 +549,8 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. else { port->OUTSET = bit_mask; - 23e: 45 83 std Z+5, r20 ; 0x05 - 240: 08 95 ret + 228: 45 83 std Z+5, r20 ; 0x05 + 22a: 08 95 ret C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:180 pull up is enabled if this function is called. Should we purposely implement this side effect? @@ -583,36 +558,36 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. /* Get bit position for getting pin ctrl reg */ uint8_t bit_pos = digitalPinToBitPosition(pin); - 242: 2b 5c subi r18, 0xCB ; 203 - 244: 3c 4a sbci r19, 0xAC ; 172 - 246: d9 01 movw r26, r18 - 248: 8c 91 ld r24, X + 22c: 20 58 subi r18, 0x80 ; 128 + 22e: 30 4b sbci r19, 0xB0 ; 176 + 230: d9 01 movw r26, r18 + 232: 8c 91 ld r24, X C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:183 /* Calculate where pin control register is */ volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 24a: 30 97 sbiw r30, 0x00 ; 0 - 24c: 71 f0 breq .+28 ; 0x26a - 24e: 8f 3f cpi r24, 0xFF ; 255 - 250: 61 f0 breq .+24 ; 0x26a - 252: 70 96 adiw r30, 0x10 ; 16 - 254: e8 0f add r30, r24 - 256: f1 1d adc r31, r1 + 234: 30 97 sbiw r30, 0x00 ; 0 + 236: 71 f0 breq .+28 ; 0x254 + 238: 8f 3f cpi r24, 0xFF ; 255 + 23a: 61 f0 breq .+24 ; 0x254 + 23c: 70 96 adiw r30, 0x10 ; 16 + 23e: e8 0f add r30, r24 + 240: f1 1d adc r31, r1 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:186 /* Save system status and disable interrupts */ uint8_t status = SREG; - 258: 9f b7 in r25, 0x3f ; 63 + 242: 9f b7 in r25, 0x3f ; 63 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:187 cli(); - 25a: f8 94 cli + 244: f8 94 cli C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:192 if (val == LOW) { /* Disable pullup */ *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - 25c: 80 81 ld r24, Z + 246: 80 81 ld r24, Z C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:189 /* Save system status and disable interrupts */ @@ -620,30 +595,30 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. cli(); if (val == LOW) - 25e: 61 11 cpse r22, r1 - 260: 07 c0 rjmp .+14 ; 0x270 + 248: 61 11 cpse r22, r1 + 24a: 07 c0 rjmp .+14 ; 0x25a C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:192 { /* Disable pullup */ *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; - 262: 87 7f andi r24, 0xF7 ; 247 + 24c: 87 7f andi r24, 0xF7 ; 247 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:197 } else { /* Enable pull-up */ *pin_ctrl_reg |= PORT_PULLUPEN_bm; - 264: 80 83 st Z, r24 + 24e: 80 83 st Z, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:201 } /* Restore system status */ SREG = status; - 266: 9f bf out 0x3f, r25 ; 63 + 250: 9f bf out 0x3f, r25 ; 63 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:203 } } - 268: 08 95 ret + 252: 08 95 ret C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:183 /* Get bit position for getting pin ctrl reg */ @@ -651,9 +626,9 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. /* Calculate where pin control register is */ volatile uint8_t *pin_ctrl_reg = getPINnCTRLregister(port, bit_pos); - 26a: f0 e0 ldi r31, 0x00 ; 0 - 26c: e0 e0 ldi r30, 0x00 ; 0 - 26e: f4 cf rjmp .-24 ; 0x258 + 254: f0 e0 ldi r31, 0x00 ; 0 + 256: e0 e0 ldi r30, 0x00 ; 0 + 258: f4 cf rjmp .-24 ; 0x242 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:197 *pin_ctrl_reg &= ~PORT_PULLUPEN_bm; } @@ -661,10 +636,10 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. { /* Enable pull-up */ *pin_ctrl_reg |= PORT_PULLUPEN_bm; - 270: 88 60 ori r24, 0x08 ; 8 - 272: f8 cf rjmp .-16 ; 0x264 + 25a: 88 60 ori r24, 0x08 ; 8 + 25c: f8 cf rjmp .-16 ; 0x24e -00000274 : +0000025e : micros(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:103 { @@ -673,47 +648,47 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. /* Save current state and disable interrupts */ uint8_t status = SREG; - 274: 8f b7 in r24, 0x3f ; 63 + 25e: 8f b7 in r24, 0x3f ; 63 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:104 cli(); - 276: f8 94 cli + 260: f8 94 cli C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:107 /* Get current number of millis (i.e. overflows) and timer count */ m = timer_millis; - 278: 20 91 10 3c lds r18, 0x3C10 ; 0x803c10 - 27c: 30 91 11 3c lds r19, 0x3C11 ; 0x803c11 - 280: 40 91 12 3c lds r20, 0x3C12 ; 0x803c12 - 284: 50 91 13 3c lds r21, 0x3C13 ; 0x803c13 + 262: 20 91 10 3c lds r18, 0x3C10 ; 0x803c10 + 266: 30 91 11 3c lds r19, 0x3C11 ; 0x803c11 + 26a: 40 91 12 3c lds r20, 0x3C12 ; 0x803c12 + 26e: 50 91 13 3c lds r21, 0x3C13 ; 0x803c13 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:108 t = _timer->CNT; - 288: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa - 28c: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab + 272: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa + 276: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:112 /* If the timer overflow flag is raised, we just missed it, increment to account for it, & read new ticks */ if (_timer->INTFLAGS & TCB_CAPT_bm) - 290: 90 91 a6 0a lds r25, 0x0AA6 ; 0x800aa6 - 294: 90 ff sbrs r25, 0 - 296: 08 c0 rjmp .+16 ; 0x2a8 + 27a: 90 91 a6 0a lds r25, 0x0AA6 ; 0x800aa6 + 27e: 90 ff sbrs r25, 0 + 280: 08 c0 rjmp .+16 ; 0x292 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:114 { m++; - 298: 2f 5f subi r18, 0xFF ; 255 - 29a: 3f 4f sbci r19, 0xFF ; 255 - 29c: 4f 4f sbci r20, 0xFF ; 255 - 29e: 5f 4f sbci r21, 0xFF ; 255 + 282: 2f 5f subi r18, 0xFF ; 255 + 284: 3f 4f sbci r19, 0xFF ; 255 + 286: 4f 4f sbci r20, 0xFF ; 255 + 288: 5f 4f sbci r21, 0xFF ; 255 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:115 t = _timer->CNT; - 2a0: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa - 2a4: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab + 28a: e0 91 aa 0a lds r30, 0x0AAA ; 0x800aaa + 28e: f0 91 ab 0a lds r31, 0x0AAB ; 0x800aab C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:119 } // Restore SREG SREG = status; - 2a8: 8f bf out 0x3f, r24 ; 63 + 292: 8f bf out 0x3f, r24 ; 63 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:130 return m * 1000 + (t >> 4); #elif (F_CPU == 10000000L) @@ -721,18 +696,18 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. return m * 1000 + (t - (t >> 2) + (t >> 4) - (t >> 6)); #elif (F_CPU == 8000000L) return m * 1000 + (t >> 3); - 2aa: a8 ee ldi r26, 0xE8 ; 232 - 2ac: b3 e0 ldi r27, 0x03 ; 3 - 2ae: af d6 rcall .+3422 ; 0x100e <__muluhisi3> - 2b0: 23 e0 ldi r18, 0x03 ; 3 - 2b2: f6 95 lsr r31 - 2b4: e7 95 ror r30 - 2b6: 2a 95 dec r18 - 2b8: e1 f7 brne .-8 ; 0x2b2 - 2ba: 6e 0f add r22, r30 - 2bc: 7f 1f adc r23, r31 - 2be: 81 1d adc r24, r1 - 2c0: 91 1d adc r25, r1 + 294: a8 ee ldi r26, 0xE8 ; 232 + 296: b3 e0 ldi r27, 0x03 ; 3 + 298: 01 d6 rcall .+3074 ; 0xe9c <__muluhisi3> + 29a: 23 e0 ldi r18, 0x03 ; 3 + 29c: f6 95 lsr r31 + 29e: e7 95 ror r30 + 2a0: 2a 95 dec r18 + 2a2: e1 f7 brne .-8 ; 0x29c + 2a4: 6e 0f add r22, r30 + 2a6: 7f 1f adc r23, r31 + 2a8: 81 1d adc r24, r1 + 2aa: 91 1d adc r25, r1 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:143 #elif (F_CPU == 1000000L) return m * 1000 + t; @@ -740,76 +715,83 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. return 0; #endif } - 2c2: 08 95 ret + 2ac: 08 95 ret -000002c4 : -delay.constprop.18(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:145 +000002ae : +delay(): +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:146 void delay(unsigned long ms) - 2c4: cf 92 push r12 - 2c6: df 92 push r13 - 2c8: ef 92 push r14 - 2ca: ff 92 push r15 -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:147 { + 2ae: 8f 92 push r8 + 2b0: 9f 92 push r9 + 2b2: af 92 push r10 + 2b4: bf 92 push r11 + 2b6: cf 92 push r12 + 2b8: df 92 push r13 + 2ba: ef 92 push r14 + 2bc: ff 92 push r15 + 2be: 4b 01 movw r8, r22 + 2c0: 5c 01 movw r10, r24 +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:147 uint32_t start_time = micros(), delay_time = 1000 * ms; - 2cc: d3 df rcall .-90 ; 0x274 + 2c2: cd df rcall .-102 ; 0x25e + 2c4: 6b 01 movw r12, r22 + 2c6: 7c 01 movw r14, r24 + 2c8: a8 ee ldi r26, 0xE8 ; 232 + 2ca: b3 e0 ldi r27, 0x03 ; 3 + 2cc: a5 01 movw r20, r10 + 2ce: 94 01 movw r18, r8 + 2d0: e5 d5 rcall .+3018 ; 0xe9c <__muluhisi3> C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:150 /* Calculate future time to return */ uint32_t return_time = start_time + delay_time; - 2ce: 6b 01 movw r12, r22 - 2d0: 7c 01 movw r14, r24 - 2d2: 20 e1 ldi r18, 0x10 ; 16 - 2d4: c2 0e add r12, r18 - 2d6: 27 e2 ldi r18, 0x27 ; 39 - 2d8: d2 1e adc r13, r18 - 2da: e1 1c adc r14, r1 - 2dc: f1 1c adc r15, r1 + 2d2: c6 0e add r12, r22 + 2d4: d7 1e adc r13, r23 + 2d6: e8 1e adc r14, r24 + 2d8: f9 1e adc r15, r25 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:153 /* If return time overflows */ if (return_time < delay_time) - 2de: 80 e1 ldi r24, 0x10 ; 16 - 2e0: c8 16 cp r12, r24 - 2e2: 87 e2 ldi r24, 0x27 ; 39 - 2e4: d8 06 cpc r13, r24 - 2e6: e1 04 cpc r14, r1 - 2e8: f1 04 cpc r15, r1 - 2ea: 30 f4 brcc .+12 ; 0x2f8 + 2da: c6 16 cp r12, r22 + 2dc: d7 06 cpc r13, r23 + 2de: e8 06 cpc r14, r24 + 2e0: f9 06 cpc r15, r25 + 2e2: 10 f4 brcc .+4 ; 0x2e8 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:156 { /* Wait until micros overflows */ while (micros() > return_time) - 2ec: c3 df rcall .-122 ; 0x274 - 2ee: c6 16 cp r12, r22 - 2f0: d7 06 cpc r13, r23 - 2f2: e8 06 cpc r14, r24 - 2f4: f9 06 cpc r15, r25 - 2f6: d0 f3 brcs .-12 ; 0x2ec + 2e4: bc df rcall .-136 ; 0x25e + 2e6: f9 cf rjmp .-14 ; 0x2da C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:161 ; } /* Wait until return time */ while (micros() < return_time) - 2f8: bd df rcall .-134 ; 0x274 - 2fa: 6c 15 cp r22, r12 - 2fc: 7d 05 cpc r23, r13 - 2fe: 8e 05 cpc r24, r14 - 300: 9f 05 cpc r25, r15 - 302: d0 f3 brcs .-12 ; 0x2f8 + 2e8: ba df rcall .-140 ; 0x25e + 2ea: 6c 15 cp r22, r12 + 2ec: 7d 05 cpc r23, r13 + 2ee: 8e 05 cpc r24, r14 + 2f0: 9f 05 cpc r25, r15 + 2f2: d0 f3 brcs .-12 ; 0x2e8 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:163 ; } - 304: ff 90 pop r15 - 306: ef 90 pop r14 - 308: df 90 pop r13 - 30a: cf 90 pop r12 - 30c: 08 95 ret + 2f4: ff 90 pop r15 + 2f6: ef 90 pop r14 + 2f8: df 90 pop r13 + 2fa: cf 90 pop r12 + 2fc: bf 90 pop r11 + 2fe: af 90 pop r10 + 300: 9f 90 pop r9 + 302: 8f 90 pop r8 + 304: 08 95 ret -0000030e : +00000306 : _ZN7MCP25156endSPIEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:29 void MCP2515::startSPI() { @@ -818,21 +800,21 @@ void MCP2515::startSPI() { } void MCP2515::endSPI() { - 30e: 8f 92 push r8 - 310: 9f 92 push r9 - 312: af 92 push r10 - 314: bf 92 push r11 - 316: cf 92 push r12 - 318: df 92 push r13 - 31a: ef 92 push r14 - 31c: ff 92 push r15 - 31e: 0f 93 push r16 - 320: cf 93 push r28 - 322: df 93 push r29 + 306: 8f 92 push r8 + 308: 9f 92 push r9 + 30a: af 92 push r10 + 30c: bf 92 push r11 + 30e: cf 92 push r12 + 310: df 92 push r13 + 312: ef 92 push r14 + 314: ff 92 push r15 + 316: 0f 93 push r16 + 318: cf 93 push r28 + 31a: df 93 push r29 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:30 digitalWrite(SPICS, HIGH); - 324: fc 01 movw r30, r24 - 326: 80 81 ld r24, Z + 31c: fc 01 movw r30, r24 + 31e: 80 81 ld r24, Z digitalWrite(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137 } @@ -841,10 +823,10 @@ void digitalWrite(uint8_t pin, uint8_t val) { /* Get bit mask for pin */ uint8_t bit_mask = digitalPinToBitMask(pin); - 328: 89 32 cpi r24, 0x29 ; 41 - 32a: 10 f4 brcc .+4 ; 0x330 - 32c: 61 e0 ldi r22, 0x01 ; 1 - 32e: 43 df rcall .-378 ; 0x1b6 + 320: 89 32 cpi r24, 0x29 ; 41 + 322: 10 f4 brcc .+4 ; 0x328 + 324: 61 e0 ldi r22, 0x01 ; 1 + 326: 3c df rcall .-392 ; 0x1a0 endTransaction(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:265 config(settings); @@ -853,40 +835,40 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. void SPIClass::endTransaction(void) { if (interruptMode != SPI_IMODE_NONE) - 330: 80 91 2e 3c lds r24, 0x3C2E ; 0x803c2e - 334: 88 23 and r24, r24 - 336: 19 f0 breq .+6 ; 0x33e + 328: 80 91 44 3c lds r24, 0x3C44 ; 0x803c44 + 32c: 88 23 and r24, r24 + 32e: 19 f0 breq .+6 ; 0x336 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:267 { if (interruptMode & SPI_IMODE_GLOBAL) - 338: 81 ff sbrs r24, 1 - 33a: 0d c0 rjmp .+26 ; 0x356 + 330: 81 ff sbrs r24, 1 + 332: 0d c0 rjmp .+26 ; 0x34e C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:269 { interrupts(); - 33c: 78 94 sei + 334: 78 94 sei _ZN7MCP25156endSPIEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:32 SPI.endTransaction(); } - 33e: df 91 pop r29 - 340: cf 91 pop r28 - 342: 0f 91 pop r16 - 344: ff 90 pop r15 - 346: ef 90 pop r14 - 348: df 90 pop r13 - 34a: cf 90 pop r12 - 34c: bf 90 pop r11 - 34e: af 90 pop r10 - 350: 9f 90 pop r9 - 352: 8f 90 pop r8 - 354: 08 95 ret + 336: df 91 pop r29 + 338: cf 91 pop r28 + 33a: 0f 91 pop r16 + 33c: ff 90 pop r15 + 33e: ef 90 pop r14 + 340: df 90 pop r13 + 342: cf 90 pop r12 + 344: bf 90 pop r11 + 346: af 90 pop r10 + 348: 9f 90 pop r9 + 34a: 8f 90 pop r8 + 34c: 08 95 ret endTransaction(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:271 } else if (interruptMode & SPI_IMODE_EXTINT) - 356: 80 ff sbrs r24, 0 - 358: f2 cf rjmp .-28 ; 0x33e + 34e: 80 ff sbrs r24, 0 + 350: f2 cf rjmp .-28 ; 0x336 reattachMaskedInterrupts(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:225 shift++; @@ -895,640 +877,176 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. void SPIClass::reattachMaskedInterrupts() { uint64_t temp = interruptMask_lo; - 35a: 80 90 30 3c lds r8, 0x3C30 ; 0x803c30 - 35e: 90 90 31 3c lds r9, 0x3C31 ; 0x803c31 - 362: a0 90 32 3c lds r10, 0x3C32 ; 0x803c32 - 366: b0 90 33 3c lds r11, 0x3C33 ; 0x803c33 - 36a: c1 2c mov r12, r1 - 36c: d1 2c mov r13, r1 - 36e: 76 01 movw r14, r12 + 352: 80 90 46 3c lds r8, 0x3C46 ; 0x803c46 + 356: 90 90 47 3c lds r9, 0x3C47 ; 0x803c47 + 35a: a0 90 48 3c lds r10, 0x3C48 ; 0x803c48 + 35e: b0 90 49 3c lds r11, 0x3C49 ; 0x803c49 + 362: c1 2c mov r12, r1 + 364: d1 2c mov r13, r1 + 366: 76 01 movw r14, r12 _ZN7MCP25156endSPIEv(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:226 uint8_t shift = 0; - 370: e0 e0 ldi r30, 0x00 ; 0 + 368: e0 e0 ldi r30, 0x00 ; 0 reattachMaskedInterrupts(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:227 while (temp != 0) { - 372: 94 01 movw r18, r8 - 374: a5 01 movw r20, r10 - 376: b6 01 movw r22, r12 - 378: c7 01 movw r24, r14 - 37a: a0 e0 ldi r26, 0x00 ; 0 - 37c: 6f d6 rcall .+3294 ; 0x105c <__cmpdi2_s8> - 37e: 81 f1 breq .+96 ; 0x3e0 + 36a: 94 01 movw r18, r8 + 36c: a5 01 movw r20, r10 + 36e: b6 01 movw r22, r12 + 370: c7 01 movw r24, r14 + 372: a0 e0 ldi r26, 0x00 ; 0 + 374: ba d5 rcall .+2932 ; 0xeea <__cmpdi2_s8> + 376: 81 f1 breq .+96 ; 0x3d8 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:228 if (temp & 1) { - 380: 21 70 andi r18, 0x01 ; 1 - 382: 30 e0 ldi r19, 0x00 ; 0 - 384: 40 e0 ldi r20, 0x00 ; 0 - 386: 50 e0 ldi r21, 0x00 ; 0 - 388: 60 e0 ldi r22, 0x00 ; 0 - 38a: 70 e0 ldi r23, 0x00 ; 0 - 38c: 80 e0 ldi r24, 0x00 ; 0 - 38e: 90 e0 ldi r25, 0x00 ; 0 - 390: 65 d6 rcall .+3274 ; 0x105c <__cmpdi2_s8> - 392: d1 f0 breq .+52 ; 0x3c8 + 378: 21 70 andi r18, 0x01 ; 1 + 37a: 30 e0 ldi r19, 0x00 ; 0 + 37c: 40 e0 ldi r20, 0x00 ; 0 + 37e: 50 e0 ldi r21, 0x00 ; 0 + 380: 60 e0 ldi r22, 0x00 ; 0 + 382: 70 e0 ldi r23, 0x00 ; 0 + 384: 80 e0 ldi r24, 0x00 ; 0 + 386: 90 e0 ldi r25, 0x00 ; 0 + 388: b0 d5 rcall .+2912 ; 0xeea <__cmpdi2_s8> + 38a: d1 f0 breq .+52 ; 0x3c0 _ZN7MCP25156endSPIEv(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:229 volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 394: b0 e0 ldi r27, 0x00 ; 0 - 396: a0 e0 ldi r26, 0x00 ; 0 + 38c: b0 e0 ldi r27, 0x00 ; 0 + 38e: a0 e0 ldi r26, 0x00 ; 0 reattachMaskedInterrupts(): - 398: e0 33 cpi r30, 0x30 ; 48 - 39a: 70 f4 brcc .+28 ; 0x3b8 - 39c: ae 2f mov r26, r30 - 39e: a6 95 lsr r26 - 3a0: a6 95 lsr r26 - 3a2: a6 95 lsr r26 - 3a4: f0 e2 ldi r31, 0x20 ; 32 - 3a6: af 9f mul r26, r31 - 3a8: d0 01 movw r26, r0 - 3aa: 11 24 eor r1, r1 - 3ac: a0 5f subi r26, 0xF0 ; 240 - 3ae: bb 4f sbci r27, 0xFB ; 251 - 3b0: 8e 2f mov r24, r30 - 3b2: 87 70 andi r24, 0x07 ; 7 - 3b4: a8 0f add r26, r24 - 3b6: b1 1d adc r27, r1 + 390: e0 33 cpi r30, 0x30 ; 48 + 392: 70 f4 brcc .+28 ; 0x3b0 + 394: ae 2f mov r26, r30 + 396: a6 95 lsr r26 + 398: a6 95 lsr r26 + 39a: a6 95 lsr r26 + 39c: f0 e2 ldi r31, 0x20 ; 32 + 39e: af 9f mul r26, r31 + 3a0: d0 01 movw r26, r0 + 3a2: 11 24 eor r1, r1 + 3a4: a0 5f subi r26, 0xF0 ; 240 + 3a6: bb 4f sbci r27, 0xFB ; 251 + 3a8: 8e 2f mov r24, r30 + 3aa: 87 70 andi r24, 0x07 ; 7 + 3ac: a8 0f add r26, r24 + 3ae: b1 1d adc r27, r1 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:230 *pin_ctrl_reg |= irqMap[shift]; - 3b8: ce 2f mov r28, r30 - 3ba: d0 e0 ldi r29, 0x00 ; 0 - 3bc: c8 5d subi r28, 0xD8 ; 216 - 3be: d3 4c sbci r29, 0xC3 ; 195 - 3c0: 88 89 ldd r24, Y+16 ; 0x10 - 3c2: 9c 91 ld r25, X - 3c4: 89 2b or r24, r25 - 3c6: 8c 93 st X, r24 + 3b0: ce 2f mov r28, r30 + 3b2: d0 e0 ldi r29, 0x00 ; 0 + 3b4: c2 5c subi r28, 0xC2 ; 194 + 3b6: d3 4c sbci r29, 0xC3 ; 195 + 3b8: 88 89 ldd r24, Y+16 ; 0x10 + 3ba: 9c 91 ld r25, X + 3bc: 89 2b or r24, r25 + 3be: 8c 93 st X, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:232 } temp = temp >> 1; - 3c8: 94 01 movw r18, r8 - 3ca: a5 01 movw r20, r10 - 3cc: b6 01 movw r22, r12 - 3ce: c7 01 movw r24, r14 - 3d0: 01 e0 ldi r16, 0x01 ; 1 - 3d2: 29 d6 rcall .+3154 ; 0x1026 <__lshrdi3> - 3d4: 49 01 movw r8, r18 - 3d6: 5a 01 movw r10, r20 - 3d8: 6b 01 movw r12, r22 - 3da: 7c 01 movw r14, r24 + 3c0: 94 01 movw r18, r8 + 3c2: a5 01 movw r20, r10 + 3c4: b6 01 movw r22, r12 + 3c6: c7 01 movw r24, r14 + 3c8: 01 e0 ldi r16, 0x01 ; 1 + 3ca: 74 d5 rcall .+2792 ; 0xeb4 <__lshrdi3> + 3cc: 49 01 movw r8, r18 + 3ce: 5a 01 movw r10, r20 + 3d0: 6b 01 movw r12, r22 + 3d2: 7c 01 movw r14, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:233 shift++; - 3dc: ef 5f subi r30, 0xFF ; 255 - 3de: c9 cf rjmp .-110 ; 0x372 + 3d4: ef 5f subi r30, 0xFF ; 255 + 3d6: c9 cf rjmp .-110 ; 0x36a C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:235 } temp = interruptMask_hi; - 3e0: 80 90 34 3c lds r8, 0x3C34 ; 0x803c34 - 3e4: 90 90 35 3c lds r9, 0x3C35 ; 0x803c35 - 3e8: a0 90 36 3c lds r10, 0x3C36 ; 0x803c36 - 3ec: b0 90 37 3c lds r11, 0x3C37 ; 0x803c37 - 3f0: c1 2c mov r12, r1 - 3f2: d1 2c mov r13, r1 - 3f4: 76 01 movw r14, r12 + 3d8: 80 90 4a 3c lds r8, 0x3C4A ; 0x803c4a + 3dc: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b + 3e0: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c + 3e4: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d + 3e8: c1 2c mov r12, r1 + 3ea: d1 2c mov r13, r1 + 3ec: 76 01 movw r14, r12 _ZN7MCP25156endSPIEv(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:236 shift = 32; - 3f6: e0 e2 ldi r30, 0x20 ; 32 + 3ee: e0 e2 ldi r30, 0x20 ; 32 reattachMaskedInterrupts(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:237 while (temp != 0) { - 3f8: 94 01 movw r18, r8 - 3fa: a5 01 movw r20, r10 - 3fc: b6 01 movw r22, r12 - 3fe: c7 01 movw r24, r14 - 400: a0 e0 ldi r26, 0x00 ; 0 - 402: 2c d6 rcall .+3160 ; 0x105c <__cmpdi2_s8> - 404: 09 f4 brne .+2 ; 0x408 <__DATA_REGION_LENGTH__+0x8> - 406: 9b cf rjmp .-202 ; 0x33e + 3f0: 94 01 movw r18, r8 + 3f2: a5 01 movw r20, r10 + 3f4: b6 01 movw r22, r12 + 3f6: c7 01 movw r24, r14 + 3f8: a0 e0 ldi r26, 0x00 ; 0 + 3fa: 77 d5 rcall .+2798 ; 0xeea <__cmpdi2_s8> + 3fc: 09 f4 brne .+2 ; 0x400 <__DATA_REGION_LENGTH__> + 3fe: 9b cf rjmp .-202 ; 0x336 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:238 if (temp & 1) { - 408: 21 70 andi r18, 0x01 ; 1 - 40a: 30 e0 ldi r19, 0x00 ; 0 - 40c: 40 e0 ldi r20, 0x00 ; 0 - 40e: 50 e0 ldi r21, 0x00 ; 0 - 410: 60 e0 ldi r22, 0x00 ; 0 - 412: 70 e0 ldi r23, 0x00 ; 0 - 414: 80 e0 ldi r24, 0x00 ; 0 - 416: 90 e0 ldi r25, 0x00 ; 0 - 418: 21 d6 rcall .+3138 ; 0x105c <__cmpdi2_s8> - 41a: d1 f0 breq .+52 ; 0x450 <__DATA_REGION_LENGTH__+0x50> + 400: 21 70 andi r18, 0x01 ; 1 + 402: 30 e0 ldi r19, 0x00 ; 0 + 404: 40 e0 ldi r20, 0x00 ; 0 + 406: 50 e0 ldi r21, 0x00 ; 0 + 408: 60 e0 ldi r22, 0x00 ; 0 + 40a: 70 e0 ldi r23, 0x00 ; 0 + 40c: 80 e0 ldi r24, 0x00 ; 0 + 40e: 90 e0 ldi r25, 0x00 ; 0 + 410: 6c d5 rcall .+2776 ; 0xeea <__cmpdi2_s8> + 412: d1 f0 breq .+52 ; 0x448 <__DATA_REGION_LENGTH__+0x48> _ZN7MCP25156endSPIEv(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:239 volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 41c: b0 e0 ldi r27, 0x00 ; 0 - 41e: a0 e0 ldi r26, 0x00 ; 0 + 414: b0 e0 ldi r27, 0x00 ; 0 + 416: a0 e0 ldi r26, 0x00 ; 0 reattachMaskedInterrupts(): - 420: e0 33 cpi r30, 0x30 ; 48 - 422: 70 f4 brcc .+28 ; 0x440 <__DATA_REGION_LENGTH__+0x40> - 424: ae 2f mov r26, r30 - 426: a6 95 lsr r26 - 428: a6 95 lsr r26 - 42a: a6 95 lsr r26 - 42c: 80 e2 ldi r24, 0x20 ; 32 - 42e: a8 9f mul r26, r24 - 430: d0 01 movw r26, r0 - 432: 11 24 eor r1, r1 - 434: a0 5f subi r26, 0xF0 ; 240 - 436: bb 4f sbci r27, 0xFB ; 251 - 438: 8e 2f mov r24, r30 - 43a: 87 70 andi r24, 0x07 ; 7 - 43c: a8 0f add r26, r24 - 43e: b1 1d adc r27, r1 + 418: e0 33 cpi r30, 0x30 ; 48 + 41a: 70 f4 brcc .+28 ; 0x438 <__DATA_REGION_LENGTH__+0x38> + 41c: ae 2f mov r26, r30 + 41e: a6 95 lsr r26 + 420: a6 95 lsr r26 + 422: a6 95 lsr r26 + 424: 80 e2 ldi r24, 0x20 ; 32 + 426: a8 9f mul r26, r24 + 428: d0 01 movw r26, r0 + 42a: 11 24 eor r1, r1 + 42c: a0 5f subi r26, 0xF0 ; 240 + 42e: bb 4f sbci r27, 0xFB ; 251 + 430: 8e 2f mov r24, r30 + 432: 87 70 andi r24, 0x07 ; 7 + 434: a8 0f add r26, r24 + 436: b1 1d adc r27, r1 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:240 *pin_ctrl_reg |= irqMap[shift]; - 440: ce 2f mov r28, r30 - 442: d0 e0 ldi r29, 0x00 ; 0 - 444: c8 5d subi r28, 0xD8 ; 216 - 446: d3 4c sbci r29, 0xC3 ; 195 - 448: 88 89 ldd r24, Y+16 ; 0x10 - 44a: 9c 91 ld r25, X - 44c: 89 2b or r24, r25 - 44e: 8c 93 st X, r24 + 438: ce 2f mov r28, r30 + 43a: d0 e0 ldi r29, 0x00 ; 0 + 43c: c2 5c subi r28, 0xC2 ; 194 + 43e: d3 4c sbci r29, 0xC3 ; 195 + 440: 88 89 ldd r24, Y+16 ; 0x10 + 442: 9c 91 ld r25, X + 444: 89 2b or r24, r25 + 446: 8c 93 st X, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:242 } temp = temp >> 1; - 450: 94 01 movw r18, r8 - 452: a5 01 movw r20, r10 - 454: b6 01 movw r22, r12 - 456: c7 01 movw r24, r14 - 458: 01 e0 ldi r16, 0x01 ; 1 - 45a: e5 d5 rcall .+3018 ; 0x1026 <__lshrdi3> - 45c: 49 01 movw r8, r18 - 45e: 5a 01 movw r10, r20 - 460: 6b 01 movw r12, r22 - 462: 7c 01 movw r14, r24 + 448: 94 01 movw r18, r8 + 44a: a5 01 movw r20, r10 + 44c: b6 01 movw r22, r12 + 44e: c7 01 movw r24, r14 + 450: 01 e0 ldi r16, 0x01 ; 1 + 452: 30 d5 rcall .+2656 ; 0xeb4 <__lshrdi3> + 454: 49 01 movw r8, r18 + 456: 5a 01 movw r10, r20 + 458: 6b 01 movw r12, r22 + 45a: 7c 01 movw r14, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:243 shift++; - 464: ef 5f subi r30, 0xFF ; 255 - 466: c8 cf rjmp .-112 ; 0x3f8 + 45c: ef 5f subi r30, 0xFF ; 255 + 45e: c8 cf rjmp .-112 ; 0x3f0 -00000468 : -_Z15GetDeviceIdHighv(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:397 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - 468: e0 e0 ldi r30, 0x00 ; 0 - 46a: f1 e1 ldi r31, 0x11 ; 17 - 46c: 44 81 ldd r20, Z+4 ; 0x04 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:398 - CircularShift(SIGROW.SERNUM3) << 1 ^ - 46e: 96 81 ldd r25, Z+6 ; 0x06 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:399 - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - 470: 30 85 ldd r19, Z+8 ; 0x08 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:400 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ - 472: 22 85 ldd r18, Z+10 ; 0x0a -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:401 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); - 474: 84 85 ldd r24, Z+12 ; 0x0c -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - 476: 99 0f add r25, r25 - 478: 91 1d adc r25, r1 -_Z15GetDeviceIdHighv(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:398 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - 47a: 99 0f add r25, r25 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:397 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - 47c: 94 27 eor r25, r20 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - 47e: 33 0f add r19, r19 - 480: 31 1d adc r19, r1 - 482: 33 0f add r19, r19 - 484: 31 1d adc r19, r1 -_Z15GetDeviceIdHighv(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:398 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - 486: 93 27 eor r25, r19 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - 488: 22 95 swap r18 - 48a: 20 fb bst r18, 0 - 48c: 27 95 ror r18 - 48e: 27 f9 bld r18, 7 -_Z15GetDeviceIdHighv(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:399 -} - -byte GetDeviceIdHigh() { - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - 490: 92 27 eor r25, r18 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - 492: 82 95 swap r24 -_Z15GetDeviceIdHighv(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:402 - return (SIGROW.SERNUM1 ^ - CircularShift(SIGROW.SERNUM3) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM5)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); -} - 494: 89 27 eor r24, r25 - 496: 08 95 ret - -00000498 : -_Z14GetDeviceIdLowv(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:389 -{ - return myDeviceId; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - 498: e0 e0 ldi r30, 0x00 ; 0 - 49a: f1 e1 ldi r31, 0x11 ; 17 - 49c: 43 81 ldd r20, Z+3 ; 0x03 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:390 - CircularShift(SIGROW.SERNUM2) << 1 ^ - 49e: 95 81 ldd r25, Z+5 ; 0x05 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:391 - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - 4a0: 37 81 ldd r19, Z+7 ; 0x07 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:392 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - 4a2: 21 85 ldd r18, Z+9 ; 0x09 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:393 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); - 4a4: 83 85 ldd r24, Z+11 ; 0x0b -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - 4a6: 99 0f add r25, r25 - 4a8: 91 1d adc r25, r1 -_Z14GetDeviceIdLowv(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:390 - return myDeviceId; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - 4aa: 99 0f add r25, r25 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:389 -{ - return myDeviceId; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - 4ac: 94 27 eor r25, r20 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - 4ae: 33 0f add r19, r19 - 4b0: 31 1d adc r19, r1 - 4b2: 33 0f add r19, r19 - 4b4: 31 1d adc r19, r1 -_Z14GetDeviceIdLowv(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:390 - return myDeviceId; -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - 4b6: 93 27 eor r25, r19 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - 4b8: 22 95 swap r18 - 4ba: 20 fb bst r18, 0 - 4bc: 27 95 ror r18 - 4be: 27 f9 bld r18, 7 -_Z14GetDeviceIdLowv(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:391 -} - -byte GetDeviceIdLow() { - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - 4c0: 92 27 eor r25, r18 -CircularShift(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:360 - -} - -byte CircularShift(byte b) -{ - return (b << 1) | (b >> 7 & 1); - 4c2: 82 95 swap r24 -_Z14GetDeviceIdLowv(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:394 - return (SIGROW.SERNUM0 ^ - CircularShift(SIGROW.SERNUM2) << 1 ^ - CircularShift( CircularShift(SIGROW.SERNUM4)) ^ - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); -} - 4c4: 89 27 eor r24, r25 - 4c6: 08 95 ret - -000004c8 : -_Z11HandleFrameP9can_frame.constprop.19(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:255 - HandleFrame(&_frame); - } - delay(10); -} - -void HandleFrame(can_frame *frame) - 4c8: cf 92 push r12 - 4ca: df 92 push r13 - 4cc: ef 92 push r14 - 4ce: ff 92 push r15 - 4d0: cf 93 push r28 - 4d2: df 93 push r29 -digitalWrite(): - 4d4: 61 e0 ldi r22, 0x01 ; 1 - 4d6: 85 e1 ldi r24, 0x15 ; 21 - 4d8: 6e de rcall .-804 ; 0x1b6 -HandleMeyPinTriggeredCanPackage(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:267 -} - -// this method will save the state of the triggered pin to be present for the rules -void HandleMeyPinTriggeredCanPackage(can_frame *frame) -{ - if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID) - 4da: c0 90 18 3c lds r12, 0x3C18 ; 0x803c18 <_frame> - 4de: d0 90 19 3c lds r13, 0x3C19 ; 0x803c19 <_frame+0x1> - 4e2: e0 90 1a 3c lds r14, 0x3C1A ; 0x803c1a <_frame+0x2> - 4e6: f0 90 1b 3c lds r15, 0x3C1B ; 0x803c1b <_frame+0x3> -GetPackageType(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:370 - return canFrameId & 0xFFFF; -} - -uint16_t GetPackageType(uint32_t canFrameId) -{ - return (canFrameId / 0x10000) & 0xFFF; - 4ea: c7 01 movw r24, r14 - 4ec: 9f 70 andi r25, 0x0F ; 15 -HandleMeyPinTriggeredCanPackage(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:267 -} - -// this method will save the state of the triggered pin to be present for the rules -void HandleMeyPinTriggeredCanPackage(can_frame *frame) -{ - if (GetPackageType(frame->can_id) == SWITCH_TRIGGERED_CAN_ID) - 4ee: 80 35 cpi r24, 0x50 ; 80 - 4f0: 91 05 cpc r25, r1 - 4f2: 71 f5 brne .+92 ; 0x550 -GetDeviceId(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:365 - return (b << 1) | (b >> 7 & 1); -} - -uint16_t GetDeviceId(uint32_t canFrameId) -{ - return canFrameId & 0xFFFF; - 4f4: a6 01 movw r20, r12 - 4f6: 80 e0 ldi r24, 0x00 ; 0 - 4f8: c0 e0 ldi r28, 0x00 ; 0 - 4fa: dc e3 ldi r29, 0x3C ; 60 -FindOrAdd(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:101 - return this->next->Count() + 1; - } - - RemotePinInfo* FindOrAdd(uint16_t deviceId, byte count = 0) - { - if (count > MAX_REMOTE_PIN_COUNT) - 4fc: 98 81 ld r25, Y - 4fe: 98 17 cp r25, r24 - 500: 38 f1 brcs .+78 ; 0x550 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:105 - return NULL; - - - if (this->DeviceId == 0 && this->pinState == 0) - 502: 29 81 ldd r18, Y+1 ; 0x01 - 504: 3a 81 ldd r19, Y+2 ; 0x02 - 506: 23 2b or r18, r19 - 508: 31 f4 brne .+12 ; 0x516 - 50a: 2b 81 ldd r18, Y+3 ; 0x03 - 50c: 3c 81 ldd r19, Y+4 ; 0x04 - 50e: 23 2b or r18, r19 - 510: 11 f4 brne .+4 ; 0x516 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:107 - { - this->DeviceId = deviceId; - 512: 49 83 std Y+1, r20 ; 0x01 - 514: 5a 83 std Y+2, r21 ; 0x02 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:111 - this->pinState = 0; - } - - if (this->DeviceId == deviceId) - 516: 29 81 ldd r18, Y+1 ; 0x01 - 518: 3a 81 ldd r19, Y+2 ; 0x02 - 51a: 42 17 cp r20, r18 - 51c: 53 07 cpc r21, r19 - 51e: f9 f0 breq .+62 ; 0x55e -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:117 - { - //ToggleDebug(); - return this; - } - - if (next != NULL) - 520: 2d 81 ldd r18, Y+5 ; 0x05 - 522: 3e 81 ldd r19, Y+6 ; 0x06 - 524: 21 15 cp r18, r1 - 526: 31 05 cpc r19, r1 - 528: 19 f0 breq .+6 ; 0x530 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:119 - { - return next->FindOrAdd(deviceId, count + 1); - 52a: 8f 5f subi r24, 0xFF ; 255 -_Z11HandleFrameP9can_frame.constprop.19(): - 52c: e9 01 movw r28, r18 - 52e: e6 cf rjmp .-52 ; 0x4fc -operator new(): -C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/new.cpp:23 - -#include - -void *operator new(size_t size) -{ - return malloc(size); - 530: 87 e0 ldi r24, 0x07 ; 7 - 532: 90 e0 ldi r25, 0x00 ; 0 - 534: b1 d5 rcall .+2914 ; 0x1098 - 536: fc 01 movw r30, r24 -_ZN13RemotePinInfoC2Ev(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:72 - this->is_input = true; - this->meyPinId = meyPinId; - } -} PinState; - -struct RemotePinInfo - 538: 82 e3 ldi r24, 0x32 ; 50 - 53a: 80 83 st Z, r24 - 53c: 13 82 std Z+3, r1 ; 0x03 - 53e: 14 82 std Z+4, r1 ; 0x04 - 540: 15 82 std Z+5, r1 ; 0x05 - 542: 16 82 std Z+6, r1 ; 0x06 -FindOrAdd(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:123 - { - return next->FindOrAdd(deviceId, count + 1); - } - - RemotePinInfo *theNext = new RemotePinInfo; - theNext->DeviceId = deviceId; - 544: c1 82 std Z+1, r12 ; 0x01 - 546: d2 82 std Z+2, r13 ; 0x02 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:127 - theNext->pinState = 0; - theNext->next = NULL; - - this->next = theNext; - 548: ed 83 std Y+5, r30 ; 0x05 - 54a: fe 83 std Y+6, r31 ; 0x06 -HandleMeyPinTriggeredCanPackage(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:273 - { - - RemotePinInfo *currentPinState = remotePinInfos.FindOrAdd(GetDeviceId(frame->can_id) ); - - - if (currentPinState == NULL) - 54c: 30 97 sbiw r30, 0x00 ; 0 - 54e: 41 f4 brne .+16 ; 0x560 -_Z11HandleFrameP9can_frame.constprop.19(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:262 - digitalWrite(PIN_PC7, HIGH); - HandleMeyPinTriggeredCanPackage(frame); - HandleTriggerMeypinCanPackage(frame); - // Handle rules needs to be the last call - HandleRules(frame); -} - 550: df 91 pop r29 - 552: cf 91 pop r28 - 554: ff 90 pop r15 - 556: ef 90 pop r14 - 558: df 90 pop r13 - 55a: cf 90 pop r12 - 55c: 08 95 ret -FindOrAdd(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:111 - { - this->DeviceId = deviceId; - this->pinState = 0; - } - - if (this->DeviceId == deviceId) - 55e: fe 01 movw r30, r28 - 560: 43 81 ldd r20, Z+3 ; 0x03 - 562: 54 81 ldd r21, Z+4 ; 0x04 - 564: 20 91 20 3c lds r18, 0x3C20 ; 0x803c20 <_frame+0x8> - 568: 21 50 subi r18, 0x01 ; 1 - 56a: 33 0b sbc r19, r19 - 56c: 81 e0 ldi r24, 0x01 ; 1 - 56e: 90 e0 ldi r25, 0x00 ; 0 - 570: 02 c0 rjmp .+4 ; 0x576 - 572: 88 0f add r24, r24 - 574: 99 1f adc r25, r25 - 576: 2a 95 dec r18 - 578: e2 f7 brpl .-8 ; 0x572 -_ZN13RemotePinInfo11setPinStateEhb.isra.1(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:86 - return (this->pinState >> (meyPin - 1)) & 1; - } - - void setPinState(byte meyPin, bool state) - { - if (state) - 57a: 20 91 21 3c lds r18, 0x3C21 ; 0x803c21 <_frame+0x9> - 57e: 22 23 and r18, r18 - 580: 29 f0 breq .+10 ; 0x58c -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:87 - this->pinState = this->pinState | (1 << (meyPin - 1)); // 0001 0000 - 582: 84 2b or r24, r20 - 584: 95 2b or r25, r21 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:89 - else - this->pinState = this->pinState & (~(1 << (meyPin - 1))); // 1110 1111 -> not - 586: 83 83 std Z+3, r24 ; 0x03 - 588: 94 83 std Z+4, r25 ; 0x04 - 58a: e2 cf rjmp .-60 ; 0x550 - 58c: 80 95 com r24 - 58e: 90 95 com r25 - 590: 84 23 and r24, r20 - 592: 95 23 and r25, r21 - 594: f8 cf rjmp .-16 ; 0x586 - -00000596 : +00000460 : _ZN7MCP25158startSPIEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:24 SPICS = _CS; @@ -1537,20 +1055,20 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:24 } void MCP2515::startSPI() { - 596: 6f 92 push r6 - 598: 7f 92 push r7 - 59a: 8f 92 push r8 - 59c: 9f 92 push r9 - 59e: af 92 push r10 - 5a0: bf 92 push r11 - 5a2: cf 92 push r12 - 5a4: df 92 push r13 - 5a6: ef 92 push r14 - 5a8: ff 92 push r15 - 5aa: 0f 93 push r16 - 5ac: cf 93 push r28 - 5ae: df 93 push r29 - 5b0: 3c 01 movw r6, r24 + 460: 6f 92 push r6 + 462: 7f 92 push r7 + 464: 8f 92 push r8 + 466: 9f 92 push r9 + 468: af 92 push r10 + 46a: bf 92 push r11 + 46c: cf 92 push r12 + 46e: df 92 push r13 + 470: ef 92 push r14 + 472: ff 92 push r15 + 474: 0f 93 push r16 + 476: cf 93 push r28 + 478: df 93 push r29 + 47a: 3c 01 movw r6, r24 beginTransaction(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:249 } @@ -1559,18 +1077,18 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. void SPIClass::beginTransaction(SPISettings settings) { if (interruptMode != SPI_IMODE_NONE) - 5b2: 80 91 2e 3c lds r24, 0x3C2E ; 0x803c2e - 5b6: 88 23 and r24, r24 - 5b8: 19 f0 breq .+6 ; 0x5c0 + 47c: 80 91 44 3c lds r24, 0x3C44 ; 0x803c44 + 480: 88 23 and r24, r24 + 482: 19 f0 breq .+6 ; 0x48a C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:251 { if (interruptMode & SPI_IMODE_GLOBAL) - 5ba: 81 ff sbrs r24, 1 - 5bc: 1b c0 rjmp .+54 ; 0x5f4 + 484: 81 ff sbrs r24, 1 + 486: 1b c0 rjmp .+54 ; 0x4be C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:253 { noInterrupts(); - 5be: f8 94 cli + 488: f8 94 cli config(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:142 initialized = true; @@ -1579,42 +1097,42 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. void SPIClass::config(SPISettings settings) { SPI0.CTRLA = settings.ctrla; - 5c0: 81 e3 ldi r24, 0x31 ; 49 - 5c2: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 + 48a: 81 e3 ldi r24, 0x31 ; 49 + 48c: 80 93 c0 08 sts 0x08C0, r24 ; 0x8008c0 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:143 SPI0.CTRLB = settings.ctrlb; - 5c6: 84 e0 ldi r24, 0x04 ; 4 - 5c8: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 + 490: 84 e0 ldi r24, 0x04 ; 4 + 492: 80 93 c1 08 sts 0x08C1, r24 ; 0x8008c1 _ZN7MCP25158startSPIEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:26 SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); digitalWrite(SPICS, LOW); - 5cc: f3 01 movw r30, r6 - 5ce: 80 81 ld r24, Z + 496: f3 01 movw r30, r6 + 498: 80 81 ld r24, Z digitalWrite(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:137 - 5d0: 89 32 cpi r24, 0x29 ; 41 - 5d2: 08 f0 brcs .+2 ; 0x5d6 - 5d4: 9c c0 rjmp .+312 ; 0x70e - 5d6: 60 e0 ldi r22, 0x00 ; 0 + 49a: 89 32 cpi r24, 0x29 ; 41 + 49c: 08 f0 brcs .+2 ; 0x4a0 + 49e: 9c c0 rjmp .+312 ; 0x5d8 + 4a0: 60 e0 ldi r22, 0x00 ; 0 _ZN7MCP25158startSPIEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27 } - 5d8: df 91 pop r29 - 5da: cf 91 pop r28 - 5dc: 0f 91 pop r16 - 5de: ff 90 pop r15 - 5e0: ef 90 pop r14 - 5e2: df 90 pop r13 - 5e4: cf 90 pop r12 - 5e6: bf 90 pop r11 - 5e8: af 90 pop r10 - 5ea: 9f 90 pop r9 - 5ec: 8f 90 pop r8 - 5ee: 7f 90 pop r7 - 5f0: 6f 90 pop r6 + 4a2: df 91 pop r29 + 4a4: cf 91 pop r28 + 4a6: 0f 91 pop r16 + 4a8: ff 90 pop r15 + 4aa: ef 90 pop r14 + 4ac: df 90 pop r13 + 4ae: cf 90 pop r12 + 4b0: bf 90 pop r11 + 4b2: af 90 pop r10 + 4b4: 9f 90 pop r9 + 4b6: 8f 90 pop r8 + 4b8: 7f 90 pop r7 + 4ba: 6f 90 pop r6 digitalWrite(): - 5f2: e1 cd rjmp .-1086 ; 0x1b6 + 4bc: 71 ce rjmp .-798 ; 0x1a0 beginTransaction(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:255 { @@ -1623,8 +1141,8 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. noInterrupts(); } else if (interruptMode & SPI_IMODE_EXTINT) - 5f4: 80 ff sbrs r24, 0 - 5f6: e4 cf rjmp .-56 ; 0x5c0 + 4be: 80 ff sbrs r24, 0 + 4c0: e4 cf rjmp .-56 ; 0x48a detachMaskedInterrupts(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:200 #endif @@ -1633,200 +1151,200 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. void SPIClass::detachMaskedInterrupts() { uint64_t temp = interruptMask_lo; - 5f8: 80 90 30 3c lds r8, 0x3C30 ; 0x803c30 - 5fc: 90 90 31 3c lds r9, 0x3C31 ; 0x803c31 - 600: a0 90 32 3c lds r10, 0x3C32 ; 0x803c32 - 604: b0 90 33 3c lds r11, 0x3C33 ; 0x803c33 - 608: c1 2c mov r12, r1 - 60a: d1 2c mov r13, r1 - 60c: 76 01 movw r14, r12 + 4c2: 80 90 46 3c lds r8, 0x3C46 ; 0x803c46 + 4c6: 90 90 47 3c lds r9, 0x3C47 ; 0x803c47 + 4ca: a0 90 48 3c lds r10, 0x3C48 ; 0x803c48 + 4ce: b0 90 49 3c lds r11, 0x3C49 ; 0x803c49 + 4d2: c1 2c mov r12, r1 + 4d4: d1 2c mov r13, r1 + 4d6: 76 01 movw r14, r12 _ZN7MCP25158startSPIEv(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:201 uint8_t shift = 0; - 60e: b0 e0 ldi r27, 0x00 ; 0 + 4d8: b0 e0 ldi r27, 0x00 ; 0 detachMaskedInterrupts(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:202 while (temp != 0) { - 610: 94 01 movw r18, r8 - 612: a5 01 movw r20, r10 - 614: b6 01 movw r22, r12 - 616: c7 01 movw r24, r14 - 618: a0 e0 ldi r26, 0x00 ; 0 - 61a: 20 d5 rcall .+2624 ; 0x105c <__cmpdi2_s8> - 61c: 91 f1 breq .+100 ; 0x682 + 4da: 94 01 movw r18, r8 + 4dc: a5 01 movw r20, r10 + 4de: b6 01 movw r22, r12 + 4e0: c7 01 movw r24, r14 + 4e2: a0 e0 ldi r26, 0x00 ; 0 + 4e4: 02 d5 rcall .+2564 ; 0xeea <__cmpdi2_s8> + 4e6: 91 f1 breq .+100 ; 0x54c C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:203 if (temp & 1) { - 61e: 21 70 andi r18, 0x01 ; 1 - 620: 30 e0 ldi r19, 0x00 ; 0 - 622: 40 e0 ldi r20, 0x00 ; 0 - 624: 50 e0 ldi r21, 0x00 ; 0 - 626: 60 e0 ldi r22, 0x00 ; 0 - 628: 70 e0 ldi r23, 0x00 ; 0 - 62a: 80 e0 ldi r24, 0x00 ; 0 - 62c: 90 e0 ldi r25, 0x00 ; 0 - 62e: 16 d5 rcall .+2604 ; 0x105c <__cmpdi2_s8> - 630: e1 f0 breq .+56 ; 0x66a + 4e8: 21 70 andi r18, 0x01 ; 1 + 4ea: 30 e0 ldi r19, 0x00 ; 0 + 4ec: 40 e0 ldi r20, 0x00 ; 0 + 4ee: 50 e0 ldi r21, 0x00 ; 0 + 4f0: 60 e0 ldi r22, 0x00 ; 0 + 4f2: 70 e0 ldi r23, 0x00 ; 0 + 4f4: 80 e0 ldi r24, 0x00 ; 0 + 4f6: 90 e0 ldi r25, 0x00 ; 0 + 4f8: f8 d4 rcall .+2544 ; 0xeea <__cmpdi2_s8> + 4fa: e1 f0 breq .+56 ; 0x534 _ZN7MCP25158startSPIEv(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:204 volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 632: d0 e0 ldi r29, 0x00 ; 0 - 634: c0 e0 ldi r28, 0x00 ; 0 + 4fc: d0 e0 ldi r29, 0x00 ; 0 + 4fe: c0 e0 ldi r28, 0x00 ; 0 detachMaskedInterrupts(): - 636: b0 33 cpi r27, 0x30 ; 48 - 638: 70 f4 brcc .+28 ; 0x656 - 63a: cb 2f mov r28, r27 - 63c: c6 95 lsr r28 - 63e: c6 95 lsr r28 - 640: c6 95 lsr r28 - 642: 80 e2 ldi r24, 0x20 ; 32 - 644: c8 9f mul r28, r24 - 646: e0 01 movw r28, r0 - 648: 11 24 eor r1, r1 - 64a: c0 5f subi r28, 0xF0 ; 240 - 64c: db 4f sbci r29, 0xFB ; 251 - 64e: 8b 2f mov r24, r27 - 650: 87 70 andi r24, 0x07 ; 7 - 652: c8 0f add r28, r24 - 654: d1 1d adc r29, r1 + 500: b0 33 cpi r27, 0x30 ; 48 + 502: 70 f4 brcc .+28 ; 0x520 + 504: cb 2f mov r28, r27 + 506: c6 95 lsr r28 + 508: c6 95 lsr r28 + 50a: c6 95 lsr r28 + 50c: 80 e2 ldi r24, 0x20 ; 32 + 50e: c8 9f mul r28, r24 + 510: e0 01 movw r28, r0 + 512: 11 24 eor r1, r1 + 514: c0 5f subi r28, 0xF0 ; 240 + 516: db 4f sbci r29, 0xFB ; 251 + 518: 8b 2f mov r24, r27 + 51a: 87 70 andi r24, 0x07 ; 7 + 51c: c8 0f add r28, r24 + 51e: d1 1d adc r29, r1 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:205 irqMap[shift] = *pin_ctrl_reg; - 656: 8b 2f mov r24, r27 - 658: 90 e0 ldi r25, 0x00 ; 0 - 65a: 28 81 ld r18, Y - 65c: 88 5d subi r24, 0xD8 ; 216 - 65e: 93 4c sbci r25, 0xC3 ; 195 - 660: fc 01 movw r30, r24 - 662: 20 8b std Z+16, r18 ; 0x10 + 520: 8b 2f mov r24, r27 + 522: 90 e0 ldi r25, 0x00 ; 0 + 524: 28 81 ld r18, Y + 526: 82 5c subi r24, 0xC2 ; 194 + 528: 93 4c sbci r25, 0xC3 ; 195 + 52a: fc 01 movw r30, r24 + 52c: 20 8b std Z+16, r18 ; 0x10 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:206 *pin_ctrl_reg &= ~(PORT_ISC_gm); - 664: 88 81 ld r24, Y - 666: 88 7f andi r24, 0xF8 ; 248 - 668: 88 83 st Y, r24 + 52e: 88 81 ld r24, Y + 530: 88 7f andi r24, 0xF8 ; 248 + 532: 88 83 st Y, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:208 } temp = temp >> 1; - 66a: 94 01 movw r18, r8 - 66c: a5 01 movw r20, r10 - 66e: b6 01 movw r22, r12 - 670: c7 01 movw r24, r14 - 672: 01 e0 ldi r16, 0x01 ; 1 - 674: d8 d4 rcall .+2480 ; 0x1026 <__lshrdi3> - 676: 49 01 movw r8, r18 - 678: 5a 01 movw r10, r20 - 67a: 6b 01 movw r12, r22 - 67c: 7c 01 movw r14, r24 + 534: 94 01 movw r18, r8 + 536: a5 01 movw r20, r10 + 538: b6 01 movw r22, r12 + 53a: c7 01 movw r24, r14 + 53c: 01 e0 ldi r16, 0x01 ; 1 + 53e: ba d4 rcall .+2420 ; 0xeb4 <__lshrdi3> + 540: 49 01 movw r8, r18 + 542: 5a 01 movw r10, r20 + 544: 6b 01 movw r12, r22 + 546: 7c 01 movw r14, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:209 shift++; - 67e: bf 5f subi r27, 0xFF ; 255 - 680: c7 cf rjmp .-114 ; 0x610 + 548: bf 5f subi r27, 0xFF ; 255 + 54a: c7 cf rjmp .-114 ; 0x4da C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:211 } temp = interruptMask_hi; - 682: 80 90 34 3c lds r8, 0x3C34 ; 0x803c34 - 686: 90 90 35 3c lds r9, 0x3C35 ; 0x803c35 - 68a: a0 90 36 3c lds r10, 0x3C36 ; 0x803c36 - 68e: b0 90 37 3c lds r11, 0x3C37 ; 0x803c37 - 692: c1 2c mov r12, r1 - 694: d1 2c mov r13, r1 - 696: 76 01 movw r14, r12 + 54c: 80 90 4a 3c lds r8, 0x3C4A ; 0x803c4a + 550: 90 90 4b 3c lds r9, 0x3C4B ; 0x803c4b + 554: a0 90 4c 3c lds r10, 0x3C4C ; 0x803c4c + 558: b0 90 4d 3c lds r11, 0x3C4D ; 0x803c4d + 55c: c1 2c mov r12, r1 + 55e: d1 2c mov r13, r1 + 560: 76 01 movw r14, r12 _ZN7MCP25158startSPIEv(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:212 shift = 32; - 698: b0 e2 ldi r27, 0x20 ; 32 + 562: b0 e2 ldi r27, 0x20 ; 32 detachMaskedInterrupts(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:213 while (temp != 0) { - 69a: 94 01 movw r18, r8 - 69c: a5 01 movw r20, r10 - 69e: b6 01 movw r22, r12 - 6a0: c7 01 movw r24, r14 - 6a2: a0 e0 ldi r26, 0x00 ; 0 - 6a4: db d4 rcall .+2486 ; 0x105c <__cmpdi2_s8> - 6a6: 09 f4 brne .+2 ; 0x6aa - 6a8: 8b cf rjmp .-234 ; 0x5c0 + 564: 94 01 movw r18, r8 + 566: a5 01 movw r20, r10 + 568: b6 01 movw r22, r12 + 56a: c7 01 movw r24, r14 + 56c: a0 e0 ldi r26, 0x00 ; 0 + 56e: bd d4 rcall .+2426 ; 0xeea <__cmpdi2_s8> + 570: 09 f4 brne .+2 ; 0x574 + 572: 8b cf rjmp .-234 ; 0x48a C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:214 if (temp & 1) { - 6aa: 21 70 andi r18, 0x01 ; 1 - 6ac: 30 e0 ldi r19, 0x00 ; 0 - 6ae: 40 e0 ldi r20, 0x00 ; 0 - 6b0: 50 e0 ldi r21, 0x00 ; 0 - 6b2: 60 e0 ldi r22, 0x00 ; 0 - 6b4: 70 e0 ldi r23, 0x00 ; 0 - 6b6: 80 e0 ldi r24, 0x00 ; 0 - 6b8: 90 e0 ldi r25, 0x00 ; 0 - 6ba: d0 d4 rcall .+2464 ; 0x105c <__cmpdi2_s8> - 6bc: e1 f0 breq .+56 ; 0x6f6 + 574: 21 70 andi r18, 0x01 ; 1 + 576: 30 e0 ldi r19, 0x00 ; 0 + 578: 40 e0 ldi r20, 0x00 ; 0 + 57a: 50 e0 ldi r21, 0x00 ; 0 + 57c: 60 e0 ldi r22, 0x00 ; 0 + 57e: 70 e0 ldi r23, 0x00 ; 0 + 580: 80 e0 ldi r24, 0x00 ; 0 + 582: 90 e0 ldi r25, 0x00 ; 0 + 584: b2 d4 rcall .+2404 ; 0xeea <__cmpdi2_s8> + 586: e1 f0 breq .+56 ; 0x5c0 _ZN7MCP25158startSPIEv(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:215 volatile uint8_t* pin_ctrl_reg = getPINnCTRLregister(portToPortStruct(shift/8), shift%8); - 6be: d0 e0 ldi r29, 0x00 ; 0 - 6c0: c0 e0 ldi r28, 0x00 ; 0 + 588: d0 e0 ldi r29, 0x00 ; 0 + 58a: c0 e0 ldi r28, 0x00 ; 0 detachMaskedInterrupts(): - 6c2: b0 33 cpi r27, 0x30 ; 48 - 6c4: 70 f4 brcc .+28 ; 0x6e2 - 6c6: cb 2f mov r28, r27 - 6c8: c6 95 lsr r28 - 6ca: c6 95 lsr r28 - 6cc: c6 95 lsr r28 - 6ce: f0 e2 ldi r31, 0x20 ; 32 - 6d0: cf 9f mul r28, r31 - 6d2: e0 01 movw r28, r0 - 6d4: 11 24 eor r1, r1 - 6d6: c0 5f subi r28, 0xF0 ; 240 - 6d8: db 4f sbci r29, 0xFB ; 251 - 6da: 8b 2f mov r24, r27 - 6dc: 87 70 andi r24, 0x07 ; 7 - 6de: c8 0f add r28, r24 - 6e0: d1 1d adc r29, r1 + 58c: b0 33 cpi r27, 0x30 ; 48 + 58e: 70 f4 brcc .+28 ; 0x5ac + 590: cb 2f mov r28, r27 + 592: c6 95 lsr r28 + 594: c6 95 lsr r28 + 596: c6 95 lsr r28 + 598: f0 e2 ldi r31, 0x20 ; 32 + 59a: cf 9f mul r28, r31 + 59c: e0 01 movw r28, r0 + 59e: 11 24 eor r1, r1 + 5a0: c0 5f subi r28, 0xF0 ; 240 + 5a2: db 4f sbci r29, 0xFB ; 251 + 5a4: 8b 2f mov r24, r27 + 5a6: 87 70 andi r24, 0x07 ; 7 + 5a8: c8 0f add r28, r24 + 5aa: d1 1d adc r29, r1 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:216 irqMap[shift] = *pin_ctrl_reg; - 6e2: 8b 2f mov r24, r27 - 6e4: 90 e0 ldi r25, 0x00 ; 0 - 6e6: 28 81 ld r18, Y - 6e8: 88 5d subi r24, 0xD8 ; 216 - 6ea: 93 4c sbci r25, 0xC3 ; 195 - 6ec: fc 01 movw r30, r24 - 6ee: 20 8b std Z+16, r18 ; 0x10 + 5ac: 8b 2f mov r24, r27 + 5ae: 90 e0 ldi r25, 0x00 ; 0 + 5b0: 28 81 ld r18, Y + 5b2: 82 5c subi r24, 0xC2 ; 194 + 5b4: 93 4c sbci r25, 0xC3 ; 195 + 5b6: fc 01 movw r30, r24 + 5b8: 20 8b std Z+16, r18 ; 0x10 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:217 *pin_ctrl_reg &= ~(PORT_ISC_gm); - 6f0: 88 81 ld r24, Y - 6f2: 88 7f andi r24, 0xF8 ; 248 - 6f4: 88 83 st Y, r24 + 5ba: 88 81 ld r24, Y + 5bc: 88 7f andi r24, 0xF8 ; 248 + 5be: 88 83 st Y, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:219 } temp = temp >> 1; - 6f6: 94 01 movw r18, r8 - 6f8: a5 01 movw r20, r10 - 6fa: b6 01 movw r22, r12 - 6fc: c7 01 movw r24, r14 - 6fe: 01 e0 ldi r16, 0x01 ; 1 - 700: 92 d4 rcall .+2340 ; 0x1026 <__lshrdi3> - 702: 49 01 movw r8, r18 - 704: 5a 01 movw r10, r20 - 706: 6b 01 movw r12, r22 - 708: 7c 01 movw r14, r24 + 5c0: 94 01 movw r18, r8 + 5c2: a5 01 movw r20, r10 + 5c4: b6 01 movw r22, r12 + 5c6: c7 01 movw r24, r14 + 5c8: 01 e0 ldi r16, 0x01 ; 1 + 5ca: 74 d4 rcall .+2280 ; 0xeb4 <__lshrdi3> + 5cc: 49 01 movw r8, r18 + 5ce: 5a 01 movw r10, r20 + 5d0: 6b 01 movw r12, r22 + 5d2: 7c 01 movw r14, r24 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\libraries\SPI\src/SPI.cpp:220 shift++; - 70a: bf 5f subi r27, 0xFF ; 255 - 70c: c6 cf rjmp .-116 ; 0x69a + 5d4: bf 5f subi r27, 0xFF ; 255 + 5d6: c6 cf rjmp .-116 ; 0x564 _ZN7MCP25158startSPIEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:27 - 70e: df 91 pop r29 - 710: cf 91 pop r28 - 712: 0f 91 pop r16 - 714: ff 90 pop r15 - 716: ef 90 pop r14 - 718: df 90 pop r13 - 71a: cf 90 pop r12 - 71c: bf 90 pop r11 - 71e: af 90 pop r10 - 720: 9f 90 pop r9 - 722: 8f 90 pop r8 - 724: 7f 90 pop r7 - 726: 6f 90 pop r6 - 728: 08 95 ret + 5d8: df 91 pop r29 + 5da: cf 91 pop r28 + 5dc: 0f 91 pop r16 + 5de: ff 90 pop r15 + 5e0: ef 90 pop r14 + 5e2: df 90 pop r13 + 5e4: cf 90 pop r12 + 5e6: bf 90 pop r11 + 5e8: af 90 pop r10 + 5ea: 9f 90 pop r9 + 5ec: 8f 90 pop r8 + 5ee: 7f 90 pop r7 + 5f0: 6f 90 pop r6 + 5f2: 08 95 ret -0000072a : +000005f4 : _ZN7MCP251514modifyRegisterENS_8REGISTEREhh(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:129 } @@ -1835,44 +1353,44 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:129 void MCP2515::modifyRegister(const REGISTER reg, const uint8_t mask, const uint8_t data) { - 72a: ff 92 push r15 - 72c: 0f 93 push r16 - 72e: 1f 93 push r17 - 730: cf 93 push r28 - 732: df 93 push r29 - 734: ec 01 movw r28, r24 - 736: f6 2e mov r15, r22 - 738: 04 2f mov r16, r20 - 73a: 12 2f mov r17, r18 + 5f4: ff 92 push r15 + 5f6: 0f 93 push r16 + 5f8: 1f 93 push r17 + 5fa: cf 93 push r28 + 5fc: df 93 push r29 + 5fe: ec 01 movw r28, r24 + 600: f6 2e mov r15, r22 + 602: 04 2f mov r16, r20 + 604: 12 2f mov r17, r18 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:130 startSPI(); - 73c: 2c df rcall .-424 ; 0x596 + 606: 2c df rcall .-424 ; 0x460 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:131 SPI.transfer(INSTRUCTION_BITMOD); - 73e: 85 e0 ldi r24, 0x05 ; 5 - 740: 30 dd rcall .-1440 ; 0x1a2 + 608: 85 e0 ldi r24, 0x05 ; 5 + 60a: c0 dd rcall .-1152 ; 0x18c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:132 SPI.transfer(reg); - 742: 8f 2d mov r24, r15 - 744: 2e dd rcall .-1444 ; 0x1a2 + 60c: 8f 2d mov r24, r15 + 60e: be dd rcall .-1156 ; 0x18c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:133 SPI.transfer(mask); - 746: 80 2f mov r24, r16 - 748: 2c dd rcall .-1448 ; 0x1a2 + 610: 80 2f mov r24, r16 + 612: bc dd rcall .-1160 ; 0x18c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:134 SPI.transfer(data); - 74a: 81 2f mov r24, r17 - 74c: 2a dd rcall .-1452 ; 0x1a2 + 614: 81 2f mov r24, r17 + 616: ba dd rcall .-1164 ; 0x18c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:135 endSPI(); - 74e: ce 01 movw r24, r28 + 618: ce 01 movw r24, r28 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:136 } - 750: df 91 pop r29 - 752: cf 91 pop r28 - 754: 1f 91 pop r17 - 756: 0f 91 pop r16 - 758: ff 90 pop r15 + 61a: df 91 pop r29 + 61c: cf 91 pop r28 + 61e: 1f 91 pop r17 + 620: 0f 91 pop r16 + 622: ff 90 pop r15 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:135 startSPI(); SPI.transfer(INSTRUCTION_BITMOD); @@ -1880,9 +1398,9 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:135 SPI.transfer(mask); SPI.transfer(data); endSPI(); - 75a: d9 cd rjmp .-1102 ; 0x30e + 624: 70 ce rjmp .-800 ; 0x306 -0000075c : +00000626 : _ZN7MCP251512setRegistersENS_8REGISTEREPKhh(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:118 SPI.transfer(value); @@ -1891,57 +1409,57 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:118 void MCP2515::setRegisters(const REGISTER reg, const uint8_t values[], const uint8_t n) { - 75c: df 92 push r13 - 75e: ef 92 push r14 - 760: ff 92 push r15 - 762: 0f 93 push r16 - 764: 1f 93 push r17 - 766: cf 93 push r28 - 768: df 93 push r29 - 76a: 7c 01 movw r14, r24 - 76c: c6 2f mov r28, r22 - 76e: d4 2e mov r13, r20 - 770: 15 2f mov r17, r21 - 772: 02 2f mov r16, r18 + 626: df 92 push r13 + 628: ef 92 push r14 + 62a: ff 92 push r15 + 62c: 0f 93 push r16 + 62e: 1f 93 push r17 + 630: cf 93 push r28 + 632: df 93 push r29 + 634: 7c 01 movw r14, r24 + 636: c6 2f mov r28, r22 + 638: d4 2e mov r13, r20 + 63a: 15 2f mov r17, r21 + 63c: 02 2f mov r16, r18 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:119 startSPI(); - 774: 10 df rcall .-480 ; 0x596 + 63e: 10 df rcall .-480 ; 0x460 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:120 SPI.transfer(INSTRUCTION_WRITE); - 776: 82 e0 ldi r24, 0x02 ; 2 - 778: 14 dd rcall .-1496 ; 0x1a2 + 640: 82 e0 ldi r24, 0x02 ; 2 + 642: a4 dd rcall .-1208 ; 0x18c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:121 SPI.transfer(reg); - 77a: 8c 2f mov r24, r28 - 77c: 12 dd rcall .-1500 ; 0x1a2 - 77e: cd 2d mov r28, r13 - 780: d1 2f mov r29, r17 - 782: 0c 0f add r16, r28 - 784: 1d 2f mov r17, r29 - 786: 11 1d adc r17, r1 + 644: 8c 2f mov r24, r28 + 646: a2 dd rcall .-1212 ; 0x18c + 648: cd 2d mov r28, r13 + 64a: d1 2f mov r29, r17 + 64c: 0c 0f add r16, r28 + 64e: 1d 2f mov r17, r29 + 650: 11 1d adc r17, r1 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:122 for (uint8_t i=0; i + 652: c0 17 cp r28, r16 + 654: d1 07 cpc r29, r17 + 656: 19 f0 breq .+6 ; 0x65e C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:123 SPI.transfer(values[i]); - 78e: 89 91 ld r24, Y+ - 790: 08 dd rcall .-1520 ; 0x1a2 - 792: fa cf rjmp .-12 ; 0x788 + 658: 89 91 ld r24, Y+ + 65a: 98 dd rcall .-1232 ; 0x18c + 65c: fa cf rjmp .-12 ; 0x652 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:125 } endSPI(); - 794: c7 01 movw r24, r14 + 65e: c7 01 movw r24, r14 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:126 } - 796: df 91 pop r29 - 798: cf 91 pop r28 - 79a: 1f 91 pop r17 - 79c: 0f 91 pop r16 - 79e: ff 90 pop r15 - 7a0: ef 90 pop r14 - 7a2: df 90 pop r13 + 660: df 91 pop r29 + 662: cf 91 pop r28 + 664: 1f 91 pop r17 + 666: 0f 91 pop r16 + 668: ff 90 pop r15 + 66a: ef 90 pop r14 + 66c: df 90 pop r13 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:125 SPI.transfer(INSTRUCTION_WRITE); SPI.transfer(reg); @@ -1949,9 +1467,9 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:125 SPI.transfer(values[i]); } endSPI(); - 7a4: b4 cd rjmp .-1176 ; 0x30e + 66e: 4b ce rjmp .-874 ; 0x306 -000007a6 : +00000670 : _ZN7MCP251511setRegisterENS_8REGISTEREh(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:109 } @@ -1960,37 +1478,37 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:109 void MCP2515::setRegister(const REGISTER reg, const uint8_t value) { - 7a6: 0f 93 push r16 - 7a8: 1f 93 push r17 - 7aa: cf 93 push r28 - 7ac: df 93 push r29 - 7ae: ec 01 movw r28, r24 - 7b0: 06 2f mov r16, r22 - 7b2: 14 2f mov r17, r20 + 670: 0f 93 push r16 + 672: 1f 93 push r17 + 674: cf 93 push r28 + 676: df 93 push r29 + 678: ec 01 movw r28, r24 + 67a: 06 2f mov r16, r22 + 67c: 14 2f mov r17, r20 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:110 startSPI(); - 7b4: f0 de rcall .-544 ; 0x596 + 67e: f0 de rcall .-544 ; 0x460 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:111 SPI.transfer(INSTRUCTION_WRITE); - 7b6: 82 e0 ldi r24, 0x02 ; 2 - 7b8: f4 dc rcall .-1560 ; 0x1a2 + 680: 82 e0 ldi r24, 0x02 ; 2 + 682: 84 dd rcall .-1272 ; 0x18c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:112 SPI.transfer(reg); - 7ba: 80 2f mov r24, r16 - 7bc: f2 dc rcall .-1564 ; 0x1a2 + 684: 80 2f mov r24, r16 + 686: 82 dd rcall .-1276 ; 0x18c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:113 SPI.transfer(value); - 7be: 81 2f mov r24, r17 - 7c0: f0 dc rcall .-1568 ; 0x1a2 + 688: 81 2f mov r24, r17 + 68a: 80 dd rcall .-1280 ; 0x18c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:114 endSPI(); - 7c2: ce 01 movw r24, r28 + 68c: ce 01 movw r24, r28 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:115 } - 7c4: df 91 pop r29 - 7c6: cf 91 pop r28 - 7c8: 1f 91 pop r17 - 7ca: 0f 91 pop r16 + 68e: df 91 pop r29 + 690: cf 91 pop r28 + 692: 1f 91 pop r17 + 694: 0f 91 pop r16 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:114 { startSPI(); @@ -1998,80 +1516,9 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:114 SPI.transfer(reg); SPI.transfer(value); endSPI(); - 7cc: a0 cd rjmp .-1216 ; 0x30e + 696: 37 ce rjmp .-914 ; 0x306 -000007ce : -_ZN7MCP251513readRegistersENS_8REGISTEREPhh(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:97 - - return ret; -} - -void MCP2515::readRegisters(const REGISTER reg, uint8_t values[], const uint8_t n) -{ - 7ce: df 92 push r13 - 7d0: ef 92 push r14 - 7d2: ff 92 push r15 - 7d4: 0f 93 push r16 - 7d6: 1f 93 push r17 - 7d8: cf 93 push r28 - 7da: df 93 push r29 - 7dc: 7c 01 movw r14, r24 - 7de: c6 2f mov r28, r22 - 7e0: d4 2e mov r13, r20 - 7e2: 15 2f mov r17, r21 - 7e4: 02 2f mov r16, r18 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:98 - startSPI(); - 7e6: d7 de rcall .-594 ; 0x596 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:99 - SPI.transfer(INSTRUCTION_READ); - 7e8: 83 e0 ldi r24, 0x03 ; 3 - 7ea: db dc rcall .-1610 ; 0x1a2 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:100 - SPI.transfer(reg); - 7ec: 8c 2f mov r24, r28 - 7ee: d9 dc rcall .-1614 ; 0x1a2 - 7f0: cd 2d mov r28, r13 - 7f2: d1 2f mov r29, r17 - 7f4: 0c 0f add r16, r28 - 7f6: 1d 2f mov r17, r29 - 7f8: 11 1d adc r17, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:102 - // mcp2515 has auto-increment of address-pointer - for (uint8_t i=0; i -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:103 - values[i] = SPI.transfer(0x00); - 800: 80 e0 ldi r24, 0x00 ; 0 - 802: cf dc rcall .-1634 ; 0x1a2 - 804: 89 93 st Y+, r24 - 806: f9 cf rjmp .-14 ; 0x7fa -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:105 - } - endSPI(); - 808: c7 01 movw r24, r14 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:106 -} - 80a: df 91 pop r29 - 80c: cf 91 pop r28 - 80e: 1f 91 pop r17 - 810: 0f 91 pop r16 - 812: ff 90 pop r15 - 814: ef 90 pop r14 - 816: df 90 pop r13 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:105 - SPI.transfer(reg); - // mcp2515 has auto-increment of address-pointer - for (uint8_t i=0; i - -0000081a : +00000698 : _ZN7MCP251512readRegisterENS_8REGISTERE(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:86 @@ -2080,695 +1527,42 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:86 uint8_t MCP2515::readRegister(const REGISTER reg) { - 81a: 1f 93 push r17 - 81c: cf 93 push r28 - 81e: df 93 push r29 - 820: ec 01 movw r28, r24 - 822: 16 2f mov r17, r22 + 698: 1f 93 push r17 + 69a: cf 93 push r28 + 69c: df 93 push r29 + 69e: ec 01 movw r28, r24 + 6a0: 16 2f mov r17, r22 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:87 startSPI(); - 824: b8 de rcall .-656 ; 0x596 + 6a2: de de rcall .-580 ; 0x460 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:88 SPI.transfer(INSTRUCTION_READ); - 826: 83 e0 ldi r24, 0x03 ; 3 - 828: bc dc rcall .-1672 ; 0x1a2 + 6a4: 83 e0 ldi r24, 0x03 ; 3 + 6a6: 72 dd rcall .-1308 ; 0x18c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:89 SPI.transfer(reg); - 82a: 81 2f mov r24, r17 - 82c: ba dc rcall .-1676 ; 0x1a2 + 6a8: 81 2f mov r24, r17 + 6aa: 70 dd rcall .-1312 ; 0x18c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:90 uint8_t ret = SPI.transfer(0x00); - 82e: 80 e0 ldi r24, 0x00 ; 0 - 830: b8 dc rcall .-1680 ; 0x1a2 - 832: 18 2f mov r17, r24 + 6ac: 80 e0 ldi r24, 0x00 ; 0 + 6ae: 6e dd rcall .-1316 ; 0x18c + 6b0: 18 2f mov r17, r24 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:91 endSPI(); - 834: ce 01 movw r24, r28 - 836: 6b dd rcall .-1322 ; 0x30e + 6b2: ce 01 movw r24, r28 + 6b4: 28 de rcall .-944 ; 0x306 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:94 return ret; } - 838: 81 2f mov r24, r17 - 83a: df 91 pop r29 - 83c: cf 91 pop r28 - 83e: 1f 91 pop r17 - 840: 08 95 ret + 6b6: 81 2f mov r24, r17 + 6b8: df 91 pop r29 + 6ba: cf 91 pop r28 + 6bc: 1f 91 pop r17 + 6be: 08 95 ret -00000842 : -_ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.constprop.10(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:579 - setRegisters(reg, tbufdata, 4); - - return ERROR_OK; -} - -MCP2515::ERROR MCP2515::sendMessage(const TXBn txbn, const struct can_frame *frame) - 842: 4f 92 push r4 - 844: 5f 92 push r5 - 846: 6f 92 push r6 - 848: 7f 92 push r7 - 84a: 8f 92 push r8 - 84c: 9f 92 push r9 - 84e: af 92 push r10 - 850: bf 92 push r11 - 852: cf 92 push r12 - 854: df 92 push r13 - 856: ef 92 push r14 - 858: ff 92 push r15 - 85a: 1f 93 push r17 - 85c: cf 93 push r28 - 85e: df 93 push r29 - 860: cd b7 in r28, 0x3d ; 61 - 862: de b7 in r29, 0x3e ; 62 - 864: 2d 97 sbiw r28, 0x0d ; 13 - 866: cd bf out 0x3d, r28 ; 61 - 868: de bf out 0x3e, r29 ; 62 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:581 -{ - if (frame->can_dlc > CAN_MAX_DLEN) { - 86a: 10 91 1c 3c lds r17, 0x3C1C ; 0x803c1c <_frame+0x4> - 86e: 19 30 cpi r17, 0x09 ; 9 - 870: 08 f0 brcs .+2 ; 0x874 - 872: 61 c0 rjmp .+194 ; 0x936 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:589 - - const struct TXBn_REGS *txbuf = &TXB[txbn]; - - uint8_t data[13]; - - bool ext = (frame->can_id & CAN_EFF_FLAG); - 874: 40 91 18 3c lds r20, 0x3C18 ; 0x803c18 <_frame> - 878: 50 91 19 3c lds r21, 0x3C19 ; 0x803c19 <_frame+0x1> - 87c: 60 91 1a 3c lds r22, 0x3C1A ; 0x803c1a <_frame+0x2> - 880: 70 91 1b 3c lds r23, 0x3C1B ; 0x803c1b <_frame+0x3> - 884: 6a 01 movw r12, r20 - 886: 7b 01 movw r14, r22 - 888: cc 24 eor r12, r12 - 88a: f7 fc sbrc r15, 7 - 88c: c3 94 inc r12 - 88e: dd 24 eor r13, r13 - 890: ee 24 eor r14, r14 - 892: ff 24 eor r15, r15 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:590 - bool rtr = (frame->can_id & CAN_RTR_FLAG); - 894: 4a 01 movw r8, r20 - 896: 5b 01 movw r10, r22 - 898: 88 24 eor r8, r8 - 89a: 99 24 eor r9, r9 - 89c: aa 24 eor r10, r10 - 89e: 20 e4 ldi r18, 0x40 ; 64 - 8a0: b2 22 and r11, r18 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:591 - uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); - 8a2: 44 24 eor r4, r4 - 8a4: 4a 94 dec r4 - 8a6: 54 2c mov r5, r4 - 8a8: 64 2c mov r6, r4 - 8aa: bf e1 ldi r27, 0x1F ; 31 - 8ac: 7b 2e mov r7, r27 - 8ae: c1 10 cpse r12, r1 - 8b0: 06 c0 rjmp .+12 ; 0x8be - 8b2: 44 24 eor r4, r4 - 8b4: 4a 94 dec r4 - 8b6: a7 e0 ldi r26, 0x07 ; 7 - 8b8: 5a 2e mov r5, r26 - 8ba: 61 2c mov r6, r1 - 8bc: 71 2c mov r7, r1 - 8be: 44 21 and r20, r4 - 8c0: 55 21 and r21, r5 - 8c2: 66 21 and r22, r6 - 8c4: 77 21 and r23, r7 -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:513 - -void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) -{ - uint16_t canid = (uint16_t)(id & 0x0FFFF); - - if (ext) { - 8c6: cc 20 and r12, r12 - 8c8: c9 f1 breq .+114 ; 0x93c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - 8ca: 4c 83 std Y+4, r20 ; 0x04 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - 8cc: 5b 83 std Y+3, r21 ; 0x03 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:516 - canid = (uint16_t)(id >> 16); - 8ce: ab 01 movw r20, r22 - 8d0: 66 27 eor r22, r22 - 8d2: 77 27 eor r23, r23 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:517 - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - 8d4: 24 2f mov r18, r20 - 8d6: 23 70 andi r18, 0x03 ; 3 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - 8d8: 28 60 ori r18, 0x08 ; 8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:518 - if (ext) { - buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - buffer[MCP_EID8] = (uint8_t) (canid >> 8); - canid = (uint16_t)(id >> 16); - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - 8da: 34 2f mov r19, r20 - 8dc: 33 0f add r19, r19 - 8de: 33 0f add r19, r19 - 8e0: 33 0f add r19, r19 - 8e2: 30 7e andi r19, 0xE0 ; 224 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - 8e4: 23 2b or r18, r19 - 8e6: 2a 83 std Y+2, r18 ; 0x02 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - 8e8: f5 e0 ldi r31, 0x05 ; 5 - 8ea: 56 95 lsr r21 - 8ec: 47 95 ror r20 - 8ee: fa 95 dec r31 - 8f0: e1 f7 brne .-8 ; 0x8ea - 8f2: 49 83 std Y+1, r20 ; 0x01 -_ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.constprop.10(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:595 - bool rtr = (frame->can_id & CAN_RTR_FLAG); - uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); - - prepareId(data, ext, id); - - data[MCP_DLC] = rtr ? (frame->can_dlc | RTR_MASK) : frame->can_dlc; - 8f4: 21 2f mov r18, r17 - 8f6: 89 28 or r8, r9 - 8f8: 8a 28 or r8, r10 - 8fa: 8b 28 or r8, r11 - 8fc: 09 f0 breq .+2 ; 0x900 - 8fe: 20 64 ori r18, 0x40 ; 64 - 900: 7c 01 movw r14, r24 - 902: 2d 83 std Y+5, r18 ; 0x05 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:597 - - memcpy(&data[MCP_DATA], frame->data, frame->can_dlc); - 904: 41 2f mov r20, r17 - 906: 50 e0 ldi r21, 0x00 ; 0 - 908: 60 e2 ldi r22, 0x20 ; 32 - 90a: 7c e3 ldi r23, 0x3C ; 60 - 90c: ce 01 movw r24, r28 - 90e: 06 96 adiw r24, 0x06 ; 6 - 910: e8 d4 rcall .+2512 ; 0x12e2 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:599 - - setRegisters(txbuf->SIDH, data, 5 + frame->can_dlc); - 912: 25 e0 ldi r18, 0x05 ; 5 - 914: 21 0f add r18, r17 - 916: ae 01 movw r20, r28 - 918: 4f 5f subi r20, 0xFF ; 255 - 91a: 5f 4f sbci r21, 0xFF ; 255 - 91c: 61 e4 ldi r22, 0x41 ; 65 - 91e: c7 01 movw r24, r14 - 920: 1d df rcall .-454 ; 0x75c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:601 - - modifyRegister(txbuf->CTRL, TXB_TXREQ, TXB_TXREQ); - 922: 28 e0 ldi r18, 0x08 ; 8 - 924: 48 e0 ldi r20, 0x08 ; 8 - 926: 60 e4 ldi r22, 0x40 ; 64 - 928: c7 01 movw r24, r14 - 92a: ff de rcall .-514 ; 0x72a -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:603 - - uint8_t ctrl = readRegister(txbuf->CTRL); - 92c: 60 e4 ldi r22, 0x40 ; 64 - 92e: c7 01 movw r24, r14 - 930: 74 df rcall .-280 ; 0x81a -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:604 - if ((ctrl & (TXB_ABTF | TXB_MLOA | TXB_TXERR)) != 0) { - 932: 80 77 andi r24, 0x70 ; 112 - 934: 89 f0 breq .+34 ; 0x958 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:582 -} - -MCP2515::ERROR MCP2515::sendMessage(const TXBn txbn, const struct can_frame *frame) -{ - if (frame->can_dlc > CAN_MAX_DLEN) { - return ERROR_FAILTX; - 936: 84 e0 ldi r24, 0x04 ; 4 - 938: 90 e0 ldi r25, 0x00 ; 0 - 93a: 10 c0 rjmp .+32 ; 0x95c -prepareId(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522 - buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); - buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); - buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - } else { - buffer[MCP_SIDH] = (uint8_t) (canid >> 3); - 93c: 9a 01 movw r18, r20 - 93e: 53 e0 ldi r21, 0x03 ; 3 - 940: 36 95 lsr r19 - 942: 27 95 ror r18 - 944: 5a 95 dec r21 - 946: e1 f7 brne .-8 ; 0x940 - 948: 29 83 std Y+1, r18 ; 0x01 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:523 - buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5); - 94a: 42 95 swap r20 - 94c: 44 0f add r20, r20 - 94e: 40 7e andi r20, 0xE0 ; 224 - 950: 4a 83 std Y+2, r20 ; 0x02 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524 - buffer[MCP_EID0] = 0; - 952: 1c 82 std Y+4, r1 ; 0x04 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525 - buffer[MCP_EID8] = 0; - 954: 1b 82 std Y+3, r1 ; 0x03 - 956: ce cf rjmp .-100 ; 0x8f4 -_ZN7MCP251511sendMessageENS_4TXBnEPK9can_frame.constprop.10(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:607 - - uint8_t ctrl = readRegister(txbuf->CTRL); - if ((ctrl & (TXB_ABTF | TXB_MLOA | TXB_TXERR)) != 0) { - return ERROR_FAILTX; - } - return ERROR_OK; - 958: 90 e0 ldi r25, 0x00 ; 0 - 95a: 80 e0 ldi r24, 0x00 ; 0 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:608 -} - 95c: 2d 96 adiw r28, 0x0d ; 13 - 95e: cd bf out 0x3d, r28 ; 61 - 960: de bf out 0x3e, r29 ; 62 - 962: df 91 pop r29 - 964: cf 91 pop r28 - 966: 1f 91 pop r17 - 968: ff 90 pop r15 - 96a: ef 90 pop r14 - 96c: df 90 pop r13 - 96e: cf 90 pop r12 - 970: bf 90 pop r11 - 972: af 90 pop r10 - 974: 9f 90 pop r9 - 976: 8f 90 pop r8 - 978: 7f 90 pop r7 - 97a: 6f 90 pop r6 - 97c: 5f 90 pop r5 - 97e: 4f 90 pop r4 - 980: 08 95 ret - -00000982 : -_Z17SendSerialPackageP7MCP2515(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:405 - CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); -} - -void SendSerialPackage(MCP2515 *interface) -{ - 982: 0f 93 push r16 - 984: 1f 93 push r17 - 986: cf 93 push r28 - 988: df 93 push r29 - 98a: 8c 01 movw r16, r24 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:406 - _frame.can_id = CreateCanId(HELP_PACKAGE_CAN_ID); - 98c: c8 e1 ldi r28, 0x18 ; 24 - 98e: dc e3 ldi r29, 0x3C ; 60 -CreateCanId(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:375 - return (canFrameId / 0x10000) & 0xFFF; -} - -uint32_t CreateCanId(uint16_t commandId) -{ - return ((commandId & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG; - 990: 80 91 14 3c lds r24, 0x3C14 ; 0x803c14 - 994: 90 91 15 3c lds r25, 0x3C15 ; 0x803c15 - 998: b0 e0 ldi r27, 0x00 ; 0 - 99a: a0 e0 ldi r26, 0x00 ; 0 - 99c: af 6f ori r26, 0xFF ; 255 - 99e: bf 68 ori r27, 0x8F ; 143 -_Z17SendSerialPackageP7MCP2515(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:406 - CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); -} - -void SendSerialPackage(MCP2515 *interface) -{ - _frame.can_id = CreateCanId(HELP_PACKAGE_CAN_ID); - 9a0: 88 83 st Y, r24 - 9a2: 99 83 std Y+1, r25 ; 0x01 - 9a4: aa 83 std Y+2, r26 ; 0x02 - 9a6: bb 83 std Y+3, r27 ; 0x03 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:407 - _frame.can_dlc = 6; - 9a8: 86 e0 ldi r24, 0x06 ; 6 - 9aa: 8c 83 std Y+4, r24 ; 0x04 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:409 - - _frame.data[0] = SoftwareVersionHigh; - 9ac: 93 e0 ldi r25, 0x03 ; 3 - 9ae: 98 87 std Y+8, r25 ; 0x08 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:410 - _frame.data[1] = SoftwareVersionLow; - 9b0: 19 86 std Y+9, r1 ; 0x09 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:411 - _frame.data[2] = HardwareVersionHigh; - 9b2: 8a 87 std Y+10, r24 ; 0x0a -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:412 - _frame.data[3] = HardwareVersionLow; - 9b4: 1b 86 std Y+11, r1 ; 0x0b -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:413 - _frame.data[4] = GetDeviceIdHigh(); - 9b6: 58 dd rcall .-1360 ; 0x468 - 9b8: 8c 87 std Y+12, r24 ; 0x0c -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:414 - _frame.data[5] = GetDeviceIdLow(); - 9ba: 6e dd rcall .-1316 ; 0x498 - 9bc: 8d 87 std Y+13, r24 ; 0x0d -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:415 - interface->sendMessage(MCP2515::TXB1, &_frame); - 9be: c8 01 movw r24, r16 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:416 -} - 9c0: df 91 pop r29 - 9c2: cf 91 pop r28 - 9c4: 1f 91 pop r17 - 9c6: 0f 91 pop r16 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:415 - _frame.data[1] = SoftwareVersionLow; - _frame.data[2] = HardwareVersionHigh; - _frame.data[3] = HardwareVersionLow; - _frame.data[4] = GetDeviceIdHigh(); - _frame.data[5] = GetDeviceIdLow(); - interface->sendMessage(MCP2515::TXB1, &_frame); - 9c8: 3c cf rjmp .-392 ; 0x842 - -000009ca : -_ZN7MCP251511readMessageENS_4RXBnEP9can_frame.constprop.9(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:629 - } - - return ERROR_ALLTXBUSY; -} - -MCP2515::ERROR MCP2515::readMessage(const RXBn rxbn, struct can_frame *frame) - 9ca: 9f 92 push r9 - 9cc: af 92 push r10 - 9ce: bf 92 push r11 - 9d0: cf 92 push r12 - 9d2: df 92 push r13 - 9d4: ef 92 push r14 - 9d6: ff 92 push r15 - 9d8: 0f 93 push r16 - 9da: 1f 93 push r17 - 9dc: cf 93 push r28 - 9de: df 93 push r29 - 9e0: cd b7 in r28, 0x3d ; 61 - 9e2: de b7 in r29, 0x3e ; 62 - 9e4: 25 97 sbiw r28, 0x05 ; 5 - 9e6: cd bf out 0x3d, r28 ; 61 - 9e8: de bf out 0x3e, r29 ; 62 - 9ea: 5c 01 movw r10, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:635 -{ - const struct RXBn_REGS *rxb = &RXB[rxbn]; - - uint8_t tbufdata[5]; - - readRegisters(rxb->SIDH, tbufdata, 5); - 9ec: 8b 01 movw r16, r22 - 9ee: 00 0f add r16, r16 - 9f0: 11 1f adc r17, r17 - 9f2: 00 0f add r16, r16 - 9f4: 11 1f adc r17, r17 - 9f6: f8 01 movw r30, r16 - 9f8: e3 5d subi r30, 0xD3 ; 211 - 9fa: fc 4a sbci r31, 0xAC ; 172 - 9fc: 25 e0 ldi r18, 0x05 ; 5 - 9fe: ae 01 movw r20, r28 - a00: 4f 5f subi r20, 0xFF ; 255 - a02: 5f 4f sbci r21, 0xFF ; 255 - a04: 61 81 ldd r22, Z+1 ; 0x01 - a06: e3 de rcall .-570 ; 0x7ce -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:637 - - uint32_t id = (tbufdata[MCP_SIDH]<<3) + (tbufdata[MCP_SIDL]>>5); - a08: 8a 81 ldd r24, Y+2 ; 0x02 - a0a: c9 80 ldd r12, Y+1 ; 0x01 - a0c: 98 e0 ldi r25, 0x08 ; 8 - a0e: c9 9e mul r12, r25 - a10: 60 01 movw r12, r0 - a12: 11 24 eor r1, r1 - a14: 28 2f mov r18, r24 - a16: 30 e0 ldi r19, 0x00 ; 0 - a18: 55 e0 ldi r21, 0x05 ; 5 - a1a: 35 95 asr r19 - a1c: 27 95 ror r18 - a1e: 5a 95 dec r21 - a20: e1 f7 brne .-8 ; 0xa1a - a22: c2 0e add r12, r18 - a24: d3 1e adc r13, r19 - a26: 0d 2c mov r0, r13 - a28: 00 0c add r0, r0 - a2a: ee 08 sbc r14, r14 - a2c: ff 08 sbc r15, r15 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:639 - - if ( (tbufdata[MCP_SIDL] & TXB_EXIDE_MASK) == TXB_EXIDE_MASK ) { - a2e: 83 ff sbrs r24, 3 - a30: 20 c0 rjmp .+64 ; 0xa72 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:640 - id = (id<<2) + (tbufdata[MCP_SIDL] & 0x03); - a32: 92 e0 ldi r25, 0x02 ; 2 - a34: cc 0c add r12, r12 - a36: dd 1c adc r13, r13 - a38: ee 1c adc r14, r14 - a3a: ff 1c adc r15, r15 - a3c: 9a 95 dec r25 - a3e: d1 f7 brne .-12 ; 0xa34 - a40: 83 70 andi r24, 0x03 ; 3 - a42: c8 0e add r12, r24 - a44: d1 1c adc r13, r1 - a46: e1 1c adc r14, r1 - a48: f1 1c adc r15, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:641 - id = (id<<8) + tbufdata[MCP_EID8]; - a4a: fe 2c mov r15, r14 - a4c: ed 2c mov r14, r13 - a4e: dc 2c mov r13, r12 - a50: cc 24 eor r12, r12 - a52: 8b 81 ldd r24, Y+3 ; 0x03 - a54: c8 0e add r12, r24 - a56: d1 1c adc r13, r1 - a58: e1 1c adc r14, r1 - a5a: f1 1c adc r15, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:642 - id = (id<<8) + tbufdata[MCP_EID0]; - a5c: fe 2c mov r15, r14 - a5e: ed 2c mov r14, r13 - a60: dc 2c mov r13, r12 - a62: cc 24 eor r12, r12 - a64: 8c 81 ldd r24, Y+4 ; 0x04 - a66: c8 0e add r12, r24 - a68: d1 1c adc r13, r1 - a6a: e1 1c adc r14, r1 - a6c: f1 1c adc r15, r1 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:643 - id |= CAN_EFF_FLAG; - a6e: 68 94 set - a70: f7 f8 bld r15, 7 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:646 - } - - uint8_t dlc = (tbufdata[MCP_DLC] & DLC_MASK); - a72: 8d 81 ldd r24, Y+5 ; 0x05 - a74: 8f 70 andi r24, 0x0F ; 15 - a76: 98 2e mov r9, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:647 - if (dlc > CAN_MAX_DLEN) { - a78: e8 e0 ldi r30, 0x08 ; 8 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:648 - return ERROR_FAIL; - a7a: 81 e0 ldi r24, 0x01 ; 1 - a7c: 90 e0 ldi r25, 0x00 ; 0 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:647 - id = (id<<8) + tbufdata[MCP_EID0]; - id |= CAN_EFF_FLAG; - } - - uint8_t dlc = (tbufdata[MCP_DLC] & DLC_MASK); - if (dlc > CAN_MAX_DLEN) { - a7e: e9 15 cp r30, r9 - a80: 28 f1 brcs .+74 ; 0xacc -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:651 - return ERROR_FAIL; - } - - uint8_t ctrl = readRegister(rxb->CTRL); - a82: f8 01 movw r30, r16 - a84: e3 5d subi r30, 0xD3 ; 211 - a86: fc 4a sbci r31, 0xAC ; 172 - a88: 60 81 ld r22, Z - a8a: c5 01 movw r24, r10 - a8c: c6 de rcall .-628 ; 0x81a -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:652 - if (ctrl & RXBnCTRL_RTR) { - a8e: 83 ff sbrs r24, 3 - a90: 02 c0 rjmp .+4 ; 0xa96 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:653 - id |= CAN_RTR_FLAG; - a92: 68 94 set - a94: f6 f8 bld r15, 6 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:656 - } - - frame->can_id = id; - a96: c0 92 18 3c sts 0x3C18, r12 ; 0x803c18 <_frame> - a9a: d0 92 19 3c sts 0x3C19, r13 ; 0x803c19 <_frame+0x1> - a9e: e0 92 1a 3c sts 0x3C1A, r14 ; 0x803c1a <_frame+0x2> - aa2: f0 92 1b 3c sts 0x3C1B, r15 ; 0x803c1b <_frame+0x3> -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:657 - frame->can_dlc = dlc; - aa6: 90 92 1c 3c sts 0x3C1C, r9 ; 0x803c1c <_frame+0x4> -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:659 - - readRegisters(rxb->DATA, frame->data, dlc); - aaa: 03 5d subi r16, 0xD3 ; 211 - aac: 1c 4a sbci r17, 0xAC ; 172 - aae: 29 2d mov r18, r9 - ab0: 40 e2 ldi r20, 0x20 ; 32 - ab2: 5c e3 ldi r21, 0x3C ; 60 - ab4: f8 01 movw r30, r16 - ab6: 62 81 ldd r22, Z+2 ; 0x02 - ab8: c5 01 movw r24, r10 - aba: 89 de rcall .-750 ; 0x7ce -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:661 - - modifyRegister(MCP_CANINTF, rxb->CANINTF_RXnIF, 0); - abc: 20 e0 ldi r18, 0x00 ; 0 - abe: f8 01 movw r30, r16 - ac0: 43 81 ldd r20, Z+3 ; 0x03 - ac2: 6c e2 ldi r22, 0x2C ; 44 - ac4: c5 01 movw r24, r10 - ac6: 31 de rcall .-926 ; 0x72a -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:663 - - return ERROR_OK; - ac8: 90 e0 ldi r25, 0x00 ; 0 - aca: 80 e0 ldi r24, 0x00 ; 0 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:664 -} - acc: 25 96 adiw r28, 0x05 ; 5 - ace: cd bf out 0x3d, r28 ; 61 - ad0: de bf out 0x3e, r29 ; 62 - ad2: df 91 pop r29 - ad4: cf 91 pop r28 - ad6: 1f 91 pop r17 - ad8: 0f 91 pop r16 - ada: ff 90 pop r15 - adc: ef 90 pop r14 - ade: df 90 pop r13 - ae0: cf 90 pop r12 - ae2: bf 90 pop r11 - ae4: af 90 pop r10 - ae6: 9f 90 pop r9 - ae8: 08 95 ret - -00000aea : -_ZN7MCP251511readMessageEP9can_frame.constprop.7(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:666 - -MCP2515::ERROR MCP2515::readMessage(struct can_frame *frame) - aea: 1f 93 push r17 - aec: cf 93 push r28 - aee: df 93 push r29 - af0: ec 01 movw r28, r24 -getStatus(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:140 - endSPI(); -} - -uint8_t MCP2515::getStatus(void) -{ - startSPI(); - af2: 51 dd rcall .-1374 ; 0x596 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:141 - SPI.transfer(INSTRUCTION_READ_STATUS); - af4: 80 ea ldi r24, 0xA0 ; 160 - af6: 55 db rcall .-2390 ; 0x1a2 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:142 - uint8_t i = SPI.transfer(0x00); - af8: 80 e0 ldi r24, 0x00 ; 0 - afa: 53 db rcall .-2394 ; 0x1a2 - afc: 18 2f mov r17, r24 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:143 - endSPI(); - afe: ce 01 movw r24, r28 - b00: 06 dc rcall .-2036 ; 0x30e -_ZN7MCP251511readMessageEP9can_frame.constprop.7(): -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:672 -{ - ERROR rc; - uint8_t stat = getStatus(); - - if ( stat & STAT_RX0IF ) { - rc = readMessage(RXB0, frame); - b02: 70 e0 ldi r23, 0x00 ; 0 - b04: 60 e0 ldi r22, 0x00 ; 0 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:671 -MCP2515::ERROR MCP2515::readMessage(struct can_frame *frame) -{ - ERROR rc; - uint8_t stat = getStatus(); - - if ( stat & STAT_RX0IF ) { - b06: 10 fd sbrc r17, 0 - b08: 04 c0 rjmp .+8 ; 0xb12 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:673 - rc = readMessage(RXB0, frame); - } else if ( stat & STAT_RX1IF ) { - b0a: 11 ff sbrs r17, 1 - b0c: 07 c0 rjmp .+14 ; 0xb1c -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:674 - rc = readMessage(RXB1, frame); - b0e: 61 e0 ldi r22, 0x01 ; 1 - b10: 70 e0 ldi r23, 0x00 ; 0 - b12: ce 01 movw r24, r28 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:680 - } else { - rc = ERROR_NOMSG; - } - - return rc; -} - b14: df 91 pop r29 - b16: cf 91 pop r28 - b18: 1f 91 pop r17 -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:674 - uint8_t stat = getStatus(); - - if ( stat & STAT_RX0IF ) { - rc = readMessage(RXB0, frame); - } else if ( stat & STAT_RX1IF ) { - rc = readMessage(RXB1, frame); - b1a: 57 cf rjmp .-338 ; 0x9ca -C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:680 - } else { - rc = ERROR_NOMSG; - } - - return rc; -} - b1c: 85 e0 ldi r24, 0x05 ; 5 - b1e: 90 e0 ldi r25, 0x00 ; 0 - b20: df 91 pop r29 - b22: cf 91 pop r28 - b24: 1f 91 pop r17 - b26: 08 95 ret - -00000b28 : +000006c0 : _ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:174 { @@ -2777,21 +1571,21 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:174 MCP2515::ERROR MCP2515::setMode(const CANCTRL_REQOP_MODE mode) { - b28: cf 92 push r12 - b2a: df 92 push r13 - b2c: ef 92 push r14 - b2e: ff 92 push r15 - b30: 1f 93 push r17 - b32: cf 93 push r28 - b34: df 93 push r29 - b36: ec 01 movw r28, r24 - b38: 16 2f mov r17, r22 + 6c0: cf 92 push r12 + 6c2: df 92 push r13 + 6c4: ef 92 push r14 + 6c6: ff 92 push r15 + 6c8: 1f 93 push r17 + 6ca: cf 93 push r28 + 6cc: df 93 push r29 + 6ce: ec 01 movw r28, r24 + 6d0: 16 2f mov r17, r22 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:175 modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode); - b3a: 26 2f mov r18, r22 - b3c: 40 ee ldi r20, 0xE0 ; 224 - b3e: 6f e0 ldi r22, 0x0F ; 15 - b40: f4 dd rcall .-1048 ; 0x72a + 6d2: 26 2f mov r18, r22 + 6d4: 40 ee ldi r20, 0xE0 ; 224 + 6d6: 6f e0 ldi r22, 0x0F ; 15 + 6d8: 8d df rcall .-230 ; 0x5f4 millis(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:87 { @@ -2800,30 +1594,30 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. // disable interrupts while we read timer0_millis or we might get an // inconsistent value (e.g. in the middle of a write to timer_millis) uint8_t status = SREG; - b42: 8f b7 in r24, 0x3f ; 63 + 6da: 8f b7 in r24, 0x3f ; 63 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:88 cli(); - b44: f8 94 cli + 6dc: f8 94 cli C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:90 m = timer_millis; - b46: c0 90 10 3c lds r12, 0x3C10 ; 0x803c10 - b4a: d0 90 11 3c lds r13, 0x3C11 ; 0x803c11 - b4e: e0 90 12 3c lds r14, 0x3C12 ; 0x803c12 - b52: f0 90 13 3c lds r15, 0x3C13 ; 0x803c13 + 6de: c0 90 10 3c lds r12, 0x3C10 ; 0x803c10 + 6e2: d0 90 11 3c lds r13, 0x3C11 ; 0x803c11 + 6e6: e0 90 12 3c lds r14, 0x3C12 ; 0x803c12 + 6ea: f0 90 13 3c lds r15, 0x3C13 ; 0x803c13 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:92 SREG = status; - b56: 8f bf out 0x3f, r24 ; 63 + 6ee: 8f bf out 0x3f, r24 ; 63 _ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:177 unsigned long endTime = millis() + 10; - b58: 8a e0 ldi r24, 0x0A ; 10 - b5a: c8 0e add r12, r24 - b5c: d1 1c adc r13, r1 - b5e: e1 1c adc r14, r1 - b60: f1 1c adc r15, r1 + 6f0: 8a e0 ldi r24, 0x0A ; 10 + 6f2: c8 0e add r12, r24 + 6f4: d1 1c adc r13, r1 + 6f6: e1 1c adc r14, r1 + 6f8: f1 1c adc r15, r1 millis(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:87 { @@ -2832,45 +1626,45 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. // disable interrupts while we read timer0_millis or we might get an // inconsistent value (e.g. in the middle of a write to timer_millis) uint8_t status = SREG; - b62: 2f b7 in r18, 0x3f ; 63 + 6fa: 2f b7 in r18, 0x3f ; 63 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:88 cli(); - b64: f8 94 cli + 6fc: f8 94 cli C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:90 m = timer_millis; - b66: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 - b6a: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 - b6e: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 - b72: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 + 6fe: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 + 702: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 + 706: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 + 70a: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:92 SREG = status; - b76: 2f bf out 0x3f, r18 ; 63 + 70e: 2f bf out 0x3f, r18 ; 63 _ZN7MCP25157setModeENS_18CANCTRL_REQOP_MODEE(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179 bool modeMatch = false; while (millis() < endTime) { - b78: 8c 15 cp r24, r12 - b7a: 9d 05 cpc r25, r13 - b7c: ae 05 cpc r26, r14 - b7e: bf 05 cpc r27, r15 - b80: 90 f4 brcc .+36 ; 0xba6 + 710: 8c 15 cp r24, r12 + 712: 9d 05 cpc r25, r13 + 714: ae 05 cpc r26, r14 + 716: bf 05 cpc r27, r15 + 718: 90 f4 brcc .+36 ; 0x73e C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:180 uint8_t newmode = readRegister(MCP_CANSTAT); - b82: 6e e0 ldi r22, 0x0E ; 14 - b84: ce 01 movw r24, r28 - b86: 49 de rcall .-878 ; 0x81a + 71a: 6e e0 ldi r22, 0x0E ; 14 + 71c: ce 01 movw r24, r28 + 71e: bc df rcall .-136 ; 0x698 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:181 newmode &= CANSTAT_OPMOD; - b88: 80 7e andi r24, 0xE0 ; 224 + 720: 80 7e andi r24, 0xE0 ; 224 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:185 modeMatch = newmode == mode; if (modeMatch) { - b8a: 18 13 cpse r17, r24 - b8c: ea cf rjmp .-44 ; 0xb62 + 722: 18 13 cpse r17, r24 + 724: ea cf rjmp .-44 ; 0x6fa C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:183 bool modeMatch = false; while (millis() < endTime) { @@ -2878,7 +1672,7 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:183 newmode &= CANSTAT_OPMOD; modeMatch = newmode == mode; - b8e: 81 e0 ldi r24, 0x01 ; 1 + 726: 81 e0 ldi r24, 0x01 ; 1 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:190 if (modeMatch) { break; @@ -2886,20 +1680,20 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:190 } return modeMatch ? ERROR_OK : ERROR_FAIL; - b90: 91 e0 ldi r25, 0x01 ; 1 - b92: 89 27 eor r24, r25 + 728: 91 e0 ldi r25, 0x01 ; 1 + 72a: 89 27 eor r24, r25 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:192 } - b94: 90 e0 ldi r25, 0x00 ; 0 - b96: df 91 pop r29 - b98: cf 91 pop r28 - b9a: 1f 91 pop r17 - b9c: ff 90 pop r15 - b9e: ef 90 pop r14 - ba0: df 90 pop r13 - ba2: cf 90 pop r12 - ba4: 08 95 ret + 72c: 90 e0 ldi r25, 0x00 ; 0 + 72e: df 91 pop r29 + 730: cf 91 pop r28 + 732: 1f 91 pop r17 + 734: ff 90 pop r15 + 736: ef 90 pop r14 + 738: df 90 pop r13 + 73a: cf 90 pop r12 + 73c: 08 95 ret C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179 { modifyRegister(MCP_CANCTRL, CANCTRL_REQOP, mode); @@ -2907,10 +1701,10 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:179 unsigned long endTime = millis() + 10; bool modeMatch = false; while (millis() < endTime) { - ba6: 80 e0 ldi r24, 0x00 ; 0 - ba8: f3 cf rjmp .-26 ; 0xb90 + 73e: 80 e0 ldi r24, 0x00 ; 0 + 740: f3 cf rjmp .-26 ; 0x728 -00000baa : +00000742 : _ZN7MCP251510setBitrateE9CAN_SPEED9CAN_CLOCK.constprop.6(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:199 MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed) @@ -2919,11 +1713,11 @@ MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed) } MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock) - baa: 0f 93 push r16 - bac: 1f 93 push r17 - bae: cf 93 push r28 - bb0: df 93 push r29 - bb2: ec 01 movw r28, r24 + 742: 0f 93 push r16 + 744: 1f 93 push r17 + 746: cf 93 push r28 + 748: df 93 push r29 + 74a: ec 01 movw r28, r24 setConfigMode(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 return i; @@ -2932,9 +1726,9 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 MCP2515::ERROR MCP2515::setConfigMode() { return setMode(CANCTRL_REQOP_CONFIG); - bb4: 60 e8 ldi r22, 0x80 ; 128 - bb6: b8 df rcall .-144 ; 0xb28 - bb8: 8c 01 movw r16, r24 + 74c: 60 e8 ldi r22, 0x80 ; 128 + 74e: b8 df rcall .-144 ; 0x6c0 + 750: 8c 01 movw r16, r24 _ZN7MCP251510setBitrateE9CAN_SPEED9CAN_CLOCK.constprop.6(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:202 } @@ -2943,8 +1737,8 @@ MCP2515::ERROR MCP2515::setBitrate(const CAN_SPEED canSpeed, CAN_CLOCK canClock) { ERROR error = setConfigMode(); if (error != ERROR_OK) { - bba: 89 2b or r24, r25 - bbc: 61 f4 brne .+24 ; 0xbd6 + 752: 89 2b or r24, r25 + 754: 61 f4 brne .+24 ; 0x76e C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:477 set = 0; break; @@ -2952,22 +1746,22 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:477 if (set) { setRegister(MCP_CNF1, cfg1); - bbe: 40 e0 ldi r20, 0x00 ; 0 - bc0: 6a e2 ldi r22, 0x2A ; 42 - bc2: ce 01 movw r24, r28 - bc4: f0 dd rcall .-1056 ; 0x7a6 + 756: 40 e0 ldi r20, 0x00 ; 0 + 758: 6a e2 ldi r22, 0x2A ; 42 + 75a: ce 01 movw r24, r28 + 75c: 89 df rcall .-238 ; 0x670 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:478 setRegister(MCP_CNF2, cfg2); - bc6: 40 e9 ldi r20, 0x90 ; 144 - bc8: 69 e2 ldi r22, 0x29 ; 41 - bca: ce 01 movw r24, r28 - bcc: ec dd rcall .-1064 ; 0x7a6 + 75e: 40 e9 ldi r20, 0x90 ; 144 + 760: 69 e2 ldi r22, 0x29 ; 41 + 762: ce 01 movw r24, r28 + 764: 85 df rcall .-246 ; 0x670 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:479 setRegister(MCP_CNF3, cfg3); - bce: 42 e8 ldi r20, 0x82 ; 130 - bd0: 68 e2 ldi r22, 0x28 ; 40 - bd2: ce 01 movw r24, r28 - bd4: e8 dd rcall .-1072 ; 0x7a6 + 766: 42 e8 ldi r20, 0x82 ; 130 + 768: 68 e2 ldi r22, 0x28 ; 40 + 76a: ce 01 movw r24, r28 + 76c: 81 df rcall .-254 ; 0x670 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:485 return ERROR_OK; } @@ -2975,14 +1769,14 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:485 return ERROR_FAIL; } } - bd6: c8 01 movw r24, r16 - bd8: df 91 pop r29 - bda: cf 91 pop r28 - bdc: 1f 91 pop r17 - bde: 0f 91 pop r16 - be0: 08 95 ret + 76e: c8 01 movw r24, r16 + 770: df 91 pop r29 + 772: cf 91 pop r28 + 774: 1f 91 pop r17 + 776: 0f 91 pop r16 + 778: 08 95 ret -00000be2 : +0000077a : _ZN7MCP251513setNormalModeEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:170 return setMode(CANCTRL_REQOP_LOOPBACK); @@ -2991,10 +1785,10 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:170 MCP2515::ERROR MCP2515::setNormalMode() { return setMode(CANCTRL_REQOP_NORMAL); - be2: 60 e0 ldi r22, 0x00 ; 0 - be4: a1 cf rjmp .-190 ; 0xb28 + 77a: 60 e0 ldi r22, 0x00 ; 0 + 77c: a1 cf rjmp .-190 ; 0x6c0 -00000be6 : +0000077e : _ZN7MCP25155resetEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:35 digitalWrite(SPICS, HIGH); @@ -3003,112 +1797,116 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:35 MCP2515::ERROR MCP2515::reset(void) { - be6: 7f 92 push r7 - be8: 8f 92 push r8 - bea: 9f 92 push r9 - bec: af 92 push r10 - bee: bf 92 push r11 - bf0: cf 92 push r12 - bf2: df 92 push r13 - bf4: ef 92 push r14 - bf6: ff 92 push r15 - bf8: 0f 93 push r16 - bfa: 1f 93 push r17 - bfc: cf 93 push r28 - bfe: df 93 push r29 - c00: cd b7 in r28, 0x3d ; 61 - c02: de b7 in r29, 0x3e ; 62 - c04: a2 97 sbiw r28, 0x22 ; 34 - c06: cd bf out 0x3d, r28 ; 61 - c08: de bf out 0x3e, r29 ; 62 - c0a: 8c 01 movw r16, r24 + 77e: 7f 92 push r7 + 780: 8f 92 push r8 + 782: 9f 92 push r9 + 784: af 92 push r10 + 786: bf 92 push r11 + 788: cf 92 push r12 + 78a: df 92 push r13 + 78c: ef 92 push r14 + 78e: ff 92 push r15 + 790: 0f 93 push r16 + 792: 1f 93 push r17 + 794: cf 93 push r28 + 796: df 93 push r29 + 798: cd b7 in r28, 0x3d ; 61 + 79a: de b7 in r29, 0x3e ; 62 + 79c: a2 97 sbiw r28, 0x22 ; 34 + 79e: cd bf out 0x3d, r28 ; 61 + 7a0: de bf out 0x3e, r29 ; 62 + 7a2: 8c 01 movw r16, r24 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:36 startSPI(); - c0c: c4 dc rcall .-1656 ; 0x596 + 7a4: 5d de rcall .-838 ; 0x460 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:37 SPI.transfer(INSTRUCTION_RESET); - c0e: 80 ec ldi r24, 0xC0 ; 192 - c10: c8 da rcall .-2672 ; 0x1a2 + 7a6: 80 ec ldi r24, 0xC0 ; 192 + 7a8: f1 dc rcall .-1566 ; 0x18c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:38 endSPI(); - c12: c8 01 movw r24, r16 - c14: 7c db rcall .-2312 ; 0x30e + 7aa: c8 01 movw r24, r16 + 7ac: ac dd rcall .-1192 ; 0x306 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:40 delay(10); - c16: 56 db rcall .-2388 ; 0x2c4 + 7ae: 6a e0 ldi r22, 0x0A ; 10 + 7b0: 70 e0 ldi r23, 0x00 ; 0 + 7b2: 80 e0 ldi r24, 0x00 ; 0 + 7b4: 90 e0 ldi r25, 0x00 ; 0 + 7b6: 7b dd rcall .-1290 ; 0x2ae C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:43 uint8_t zeros[14]; memset(zeros, 0, sizeof(zeros)); - c18: ce 01 movw r24, r28 - c1a: 01 96 adiw r24, 0x01 ; 1 - c1c: 7c 01 movw r14, r24 - c1e: 8e e0 ldi r24, 0x0E ; 14 - c20: f7 01 movw r30, r14 - c22: 11 92 st Z+, r1 - c24: 8a 95 dec r24 - c26: e9 f7 brne .-6 ; 0xc22 + 7b8: ce 01 movw r24, r28 + 7ba: 01 96 adiw r24, 0x01 ; 1 + 7bc: 7c 01 movw r14, r24 + 7be: 8e e0 ldi r24, 0x0E ; 14 + 7c0: f7 01 movw r30, r14 + 7c2: 11 92 st Z+, r1 + 7c4: 8a 95 dec r24 + 7c6: e9 f7 brne .-6 ; 0x7c2 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:44 setRegisters(MCP_TXB0CTRL, zeros, 14); - c28: 2e e0 ldi r18, 0x0E ; 14 - c2a: a7 01 movw r20, r14 - c2c: 60 e3 ldi r22, 0x30 ; 48 - c2e: c8 01 movw r24, r16 - c30: 95 dd rcall .-1238 ; 0x75c + 7c8: 2e e0 ldi r18, 0x0E ; 14 + 7ca: a7 01 movw r20, r14 + 7cc: 60 e3 ldi r22, 0x30 ; 48 + 7ce: c8 01 movw r24, r16 + 7d0: 2a df rcall .-428 ; 0x626 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:45 setRegisters(MCP_TXB1CTRL, zeros, 14); - c32: 2e e0 ldi r18, 0x0E ; 14 - c34: a7 01 movw r20, r14 - c36: 60 e4 ldi r22, 0x40 ; 64 - c38: c8 01 movw r24, r16 - c3a: 90 dd rcall .-1248 ; 0x75c + 7d2: 2e e0 ldi r18, 0x0E ; 14 + 7d4: a7 01 movw r20, r14 + 7d6: 60 e4 ldi r22, 0x40 ; 64 + 7d8: c8 01 movw r24, r16 + 7da: 25 df rcall .-438 ; 0x626 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:46 setRegisters(MCP_TXB2CTRL, zeros, 14); - c3c: 2e e0 ldi r18, 0x0E ; 14 - c3e: a7 01 movw r20, r14 - c40: 60 e5 ldi r22, 0x50 ; 80 - c42: c8 01 movw r24, r16 - c44: 8b dd rcall .-1258 ; 0x75c + 7dc: 2e e0 ldi r18, 0x0E ; 14 + 7de: a7 01 movw r20, r14 + 7e0: 60 e5 ldi r22, 0x50 ; 80 + 7e2: c8 01 movw r24, r16 + 7e4: 20 df rcall .-448 ; 0x626 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:48 setRegister(MCP_RXB0CTRL, 0); - c46: 40 e0 ldi r20, 0x00 ; 0 - c48: 60 e6 ldi r22, 0x60 ; 96 - c4a: c8 01 movw r24, r16 - c4c: ac dd rcall .-1192 ; 0x7a6 + 7e6: 40 e0 ldi r20, 0x00 ; 0 + 7e8: 60 e6 ldi r22, 0x60 ; 96 + 7ea: c8 01 movw r24, r16 + 7ec: 41 df rcall .-382 ; 0x670 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:49 setRegister(MCP_RXB1CTRL, 0); - c4e: 40 e0 ldi r20, 0x00 ; 0 - c50: 60 e7 ldi r22, 0x70 ; 112 - c52: c8 01 movw r24, r16 - c54: a8 dd rcall .-1200 ; 0x7a6 + 7ee: 40 e0 ldi r20, 0x00 ; 0 + 7f0: 60 e7 ldi r22, 0x70 ; 112 + 7f2: c8 01 movw r24, r16 + 7f4: 3d df rcall .-390 ; 0x670 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:51 setRegister(MCP_CANINTE, CANINTF_RX0IF | CANINTF_RX1IF | CANINTF_ERRIF | CANINTF_MERRF); - c56: 43 ea ldi r20, 0xA3 ; 163 - c58: 6b e2 ldi r22, 0x2B ; 43 - c5a: c8 01 movw r24, r16 - c5c: a4 dd rcall .-1208 ; 0x7a6 + 7f6: 43 ea ldi r20, 0xA3 ; 163 + 7f8: 6b e2 ldi r22, 0x2B ; 43 + 7fa: c8 01 movw r24, r16 + 7fc: 39 df rcall .-398 ; 0x670 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:55 // receives all valid messages using either Standard or Extended Identifiers that // meet filter criteria. RXF0 is applied for RXB0, RXF1 is applied for RXB1 modifyRegister(MCP_RXB0CTRL, - c5e: 24 e0 ldi r18, 0x04 ; 4 - c60: 47 e6 ldi r20, 0x67 ; 103 - c62: 60 e6 ldi r22, 0x60 ; 96 - c64: c8 01 movw r24, r16 - c66: 61 dd rcall .-1342 ; 0x72a + 7fe: 24 e0 ldi r18, 0x04 ; 4 + 800: 47 e6 ldi r20, 0x67 ; 103 + 802: 60 e6 ldi r22, 0x60 ; 96 + 804: c8 01 movw r24, r16 + 806: f6 de rcall .-532 ; 0x5f4 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:58 RXBnCTRL_RXM_MASK | RXB0CTRL_BUKT | RXB0CTRL_FILHIT_MASK, RXBnCTRL_RXM_STDEXT | RXB0CTRL_BUKT | RXB0CTRL_FILHIT); modifyRegister(MCP_RXB1CTRL, - c68: 21 e0 ldi r18, 0x01 ; 1 - c6a: 47 e6 ldi r20, 0x67 ; 103 - c6c: 60 e7 ldi r22, 0x70 ; 112 - c6e: c8 01 movw r24, r16 - c70: 5c dd rcall .-1352 ; 0x72a + 808: 21 e0 ldi r18, 0x01 ; 1 + 80a: 47 e6 ldi r20, 0x67 ; 103 + 80c: 60 e7 ldi r22, 0x70 ; 112 + 80e: c8 01 movw r24, r16 + 810: f1 de rcall .-542 ; 0x5f4 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:65 RXBnCTRL_RXM_STDEXT | RXB1CTRL_FILHIT); @@ -3116,23 +1914,23 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:65 // do not filter any standard frames for RXF0 used by RXB0 // do not filter any extended frames for RXF1 used by RXB1 RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; - c72: 8c e0 ldi r24, 0x0C ; 12 - c74: e8 ef ldi r30, 0xF8 ; 248 - c76: f2 e5 ldi r31, 0x52 ; 82 - c78: de 01 movw r26, r28 - c7a: 1f 96 adiw r26, 0x0f ; 15 - c7c: 01 90 ld r0, Z+ - c7e: 0d 92 st X+, r0 - c80: 8a 95 dec r24 - c82: e1 f7 brne .-8 ; 0xc7c - c84: 4e 01 movw r8, r28 - c86: ff e0 ldi r31, 0x0F ; 15 - c88: 8f 0e add r8, r31 - c8a: 91 1c adc r9, r1 + 812: 8c e0 ldi r24, 0x0C ; 12 + 814: ec e3 ldi r30, 0x3C ; 60 + 816: ff e4 ldi r31, 0x4F ; 79 + 818: de 01 movw r26, r28 + 81a: 1f 96 adiw r26, 0x0f ; 15 + 81c: 01 90 ld r0, Z+ + 81e: 0d 92 st X+, r0 + 820: 8a 95 dec r24 + 822: e1 f7 brne .-8 ; 0x81c + 824: 4e 01 movw r8, r28 + 826: ff e0 ldi r31, 0x0F ; 15 + 828: 8f 0e add r8, r31 + 82a: 91 1c adc r9, r1 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66 for (int i=0; i<6; i++) { - c8c: b1 2c mov r11, r1 - c8e: a1 2c mov r10, r1 + 82c: b1 2c mov r11, r1 + 82e: a1 2c mov r10, r1 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564 REGISTER reg; @@ -3140,8 +1938,8 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564 case RXF0: reg = MCP_RXF0SIDH; break; case RXF1: reg = MCP_RXF1SIDH; break; case RXF2: reg = MCP_RXF2SIDH; break; - c90: 28 e0 ldi r18, 0x08 ; 8 - c92: 72 2e mov r7, r18 + 830: 28 e0 ldi r18, 0x08 ; 8 + 832: 72 2e mov r7, r18 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:68 // do not filter any standard frames for RXF0 used by RXB0 // do not filter any extended frames for RXF1 used by RXB1 @@ -3149,10 +1947,10 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:68 for (int i=0; i<6; i++) { bool ext = (i == 1); ERROR result = setFilter(filters[i], ext, 0); - c94: f4 01 movw r30, r8 - c96: e1 90 ld r14, Z+ - c98: f1 90 ld r15, Z+ - c9a: 4f 01 movw r8, r30 + 834: f4 01 movw r30, r8 + 836: e1 90 ld r14, Z+ + 838: f1 90 ld r15, Z+ + 83a: 4f 01 movw r8, r30 setConfigMode(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 return i; @@ -3161,10 +1959,10 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 MCP2515::ERROR MCP2515::setConfigMode() { return setMode(CANCTRL_REQOP_CONFIG); - c9c: 60 e8 ldi r22, 0x80 ; 128 - c9e: c8 01 movw r24, r16 - ca0: 43 df rcall .-378 ; 0xb28 - ca2: 6c 01 movw r12, r24 + 83c: 60 e8 ldi r22, 0x80 ; 128 + 83e: c8 01 movw r24, r16 + 840: 3f df rcall .-386 ; 0x6c0 + 842: 6c 01 movw r12, r24 setFilter(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:555 } @@ -3173,9 +1971,9 @@ MCP2515::ERROR MCP2515::setFilter(const RXF num, const bool ext, const uint32_t { ERROR res = setConfigMode(); if (res != ERROR_OK) { - ca4: 89 2b or r24, r25 - ca6: 09 f0 breq .+2 ; 0xcaa - ca8: 65 c0 rjmp .+202 ; 0xd74 + 844: 89 2b or r24, r25 + 846: 09 f0 breq .+2 ; 0x84a + 848: 65 c0 rjmp .+202 ; 0x914 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 return res; } @@ -3183,19 +1981,19 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 REGISTER reg; switch (num) { - caa: f2 e0 ldi r31, 0x02 ; 2 - cac: ef 16 cp r14, r31 - cae: f1 04 cpc r15, r1 - cb0: 09 f4 brne .+2 ; 0xcb4 - cb2: 72 c0 rjmp .+228 ; 0xd98 - cb4: 58 f4 brcc .+22 ; 0xccc - cb6: e1 14 cp r14, r1 - cb8: f1 04 cpc r15, r1 - cba: 09 f4 brne .+2 ; 0xcbe - cbc: 73 c0 rjmp .+230 ; 0xda4 - cbe: ea 94 dec r14 - cc0: ef 28 or r14, r15 - cc2: 89 f0 breq .+34 ; 0xce6 + 84a: f2 e0 ldi r31, 0x02 ; 2 + 84c: ef 16 cp r14, r31 + 84e: f1 04 cpc r15, r1 + 850: 09 f4 brne .+2 ; 0x854 + 852: 72 c0 rjmp .+228 ; 0x938 + 854: 58 f4 brcc .+22 ; 0x86c + 856: e1 14 cp r14, r1 + 858: f1 04 cpc r15, r1 + 85a: 09 f4 brne .+2 ; 0x85e + 85c: 73 c0 rjmp .+230 ; 0x944 + 85e: ea 94 dec r14 + 860: ef 28 or r14, r15 + 862: 89 f0 breq .+34 ; 0x886 _ZN7MCP25155resetEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:544 REGISTER reg; @@ -3204,10 +2002,10 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:544 case MASK1: reg = MCP_RXM1SIDH; break; default: return ERROR_FAIL; - cc4: cc 24 eor r12, r12 - cc6: c3 94 inc r12 - cc8: d1 2c mov r13, r1 - cca: 54 c0 rjmp .+168 ; 0xd74 + 864: cc 24 eor r12, r12 + 866: c3 94 inc r12 + 868: d1 2c mov r13, r1 + 86a: 54 c0 rjmp .+168 ; 0x914 setFilter(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 return res; @@ -3216,17 +2014,17 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:561 REGISTER reg; switch (num) { - ccc: e4 e0 ldi r30, 0x04 ; 4 - cce: ee 16 cp r14, r30 - cd0: f1 04 cpc r15, r1 - cd2: 09 f4 brne .+2 ; 0xcd6 - cd4: 65 c0 rjmp .+202 ; 0xda0 - cd6: 08 f4 brcc .+2 ; 0xcda - cd8: 61 c0 rjmp .+194 ; 0xd9c - cda: 85 e0 ldi r24, 0x05 ; 5 - cdc: e8 16 cp r14, r24 - cde: f1 04 cpc r15, r1 - ce0: 89 f7 brne .-30 ; 0xcc4 + 86c: e4 e0 ldi r30, 0x04 ; 4 + 86e: ee 16 cp r14, r30 + 870: f1 04 cpc r15, r1 + 872: 09 f4 brne .+2 ; 0x876 + 874: 65 c0 rjmp .+202 ; 0x940 + 876: 08 f4 brcc .+2 ; 0x87a + 878: 61 c0 rjmp .+194 ; 0x93c + 87a: 85 e0 ldi r24, 0x05 ; 5 + 87c: e8 16 cp r14, r24 + 87e: f1 04 cpc r15, r1 + 880: 89 f7 brne .-30 ; 0x864 _ZN7MCP25155resetEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:567 case RXF0: reg = MCP_RXF0SIDH; break; @@ -3235,8 +2033,8 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:567 case RXF3: reg = MCP_RXF3SIDH; break; case RXF4: reg = MCP_RXF4SIDH; break; case RXF5: reg = MCP_RXF5SIDH; break; - ce2: 68 e1 ldi r22, 0x18 ; 24 - ce4: 01 c0 rjmp .+2 ; 0xce8 + 882: 68 e1 ldi r22, 0x18 ; 24 + 884: 01 c0 rjmp .+2 ; 0x888 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:563 REGISTER reg; @@ -3244,7 +2042,7 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:563 switch (num) { case RXF0: reg = MCP_RXF0SIDH; break; case RXF1: reg = MCP_RXF1SIDH; break; - ce6: 64 e0 ldi r22, 0x04 ; 4 + 886: 64 e0 ldi r22, 0x04 ; 4 prepareId(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:513 @@ -3253,26 +2051,26 @@ void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) uint16_t canid = (uint16_t)(id & 0x0FFFF); if (ext) { - ce8: 91 e0 ldi r25, 0x01 ; 1 - cea: a9 16 cp r10, r25 - cec: b1 04 cpc r11, r1 - cee: 09 f0 breq .+2 ; 0xcf2 - cf0: 5b c0 rjmp .+182 ; 0xda8 + 888: 91 e0 ldi r25, 0x01 ; 1 + 88a: a9 16 cp r10, r25 + 88c: b1 04 cpc r11, r1 + 88e: 09 f0 breq .+2 ; 0x892 + 890: 5b c0 rjmp .+182 ; 0x948 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - cf2: 1e 8e std Y+30, r1 ; 0x1e + 892: 1e 8e std Y+30, r1 ; 0x1e C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 buffer[MCP_EID8] = (uint8_t) (canid >> 8); - cf4: 1d 8e std Y+29, r1 ; 0x1d + 894: 1d 8e std Y+29, r1 ; 0x1d C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 canid = (uint16_t)(id >> 16); buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - cf6: 7c 8e std Y+28, r7 ; 0x1c + 896: 7c 8e std Y+28, r7 ; 0x1c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - cf8: 1b 8e std Y+27, r1 ; 0x1b + 898: 1b 8e std Y+27, r1 ; 0x1b setFilter(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:574 return ERROR_FAIL; @@ -3281,12 +2079,12 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:574 uint8_t tbufdata[4]; prepareId(tbufdata, ext, ulData); setRegisters(reg, tbufdata, 4); - cfa: 24 e0 ldi r18, 0x04 ; 4 - cfc: ae 01 movw r20, r28 - cfe: 45 5e subi r20, 0xE5 ; 229 - d00: 5f 4f sbci r21, 0xFF ; 255 - d02: c8 01 movw r24, r16 - d04: 2b dd rcall .-1450 ; 0x75c + 89a: 24 e0 ldi r18, 0x04 ; 4 + 89c: ae 01 movw r20, r28 + 89e: 45 5e subi r20, 0xE5 ; 229 + 8a0: 5f 4f sbci r21, 0xFF ; 255 + 8a2: c8 01 movw r24, r16 + 8a4: c0 de rcall .-640 ; 0x626 _ZN7MCP25155resetEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66 @@ -3295,14 +2093,14 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:66 // do not filter any extended frames for RXF1 used by RXB1 RXF filters[] = {RXF0, RXF1, RXF2, RXF3, RXF4, RXF5}; for (int i=0; i<6; i++) { - d06: ef ef ldi r30, 0xFF ; 255 - d08: ae 1a sub r10, r30 - d0a: be 0a sbc r11, r30 - d0c: f6 e0 ldi r31, 0x06 ; 6 - d0e: af 16 cp r10, r31 - d10: b1 04 cpc r11, r1 - d12: 09 f0 breq .+2 ; 0xd16 - d14: bf cf rjmp .-130 ; 0xc94 + 8a6: ef ef ldi r30, 0xFF ; 255 + 8a8: ae 1a sub r10, r30 + 8aa: be 0a sbc r11, r30 + 8ac: f6 e0 ldi r31, 0x06 ; 6 + 8ae: af 16 cp r10, r31 + 8b0: b1 04 cpc r11, r1 + 8b2: 09 f0 breq .+2 ; 0x8b6 + 8b4: bf cf rjmp .-130 ; 0x834 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:74 if (result != ERROR_OK) { return result; @@ -3310,20 +2108,20 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:74 } MASK masks[] = {MASK0, MASK1}; - d16: 1f 8e std Y+31, r1 ; 0x1f - d18: 18 a2 std Y+32, r1 ; 0x20 - d1a: 81 e0 ldi r24, 0x01 ; 1 - d1c: 90 e0 ldi r25, 0x00 ; 0 - d1e: 89 a3 std Y+33, r24 ; 0x21 - d20: 9a a3 std Y+34, r25 ; 0x22 - d22: 7e 01 movw r14, r28 - d24: 8f e1 ldi r24, 0x1F ; 31 - d26: e8 0e add r14, r24 - d28: f1 1c adc r15, r1 - d2a: 4e 01 movw r8, r28 - d2c: 93 e2 ldi r25, 0x23 ; 35 - d2e: 89 0e add r8, r25 - d30: 91 1c adc r9, r1 + 8b6: 1f 8e std Y+31, r1 ; 0x1f + 8b8: 18 a2 std Y+32, r1 ; 0x20 + 8ba: 81 e0 ldi r24, 0x01 ; 1 + 8bc: 90 e0 ldi r25, 0x00 ; 0 + 8be: 89 a3 std Y+33, r24 ; 0x21 + 8c0: 9a a3 std Y+34, r25 ; 0x22 + 8c2: 7e 01 movw r14, r28 + 8c4: 8f e1 ldi r24, 0x1F ; 31 + 8c6: e8 0e add r14, r24 + 8c8: f1 1c adc r15, r1 + 8ca: 4e 01 movw r8, r28 + 8cc: 93 e2 ldi r25, 0x23 ; 35 + 8ce: 89 0e add r8, r25 + 8d0: 91 1c adc r9, r1 prepareId(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); @@ -3332,8 +2130,8 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - d32: 98 e0 ldi r25, 0x08 ; 8 - d34: 79 2e mov r7, r25 + 8d2: 98 e0 ldi r25, 0x08 ; 8 + 8d4: 79 2e mov r7, r25 _ZN7MCP25155resetEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:76 } @@ -3342,10 +2140,10 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:76 MASK masks[] = {MASK0, MASK1}; for (int i=0; i<2; i++) { ERROR result = setFilterMask(masks[i], true, 0); - d36: f7 01 movw r30, r14 - d38: a1 90 ld r10, Z+ - d3a: b1 90 ld r11, Z+ - d3c: 7f 01 movw r14, r30 + 8d6: f7 01 movw r30, r14 + 8d8: a1 90 ld r10, Z+ + 8da: b1 90 ld r11, Z+ + 8dc: 7f 01 movw r14, r30 setConfigMode(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 return i; @@ -3354,10 +2152,10 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:150 MCP2515::ERROR MCP2515::setConfigMode() { return setMode(CANCTRL_REQOP_CONFIG); - d3e: 60 e8 ldi r22, 0x80 ; 128 - d40: c8 01 movw r24, r16 - d42: f2 de rcall .-540 ; 0xb28 - d44: 6c 01 movw r12, r24 + 8de: 60 e8 ldi r22, 0x80 ; 128 + 8e0: c8 01 movw r24, r16 + 8e2: ee de rcall .-548 ; 0x6c0 + 8e4: 6c 01 movw r12, r24 setFilterMask(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:532 } @@ -3366,8 +2164,8 @@ MCP2515::ERROR MCP2515::setFilterMask(const MASK mask, const bool ext, const uin { ERROR res = setConfigMode(); if (res != ERROR_OK) { - d46: 89 2b or r24, r25 - d48: a9 f4 brne .+42 ; 0xd74 + 8e6: 89 2b or r24, r25 + 8e8: a9 f4 brne .+42 ; 0x914 prepareId(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) @@ -3376,19 +2174,19 @@ void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) if (ext) { buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); - d4a: 1e 8e std Y+30, r1 ; 0x1e + 8ea: 1e 8e std Y+30, r1 ; 0x1e C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 buffer[MCP_EID8] = (uint8_t) (canid >> 8); - d4c: 1d 8e std Y+29, r1 ; 0x1d + 8ec: 1d 8e std Y+29, r1 ; 0x1d C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 canid = (uint16_t)(id >> 16); buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); buffer[MCP_SIDL] |= TXB_EXIDE_MASK; - d4e: 7c 8e std Y+28, r7 ; 0x1c + 8ee: 7c 8e std Y+28, r7 ; 0x1c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 buffer[MCP_SIDH] = (uint8_t) (canid >> 5); - d50: 1b 8e std Y+27, r1 ; 0x1b + 8f0: 1b 8e std Y+27, r1 ; 0x1b setFilterMask(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:540 @@ -3397,18 +2195,18 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:540 REGISTER reg; switch (mask) { - d52: a1 14 cp r10, r1 - d54: b1 04 cpc r11, r1 - d56: 69 f1 breq .+90 ; 0xdb2 - d58: aa 94 dec r10 - d5a: ab 28 or r10, r11 - d5c: 09 f0 breq .+2 ; 0xd60 - d5e: b2 cf rjmp .-156 ; 0xcc4 + 8f2: a1 14 cp r10, r1 + 8f4: b1 04 cpc r11, r1 + 8f6: 69 f1 breq .+90 ; 0x952 + 8f8: aa 94 dec r10 + 8fa: ab 28 or r10, r11 + 8fc: 09 f0 breq .+2 ; 0x900 + 8fe: b2 cf rjmp .-156 ; 0x864 _ZN7MCP25155resetEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:542 case MASK0: reg = MCP_RXM0SIDH; break; case MASK1: reg = MCP_RXM1SIDH; break; - d60: 64 e2 ldi r22, 0x24 ; 36 + 900: 64 e2 ldi r22, 0x24 ; 36 setFilterMask(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:547 default: @@ -3416,12 +2214,12 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:547 } setRegisters(reg, tbufdata, 4); - d62: 24 e0 ldi r18, 0x04 ; 4 - d64: ae 01 movw r20, r28 - d66: 45 5e subi r20, 0xE5 ; 229 - d68: 5f 4f sbci r21, 0xFF ; 255 - d6a: c8 01 movw r24, r16 - d6c: f7 dc rcall .-1554 ; 0x75c + 902: 24 e0 ldi r18, 0x04 ; 4 + 904: ae 01 movw r20, r28 + 906: 45 5e subi r20, 0xE5 ; 229 + 908: 5f 4f sbci r21, 0xFF ; 255 + 90a: c8 01 movw r24, r16 + 90c: 8c de rcall .-744 ; 0x626 _ZN7MCP25155resetEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:75 return result; @@ -3430,9 +2228,9 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:75 MASK masks[] = {MASK0, MASK1}; for (int i=0; i<2; i++) { - d6e: 8e 14 cp r8, r14 - d70: 9f 04 cpc r9, r15 - d72: 09 f7 brne .-62 ; 0xd36 + 90e: 8e 14 cp r8, r14 + 910: 9f 04 cpc r9, r15 + 912: 09 f7 brne .-62 ; 0x8d6 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:83 return result; } @@ -3440,24 +2238,24 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:83 return ERROR_OK; } - d74: c6 01 movw r24, r12 - d76: a2 96 adiw r28, 0x22 ; 34 - d78: cd bf out 0x3d, r28 ; 61 - d7a: de bf out 0x3e, r29 ; 62 - d7c: df 91 pop r29 - d7e: cf 91 pop r28 - d80: 1f 91 pop r17 - d82: 0f 91 pop r16 - d84: ff 90 pop r15 - d86: ef 90 pop r14 - d88: df 90 pop r13 - d8a: cf 90 pop r12 - d8c: bf 90 pop r11 - d8e: af 90 pop r10 - d90: 9f 90 pop r9 - d92: 8f 90 pop r8 - d94: 7f 90 pop r7 - d96: 08 95 ret + 914: c6 01 movw r24, r12 + 916: a2 96 adiw r28, 0x22 ; 34 + 918: cd bf out 0x3d, r28 ; 61 + 91a: de bf out 0x3e, r29 ; 62 + 91c: df 91 pop r29 + 91e: cf 91 pop r28 + 920: 1f 91 pop r17 + 922: 0f 91 pop r16 + 924: ff 90 pop r15 + 926: ef 90 pop r14 + 928: df 90 pop r13 + 92a: cf 90 pop r12 + 92c: bf 90 pop r11 + 92e: af 90 pop r10 + 930: 9f 90 pop r9 + 932: 8f 90 pop r8 + 934: 7f 90 pop r7 + 936: 08 95 ret C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564 REGISTER reg; @@ -3465,16 +2263,16 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:564 case RXF0: reg = MCP_RXF0SIDH; break; case RXF1: reg = MCP_RXF1SIDH; break; case RXF2: reg = MCP_RXF2SIDH; break; - d98: 68 e0 ldi r22, 0x08 ; 8 - d9a: a6 cf rjmp .-180 ; 0xce8 + 938: 68 e0 ldi r22, 0x08 ; 8 + 93a: a6 cf rjmp .-180 ; 0x888 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:565 case RXF3: reg = MCP_RXF3SIDH; break; - d9c: 60 e1 ldi r22, 0x10 ; 16 - d9e: a4 cf rjmp .-184 ; 0xce8 + 93c: 60 e1 ldi r22, 0x10 ; 16 + 93e: a4 cf rjmp .-184 ; 0x888 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:566 case RXF4: reg = MCP_RXF4SIDH; break; - da0: 64 e1 ldi r22, 0x14 ; 20 - da2: a2 cf rjmp .-188 ; 0xce8 + 940: 64 e1 ldi r22, 0x14 ; 20 + 942: a2 cf rjmp .-188 ; 0x888 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:562 } @@ -3482,8 +2280,8 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:562 switch (num) { case RXF0: reg = MCP_RXF0SIDH; break; - da4: 60 e0 ldi r22, 0x00 ; 0 - da6: a0 cf rjmp .-192 ; 0xce8 + 944: 60 e0 ldi r22, 0x00 ; 0 + 946: a0 cf rjmp .-192 ; 0x888 prepareId(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522 buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); @@ -3492,17 +2290,17 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522 buffer[MCP_SIDH] = (uint8_t) (canid >> 5); } else { buffer[MCP_SIDH] = (uint8_t) (canid >> 3); - da8: 1b 8e std Y+27, r1 ; 0x1b + 948: 1b 8e std Y+27, r1 ; 0x1b C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:523 buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5); - daa: 1c 8e std Y+28, r1 ; 0x1c + 94a: 1c 8e std Y+28, r1 ; 0x1c C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524 buffer[MCP_EID0] = 0; - dac: 1e 8e std Y+30, r1 ; 0x1e + 94c: 1e 8e std Y+30, r1 ; 0x1e C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525 buffer[MCP_EID8] = 0; - dae: 1d 8e std Y+29, r1 ; 0x1d - db0: a4 cf rjmp .-184 ; 0xcfa + 94e: 1d 8e std Y+29, r1 ; 0x1d + 950: a4 cf rjmp .-184 ; 0x89a _ZN7MCP25155resetEv(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:541 uint8_t tbufdata[4]; @@ -3511,10 +2309,412 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:541 REGISTER reg; switch (mask) { case MASK0: reg = MCP_RXM0SIDH; break; - db2: 60 e2 ldi r22, 0x20 ; 32 - db4: d6 cf rjmp .-84 ; 0xd62 + 952: 60 e2 ldi r22, 0x20 ; 32 + 954: d6 cf rjmp .-84 ; 0x902 -00000db6 <__vector_25>: +00000956 : +_Z17SendSerialPackageP7MCP2515(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:442 + CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); +} + +void SendSerialPackage(MCP2515 *interface) +{ + 956: 2f 92 push r2 + 958: 3f 92 push r3 + 95a: 4f 92 push r4 + 95c: 5f 92 push r5 + 95e: 6f 92 push r6 + 960: 7f 92 push r7 + 962: 8f 92 push r8 + 964: 9f 92 push r9 + 966: af 92 push r10 + 968: bf 92 push r11 + 96a: cf 92 push r12 + 96c: df 92 push r13 + 96e: ef 92 push r14 + 970: ff 92 push r15 + 972: 0f 93 push r16 + 974: 1f 93 push r17 + 976: cf 93 push r28 + 978: df 93 push r29 + 97a: cd b7 in r28, 0x3d ; 61 + 97c: de b7 in r29, 0x3e ; 62 + 97e: 63 97 sbiw r28, 0x13 ; 19 + 980: cd bf out 0x3d, r28 ; 61 + 982: de bf out 0x3e, r29 ; 62 + 984: 7c 01 movw r14, r24 +CreateCanId(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:407 + return (canFrameId / 0x10000) & 0xFFF; +} + +uint32_t CreateCanId(uint16_t commandId) +{ + return ((commandId & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG; + 986: 80 91 14 3c lds r24, 0x3C14 ; 0x803c14 + 98a: 90 91 15 3c lds r25, 0x3C15 ; 0x803c15 + 98e: 09 2e mov r0, r25 + 990: 00 0c add r0, r0 + 992: aa 0b sbc r26, r26 + 994: bb 0b sbc r27, r27 + 996: af 6f ori r26, 0xFF ; 255 + 998: bf 68 ori r27, 0x8F ; 143 +_Z17SendSerialPackageP7MCP2515(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:443 + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); +} + +void SendSerialPackage(MCP2515 *interface) +{ + _frame.can_id = CreateCanId(HELP_PACKAGE_CAN_ID); + 99a: 80 93 00 3c sts 0x3C00, r24 ; 0x803c00 <__DATA_REGION_ORIGIN__> + 99e: 90 93 01 3c sts 0x3C01, r25 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> + 9a2: a0 93 02 3c sts 0x3C02, r26 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2> + 9a6: b0 93 03 3c sts 0x3C03, r27 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3> +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:444 + _frame.can_dlc = 4; + 9aa: 84 e0 ldi r24, 0x04 ; 4 + 9ac: 80 93 04 3c sts 0x3C04, r24 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4> +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:446 + + _frame.data[0] = SoftwareVersionHigh; + 9b0: 83 e0 ldi r24, 0x03 ; 3 + 9b2: 80 93 08 3c sts 0x3C08, r24 ; 0x803c08 <__DATA_REGION_ORIGIN__+0x8> +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:447 + _frame.data[1] = SoftwareVersionLow; + 9b6: 81 e0 ldi r24, 0x01 ; 1 + 9b8: 80 93 09 3c sts 0x3C09, r24 ; 0x803c09 <__DATA_REGION_ORIGIN__+0x9> +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:448 + _frame.data[2] = HardwareVersionHigh; + 9bc: 86 e0 ldi r24, 0x06 ; 6 + 9be: 80 93 0a 3c sts 0x3C0A, r24 ; 0x803c0a <__DATA_REGION_ORIGIN__+0xa> +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:449 + _frame.data[3] = HardwareVersionLow; + 9c2: 10 92 0b 3c sts 0x3C0B, r1 ; 0x803c0b <__DATA_REGION_ORIGIN__+0xb> + 9c6: 4b e0 ldi r20, 0x0B ; 11 + 9c8: 94 2e mov r9, r20 + 9ca: 5e 01 movw r10, r28 + 9cc: 84 e1 ldi r24, 0x14 ; 20 + 9ce: a8 0e add r10, r24 + 9d0: b1 1c adc r11, r1 +sendMessage(): +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:612 + return ERROR_OK; +} + +MCP2515::ERROR MCP2515::sendMessage(const struct can_frame *frame) +{ + if (frame->can_dlc > CAN_MAX_DLEN) { + 9d2: 80 91 04 3c lds r24, 0x3C04 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4> + 9d6: 89 30 cpi r24, 0x09 ; 9 + 9d8: 08 f0 brcs .+2 ; 0x9dc + 9da: 8b c0 rjmp .+278 ; 0xaf2 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:616 + return ERROR_FAILTX; + } + + TXBn txBuffers[N_TXBUFFERS] = {TXB0, TXB1, TXB2}; + 9dc: 86 e0 ldi r24, 0x06 ; 6 + 9de: e8 e4 ldi r30, 0x48 ; 72 + 9e0: ff e4 ldi r31, 0x4F ; 79 + 9e2: de 01 movw r26, r28 + 9e4: 1e 96 adiw r26, 0x0e ; 14 + 9e6: 01 90 ld r0, Z+ + 9e8: 0d 92 st X+, r0 + 9ea: 8a 95 dec r24 + 9ec: e1 f7 brne .-8 ; 0x9e6 + 9ee: 3e 01 movw r6, r28 + 9f0: ee e0 ldi r30, 0x0E ; 14 + 9f2: 6e 0e add r6, r30 + 9f4: 71 1c adc r7, r1 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:619 + + for (int i=0; iCTRL); + 9fe: 86 01 movw r16, r12 + a00: 00 0f add r16, r16 + a02: 11 1f adc r17, r17 + a04: f8 01 movw r30, r16 + a06: ec 0d add r30, r12 + a08: fd 1d adc r31, r13 + a0a: e2 5b subi r30, 0xB2 ; 178 + a0c: f0 4b sbci r31, 0xB0 ; 176 + a0e: 80 80 ld r8, Z + a10: 68 2d mov r22, r8 + a12: c7 01 movw r24, r14 + a14: 41 de rcall .-894 ; 0x698 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:621 + if ( (ctrlval & TXB_TXREQ) == 0 ) { + a16: 83 fd sbrc r24, 3 + a18: 93 c0 rjmp .+294 ; 0xb40 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:581 + return ERROR_OK; +} + +MCP2515::ERROR MCP2515::sendMessage(const TXBn txbn, const struct can_frame *frame) +{ + if (frame->can_dlc > CAN_MAX_DLEN) { + a1a: 70 90 04 3c lds r7, 0x3C04 ; 0x803c04 <__DATA_REGION_ORIGIN__+0x4> + a1e: f8 e0 ldi r31, 0x08 ; 8 + a20: f7 15 cp r31, r7 + a22: 08 f4 brcc .+2 ; 0xa26 + a24: 66 c0 rjmp .+204 ; 0xaf2 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:589 + + const struct TXBn_REGS *txbuf = &TXB[txbn]; + + uint8_t data[13]; + + bool ext = (frame->can_id & CAN_EFF_FLAG); + a26: 80 91 00 3c lds r24, 0x3C00 ; 0x803c00 <__DATA_REGION_ORIGIN__> + a2a: 90 91 01 3c lds r25, 0x3C01 ; 0x803c01 <__DATA_REGION_ORIGIN__+0x1> + a2e: a0 91 02 3c lds r26, 0x3C02 ; 0x803c02 <__DATA_REGION_ORIGIN__+0x2> + a32: b0 91 03 3c lds r27, 0x3C03 ; 0x803c03 <__DATA_REGION_ORIGIN__+0x3> + a36: ac 01 movw r20, r24 + a38: bd 01 movw r22, r26 + a3a: 44 27 eor r20, r20 + a3c: 77 fd sbrc r23, 7 + a3e: 43 95 inc r20 + a40: 55 27 eor r21, r21 + a42: 66 27 eor r22, r22 + a44: 77 27 eor r23, r23 + a46: 24 2f mov r18, r20 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:590 + bool rtr = (frame->can_id & CAN_RTR_FLAG); + a48: ac 01 movw r20, r24 + a4a: bd 01 movw r22, r26 + a4c: 44 27 eor r20, r20 + a4e: 55 27 eor r21, r21 + a50: 66 27 eor r22, r22 + a52: 70 74 andi r23, 0x40 ; 64 +_Z17SendSerialPackageP7MCP2515(): +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:591 + uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); + a54: 22 24 eor r2, r2 + a56: 2a 94 dec r2 + a58: 32 2c mov r3, r2 + a5a: 42 2c mov r4, r2 + a5c: ff e1 ldi r31, 0x1F ; 31 + a5e: 5f 2e mov r5, r31 +sendMessage(): + a60: 21 11 cpse r18, r1 + a62: 06 c0 rjmp .+12 ; 0xa70 +_Z17SendSerialPackageP7MCP2515(): + a64: 22 24 eor r2, r2 + a66: 2a 94 dec r2 + a68: e7 e0 ldi r30, 0x07 ; 7 + a6a: 3e 2e mov r3, r30 + a6c: 41 2c mov r4, r1 + a6e: 51 2c mov r5, r1 +sendMessage(): + a70: 82 21 and r24, r2 + a72: 93 21 and r25, r3 + a74: a4 21 and r26, r4 + a76: b5 21 and r27, r5 +prepareId(): +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:513 + +void MCP2515::prepareId(uint8_t *buffer, const bool ext, const uint32_t id) +{ + uint16_t canid = (uint16_t)(id & 0x0FFFF); + + if (ext) { + a78: 22 23 and r18, r18 + a7a: 09 f4 brne .+2 ; 0xa7e + a7c: 53 c0 rjmp .+166 ; 0xb24 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:514 + buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); + a7e: 8c 83 std Y+4, r24 ; 0x04 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:515 + buffer[MCP_EID8] = (uint8_t) (canid >> 8); + a80: 9b 83 std Y+3, r25 ; 0x03 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:516 + canid = (uint16_t)(id >> 16); + a82: cd 01 movw r24, r26 + a84: aa 27 eor r26, r26 + a86: bb 27 eor r27, r27 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:518 + buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); + buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); + a88: 28 2f mov r18, r24 + a8a: 22 0f add r18, r18 + a8c: 22 0f add r18, r18 + a8e: 22 0f add r18, r18 + a90: 20 7e andi r18, 0xE0 ; 224 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:517 + + if (ext) { + buffer[MCP_EID0] = (uint8_t) (canid & 0xFF); + buffer[MCP_EID8] = (uint8_t) (canid >> 8); + canid = (uint16_t)(id >> 16); + buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); + a92: 38 2f mov r19, r24 + a94: 33 70 andi r19, 0x03 ; 3 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:519 + buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); + buffer[MCP_SIDL] |= TXB_EXIDE_MASK; + a96: 38 60 ori r19, 0x08 ; 8 + a98: 23 2b or r18, r19 + a9a: 2a 83 std Y+2, r18 ; 0x02 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:520 + buffer[MCP_SIDH] = (uint8_t) (canid >> 5); + a9c: 35 e0 ldi r19, 0x05 ; 5 + a9e: 96 95 lsr r25 + aa0: 87 95 ror r24 + aa2: 3a 95 dec r19 + aa4: e1 f7 brne .-8 ; 0xa9e + aa6: 89 83 std Y+1, r24 ; 0x01 +sendMessage(): +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:595 + bool rtr = (frame->can_id & CAN_RTR_FLAG); + uint32_t id = (frame->can_id & (ext ? CAN_EFF_MASK : CAN_SFF_MASK)); + + prepareId(data, ext, id); + + data[MCP_DLC] = rtr ? (frame->can_dlc | RTR_MASK) : frame->can_dlc; + aa8: 87 2d mov r24, r7 + aaa: 45 2b or r20, r21 + aac: 46 2b or r20, r22 + aae: 47 2b or r20, r23 + ab0: 09 f0 breq .+2 ; 0xab4 + ab2: 80 64 ori r24, 0x40 ; 64 + ab4: 8d 83 std Y+5, r24 ; 0x05 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:597 + + memcpy(&data[MCP_DATA], frame->data, frame->can_dlc); + ab6: 47 2d mov r20, r7 + ab8: 50 e0 ldi r21, 0x00 ; 0 + aba: 68 e0 ldi r22, 0x08 ; 8 + abc: 7c e3 ldi r23, 0x3C ; 60 + abe: ce 01 movw r24, r28 + ac0: 06 96 adiw r24, 0x06 ; 6 + ac2: 31 d2 rcall .+1122 ; 0xf26 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:599 + + setRegisters(txbuf->SIDH, data, 5 + frame->can_dlc); + ac4: 25 e0 ldi r18, 0x05 ; 5 + ac6: 27 0d add r18, r7 + ac8: 0c 0d add r16, r12 + aca: 1d 1d adc r17, r13 + acc: f8 01 movw r30, r16 + ace: e2 5b subi r30, 0xB2 ; 178 + ad0: f0 4b sbci r31, 0xB0 ; 176 + ad2: ae 01 movw r20, r28 + ad4: 4f 5f subi r20, 0xFF ; 255 + ad6: 5f 4f sbci r21, 0xFF ; 255 + ad8: 61 81 ldd r22, Z+1 ; 0x01 + ada: c7 01 movw r24, r14 + adc: a4 dd rcall .-1208 ; 0x626 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:601 + + modifyRegister(txbuf->CTRL, TXB_TXREQ, TXB_TXREQ); + ade: 28 e0 ldi r18, 0x08 ; 8 + ae0: 48 e0 ldi r20, 0x08 ; 8 + ae2: 68 2d mov r22, r8 + ae4: c7 01 movw r24, r14 + ae6: 86 dd rcall .-1268 ; 0x5f4 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:603 + + uint8_t ctrl = readRegister(txbuf->CTRL); + ae8: 68 2d mov r22, r8 + aea: c7 01 movw r24, r14 + aec: d5 dd rcall .-1110 ; 0x698 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:604 + if ((ctrl & (TXB_ABTF | TXB_MLOA | TXB_TXERR)) != 0) { + aee: 80 77 andi r24, 0x70 ; 112 + af0: 19 f0 breq .+6 ; 0xaf8 + af2: 9a 94 dec r9 +DoSendCanPkg(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:482 +{ + // ToggleDebug(); + byte cnt = 0; + while (interface->sendMessage(&_frame)) { + cnt++; + if (cnt > 10) return; + af4: 91 10 cpse r9, r1 + af6: 6d cf rjmp .-294 ; 0x9d2 +_Z17SendSerialPackageP7MCP2515(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:451 + _frame.data[0] = SoftwareVersionHigh; + _frame.data[1] = SoftwareVersionLow; + _frame.data[2] = HardwareVersionHigh; + _frame.data[3] = HardwareVersionLow; + DoSendCanPkg(interface, &_frame); +} + af8: 63 96 adiw r28, 0x13 ; 19 + afa: cd bf out 0x3d, r28 ; 61 + afc: de bf out 0x3e, r29 ; 62 + afe: df 91 pop r29 + b00: cf 91 pop r28 + b02: 1f 91 pop r17 + b04: 0f 91 pop r16 + b06: ff 90 pop r15 + b08: ef 90 pop r14 + b0a: df 90 pop r13 + b0c: cf 90 pop r12 + b0e: bf 90 pop r11 + b10: af 90 pop r10 + b12: 9f 90 pop r9 + b14: 8f 90 pop r8 + b16: 7f 90 pop r7 + b18: 6f 90 pop r6 + b1a: 5f 90 pop r5 + b1c: 4f 90 pop r4 + b1e: 3f 90 pop r3 + b20: 2f 90 pop r2 + b22: 08 95 ret +prepareId(): +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:522 + buffer[MCP_SIDL] = (uint8_t) (canid & 0x03); + buffer[MCP_SIDL] += (uint8_t) ((canid & 0x1C) << 3); + buffer[MCP_SIDL] |= TXB_EXIDE_MASK; + buffer[MCP_SIDH] = (uint8_t) (canid >> 5); + } else { + buffer[MCP_SIDH] = (uint8_t) (canid >> 3); + b24: 9c 01 movw r18, r24 + b26: 93 e0 ldi r25, 0x03 ; 3 + b28: 36 95 lsr r19 + b2a: 27 95 ror r18 + b2c: 9a 95 dec r25 + b2e: e1 f7 brne .-8 ; 0xb28 + b30: 29 83 std Y+1, r18 ; 0x01 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:523 + buffer[MCP_SIDL] = (uint8_t) ((canid & 0x07 ) << 5); + b32: 82 95 swap r24 + b34: 88 0f add r24, r24 + b36: 80 7e andi r24, 0xE0 ; 224 + b38: 8a 83 std Y+2, r24 ; 0x02 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:524 + buffer[MCP_EID0] = 0; + b3a: 1c 82 std Y+4, r1 ; 0x04 +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:525 + buffer[MCP_EID8] = 0; + b3c: 1b 82 std Y+3, r1 ; 0x03 + b3e: b4 cf rjmp .-152 ; 0xaa8 +sendMessage(): +C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:618 + return ERROR_FAILTX; + } + + TXBn txBuffers[N_TXBUFFERS] = {TXB0, TXB1, TXB2}; + + for (int i=0; i + b46: 57 cf rjmp .-338 ; 0x9f6 + b48: d4 cf rjmp .-88 ; 0xaf2 + +00000b4a <__vector_25>: __vector_25(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:74 #elif defined(MILLIS_USE_TIMERB2) @@ -3523,47 +2723,47 @@ ISR(TCB2_INT_vect) ISR(TCB3_INT_vect) #endif { - db6: 1f 92 push r1 - db8: 0f 92 push r0 - dba: 0f b6 in r0, 0x3f ; 63 - dbc: 0f 92 push r0 - dbe: 11 24 eor r1, r1 - dc0: 8f 93 push r24 - dc2: 9f 93 push r25 - dc4: af 93 push r26 - dc6: bf 93 push r27 + b4a: 1f 92 push r1 + b4c: 0f 92 push r0 + b4e: 0f b6 in r0, 0x3f ; 63 + b50: 0f 92 push r0 + b52: 11 24 eor r1, r1 + b54: 8f 93 push r24 + b56: 9f 93 push r25 + b58: af 93 push r26 + b5a: bf 93 push r27 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:75 timer_millis++; - dc8: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 - dcc: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 - dd0: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 - dd4: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 - dd8: 01 96 adiw r24, 0x01 ; 1 - dda: a1 1d adc r26, r1 - ddc: b1 1d adc r27, r1 - dde: 80 93 10 3c sts 0x3C10, r24 ; 0x803c10 - de2: 90 93 11 3c sts 0x3C11, r25 ; 0x803c11 - de6: a0 93 12 3c sts 0x3C12, r26 ; 0x803c12 - dea: b0 93 13 3c sts 0x3C13, r27 ; 0x803c13 + b5c: 80 91 10 3c lds r24, 0x3C10 ; 0x803c10 + b60: 90 91 11 3c lds r25, 0x3C11 ; 0x803c11 + b64: a0 91 12 3c lds r26, 0x3C12 ; 0x803c12 + b68: b0 91 13 3c lds r27, 0x3C13 ; 0x803c13 + b6c: 01 96 adiw r24, 0x01 ; 1 + b6e: a1 1d adc r26, r1 + b70: b1 1d adc r27, r1 + b72: 80 93 10 3c sts 0x3C10, r24 ; 0x803c10 + b76: 90 93 11 3c sts 0x3C11, r25 ; 0x803c11 + b7a: a0 93 12 3c sts 0x3C12, r26 ; 0x803c12 + b7e: b0 93 13 3c sts 0x3C13, r27 ; 0x803c13 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:78 /* Clear flag */ _timer->INTFLAGS = TCB_CAPT_bm; - dee: 81 e0 ldi r24, 0x01 ; 1 - df0: 80 93 a6 0a sts 0x0AA6, r24 ; 0x800aa6 + b82: 81 e0 ldi r24, 0x01 ; 1 + b84: 80 93 a6 0a sts 0x0AA6, r24 ; 0x800aa6 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:79 } - df4: bf 91 pop r27 - df6: af 91 pop r26 - df8: 9f 91 pop r25 - dfa: 8f 91 pop r24 - dfc: 0f 90 pop r0 - dfe: 0f be out 0x3f, r0 ; 63 - e00: 0f 90 pop r0 - e02: 1f 90 pop r1 - e04: 18 95 reti + b88: bf 91 pop r27 + b8a: af 91 pop r26 + b8c: 9f 91 pop r25 + b8e: 8f 91 pop r24 + b90: 0f 90 pop r0 + b92: 0f be out 0x3f, r0 ; 63 + b94: 0f 90 pop r0 + b96: 1f 90 pop r1 + b98: 18 95 reti -00000e06 : +00000b9a : _ZN7MCP2515C2Eh(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:15 const struct MCP2515::RXBn_REGS MCP2515::RXB[N_RXBUFFERS] = { @@ -3572,32 +2772,32 @@ const struct MCP2515::RXBn_REGS MCP2515::RXB[N_RXBUFFERS] = { }; MCP2515::MCP2515(const uint8_t _CS) - e06: 1f 93 push r17 - e08: cf 93 push r28 - e0a: df 93 push r29 - e0c: ec 01 movw r28, r24 - e0e: 16 2f mov r17, r22 + b9a: 1f 93 push r17 + b9c: cf 93 push r28 + b9e: df 93 push r29 + ba0: ec 01 movw r28, r24 + ba2: 16 2f mov r17, r22 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:17 { SPI.begin(); - e10: 80 d9 rcall .-3328 ; 0x112 + ba4: ab da rcall .-2730 ; 0xfc C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:19 SPICS = _CS; - e12: 18 83 st Y, r17 + ba6: 18 83 st Y, r17 pinMode(): - e14: 81 2f mov r24, r17 - e16: 6b d9 rcall .-3370 ; 0xee + ba8: 81 2f mov r24, r17 + baa: 96 da rcall .-2772 ; 0xd8 _ZN7MCP2515C2Eh(): C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:21 pinMode(SPICS, OUTPUT); endSPI(); - e18: ce 01 movw r24, r28 + bac: ce 01 movw r24, r28 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:22 } - e1a: df 91 pop r29 - e1c: cf 91 pop r28 - e1e: 1f 91 pop r17 + bae: df 91 pop r29 + bb0: cf 91 pop r28 + bb2: 1f 91 pop r17 C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:21 { SPI.begin(); @@ -3605,38 +2805,38 @@ C:\Users\Martin\Documents\Arduino\libraries\autowp-mcp2515/mcp2515.cpp:21 SPICS = _CS; pinMode(SPICS, OUTPUT); endSPI(); - e20: 76 ca rjmp .-2836 ; 0x30e + bb4: a8 cb rjmp .-2224 ; 0x306 -00000e22 : -_GLOBAL__I_65535_0_Swtich.ino.cpp.o.2769(): - e22: e7 e6 ldi r30, 0x67 ; 103 - e24: fc e3 ldi r31, 0x3C ; 60 - e26: 84 e0 ldi r24, 0x04 ; 4 - e28: 81 83 std Z+1, r24 ; 0x01 - e2a: 81 e3 ldi r24, 0x31 ; 49 - e2c: 80 83 st Z, r24 - e2e: e8 e2 ldi r30, 0x28 ; 40 - e30: fc e3 ldi r31, 0x3C ; 60 - e32: 15 82 std Z+5, r1 ; 0x05 - e34: 14 82 std Z+4, r1 ; 0x04 - e36: 62 e0 ldi r22, 0x02 ; 2 - e38: 8c e6 ldi r24, 0x6C ; 108 - e3a: 9c e3 ldi r25, 0x3C ; 60 - e3c: e4 df rcall .-56 ; 0xe06 - e3e: 63 e0 ldi r22, 0x03 ; 3 - e40: 8b e6 ldi r24, 0x6B ; 107 - e42: 9c e3 ldi r25, 0x3C ; 60 - e44: e0 df rcall .-64 ; 0xe06 - e46: 68 e0 ldi r22, 0x08 ; 8 - e48: 8a e6 ldi r24, 0x6A ; 106 - e4a: 9c e3 ldi r25, 0x3C ; 60 - e4c: dc df rcall .-72 ; 0xe06 - e4e: 69 e0 ldi r22, 0x09 ; 9 - e50: 89 e6 ldi r24, 0x69 ; 105 - e52: 9c e3 ldi r25, 0x3C ; 60 - e54: d8 cf rjmp .-80 ; 0xe06 +00000bb6 : +_GLOBAL__I_65535_0_Swtich.ino.cpp.o.2764(): + bb6: ed e7 ldi r30, 0x7D ; 125 + bb8: fc e3 ldi r31, 0x3C ; 60 + bba: 84 e0 ldi r24, 0x04 ; 4 + bbc: 81 83 std Z+1, r24 ; 0x01 + bbe: 81 e3 ldi r24, 0x31 ; 49 + bc0: 80 83 st Z, r24 + bc2: ee e3 ldi r30, 0x3E ; 62 + bc4: fc e3 ldi r31, 0x3C ; 60 + bc6: 15 82 std Z+5, r1 ; 0x05 + bc8: 14 82 std Z+4, r1 ; 0x04 + bca: 62 e0 ldi r22, 0x02 ; 2 + bcc: 82 e8 ldi r24, 0x82 ; 130 + bce: 9c e3 ldi r25, 0x3C ; 60 + bd0: e4 df rcall .-56 ; 0xb9a + bd2: 63 e0 ldi r22, 0x03 ; 3 + bd4: 81 e8 ldi r24, 0x81 ; 129 + bd6: 9c e3 ldi r25, 0x3C ; 60 + bd8: e0 df rcall .-64 ; 0xb9a + bda: 68 e0 ldi r22, 0x08 ; 8 + bdc: 80 e8 ldi r24, 0x80 ; 128 + bde: 9c e3 ldi r25, 0x3C ; 60 + be0: dc df rcall .-72 ; 0xb9a + be2: 69 e0 ldi r22, 0x09 ; 9 + be4: 8f e7 ldi r24, 0x7F ; 127 + be6: 9c e3 ldi r25, 0x3C ; 60 + be8: d8 cf rjmp .-80 ; 0xb9a -00000e56
: +00000bea
: main(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:361 #elif (F_CPU == 10000000L) @@ -3645,10 +2845,10 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. #elif (F_CPU == 8000000L) /* Clock DIV2 */ _PROTECTED_WRITE(CLKCTRL_MCLKCTRLB, (CLKCTRL_PEN_bm | CLKCTRL_PDIV_2X_gc)); - e56: 91 e0 ldi r25, 0x01 ; 1 - e58: 88 ed ldi r24, 0xD8 ; 216 - e5a: 84 bf out 0x34, r24 ; 52 - e5c: 90 93 61 00 sts 0x0061, r25 ; 0x800061 + bea: 91 e0 ldi r25, 0x01 ; 1 + bec: 88 ed ldi r24, 0xD8 ; 216 + bee: 84 bf out 0x34, r24 ; 52 + bf0: 90 93 61 00 sts 0x0061, r25 ; 0x800061 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:390 #if (F_CPU >= 20000000L) // 20 MHz / 128 = 156.250 kHz ADC0.CTRLC |= ADC_PRESC_DIV128_gc; @@ -3656,9 +2856,9 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. ADC0.CTRLC |= ADC_PRESC_DIV128_gc; #elif (F_CPU >= 8000000L) // 8 MHz / 64 = 125 kHz ADC0.CTRLC |= ADC_PRESC_DIV64_gc; - e60: 80 91 02 06 lds r24, 0x0602 ; 0x800602 - e64: 85 60 ori r24, 0x05 ; 5 - e66: 80 93 02 06 sts 0x0602, r24 ; 0x800602 + bf4: 80 91 02 06 lds r24, 0x0602 ; 0x800602 + bf8: 85 60 ori r24, 0x05 ; 5 + bfa: 80 93 02 06 sts 0x0602, r24 ; 0x800602 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:402 #else // 128 kHz / 2 = 64 kHz -> This is the closest you can get, the prescaler is 2 ADC0.CTRLC |= ADC_PRESC_DIV2_gc; @@ -3666,9 +2866,9 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. /* Enable ADC */ ADC0.CTRLA |= ADC_ENABLE_bm; - e6a: 80 91 00 06 lds r24, 0x0600 ; 0x800600 - e6e: 81 60 ori r24, 0x01 ; 1 - e70: 80 93 00 06 sts 0x0600, r24 ; 0x800600 + bfe: 80 91 00 06 lds r24, 0x0600 ; 0x800600 + c02: 81 60 ori r24, 0x01 ; 1 + c04: 80 93 00 06 sts 0x0600, r24 ; 0x800600 analogReference(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_analog.c:35 { @@ -3677,10 +2877,10 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. case EXTERNAL: case VDD: ADC0.CTRLC = (ADC0.CTRLC & ~(ADC_REFSEL_gm)) | mode | ADC_SAMPCAP_bm; // Per datasheet, recommended SAMPCAP=1 at ref > 1v - we don't *KNOW* the external reference will be >1v, but it's probably more likely... - e74: 80 91 02 06 lds r24, 0x0602 ; 0x800602 - e78: 8f 7c andi r24, 0xCF ; 207 - e7a: 80 65 ori r24, 0x50 ; 80 - e7c: 80 93 02 06 sts 0x0602, r24 ; 0x800602 + c08: 80 91 02 06 lds r24, 0x0602 ; 0x800602 + c0c: 8f 7c andi r24, 0xCF ; 207 + c0e: 80 65 ori r24, 0x50 ; 80 + c10: 80 93 02 06 sts 0x0602, r24 ; 0x800602 main(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:407 analogReference(VDD); @@ -3688,7 +2888,7 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. #endif PORTMUX.USARTROUTEA = 0; - e80: 10 92 e2 05 sts 0x05E2, r1 ; 0x8005e2 + c14: 10 92 e2 05 sts 0x05E2, r1 ; 0x8005e2 setup_timers(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:446 void setup_timers() @@ -3697,20 +2897,20 @@ void setup_timers() // PORTMUX setting for TCA (defined in pins_arduino.h) PORTMUX.TCAROUTEA = TCA0_PINS; - e84: 82 e0 ldi r24, 0x02 ; 2 - e86: 80 93 e4 05 sts 0x05E4, r24 ; 0x8005e4 + c18: 82 e0 ldi r24, 0x02 ; 2 + c1a: 80 93 e4 05 sts 0x05E4, r24 ; 0x8005e4 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:449 // Enable split mode before anything else TCA0.SPLIT.CTRLD = TCA_SINGLE_SPLITM_bm; - e8a: 90 93 03 0a sts 0x0A03, r25 ; 0x800a03 + c1e: 90 93 03 0a sts 0x0A03, r25 ; 0x800a03 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:453 // Period setting, two 8 bit registers TCA0.SPLIT.LPER = TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; - e8e: 8e ef ldi r24, 0xFE ; 254 - e90: 80 93 27 0a sts 0x0A27, r24 ; 0x800a27 + c22: 8e ef ldi r24, 0xFE ; 254 + c24: 80 93 27 0a sts 0x0A27, r24 ; 0x800a27 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:452 // Enable split mode before anything else @@ -3718,7 +2918,7 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. // Period setting, two 8 bit registers TCA0.SPLIT.LPER = - e94: 80 93 26 0a sts 0x0A26, r24 ; 0x800a26 + c28: 80 93 26 0a sts 0x0A26, r24 ; 0x800a26 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:461 TCA0.SPLIT.LCMP0 = TCA0.SPLIT.LCMP1 = @@ -3726,8 +2926,8 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. TCA0.SPLIT.HCMP0 = TCA0.SPLIT.HCMP1 = TCA0.SPLIT.HCMP2 = PWM_TIMER_COMPARE; - e98: 80 e8 ldi r24, 0x80 ; 128 - e9a: 80 93 2d 0a sts 0x0A2D, r24 ; 0x800a2d + c2c: 80 e8 ldi r24, 0x80 ; 128 + c2e: 80 93 2d 0a sts 0x0A2D, r24 ; 0x800a2d C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:460 // Default duty 50%, will re-assign in analogWrite() TCA0.SPLIT.LCMP0 = @@ -3735,7 +2935,7 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. TCA0.SPLIT.LCMP2 = TCA0.SPLIT.HCMP0 = TCA0.SPLIT.HCMP1 = - e9e: 80 93 2b 0a sts 0x0A2B, r24 ; 0x800a2b + c32: 80 93 2b 0a sts 0x0A2B, r24 ; 0x800a2b C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:459 // Default duty 50%, will re-assign in analogWrite() @@ -3743,7 +2943,7 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. TCA0.SPLIT.LCMP1 = TCA0.SPLIT.LCMP2 = TCA0.SPLIT.HCMP0 = - ea2: 80 93 29 0a sts 0x0A29, r24 ; 0x800a29 + c36: 80 93 29 0a sts 0x0A29, r24 ; 0x800a29 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:458 TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; @@ -3751,7 +2951,7 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. TCA0.SPLIT.LCMP0 = TCA0.SPLIT.LCMP1 = TCA0.SPLIT.LCMP2 = - ea6: 80 93 2c 0a sts 0x0A2C, r24 ; 0x800a2c + c3a: 80 93 2c 0a sts 0x0A2C, r24 ; 0x800a2c C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:457 TCA0.SPLIT.LPER = TCA0.SPLIT.HPER = PWM_TIMER_PERIOD; @@ -3759,7 +2959,7 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. // Default duty 50%, will re-assign in analogWrite() TCA0.SPLIT.LCMP0 = TCA0.SPLIT.LCMP1 = - eaa: 80 93 2a 0a sts 0x0A2A, r24 ; 0x800a2a + c3e: 80 93 2a 0a sts 0x0A2A, r24 ; 0x800a2a C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:456 // Period setting, two 8 bit registers TCA0.SPLIT.LPER = @@ -3767,7 +2967,7 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. // Default duty 50%, will re-assign in analogWrite() TCA0.SPLIT.LCMP0 = - eae: 80 93 28 0a sts 0x0A28, r24 ; 0x800a28 + c42: 80 93 28 0a sts 0x0A28, r24 ; 0x800a28 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:471 #elif F_CPU <= 2000000L // Use DIV8 prescaler (giving 250kHz clock on 2MHz), enable TCA timer @@ -3775,8 +2975,8 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. #elif F_CPU <= 8000000L // Use DIV16 prescaler (giving 250kHz clocke on 4MHz, 500kHz clock on 8MHz), enable TCA timer TCA0.SPLIT.CTRLA = (TCA_SPLIT_CLKSEL_DIV16_gc) | (TCA_SPLIT_ENABLE_bm); - eb2: 89 e0 ldi r24, 0x09 ; 9 - eb4: 80 93 00 0a sts 0x0A00, r24 ; 0x800a00 + c46: 89 e0 ldi r24, 0x09 ; 9 + c48: 80 93 00 0a sts 0x0A00, r24 ; 0x800a00 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:480 #endif @@ -3784,8 +2984,8 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. // Set up routing (defined in pins_arduino.h) PORTMUX.TCBROUTEA = 0 - eb8: 87 e0 ldi r24, 0x07 ; 7 - eba: 80 93 e5 05 sts 0x05E5, r24 ; 0x8005e5 + c4c: 87 e0 ldi r24, 0x07 ; 7 + c4e: 80 93 e5 05 sts 0x05E5, r24 ; 0x8005e5 main(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:496 | TCB3_PINS @@ -3794,8 +2994,8 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. // Start with TCB0 TCB_t *timer_B = (TCB_t *)&TCB0; - ebe: e0 e8 ldi r30, 0x80 ; 128 - ec0: fa e0 ldi r31, 0x0A ; 10 + c52: e0 e8 ldi r30, 0x80 ; 128 + c54: fa e0 ldi r31, 0x0A ; 10 setup_timers(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:513 @@ -3804,23 +3004,23 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. { // 8 bit PWM mode, but do not enable output yet, will do in analogWrite() timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc); - ec2: 37 e0 ldi r19, 0x07 ; 7 + c56: c7 e0 ldi r28, 0x07 ; 7 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:516 // Assign 8-bit period timer_B->CCMPL = PWM_TIMER_PERIOD; - ec4: 2e ef ldi r18, 0xFE ; 254 + c58: 9e ef ldi r25, 0xFE ; 254 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:519 // default duty 50%, set when output enabled timer_B->CCMPH = PWM_TIMER_COMPARE; - ec6: 90 e8 ldi r25, 0x80 ; 128 + c5a: 80 e8 ldi r24, 0x80 ; 128 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:523 // Use TCA clock (250kHz) and enable // (sync update commented out, might try to synchronize later timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) - ec8: 85 e0 ldi r24, 0x05 ; 5 + c5c: d5 e0 ldi r29, 0x05 ; 5 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:513 // Timer B Setup loop for TCB[0:end] @@ -3828,38 +3028,38 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. { // 8 bit PWM mode, but do not enable output yet, will do in analogWrite() timer_B->CTRLB = (TCB_CNTMODE_PWM8_gc); - eca: 31 83 std Z+1, r19 ; 0x01 + c5e: c1 83 std Z+1, r28 ; 0x01 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:516 // Assign 8-bit period timer_B->CCMPL = PWM_TIMER_PERIOD; - ecc: 24 87 std Z+12, r18 ; 0x0c + c60: 94 87 std Z+12, r25 ; 0x0c C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:519 // default duty 50%, set when output enabled timer_B->CCMPH = PWM_TIMER_COMPARE; - ece: 95 87 std Z+13, r25 ; 0x0d + c62: 85 87 std Z+13, r24 ; 0x0d C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:523 // Use TCA clock (250kHz) and enable // (sync update commented out, might try to synchronize later timer_B->CTRLA = (TCB_CLKSEL_CLKTCA_gc) - ed0: 80 83 st Z, r24 + c64: d0 83 st Z, r29 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:528 //|(TCB_SYNCUPD_bm) | (TCB_ENABLE_bm); // Increment pointer to next TCB instance timer_B++; - ed2: 70 96 adiw r30, 0x10 ; 16 + c66: 70 96 adiw r30, 0x10 ; 16 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:531 // Stop when pointing to TCB3 } while (timer_B <= timer_B_end); - ed4: e0 3c cpi r30, 0xC0 ; 192 - ed6: 4a e0 ldi r20, 0x0A ; 10 - ed8: f4 07 cpc r31, r20 - eda: b9 f7 brne .-18 ; 0xeca + c68: e0 3c cpi r30, 0xC0 ; 192 + c6a: 2a e0 ldi r18, 0x0A ; 10 + c6c: f2 07 cpc r31, r18 + c6e: b9 f7 brne .-18 ; 0xc5e main(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:416 /********************* TCB for system time tracking **************************/ @@ -3868,28 +3068,28 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. /* Select vanilla 16 bit periodic interrupt mode */ _timer->CTRLB = TCB_CNTMODE_INT_gc; - edc: 10 92 a1 0a sts 0x0AA1, r1 ; 0x800aa1 + c70: 10 92 a1 0a sts 0x0AA1, r1 ; 0x800aa1 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:419 /* TOP value for overflow every N clock cycles */ _timer->CCMP = TIME_TRACKING_TIMER_COUNT - 1; - ee0: 8f e3 ldi r24, 0x3F ; 63 - ee2: 9f e1 ldi r25, 0x1F ; 31 - ee4: 80 93 ac 0a sts 0x0AAC, r24 ; 0x800aac - ee8: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad + c74: 8f e3 ldi r24, 0x3F ; 63 + c76: 9f e1 ldi r25, 0x1F ; 31 + c78: 80 93 ac 0a sts 0x0AAC, r24 ; 0x800aac + c7c: 90 93 ad 0a sts 0x0AAD, r25 ; 0x800aad C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:422 /* Enable TCB interrupt */ _timer->INTCTRL |= TCB_CAPT_bm; - eec: 80 91 a5 0a lds r24, 0x0AA5 ; 0x800aa5 - ef0: 81 60 ori r24, 0x01 ; 1 - ef2: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 + c80: 80 91 a5 0a lds r24, 0x0AA5 ; 0x800aa5 + c84: 81 60 ori r24, 0x01 ; 1 + c86: 80 93 a5 0a sts 0x0AA5, r24 ; 0x800aa5 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:426 /* Clock selection is F_CPU/N -- which is independent of TCA */ #if TIME_TRACKING_TIMER_DIVIDER == 1 _timer->CTRLA = TCB_CLKSEL_CLKDIV1_gc; /* F_CPU */ - ef6: 10 92 a0 0a sts 0x0AA0, r1 ; 0x800aa0 + c8a: 10 92 a0 0a sts 0x0AA0, r1 ; 0x800aa0 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:434 #else #assert "TIME_TRACKING_TIMER_DIVIDER not supported" @@ -3897,142 +3097,572 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. /* Enable & start */ _timer->CTRLA |= TCB_ENABLE_bm; /* Keep this last before enabling interrupts to ensure tracking as accurate as possible */ - efa: 80 91 a0 0a lds r24, 0x0AA0 ; 0x800aa0 - efe: 81 60 ori r24, 0x01 ; 1 - f00: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 + c8e: 80 91 a0 0a lds r24, 0x0AA0 ; 0x800aa0 + c92: 81 60 ori r24, 0x01 ; 1 + c94: 80 93 a0 0a sts 0x0AA0, r24 ; 0x800aa0 C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring.c:438 /*************************** ENABLE GLOBAL INTERRUPTS *************************/ sei(); - f04: 78 94 sei + c98: 78 94 sei setup(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:147 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:147 MCP2515 mcp2515_1(PIN_PA3); MCP2515 mcp2515_2(PIN_PB0); MCP2515 mcp2515_3(PIN_PB1); void setup() { SPI.begin(); - f06: 05 d9 rcall .-3574 ; 0x112 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:175 + c9a: 30 da rcall .-2976 ; 0xfc +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:194 + Rules[14].InitToggle(0x0196, 3, 0x9829, 1); // Flurlicht von Papas Büro + + Rules[15] = Rule(); + Rules[15].InitToggle(0x0632, 1, 0x9829, 5); // Flurlicht von Papas Büro + + delay(10); + c9c: 6a e0 ldi r22, 0x0A ; 10 + c9e: 70 e0 ldi r23, 0x00 ; 0 + ca0: 80 e0 ldi r24, 0x00 ; 0 + ca2: 90 e0 ldi r25, 0x00 ; 0 + ca4: 04 db rcall .-2552 ; 0x2ae +_ZN8PinState4InitEih(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 + byte meyPinId; + + PinState() {} + void Init(int pin_id, byte meyPinId) + { + this->pin_id = pin_id; + ca6: 85 e1 ldi r24, 0x15 ; 21 + ca8: 90 e0 ldi r25, 0x00 ; 0 + caa: 80 93 16 3c sts 0x3C16, r24 ; 0x803c16 + cae: 90 93 17 3c sts 0x3C17, r25 ; 0x803c17 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 + this->pin_state = true; + cb2: 81 e0 ldi r24, 0x01 ; 1 + cb4: 80 93 18 3c sts 0x3C18, r24 ; 0x803c18 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 + this->is_input = true; + cb8: 80 93 19 3c sts 0x3C19, r24 ; 0x803c19 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 + this->meyPinId = meyPinId; + cbc: 80 93 1a 3c sts 0x3C1A, r24 ; 0x803c1a +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 + byte meyPinId; + + PinState() {} + void Init(int pin_id, byte meyPinId) + { + this->pin_id = pin_id; + cc0: 24 e1 ldi r18, 0x14 ; 20 + cc2: 30 e0 ldi r19, 0x00 ; 0 + cc4: 20 93 1b 3c sts 0x3C1B, r18 ; 0x803c1b + cc8: 30 93 1c 3c sts 0x3C1C, r19 ; 0x803c1c +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 + this->pin_state = true; + ccc: 80 93 1d 3c sts 0x3C1D, r24 ; 0x803c1d +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 + this->is_input = true; + cd0: 80 93 1e 3c sts 0x3C1E, r24 ; 0x803c1e +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 + this->meyPinId = meyPinId; + cd4: 92 e0 ldi r25, 0x02 ; 2 + cd6: 90 93 1f 3c sts 0x3C1F, r25 ; 0x803c1f +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 + byte meyPinId; + + PinState() {} + void Init(int pin_id, byte meyPinId) + { + this->pin_id = pin_id; + cda: 23 e1 ldi r18, 0x13 ; 19 + cdc: 30 e0 ldi r19, 0x00 ; 0 + cde: 20 93 20 3c sts 0x3C20, r18 ; 0x803c20 + ce2: 30 93 21 3c sts 0x3C21, r19 ; 0x803c21 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 + this->pin_state = true; + ce6: 80 93 22 3c sts 0x3C22, r24 ; 0x803c22 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 + this->is_input = true; + cea: 80 93 23 3c sts 0x3C23, r24 ; 0x803c23 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 + this->meyPinId = meyPinId; + cee: 93 e0 ldi r25, 0x03 ; 3 + cf0: 90 93 24 3c sts 0x3C24, r25 ; 0x803c24 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 + byte meyPinId; + + PinState() {} + void Init(int pin_id, byte meyPinId) + { + this->pin_id = pin_id; + cf4: 22 e1 ldi r18, 0x12 ; 18 + cf6: 30 e0 ldi r19, 0x00 ; 0 + cf8: 20 93 25 3c sts 0x3C25, r18 ; 0x803c25 + cfc: 30 93 26 3c sts 0x3C26, r19 ; 0x803c26 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 + this->pin_state = true; + d00: 80 93 27 3c sts 0x3C27, r24 ; 0x803c27 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 + this->is_input = true; + d04: 80 93 28 3c sts 0x3C28, r24 ; 0x803c28 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 + this->meyPinId = meyPinId; + d08: 94 e0 ldi r25, 0x04 ; 4 + d0a: 90 93 29 3c sts 0x3C29, r25 ; 0x803c29 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 + byte meyPinId; + + PinState() {} + void Init(int pin_id, byte meyPinId) + { + this->pin_id = pin_id; + d0e: 21 e1 ldi r18, 0x11 ; 17 + d10: 30 e0 ldi r19, 0x00 ; 0 + d12: 20 93 2a 3c sts 0x3C2A, r18 ; 0x803c2a + d16: 30 93 2b 3c sts 0x3C2B, r19 ; 0x803c2b +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 + this->pin_state = true; + d1a: 80 93 2c 3c sts 0x3C2C, r24 ; 0x803c2c +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 + this->is_input = true; + d1e: 80 93 2d 3c sts 0x3C2D, r24 ; 0x803c2d +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 + this->meyPinId = meyPinId; + d22: d0 93 2e 3c sts 0x3C2E, r29 ; 0x803c2e +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 + byte meyPinId; + + PinState() {} + void Init(int pin_id, byte meyPinId) + { + this->pin_id = pin_id; + d26: 20 e1 ldi r18, 0x10 ; 16 + d28: 30 e0 ldi r19, 0x00 ; 0 + d2a: 20 93 2f 3c sts 0x3C2F, r18 ; 0x803c2f + d2e: 30 93 30 3c sts 0x3C30, r19 ; 0x803c30 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 + this->pin_state = true; + d32: 80 93 31 3c sts 0x3C31, r24 ; 0x803c31 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 + this->is_input = true; + d36: 80 93 32 3c sts 0x3C32, r24 ; 0x803c32 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 + this->meyPinId = meyPinId; + d3a: 96 e0 ldi r25, 0x06 ; 6 + d3c: 90 93 33 3c sts 0x3C33, r25 ; 0x803c33 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 + byte meyPinId; + + PinState() {} + void Init(int pin_id, byte meyPinId) + { + this->pin_id = pin_id; + d40: 2f e0 ldi r18, 0x0F ; 15 + d42: 30 e0 ldi r19, 0x00 ; 0 + d44: 20 93 34 3c sts 0x3C34, r18 ; 0x803c34 + d48: 30 93 35 3c sts 0x3C35, r19 ; 0x803c35 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 + this->pin_state = true; + d4c: 80 93 36 3c sts 0x3C36, r24 ; 0x803c36 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 + this->is_input = true; + d50: 80 93 37 3c sts 0x3C37, r24 ; 0x803c37 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 + this->meyPinId = meyPinId; + d54: c0 93 38 3c sts 0x3C38, r28 ; 0x803c38 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:65 + byte meyPinId; + + PinState() {} + void Init(int pin_id, byte meyPinId) + { + this->pin_id = pin_id; + d58: 2e e0 ldi r18, 0x0E ; 14 + d5a: 30 e0 ldi r19, 0x00 ; 0 + d5c: 20 93 39 3c sts 0x3C39, r18 ; 0x803c39 + d60: 30 93 3a 3c sts 0x3C3A, r19 ; 0x803c3a +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:66 + this->pin_state = true; + d64: 80 93 3b 3c sts 0x3C3B, r24 ; 0x803c3b +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:67 + this->is_input = true; + d68: 80 93 3c 3c sts 0x3C3C, r24 ; 0x803c3c +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:68 + this->meyPinId = meyPinId; + d6c: 88 e0 ldi r24, 0x08 ; 8 + d6e: 80 93 3d 3c sts 0x3C3D, r24 ; 0x803c3d +setup(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:221 MeyPins[7] = PinState(); MeyPins[7].Init(PIN_PC0, (byte) 8); _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL.MCLKCTRLA | 1 << 7); - f08: 80 91 60 00 lds r24, 0x0060 ; 0x800060 - f0c: 80 68 ori r24, 0x80 ; 128 - f0e: 90 e0 ldi r25, 0x00 ; 0 - f10: 28 ed ldi r18, 0xD8 ; 216 - f12: 24 bf out 0x34, r18 ; 52 - f14: 80 93 60 00 sts 0x0060, r24 ; 0x800060 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:178 + d72: 80 91 60 00 lds r24, 0x0060 ; 0x800060 + d76: 80 68 ori r24, 0x80 ; 128 + d78: 90 e0 ldi r25, 0x00 ; 0 + d7a: 28 ed ldi r18, 0xD8 ; 216 + d7c: 24 bf out 0x34, r18 ; 52 + d7e: 80 93 60 00 sts 0x0060, r24 ; 0x800060 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:224 mcp2515_0.reset(); - f18: 8c e6 ldi r24, 0x6C ; 108 - f1a: 9c e3 ldi r25, 0x3C ; 60 - f1c: 64 de rcall .-824 ; 0xbe6 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:179 + d82: 82 e8 ldi r24, 0x82 ; 130 + d84: 9c e3 ldi r25, 0x3C ; 60 + d86: fb dc rcall .-1546 ; 0x77e +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:225 mcp2515_0.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - f1e: 8c e6 ldi r24, 0x6C ; 108 - f20: 9c e3 ldi r25, 0x3C ; 60 - f22: 43 de rcall .-890 ; 0xbaa -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:180 + d88: 82 e8 ldi r24, 0x82 ; 130 + d8a: 9c e3 ldi r25, 0x3C ; 60 + d8c: da dc rcall .-1612 ; 0x742 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:226 mcp2515_0.setNormalMode(); - f24: 8c e6 ldi r24, 0x6C ; 108 - f26: 9c e3 ldi r25, 0x3C ; 60 - f28: 5c de rcall .-840 ; 0xbe2 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:182 + d8e: 82 e8 ldi r24, 0x82 ; 130 + d90: 9c e3 ldi r25, 0x3C ; 60 + d92: f3 dc rcall .-1562 ; 0x77a +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:228 mcp2515_1.reset(); - f2a: 8b e6 ldi r24, 0x6B ; 107 - f2c: 9c e3 ldi r25, 0x3C ; 60 - f2e: 5b de rcall .-842 ; 0xbe6 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:183 + d94: 81 e8 ldi r24, 0x81 ; 129 + d96: 9c e3 ldi r25, 0x3C ; 60 + d98: f2 dc rcall .-1564 ; 0x77e +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:229 mcp2515_1.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - f30: 8b e6 ldi r24, 0x6B ; 107 - f32: 9c e3 ldi r25, 0x3C ; 60 - f34: 3a de rcall .-908 ; 0xbaa -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:184 + d9a: 81 e8 ldi r24, 0x81 ; 129 + d9c: 9c e3 ldi r25, 0x3C ; 60 + d9e: d1 dc rcall .-1630 ; 0x742 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:230 mcp2515_1.setNormalMode(); - f36: 8b e6 ldi r24, 0x6B ; 107 - f38: 9c e3 ldi r25, 0x3C ; 60 - f3a: 53 de rcall .-858 ; 0xbe2 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:186 + da0: 81 e8 ldi r24, 0x81 ; 129 + da2: 9c e3 ldi r25, 0x3C ; 60 + da4: ea dc rcall .-1580 ; 0x77a +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:232 mcp2515_2.reset(); - f3c: 8a e6 ldi r24, 0x6A ; 106 - f3e: 9c e3 ldi r25, 0x3C ; 60 - f40: 52 de rcall .-860 ; 0xbe6 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:187 + da6: 80 e8 ldi r24, 0x80 ; 128 + da8: 9c e3 ldi r25, 0x3C ; 60 + daa: e9 dc rcall .-1582 ; 0x77e +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:233 mcp2515_2.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - f42: 8a e6 ldi r24, 0x6A ; 106 - f44: 9c e3 ldi r25, 0x3C ; 60 - f46: 31 de rcall .-926 ; 0xbaa -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:188 + dac: 80 e8 ldi r24, 0x80 ; 128 + dae: 9c e3 ldi r25, 0x3C ; 60 + db0: c8 dc rcall .-1648 ; 0x742 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:234 mcp2515_2.setNormalMode(); - f48: 8a e6 ldi r24, 0x6A ; 106 - f4a: 9c e3 ldi r25, 0x3C ; 60 - f4c: 4a de rcall .-876 ; 0xbe2 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:190 + db2: 80 e8 ldi r24, 0x80 ; 128 + db4: 9c e3 ldi r25, 0x3C ; 60 + db6: e1 dc rcall .-1598 ; 0x77a +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:236 mcp2515_3.reset(); - f4e: 89 e6 ldi r24, 0x69 ; 105 - f50: 9c e3 ldi r25, 0x3C ; 60 - f52: 49 de rcall .-878 ; 0xbe6 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:191 + db8: 8f e7 ldi r24, 0x7F ; 127 + dba: 9c e3 ldi r25, 0x3C ; 60 + dbc: e0 dc rcall .-1600 ; 0x77e +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:237 mcp2515_3.setBitrate(CAN_500KBPS, MCP_8MHZ); //Sets CAN at speed 500KBPS and Clock 8MHz - f54: 89 e6 ldi r24, 0x69 ; 105 - f56: 9c e3 ldi r25, 0x3C ; 60 - f58: 28 de rcall .-944 ; 0xbaa -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:192 + dbe: 8f e7 ldi r24, 0x7F ; 127 + dc0: 9c e3 ldi r25, 0x3C ; 60 + dc2: bf dc rcall .-1666 ; 0x742 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:238 mcp2515_3.setNormalMode(); - f5a: 89 e6 ldi r24, 0x69 ; 105 - f5c: 9c e3 ldi r25, 0x3C ; 60 - f5e: 41 de rcall .-894 ; 0xbe2 + dc4: 8f e7 ldi r24, 0x7F ; 127 + dc6: 9c e3 ldi r25, 0x3C ; 60 + dc8: d8 dc rcall .-1616 ; 0x77a + dca: c6 e1 ldi r28, 0x16 ; 22 + dcc: dc e3 ldi r29, 0x3C ; 60 + dce: 8e e3 ldi r24, 0x3E ; 62 + dd0: e8 2e mov r14, r24 + dd2: 8c e3 ldi r24, 0x3C ; 60 + dd4: f8 2e mov r15, r24 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:240 + + for (int i = 0; i < sizeof(MeyPins) / sizeof(PinState); i++) + dd6: ec 16 cp r14, r28 + dd8: fd 06 cpc r15, r29 + dda: 51 f0 breq .+20 ; 0xdf0 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:242 + { + pinMode(MeyPins[i].pin_id, OUTPUT); + ddc: 18 81 ld r17, Y +pinMode(): +C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/wiring_digital.c:31 +#include "wiring_private.h" +#include "pins_arduino.h" + +void pinMode(uint8_t pin, uint8_t mode) +{ + uint8_t bit_mask = digitalPinToBitMask(pin); + dde: 19 32 cpi r17, 0x29 ; 41 + de0: 28 f4 brcc .+10 ; 0xdec + de2: 81 2f mov r24, r17 + de4: 79 d9 rcall .-3342 ; 0xd8 +digitalWrite(): + de6: 60 e0 ldi r22, 0x00 ; 0 + de8: 81 2f mov r24, r17 + dea: da d9 rcall .-3148 ; 0x1a0 + dec: 25 96 adiw r28, 0x05 ; 5 + dee: f3 cf rjmp .-26 ; 0xdd6 +GetDeviceIdHigh(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:434 + CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); +} + +byte GetDeviceIdHigh() { + return (SIGROW.SERNUM1 ^ + df0: f0 91 04 11 lds r31, 0x1104 ; 0x801104 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:435 + CircularShift(SIGROW.SERNUM3) << 1 ^ + df4: 80 91 06 11 lds r24, 0x1106 ; 0x801106 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:436 + CircularShift( CircularShift(SIGROW.SERNUM5)) ^ + df8: 70 91 08 11 lds r23, 0x1108 ; 0x801108 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:437 + CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ + dfc: 60 91 0a 11 lds r22, 0x110A ; 0x80110a +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:438 + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM9))))); + e00: 90 91 0c 11 lds r25, 0x110C ; 0x80110c +GetDeviceIdLow(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:426 +{ + return myDeviceId; +} + +byte GetDeviceIdLow() { + return (SIGROW.SERNUM0 ^ + e04: e0 91 03 11 lds r30, 0x1103 ; 0x801103 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:427 + CircularShift(SIGROW.SERNUM2) << 1 ^ + e08: 20 91 05 11 lds r18, 0x1105 ; 0x801105 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:428 + CircularShift( CircularShift(SIGROW.SERNUM4)) ^ + e0c: 50 91 07 11 lds r21, 0x1107 ; 0x801107 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:429 + CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ + e10: 40 91 09 11 lds r20, 0x1109 ; 0x801109 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:430 + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); + e14: 30 91 0b 11 lds r19, 0x110B ; 0x80110b +CircularShift(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 + +} + +byte CircularShift(byte b) +{ + return (b << 1) | (b >> 7 & 1); + e18: 88 0f add r24, r24 + e1a: 81 1d adc r24, r1 +GetDeviceIdHigh(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:435 + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); +} + +byte GetDeviceIdHigh() { + return (SIGROW.SERNUM1 ^ + CircularShift(SIGROW.SERNUM3) << 1 ^ + e1c: 88 0f add r24, r24 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:434 + CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); +} + +byte GetDeviceIdHigh() { + return (SIGROW.SERNUM1 ^ + e1e: 8f 27 eor r24, r31 +CircularShift(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 + +} + +byte CircularShift(byte b) +{ + return (b << 1) | (b >> 7 & 1); + e20: 77 0f add r23, r23 + e22: 71 1d adc r23, r1 + e24: 77 0f add r23, r23 + e26: 71 1d adc r23, r1 +GetDeviceIdHigh(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:435 + CircularShift( CircularShift( CircularShift( CircularShift(SIGROW.SERNUM8))))); +} + +byte GetDeviceIdHigh() { + return (SIGROW.SERNUM1 ^ + CircularShift(SIGROW.SERNUM3) << 1 ^ + e28: 87 27 eor r24, r23 +CircularShift(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 + +} + +byte CircularShift(byte b) +{ + return (b << 1) | (b >> 7 & 1); + e2a: 62 95 swap r22 + e2c: 60 fb bst r22, 0 + e2e: 67 95 ror r22 + e30: 67 f9 bld r22, 7 +GetDeviceIdHigh(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:436 +} + +byte GetDeviceIdHigh() { + return (SIGROW.SERNUM1 ^ + CircularShift(SIGROW.SERNUM3) << 1 ^ + CircularShift( CircularShift(SIGROW.SERNUM5)) ^ + e32: 86 27 eor r24, r22 +CircularShift(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 + +} + +byte CircularShift(byte b) +{ + return (b << 1) | (b >> 7 & 1); + e34: 92 95 swap r25 +GetDeviceIdHigh(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:437 + +byte GetDeviceIdHigh() { + return (SIGROW.SERNUM1 ^ + CircularShift(SIGROW.SERNUM3) << 1 ^ + CircularShift( CircularShift(SIGROW.SERNUM5)) ^ + CircularShift( CircularShift( CircularShift(SIGROW.SERNUM7))) ^ + e36: 98 27 eor r25, r24 +CircularShift(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 + +} + +byte CircularShift(byte b) +{ + return (b << 1) | (b >> 7 & 1); + e38: 82 2f mov r24, r18 + e3a: 88 0f add r24, r24 + e3c: 81 1d adc r24, r1 +GetDeviceIdLow(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:427 + return myDeviceId; +} + +byte GetDeviceIdLow() { + return (SIGROW.SERNUM0 ^ + CircularShift(SIGROW.SERNUM2) << 1 ^ + e3e: 88 0f add r24, r24 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:426 +{ + return myDeviceId; +} + +byte GetDeviceIdLow() { + return (SIGROW.SERNUM0 ^ + e40: 8e 27 eor r24, r30 +CircularShift(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 + +} + +byte CircularShift(byte b) +{ + return (b << 1) | (b >> 7 & 1); + e42: 25 2f mov r18, r21 + e44: 22 0f add r18, r18 + e46: 21 1d adc r18, r1 + e48: 22 0f add r18, r18 + e4a: 21 1d adc r18, r1 +GetDeviceIdLow(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:427 + return myDeviceId; +} + +byte GetDeviceIdLow() { + return (SIGROW.SERNUM0 ^ + CircularShift(SIGROW.SERNUM2) << 1 ^ + e4c: 82 27 eor r24, r18 +CircularShift(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 + +} + +byte CircularShift(byte b) +{ + return (b << 1) | (b >> 7 & 1); + e4e: 24 2f mov r18, r20 + e50: 22 95 swap r18 + e52: 20 fb bst r18, 0 + e54: 27 95 ror r18 + e56: 27 f9 bld r18, 7 +GetDeviceIdLow(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:428 +} + +byte GetDeviceIdLow() { + return (SIGROW.SERNUM0 ^ + CircularShift(SIGROW.SERNUM2) << 1 ^ + CircularShift( CircularShift(SIGROW.SERNUM4)) ^ + e58: 82 27 eor r24, r18 +CircularShift(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:392 + +} + +byte CircularShift(byte b) +{ + return (b << 1) | (b >> 7 & 1); + e5a: 23 2f mov r18, r19 + e5c: 22 95 swap r18 +GetDeviceIdLow(): +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:429 + +byte GetDeviceIdLow() { + return (SIGROW.SERNUM0 ^ + CircularShift(SIGROW.SERNUM2) << 1 ^ + CircularShift( CircularShift(SIGROW.SERNUM4)) ^ + CircularShift( CircularShift( CircularShift(SIGROW.SERNUM6))) ^ + e5e: 82 27 eor r24, r18 CalculateMyDeviceId(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:380 - return ((commandId & 0xFFF) * 0x10000) | myDeviceId | CAN_EFF_FLAG; +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:417 + return ((commandId & 0xFFF) * 0x10000) | deviceId | CAN_EFF_FLAG; } void CalculateMyDeviceId() { myDeviceId = (GetDeviceIdHigh() << 8) | GetDeviceIdLow(); - f60: 83 da rcall .-2810 ; 0x468 - f62: c8 2f mov r28, r24 - f64: 99 da rcall .-2766 ; 0x498 - f66: 9c 2f mov r25, r28 - f68: 80 93 14 3c sts 0x3C14, r24 ; 0x803c14 - f6c: 90 93 15 3c sts 0x3C15, r25 ; 0x803c15 + e60: 80 93 14 3c sts 0x3C14, r24 ; 0x803c14 + e64: 90 93 15 3c sts 0x3C15, r25 ; 0x803c15 setup(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:206 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:249 digitalWrite(MeyPins[i].pin_id, LOW); } CalculateMyDeviceId(); SendSerialPackage(&mcp2515_0); - f70: 8c e6 ldi r24, 0x6C ; 108 - f72: 9c e3 ldi r25, 0x3C ; 60 - f74: 06 dd rcall .-1524 ; 0x982 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:207 + e68: 82 e8 ldi r24, 0x82 ; 130 + e6a: 9c e3 ldi r25, 0x3C ; 60 + e6c: 74 dd rcall .-1304 ; 0x956 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:250 SendSerialPackage(&mcp2515_1); - f76: 8b e6 ldi r24, 0x6B ; 107 - f78: 9c e3 ldi r25, 0x3C ; 60 - f7a: 03 dd rcall .-1530 ; 0x982 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:208 + e6e: 81 e8 ldi r24, 0x81 ; 129 + e70: 9c e3 ldi r25, 0x3C ; 60 + e72: 71 dd rcall .-1310 ; 0x956 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:251 SendSerialPackage(&mcp2515_2); - f7c: 8a e6 ldi r24, 0x6A ; 106 - f7e: 9c e3 ldi r25, 0x3C ; 60 - f80: 00 dd rcall .-1536 ; 0x982 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:209 + e74: 80 e8 ldi r24, 0x80 ; 128 + e76: 9c e3 ldi r25, 0x3C ; 60 + e78: 6e dd rcall .-1316 ; 0x956 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:252 SendSerialPackage(&mcp2515_3); - f82: 89 e6 ldi r24, 0x69 ; 105 - f84: 9c e3 ldi r25, 0x3C ; 60 - f86: fd dc rcall .-1542 ; 0x982 + e7a: 8f e7 ldi r24, 0x7F ; 127 + e7c: 9c e3 ldi r25, 0x3C ; 60 + e7e: 6b dd rcall .-1322 ; 0x956 main(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:43 setup(); @@ -4041,565 +3671,201 @@ C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1. { loop(); if (serialEventRun) serialEventRun(); - f88: c0 e0 ldi r28, 0x00 ; 0 - f8a: d0 e0 ldi r29, 0x00 ; 0 + e80: c0 e0 ldi r28, 0x00 ; 0 + e82: d0 e0 ldi r29, 0x00 ; 0 loop(): -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:224 - } +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:270 void loop() { - if (mcp2515_0.readMessage(&_frame) == MCP2515::ERROR_OK) - f8c: 8c e6 ldi r24, 0x6C ; 108 - f8e: 9c e3 ldi r25, 0x3C ; 60 - f90: ac dd rcall .-1192 ; 0xaea - f92: 89 2b or r24, r25 - f94: 51 f4 brne .+20 ; 0xfaa -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:226 - { - mcp2515_1.sendMessage(MCP2515::TXB1, &_frame); - f96: 8b e6 ldi r24, 0x6B ; 107 - f98: 9c e3 ldi r25, 0x3C ; 60 - f9a: 53 dc rcall .-1882 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:227 - mcp2515_2.sendMessage(MCP2515::TXB1, &_frame); - f9c: 8a e6 ldi r24, 0x6A ; 106 - f9e: 9c e3 ldi r25, 0x3C ; 60 - fa0: 50 dc rcall .-1888 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:228 - mcp2515_3.sendMessage(MCP2515::TXB1, &_frame); - fa2: 89 e6 ldi r24, 0x69 ; 105 - fa4: 9c e3 ldi r25, 0x3C ; 60 - fa6: 4d dc rcall .-1894 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:229 - HandleFrame(&_frame); - fa8: 8f da rcall .-2786 ; 0x4c8 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:231 - } - if (mcp2515_1.readMessage(&_frame) == MCP2515::ERROR_OK) - faa: 8b e6 ldi r24, 0x6B ; 107 - fac: 9c e3 ldi r25, 0x3C ; 60 - fae: 9d dd rcall .-1222 ; 0xaea - fb0: 89 2b or r24, r25 - fb2: 51 f4 brne .+20 ; 0xfc8 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:233 - { - mcp2515_0.sendMessage(MCP2515::TXB1, &_frame); - fb4: 8c e6 ldi r24, 0x6C ; 108 - fb6: 9c e3 ldi r25, 0x3C ; 60 - fb8: 44 dc rcall .-1912 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:234 - mcp2515_2.sendMessage(MCP2515::TXB1, &_frame); - fba: 8a e6 ldi r24, 0x6A ; 106 - fbc: 9c e3 ldi r25, 0x3C ; 60 - fbe: 41 dc rcall .-1918 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:235 - mcp2515_3.sendMessage(MCP2515::TXB1, &_frame); - fc0: 89 e6 ldi r24, 0x69 ; 105 - fc2: 9c e3 ldi r25, 0x3C ; 60 - fc4: 3e dc rcall .-1924 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:236 - HandleFrame(&_frame); - fc6: 80 da rcall .-2816 ; 0x4c8 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:238 - } - if (mcp2515_2.readMessage(&_frame) == MCP2515::ERROR_OK) - fc8: 8a e6 ldi r24, 0x6A ; 106 - fca: 9c e3 ldi r25, 0x3C ; 60 - fcc: 8e dd rcall .-1252 ; 0xaea - fce: 89 2b or r24, r25 - fd0: 51 f4 brne .+20 ; 0xfe6 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:240 - { - mcp2515_0.sendMessage(MCP2515::TXB1, &_frame); - fd2: 8c e6 ldi r24, 0x6C ; 108 - fd4: 9c e3 ldi r25, 0x3C ; 60 - fd6: 35 dc rcall .-1942 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:241 - mcp2515_1.sendMessage(MCP2515::TXB1, &_frame); - fd8: 8b e6 ldi r24, 0x6B ; 107 - fda: 9c e3 ldi r25, 0x3C ; 60 - fdc: 32 dc rcall .-1948 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:242 - mcp2515_3.sendMessage(MCP2515::TXB1, &_frame); - fde: 89 e6 ldi r24, 0x69 ; 105 - fe0: 9c e3 ldi r25, 0x3C ; 60 - fe2: 2f dc rcall .-1954 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:243 - HandleFrame(&_frame); - fe4: 71 da rcall .-2846 ; 0x4c8 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:245 - } - if (mcp2515_3.readMessage(&_frame) == MCP2515::ERROR_OK) - fe6: 89 e6 ldi r24, 0x69 ; 105 - fe8: 9c e3 ldi r25, 0x3C ; 60 - fea: 7f dd rcall .-1282 ; 0xaea - fec: 89 2b or r24, r25 - fee: 51 f4 brne .+20 ; 0x1004 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:247 - { - mcp2515_0.sendMessage(MCP2515::TXB1, &_frame); - ff0: 8c e6 ldi r24, 0x6C ; 108 - ff2: 9c e3 ldi r25, 0x3C ; 60 - ff4: 26 dc rcall .-1972 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:248 - mcp2515_1.sendMessage(MCP2515::TXB1, &_frame); - ff6: 8b e6 ldi r24, 0x6B ; 107 - ff8: 9c e3 ldi r25, 0x3C ; 60 - ffa: 23 dc rcall .-1978 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:249 - mcp2515_2.sendMessage(MCP2515::TXB1, &_frame); - ffc: 8a e6 ldi r24, 0x6A ; 106 - ffe: 9c e3 ldi r25, 0x3C ; 60 - 1000: 20 dc rcall .-1984 ; 0x842 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:250 - HandleFrame(&_frame); - 1002: 62 da rcall .-2876 ; 0x4c8 -C:\Users\Martin\Documents\MeyCad\Meycad\Software\Switch\Swtich/Swtich.ino:252 - } - delay(10); - 1004: 5f d9 rcall .-3394 ; 0x2c4 + + SendSerialPackage(&mcp2515_0); + e84: 82 e8 ldi r24, 0x82 ; 130 + e86: 9c e3 ldi r25, 0x3C ; 60 + e88: 66 dd rcall .-1332 ; 0x956 +C:\source\Meycan\Software\Switch\Swtich/Swtich.ino:271 + delay(1000); + e8a: 68 ee ldi r22, 0xE8 ; 232 + e8c: 73 e0 ldi r23, 0x03 ; 3 + e8e: 80 e0 ldi r24, 0x00 ; 0 + e90: 90 e0 ldi r25, 0x00 ; 0 + e92: 0d da rcall .-3046 ; 0x2ae main(): C:\Users\Martin\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.1.0\cores\coreX-corefiles/main.cpp:43 - 1006: 20 97 sbiw r28, 0x00 ; 0 - 1008: 09 f2 breq .-126 ; 0xf8c - 100a: fa d7 rcall .+4084 ; 0x2000 <__TEXT_REGION_LENGTH__> - 100c: bf cf rjmp .-130 ; 0xf8c + e94: 20 97 sbiw r28, 0x00 ; 0 + e96: b1 f3 breq .-20 ; 0xe84 + e98: b3 d8 rcall .-3738 ; 0x0 <__vectors> + e9a: f4 cf rjmp .-24 ; 0xe84 -0000100e <__muluhisi3>: +00000e9c <__muluhisi3>: __muluhisi3(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:626 - 100e: 38 d0 rcall .+112 ; 0x1080 <__umulhisi3> + e9c: 38 d0 rcall .+112 ; 0xf0e <__umulhisi3> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:627 - 1010: a5 9f mul r26, r21 + e9e: a5 9f mul r26, r21 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:628 - 1012: 90 0d add r25, r0 + ea0: 90 0d add r25, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:629 - 1014: b4 9f mul r27, r20 + ea2: b4 9f mul r27, r20 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:630 - 1016: 90 0d add r25, r0 + ea4: 90 0d add r25, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:631 - 1018: a4 9f mul r26, r20 + ea6: a4 9f mul r26, r20 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:632 - 101a: 80 0d add r24, r0 + ea8: 80 0d add r24, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:633 - 101c: 91 1d adc r25, r1 + eaa: 91 1d adc r25, r1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:634 - 101e: 11 24 eor r1, r1 + eac: 11 24 eor r1, r1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:635 - 1020: 08 95 ret + eae: 08 95 ret -00001022 <__ashrdi3>: +00000eb0 <__ashrdi3>: __ashrdi3(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3122 - 1022: 97 fd sbrc r25, 7 + eb0: 97 fd sbrc r25, 7 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3123 - 1024: 10 94 com r1 + eb2: 10 94 com r1 -00001026 <__lshrdi3>: +00000eb4 <__lshrdi3>: __lshrdi3(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3131 - 1026: 00 2e mov r0, r16 + eb4: 00 2e mov r0, r16 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3132 - 1028: 08 30 cpi r16, 0x08 ; 8 + eb6: 08 30 cpi r16, 0x08 ; 8 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3133 - 102a: 98 f0 brcs .+38 ; 0x1052 <__lshrdi3+0x2c> + eb8: 98 f0 brcs .+38 ; 0xee0 <__lshrdi3+0x2c> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3134 - 102c: 08 50 subi r16, 0x08 ; 8 + eba: 08 50 subi r16, 0x08 ; 8 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3135 - 102e: 23 2f mov r18, r19 + ebc: 23 2f mov r18, r19 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3136 - 1030: 34 2f mov r19, r20 + ebe: 34 2f mov r19, r20 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3137 - 1032: 45 2f mov r20, r21 + ec0: 45 2f mov r20, r21 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3138 - 1034: 56 2f mov r21, r22 + ec2: 56 2f mov r21, r22 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3139 - 1036: 67 2f mov r22, r23 + ec4: 67 2f mov r22, r23 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3140 - 1038: 78 2f mov r23, r24 + ec6: 78 2f mov r23, r24 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3141 - 103a: 89 2f mov r24, r25 + ec8: 89 2f mov r24, r25 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3142 - 103c: 91 2d mov r25, r1 + eca: 91 2d mov r25, r1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3143 - 103e: f4 cf rjmp .-24 ; 0x1028 <__lshrdi3+0x2> + ecc: f4 cf rjmp .-24 ; 0xeb6 <__lshrdi3+0x2> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3144 - 1040: 15 94 asr r1 + ece: 15 94 asr r1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3145 - 1042: 97 95 ror r25 + ed0: 97 95 ror r25 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3146 - 1044: 87 95 ror r24 + ed2: 87 95 ror r24 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3147 - 1046: 77 95 ror r23 + ed4: 77 95 ror r23 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3148 - 1048: 67 95 ror r22 + ed6: 67 95 ror r22 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3149 - 104a: 57 95 ror r21 + ed8: 57 95 ror r21 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3150 - 104c: 47 95 ror r20 + eda: 47 95 ror r20 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3151 - 104e: 37 95 ror r19 + edc: 37 95 ror r19 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3152 - 1050: 27 95 ror r18 + ede: 27 95 ror r18 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3153 - 1052: 0a 95 dec r16 + ee0: 0a 95 dec r16 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3154 - 1054: aa f7 brpl .-22 ; 0x1040 <__lshrdi3+0x1a> + ee2: aa f7 brpl .-22 ; 0xece <__lshrdi3+0x1a> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3155 - 1056: 11 24 eor r1, r1 + ee4: 11 24 eor r1, r1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3156 - 1058: 00 2d mov r16, r0 + ee6: 00 2d mov r16, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:3157 - 105a: 08 95 ret + ee8: 08 95 ret -0000105c <__cmpdi2_s8>: +00000eea <__cmpdi2_s8>: __cmpdi2_s8(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2102 - 105c: 00 24 eor r0, r0 + eea: 00 24 eor r0, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2103 - 105e: a7 fd sbrc r26, 7 + eec: a7 fd sbrc r26, 7 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2104 - 1060: 00 94 com r0 + eee: 00 94 com r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2105 - 1062: 2a 17 cp r18, r26 - 1064: 30 05 cpc r19, r0 - 1066: 40 05 cpc r20, r0 - 1068: 50 05 cpc r21, r0 + ef0: 2a 17 cp r18, r26 + ef2: 30 05 cpc r19, r0 + ef4: 40 05 cpc r20, r0 + ef6: 50 05 cpc r21, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2106 - 106a: 60 05 cpc r22, r0 - 106c: 70 05 cpc r23, r0 - 106e: 80 05 cpc r24, r0 - 1070: 90 05 cpc r25, r0 + ef8: 60 05 cpc r22, r0 + efa: 70 05 cpc r23, r0 + efc: 80 05 cpc r24, r0 + efe: 90 05 cpc r25, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2107 - 1072: 08 95 ret + f00: 08 95 ret -00001074 <__tablejump2__>: +00000f02 <__tablejump2__>: __tablejump2__(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2296 - 1074: ee 0f add r30, r30 + f02: ee 0f add r30, r30 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2297 - 1076: ff 1f adc r31, r31 + f04: ff 1f adc r31, r31 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2328 - 1078: 05 90 lpm r0, Z+ + f06: 05 90 lpm r0, Z+ /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2329 - 107a: f4 91 lpm r31, Z + f08: f4 91 lpm r31, Z /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2330 - 107c: e0 2d mov r30, r0 + f0a: e0 2d mov r30, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2331 - 107e: 09 94 ijmp + f0c: 09 94 ijmp -00001080 <__umulhisi3>: +00000f0e <__umulhisi3>: __umulhisi3(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:564 - 1080: a2 9f mul r26, r18 + f0e: a2 9f mul r26, r18 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:565 - 1082: b0 01 movw r22, r0 + f10: b0 01 movw r22, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:566 - 1084: b3 9f mul r27, r19 + f12: b3 9f mul r27, r19 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:567 - 1086: c0 01 movw r24, r0 + f14: c0 01 movw r24, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:568 - 1088: a3 9f mul r26, r19 + f16: a3 9f mul r26, r19 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:578 - 108a: 01 d0 rcall .+2 ; 0x108e <__umulhisi3+0xe> + f18: 01 d0 rcall .+2 ; 0xf1c <__umulhisi3+0xe> /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:580 - 108c: b2 9f mul r27, r18 + f1a: b2 9f mul r27, r18 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:581 - 108e: 70 0d add r23, r0 + f1c: 70 0d add r23, r0 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:582 - 1090: 81 1d adc r24, r1 + f1e: 81 1d adc r24, r1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:583 - 1092: 11 24 eor r1, r1 + f20: 11 24 eor r1, r1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:584 - 1094: 91 1d adc r25, r1 + f22: 91 1d adc r25, r1 /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:585 - 1096: 08 95 ret + f24: 08 95 ret -00001098 : -malloc(): - 1098: 0f 93 push r16 - 109a: 1f 93 push r17 - 109c: cf 93 push r28 - 109e: df 93 push r29 - 10a0: 82 30 cpi r24, 0x02 ; 2 - 10a2: 91 05 cpc r25, r1 - 10a4: 10 f4 brcc .+4 ; 0x10aa - 10a6: 82 e0 ldi r24, 0x02 ; 2 - 10a8: 90 e0 ldi r25, 0x00 ; 0 - 10aa: e0 91 72 3c lds r30, 0x3C72 ; 0x803c72 <__flp> - 10ae: f0 91 73 3c lds r31, 0x3C73 ; 0x803c73 <__flp+0x1> - 10b2: 30 e0 ldi r19, 0x00 ; 0 - 10b4: 20 e0 ldi r18, 0x00 ; 0 - 10b6: b0 e0 ldi r27, 0x00 ; 0 - 10b8: a0 e0 ldi r26, 0x00 ; 0 - 10ba: 30 97 sbiw r30, 0x00 ; 0 - 10bc: 99 f4 brne .+38 ; 0x10e4 - 10be: 21 15 cp r18, r1 - 10c0: 31 05 cpc r19, r1 - 10c2: 09 f4 brne .+2 ; 0x10c6 - 10c4: 4a c0 rjmp .+148 ; 0x115a - 10c6: 28 1b sub r18, r24 - 10c8: 39 0b sbc r19, r25 - 10ca: 24 30 cpi r18, 0x04 ; 4 - 10cc: 31 05 cpc r19, r1 - 10ce: d8 f5 brcc .+118 ; 0x1146 - 10d0: 8a 81 ldd r24, Y+2 ; 0x02 - 10d2: 9b 81 ldd r25, Y+3 ; 0x03 - 10d4: 61 15 cp r22, r1 - 10d6: 71 05 cpc r23, r1 - 10d8: 89 f1 breq .+98 ; 0x113c - 10da: fb 01 movw r30, r22 - 10dc: 82 83 std Z+2, r24 ; 0x02 - 10de: 93 83 std Z+3, r25 ; 0x03 - 10e0: fe 01 movw r30, r28 - 10e2: 11 c0 rjmp .+34 ; 0x1106 - 10e4: 40 81 ld r20, Z - 10e6: 51 81 ldd r21, Z+1 ; 0x01 - 10e8: 02 81 ldd r16, Z+2 ; 0x02 - 10ea: 13 81 ldd r17, Z+3 ; 0x03 - 10ec: 48 17 cp r20, r24 - 10ee: 59 07 cpc r21, r25 - 10f0: e0 f0 brcs .+56 ; 0x112a - 10f2: 48 17 cp r20, r24 - 10f4: 59 07 cpc r21, r25 - 10f6: 99 f4 brne .+38 ; 0x111e - 10f8: 10 97 sbiw r26, 0x00 ; 0 - 10fa: 61 f0 breq .+24 ; 0x1114 - 10fc: 12 96 adiw r26, 0x02 ; 2 - 10fe: 0c 93 st X, r16 - 1100: 12 97 sbiw r26, 0x02 ; 2 - 1102: 13 96 adiw r26, 0x03 ; 3 - 1104: 1c 93 st X, r17 - 1106: 32 96 adiw r30, 0x02 ; 2 - 1108: cf 01 movw r24, r30 - 110a: df 91 pop r29 - 110c: cf 91 pop r28 - 110e: 1f 91 pop r17 - 1110: 0f 91 pop r16 - 1112: 08 95 ret - 1114: 00 93 72 3c sts 0x3C72, r16 ; 0x803c72 <__flp> - 1118: 10 93 73 3c sts 0x3C73, r17 ; 0x803c73 <__flp+0x1> - 111c: f4 cf rjmp .-24 ; 0x1106 - 111e: 21 15 cp r18, r1 - 1120: 31 05 cpc r19, r1 - 1122: 51 f0 breq .+20 ; 0x1138 - 1124: 42 17 cp r20, r18 - 1126: 53 07 cpc r21, r19 - 1128: 38 f0 brcs .+14 ; 0x1138 - 112a: a9 01 movw r20, r18 - 112c: db 01 movw r26, r22 - 112e: 9a 01 movw r18, r20 - 1130: bd 01 movw r22, r26 - 1132: df 01 movw r26, r30 - 1134: f8 01 movw r30, r16 - 1136: c1 cf rjmp .-126 ; 0x10ba - 1138: ef 01 movw r28, r30 - 113a: f9 cf rjmp .-14 ; 0x112e - 113c: 80 93 72 3c sts 0x3C72, r24 ; 0x803c72 <__flp> - 1140: 90 93 73 3c sts 0x3C73, r25 ; 0x803c73 <__flp+0x1> - 1144: cd cf rjmp .-102 ; 0x10e0 - 1146: fe 01 movw r30, r28 - 1148: e2 0f add r30, r18 - 114a: f3 1f adc r31, r19 - 114c: 81 93 st Z+, r24 - 114e: 91 93 st Z+, r25 - 1150: 22 50 subi r18, 0x02 ; 2 - 1152: 31 09 sbc r19, r1 - 1154: 28 83 st Y, r18 - 1156: 39 83 std Y+1, r19 ; 0x01 - 1158: d7 cf rjmp .-82 ; 0x1108 - 115a: 20 91 70 3c lds r18, 0x3C70 ; 0x803c70 <__brkval> - 115e: 30 91 71 3c lds r19, 0x3C71 ; 0x803c71 <__brkval+0x1> - 1162: 23 2b or r18, r19 - 1164: 41 f4 brne .+16 ; 0x1176 - 1166: 20 91 09 3c lds r18, 0x3C09 ; 0x803c09 <__malloc_heap_start> - 116a: 30 91 0a 3c lds r19, 0x3C0A ; 0x803c0a <__malloc_heap_start+0x1> - 116e: 20 93 70 3c sts 0x3C70, r18 ; 0x803c70 <__brkval> - 1172: 30 93 71 3c sts 0x3C71, r19 ; 0x803c71 <__brkval+0x1> - 1176: 20 91 07 3c lds r18, 0x3C07 ; 0x803c07 <__malloc_heap_end> - 117a: 30 91 08 3c lds r19, 0x3C08 ; 0x803c08 <__malloc_heap_end+0x1> - 117e: 21 15 cp r18, r1 - 1180: 31 05 cpc r19, r1 - 1182: 41 f4 brne .+16 ; 0x1194 - 1184: 2d b7 in r18, 0x3d ; 61 - 1186: 3e b7 in r19, 0x3e ; 62 - 1188: 40 91 0b 3c lds r20, 0x3C0B ; 0x803c0b <__malloc_margin> - 118c: 50 91 0c 3c lds r21, 0x3C0C ; 0x803c0c <__malloc_margin+0x1> - 1190: 24 1b sub r18, r20 - 1192: 35 0b sbc r19, r21 - 1194: e0 91 70 3c lds r30, 0x3C70 ; 0x803c70 <__brkval> - 1198: f0 91 71 3c lds r31, 0x3C71 ; 0x803c71 <__brkval+0x1> - 119c: e2 17 cp r30, r18 - 119e: f3 07 cpc r31, r19 - 11a0: a0 f4 brcc .+40 ; 0x11ca - 11a2: 2e 1b sub r18, r30 - 11a4: 3f 0b sbc r19, r31 - 11a6: 28 17 cp r18, r24 - 11a8: 39 07 cpc r19, r25 - 11aa: 78 f0 brcs .+30 ; 0x11ca - 11ac: ac 01 movw r20, r24 - 11ae: 4e 5f subi r20, 0xFE ; 254 - 11b0: 5f 4f sbci r21, 0xFF ; 255 - 11b2: 24 17 cp r18, r20 - 11b4: 35 07 cpc r19, r21 - 11b6: 48 f0 brcs .+18 ; 0x11ca - 11b8: 4e 0f add r20, r30 - 11ba: 5f 1f adc r21, r31 - 11bc: 40 93 70 3c sts 0x3C70, r20 ; 0x803c70 <__brkval> - 11c0: 50 93 71 3c sts 0x3C71, r21 ; 0x803c71 <__brkval+0x1> - 11c4: 81 93 st Z+, r24 - 11c6: 91 93 st Z+, r25 - 11c8: 9f cf rjmp .-194 ; 0x1108 - 11ca: f0 e0 ldi r31, 0x00 ; 0 - 11cc: e0 e0 ldi r30, 0x00 ; 0 - 11ce: 9c cf rjmp .-200 ; 0x1108 - -000011d0 : -free(): - 11d0: cf 93 push r28 - 11d2: df 93 push r29 - 11d4: 00 97 sbiw r24, 0x00 ; 0 - 11d6: e9 f0 breq .+58 ; 0x1212 - 11d8: fc 01 movw r30, r24 - 11da: 32 97 sbiw r30, 0x02 ; 2 - 11dc: 12 82 std Z+2, r1 ; 0x02 - 11de: 13 82 std Z+3, r1 ; 0x03 - 11e0: a0 91 72 3c lds r26, 0x3C72 ; 0x803c72 <__flp> - 11e4: b0 91 73 3c lds r27, 0x3C73 ; 0x803c73 <__flp+0x1> - 11e8: ed 01 movw r28, r26 - 11ea: 30 e0 ldi r19, 0x00 ; 0 - 11ec: 20 e0 ldi r18, 0x00 ; 0 - 11ee: 10 97 sbiw r26, 0x00 ; 0 - 11f0: a1 f4 brne .+40 ; 0x121a - 11f2: 20 81 ld r18, Z - 11f4: 31 81 ldd r19, Z+1 ; 0x01 - 11f6: 82 0f add r24, r18 - 11f8: 93 1f adc r25, r19 - 11fa: 20 91 70 3c lds r18, 0x3C70 ; 0x803c70 <__brkval> - 11fe: 30 91 71 3c lds r19, 0x3C71 ; 0x803c71 <__brkval+0x1> - 1202: 28 17 cp r18, r24 - 1204: 39 07 cpc r19, r25 - 1206: 09 f0 breq .+2 ; 0x120a - 1208: 61 c0 rjmp .+194 ; 0x12cc - 120a: e0 93 70 3c sts 0x3C70, r30 ; 0x803c70 <__brkval> - 120e: f0 93 71 3c sts 0x3C71, r31 ; 0x803c71 <__brkval+0x1> - 1212: df 91 pop r29 - 1214: cf 91 pop r28 - 1216: 08 95 ret - 1218: ea 01 movw r28, r20 - 121a: ce 17 cp r28, r30 - 121c: df 07 cpc r29, r31 - 121e: e8 f5 brcc .+122 ; 0x129a - 1220: 4a 81 ldd r20, Y+2 ; 0x02 - 1222: 5b 81 ldd r21, Y+3 ; 0x03 - 1224: 9e 01 movw r18, r28 - 1226: 41 15 cp r20, r1 - 1228: 51 05 cpc r21, r1 - 122a: b1 f7 brne .-20 ; 0x1218 - 122c: e9 01 movw r28, r18 - 122e: ea 83 std Y+2, r30 ; 0x02 - 1230: fb 83 std Y+3, r31 ; 0x03 - 1232: 49 91 ld r20, Y+ - 1234: 59 91 ld r21, Y+ - 1236: c4 0f add r28, r20 - 1238: d5 1f adc r29, r21 - 123a: ec 17 cp r30, r28 - 123c: fd 07 cpc r31, r29 - 123e: 61 f4 brne .+24 ; 0x1258 - 1240: 80 81 ld r24, Z - 1242: 91 81 ldd r25, Z+1 ; 0x01 - 1244: 02 96 adiw r24, 0x02 ; 2 - 1246: 84 0f add r24, r20 - 1248: 95 1f adc r25, r21 - 124a: e9 01 movw r28, r18 - 124c: 88 83 st Y, r24 - 124e: 99 83 std Y+1, r25 ; 0x01 - 1250: 82 81 ldd r24, Z+2 ; 0x02 - 1252: 93 81 ldd r25, Z+3 ; 0x03 - 1254: 8a 83 std Y+2, r24 ; 0x02 - 1256: 9b 83 std Y+3, r25 ; 0x03 - 1258: f0 e0 ldi r31, 0x00 ; 0 - 125a: e0 e0 ldi r30, 0x00 ; 0 - 125c: 12 96 adiw r26, 0x02 ; 2 - 125e: 8d 91 ld r24, X+ - 1260: 9c 91 ld r25, X - 1262: 13 97 sbiw r26, 0x03 ; 3 - 1264: 00 97 sbiw r24, 0x00 ; 0 - 1266: b9 f5 brne .+110 ; 0x12d6 - 1268: 2d 91 ld r18, X+ - 126a: 3c 91 ld r19, X - 126c: 11 97 sbiw r26, 0x01 ; 1 - 126e: cd 01 movw r24, r26 - 1270: 02 96 adiw r24, 0x02 ; 2 - 1272: 82 0f add r24, r18 - 1274: 93 1f adc r25, r19 - 1276: 20 91 70 3c lds r18, 0x3C70 ; 0x803c70 <__brkval> - 127a: 30 91 71 3c lds r19, 0x3C71 ; 0x803c71 <__brkval+0x1> - 127e: 28 17 cp r18, r24 - 1280: 39 07 cpc r19, r25 - 1282: 39 f6 brne .-114 ; 0x1212 - 1284: 30 97 sbiw r30, 0x00 ; 0 - 1286: 51 f5 brne .+84 ; 0x12dc - 1288: 10 92 72 3c sts 0x3C72, r1 ; 0x803c72 <__flp> - 128c: 10 92 73 3c sts 0x3C73, r1 ; 0x803c73 <__flp+0x1> - 1290: a0 93 70 3c sts 0x3C70, r26 ; 0x803c70 <__brkval> - 1294: b0 93 71 3c sts 0x3C71, r27 ; 0x803c71 <__brkval+0x1> - 1298: bc cf rjmp .-136 ; 0x1212 - 129a: c2 83 std Z+2, r28 ; 0x02 - 129c: d3 83 std Z+3, r29 ; 0x03 - 129e: 40 81 ld r20, Z - 12a0: 51 81 ldd r21, Z+1 ; 0x01 - 12a2: 84 0f add r24, r20 - 12a4: 95 1f adc r25, r21 - 12a6: c8 17 cp r28, r24 - 12a8: d9 07 cpc r29, r25 - 12aa: 61 f4 brne .+24 ; 0x12c4 - 12ac: 4e 5f subi r20, 0xFE ; 254 - 12ae: 5f 4f sbci r21, 0xFF ; 255 - 12b0: 88 81 ld r24, Y - 12b2: 99 81 ldd r25, Y+1 ; 0x01 - 12b4: 48 0f add r20, r24 - 12b6: 59 1f adc r21, r25 - 12b8: 40 83 st Z, r20 - 12ba: 51 83 std Z+1, r21 ; 0x01 - 12bc: 8a 81 ldd r24, Y+2 ; 0x02 - 12be: 9b 81 ldd r25, Y+3 ; 0x03 - 12c0: 82 83 std Z+2, r24 ; 0x02 - 12c2: 93 83 std Z+3, r25 ; 0x03 - 12c4: 21 15 cp r18, r1 - 12c6: 31 05 cpc r19, r1 - 12c8: 09 f0 breq .+2 ; 0x12cc - 12ca: b0 cf rjmp .-160 ; 0x122c - 12cc: e0 93 72 3c sts 0x3C72, r30 ; 0x803c72 <__flp> - 12d0: f0 93 73 3c sts 0x3C73, r31 ; 0x803c73 <__flp+0x1> - 12d4: 9e cf rjmp .-196 ; 0x1212 - 12d6: fd 01 movw r30, r26 - 12d8: dc 01 movw r26, r24 - 12da: c0 cf rjmp .-128 ; 0x125c - 12dc: 12 82 std Z+2, r1 ; 0x02 - 12de: 13 82 std Z+3, r1 ; 0x03 - 12e0: d7 cf rjmp .-82 ; 0x1290 - -000012e2 : +00000f26 : memcpy(): - 12e2: fb 01 movw r30, r22 - 12e4: dc 01 movw r26, r24 - 12e6: 02 c0 rjmp .+4 ; 0x12ec - 12e8: 01 90 ld r0, Z+ - 12ea: 0d 92 st X+, r0 - 12ec: 41 50 subi r20, 0x01 ; 1 - 12ee: 50 40 sbci r21, 0x00 ; 0 - 12f0: d8 f7 brcc .-10 ; 0x12e8 - 12f2: 08 95 ret + f26: fb 01 movw r30, r22 + f28: dc 01 movw r26, r24 + f2a: 02 c0 rjmp .+4 ; 0xf30 + f2c: 01 90 ld r0, Z+ + f2e: 0d 92 st X+, r0 + f30: 41 50 subi r20, 0x01 ; 1 + f32: 50 40 sbci r21, 0x00 ; 0 + f34: d8 f7 brcc .-10 ; 0xf2c + f36: 08 95 ret -000012f4 <_exit>: +00000f38 <_exit>: exit(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2278 - 12f4: f8 94 cli + f38: f8 94 cli -000012f6 <__stop_program>: +00000f3a <__stop_program>: __stop_program(): /home/jenkins-mingw32/workspace/avr-gcc-staging/label/Ubuntu14.04x64-mingw32/gcc-build/avr/avrxmega3/short-calls/libgcc/../../../../../gcc/libgcc/config/avr/lib1funcs.S:2280 - 12f6: ff cf rjmp .-2 ; 0x12f6 <__stop_program> + f3a: ff cf rjmp .-2 ; 0xf3a <__stop_program> diff --git a/Software/UPSoftware/UPSoftware.ino b/Software/UPSoftware/UPSoftware.ino index fbd19f8..5951c38 100644 --- a/Software/UPSoftware/UPSoftware.ino +++ b/Software/UPSoftware/UPSoftware.ino @@ -1,12 +1,13 @@ + #include ; #include ; struct can_frame _frame; MCP2515 mcp2515(PIN_PD4); -const byte SoftwareVersionHigh = 3; +const byte SoftwareVersionHigh = 4; const byte SoftwareVersionLow = 0; -const byte HardwareVersionHigh = 5; +const byte HardwareVersionHigh = 2; const byte HardwareVersionLow = 0; typedef struct PinState @@ -33,30 +34,29 @@ int16_t myDeviceId; void setup() { SPI.begin(); - MeyPins[0] = PinState(); - MeyPins[0].Init(PIN_PD0, (byte) 1); + MeyPins[0].Init(PIN_PC7, (byte) 1); MeyPins[1] = PinState(); - MeyPins[1].Init(PIN_PD2, (byte) 2); + MeyPins[1].Init(PIN_PD0, (byte) 2); MeyPins[2] = PinState(); - MeyPins[2].Init(PIN_PD5, (byte) 3); + MeyPins[2].Init(PIN_PD1, (byte) 3); MeyPins[3] = PinState(); - MeyPins[3].Init(PIN_PD7, (byte) 4); + MeyPins[3].Init(PIN_PD2, (byte) 4); MeyPins[4] = PinState(); - MeyPins[4].Init(PIN_PC7, (byte) 5); + MeyPins[4].Init(PIN_PD6, (byte) 5); MeyPins[5] = PinState(); - MeyPins[5].Init(PIN_PD1, (byte) 6); + MeyPins[5].Init(PIN_PD5, (byte) 6); MeyPins[6] = PinState(); - MeyPins[6].Init(PIN_PD3, (byte) 7); + MeyPins[6].Init(PIN_PD4, (byte) 7); MeyPins[7] = PinState(); - MeyPins[7].Init(PIN_PD6, (byte) 8); + MeyPins[7].Init(PIN_PD3, (byte) 8); @@ -80,6 +80,9 @@ void setup() { void loop() { + delay(1000); + SendSerialPackage(); + for (int i = 0; i <= PinCount - 1; i++) { if (CheckPinStatus(&MeyPins[i])) @@ -88,10 +91,8 @@ void loop() if (mcp2515.readMessage(&_frame) == MCP2515::ERROR_OK) { - if (GetDeviceId(_frame.can_id) == GetMyDeviceId()) { - int meyPinId = _frame.data[0]; bool state = _frame.data[1] > 0; @@ -116,7 +117,6 @@ void loop() } } - delay(20); } @@ -129,7 +129,7 @@ void SendSerialPackage() _frame.data[1] = SoftwareVersionLow; _frame.data[2] = HardwareVersionHigh; _frame.data[3] = HardwareVersionLow; - mcp2515.sendMessage(MCP2515::TXB1, &_frame); + DoSendCanPkg(&mcp2515, &_frame); } @@ -139,9 +139,19 @@ void SendSwitchedTriggeredCanPackage(byte pinId, int state) _frame.can_dlc = 2; _frame.data[0] = pinId; _frame.data[1] = state; - mcp2515.sendMessage(MCP2515::TXB1, &_frame); + DoSendCanPkg(&mcp2515, &_frame); } +void DoSendCanPkg(MCP2515 *interface, can_frame *frame) +{ + // ToggleDebug(); + byte cnt = 0; + while (interface->sendMessage(&_frame)) { + cnt++; + if (cnt > 10) return; + } + +} void SendDoTriggerSwitchCanPackage(uint32_t targetCanId, byte pinId, byte state) { @@ -151,7 +161,7 @@ void SendDoTriggerSwitchCanPackage(uint32_t targetCanId, byte pinId, byte state) _frame.data[1] = (targetCanId & 0xFF00) >> 8; _frame.data[2] = pinId; _frame.data[3] = state; - mcp2515.sendMessage(MCP2515::TXB1, &_frame); + DoSendCanPkg(&mcp2515, &_frame); } bool ReadPin(PinState * state) diff --git a/Switch1/Switch1-backups/Switch1-2023-06-04_074859.zip b/Switch1/Switch1-backups/Switch1-2023-06-04_074859.zip deleted file mode 100644 index 3b3f958..0000000 Binary files a/Switch1/Switch1-backups/Switch1-2023-06-04_074859.zip and /dev/null differ diff --git a/Switch1/Switch1-backups/Switch1-2023-06-04_075406.zip b/Switch1/Switch1-backups/Switch1-2023-06-04_075406.zip deleted file mode 100644 index fec667a..0000000 Binary files a/Switch1/Switch1-backups/Switch1-2023-06-04_075406.zip and /dev/null differ diff --git a/Switch1/Switch1-backups/Switch1-2023-06-04_083455.zip b/Switch1/Switch1-backups/Switch1-2023-06-04_083455.zip new file mode 100644 index 0000000..a47aa1a Binary files /dev/null and b/Switch1/Switch1-backups/Switch1-2023-06-04_083455.zip differ diff --git a/Switch1/Switch1-backups/Switch1-2023-07-03_095513.zip b/Switch1/Switch1-backups/Switch1-2023-07-03_095513.zip new file mode 100644 index 0000000..a47aa1a Binary files /dev/null and b/Switch1/Switch1-backups/Switch1-2023-07-03_095513.zip differ diff --git a/Switch1/Switch1.kicad_pcb b/Switch1/Switch1.kicad_pcb index 8cac60a..0943a0d 100644 --- a/Switch1/Switch1.kicad_pcb +++ b/Switch1/Switch1.kicad_pcb @@ -466,7 +466,7 @@ (property "Sheetname" "") (path "/ba8b88eb-80e4-4fa1-9e77-db96a7193967") (attr through_hole) - (fp_text reference "J10" (at -0.114 2.616 180) (layer "F.SilkS") + (fp_text reference "IN-" (at -0.114 2.616 180) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 5681b125-1ab3-4762-b889-d34158dea436) ) @@ -1955,7 +1955,7 @@ (property "Sheetname" "") (path "/adf496a2-b1d1-4408-a764-eaacdf8ff9f4") (attr through_hole) - (fp_text reference "J11" (at 0 -2.54) (layer "F.SilkS") + (fp_text reference "OUT-" (at 0 -2.54) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp a4e94926-228e-4e5b-81fe-35294b63372e) ) @@ -2881,7 +2881,7 @@ (property "Sheetname" "") (path "/130b8d97-84bf-49f0-8f83-80a1750f718c") (attr through_hole) - (fp_text reference "J12" (at 0.762 -2.54) (layer "F.SilkS") + (fp_text reference "OUT+" (at 0.762 -2.54) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 5f517e43-64b4-4d95-9b9c-e24038b26175) ) @@ -3068,7 +3068,7 @@ (property "Sheetname" "") (path "/a236a182-ca21-4f11-8942-7dd1facb015f") (attr through_hole) - (fp_text reference "J9" (at -0.098 2.736) (layer "F.SilkS") + (fp_text reference "IN+" (at -0.098 2.736) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp 5154fc01-cd41-4624-b9b4-9bd3a602fede) ) @@ -3302,7 +3302,7 @@ (property "Sheetname" "") (path "/366377f0-a55b-44a1-a28b-40d54f0e0078") (attr through_hole) - (fp_text reference "J13" (at 1.27 -2.33) (layer "F.SilkS") + (fp_text reference "5V On/Off" (at 1.27 -2.33) (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))) (tstamp b0832c13-4191-4709-be8c-9d4cf865d6e3) ) @@ -4144,6 +4144,9 @@ (gr_text "1" (at 204.774326 77.266326) (layer "F.SilkS") (tstamp 307ea962-06e6-4965-b781-4ac960686bf1) (effects (font (size 1 1) (thickness 0.15))) ) + (gr_text "UPDI" (at 195.58 56.134 90) (layer "F.SilkS") (tstamp 3b6d6bb7-d0e7-4500-a5b2-d6ec3609e7b5) + (effects (font (size 1 1) (thickness 0.15))) + ) (gr_text "H" (at 248.666 129.716) (layer "F.SilkS") (tstamp 3e9ed8b8-af63-44fc-a471-6d5f30734a97) (effects (font (size 1 1) (thickness 0.15))) )