Commit Graph

212 Commits

Author SHA1 Message Date
Matthijs Kooijman cf0cc48d9a Use stopListening() in SoftwareSerial::end()
stopListening also disabled the interrupt, if needed, so calling that
function makes more sense. Since stopListening only disables the
interrupt when the current SoftwareSerial is the active object, and that
can only be the case when _rx_delay_stopbit is non-zero, there is no
need to separately check _rx_delay_stopbit anymore.
2015-01-26 17:03:25 +01:00
Matthijs Kooijman 11ade32f20 Fix race condition in SoftwareSerial::overflow()
If an interrupt causing overflow would occur between reading
_buffer_overflow and clearing it, this overflow condition would be
immediately cleared and never be returned by overflow().

By only clearing the overflow flag if an overflow actually occurred,
this problem goes away (worst case overflow() returns false even though
an overflow _just_ occurred, but then the next call to overflow() will
return true).
2015-01-26 17:03:25 +01:00
Matthijs Kooijman cb36793486 Toggle SoftwareSerial interrupts when starting / stopping to listen
This prevents interrupts from triggering when the SoftwareSerial
instance is not even listening.

Additionally, this removes the need to disable interrupts in
SoftwareSerial::listen, since no interrupts are active while it touches
the variables.
2015-01-26 17:03:25 +01:00
Matthijs Kooijman 3f02bcb49f Add SoftwareSerial::stopListening()
This allows one to explicitly stop a SoftwareSerial instance from
listening, without having to make another one listening.
2015-01-26 17:03:25 +01:00
Matthijs Kooijman 7366268025 Add SoftwareSerial::setRxIntMsk()
This moves the interrupt mask enabling / disabling code into a separate
method, so we can call it from multiple spots next.
2015-01-26 17:03:25 +01:00
Matthijs Kooijman 51b8ed2675 Let SoftwareSerial::end also check against _rx_delay_stopbit
The current check is still always false when the old check was, but
additionally it will not disable the interrupts when they were never
enabled (which shouldn't matter much, but this is more consistent).
2015-01-26 17:03:24 +01:00
Matthijs Kooijman 9b291b8768 Let SoftwareSerial::listen() fail on invalid rx baud rates
In this case, SoftwareSerial::begin will not have enabled the
interrupts, so better not allow the SoftwareSerial instance to enter the
listening state either.
2015-01-26 17:03:24 +01:00
Matthijs Kooijman 4d3ccb4118 Clear SoftwareSerial rx delay if no interrupt register is found
Before enabling interupts, begin would see if the given receive pin
actually has an associated PCINT register. If not, the interrupts would
not be enabled.

Now, the same check is done, but when no register is available, the rx
parameters are not loaded at all (which in turn prevents the interrupt
from being enabled). This allows all code to use the same "is rx
enabled" (which will be added next).
2015-01-26 17:03:24 +01:00
Cristian Maglie 1e699c3600 Fix atomicity issues in SPI::beginTransaction and SPI::endTransaction (Andrew Kroll)
Previously, it could happen that SPI::beginTransaction was
interrupted by an ISR, while it is changing the SPI_AVR_EIMSK
register or interruptSave variable (it seems that there is
a small window after changing SPI_AVR_EIMSK where an interrupt
might still occur). If this happens, interruptSave is overwritten
with an invalid value, permanently disabling the pin interrupts.

To prevent this, disable interrupts globally while changing
these values.
2014-11-25 15:56:11 +01:00
Cristian Maglie 00f5ed6b45 [avr] Made SPI.usingInterrupt() synchronized (Andrew Kroll) 2014-11-25 15:56:11 +01:00
Cristian Maglie 4948bf5650 [avr] Added SPI.notUsingInterrupt() (Andrew Kroll) 2014-11-25 15:56:11 +01:00
Cristian Maglie 6cfc5c23cc [avr] Made SPI.begin() and SPI.end() synchronized (Andrew Kroll) 2014-11-25 15:49:17 +01:00
Cristian Maglie d4edece7e6 [avr] Improved SPI speed on 16bit transfer.
From https://github.com/arduino/Arduino/pull/2376#issuecomment-59671152

Quoting Andrew Kroll:

   [..this commit..] introduces a small delay that can prevent the wait
   loop form iterating when running at the maximum speed. This gives
   you a little more speed, even if it seems counter-intuitive. At
   lower speeds, it is unnoticed. Watch the output on an oscilloscope
   when running full SPI speed, and you should see closer back-to-back
   writes.

Quoting Paul Stoffregen:

   I did quite a bit of experimenting with the NOP addition. The one
   that's in my copy gives about a 10% speedup on AVR.
2014-11-25 15:49:17 +01:00
Cristian Maglie 1daa5ea931 [avr] SPI: removed redundant include 2014-11-14 00:23:11 +01:00
Cristian Maglie 39b2b39234 [avr] Small comments and headers fixes in SPI 2014-11-14 00:23:11 +01:00
PaulStoffregen 48f5256789 SPI Transactions for AVR 2014-08-01 05:38:27 -07:00
Fede85 6fb4b2795c missing paragraph field in library.properties 2014-07-18 20:08:01 +02:00
Fede85 2f7cc5ff55 modified sentences in library.properties files 2014-07-18 19:41:34 +02:00
Cristian Maglie cb4ae51b42 Merge pull request #1912 from Lauszus/issues440
Enable user to change the I2C clock frequency by calling setClock in the Wire library
2014-07-02 15:37:30 +02:00
Cristian Maglie 2d46a8ef88 Merge remote-tracking branch 'arduino/master' into ide-1.5.x
Conflicts:
	build/shared/examples/01.Basics/Blink/Blink.ino
	build/shared/examples/09.USB/Keyboard/KeyboardReprogram/KeyboardReprogram.ino
	build/shared/examples/10.StarterKit/p02_SpaceshipInterface/p02_SpaceshipInterface.ino
	hardware/arduino/cores/arduino/HardwareSerial.cpp
2014-05-23 21:04:47 +02:00
Kristian Lauszus 5216e551a5 Enable user to change the I2C clock frequency by calling setClock in the Wire library 2014-03-06 17:23:49 +01:00
Cristian Maglie 66ca83a809 Revert "SPI library to new format" 2013-11-21 15:05:36 +01:00
Cristian Maglie 0dcd4b2209 Revert "EEPROM library to the new format"
This reverts commits:
3223d4fdca32ec03de4a3a2a0c22f2d40de5f374
77f8dd63ab102ab5d2929ac4edd5c00ae9d70493
2013-11-21 11:22:44 +01:00
Cristian Maglie a5d1990afd Revert "SoftwareSerial library to the new format"
This reverts commit 38c3bbbd3c83eda057d4857635fbd78a4785c3a4.
2013-11-15 12:54:59 +01:00
Cristian Maglie f0fa1fd39a Revert "Wire library to the 1.5 format"
This reverts commit a31857688bdc270ed65307755ff3b73ef4867982.
2013-11-15 12:54:59 +01:00
Fede85 8c7c1c75fe Wire library to the 1.5 format 2013-09-10 18:50:42 +02:00
Fede85 af7493f224 SpacebrewYun library to the 1.5 format 2013-09-06 18:25:03 +02:00
Fede85 65b6109cf1 Temboo library to the 1.5 format 2013-09-06 18:15:14 +02:00
Fede85 a3e2e68e2b Bridge library to the 1.5 format 2013-09-06 15:38:07 +02:00
Federico Fissore f6f9c2a824 Spacebrew keywords 2013-08-28 10:12:33 +02:00
Federico Fissore aa7d03ba9c spacebrew update 2013-08-28 10:12:33 +02:00
Federico Fissore 39d8b74f58 removed .DS_Store folder 2013-08-28 10:12:33 +02:00
Cristian Maglie 540743129b Merge branch 'ide-1.5.x' into dev-ide-1.5.x-discovery
Conflicts:
	app/src/processing/app/Preferences.java
	app/src/processing/app/debug/Uploader.java
2013-08-23 15:59:24 +02:00
Federico Fissore 1895d696b1 TemperatureWebPanel: widening refresh interval 2013-07-25 14:31:26 +02:00
Fede85 5527c44aa4 WiFi library to the new format 2013-07-19 16:20:34 +02:00
Federico Fissore 452be966bc Bridge: Bridge.begin should wait more before giving up, as other processes may consume linux cpu power 2013-07-19 15:18:55 +02:00
Federico Fissore 92cb63b843 SpacebrewYun: added new example 2013-07-18 14:07:39 +02:00
Angelo Scialabba 36cc2c89e7 Bridge: CRC16 being used as CRC 2013-07-15 16:41:17 +02:00
Federico Fissore beb9e08b79 updated temboo examples (added ControlBySMS) 2013-07-15 15:22:50 +02:00
Cristian Maglie 5836db3ddb Merge branch 'ide-1.5.x' into dev-ide-1.5.x-discovery
Conflicts:
	app/src/cc/arduino/packages/uploaders/SerialUploader.java
	app/src/processing/app/Editor.java
	app/src/processing/app/Sketch.java
	app/src/processing/app/debug/Uploader.java
2013-07-14 12:01:03 +02:00
Cristian Maglie 77678f3af1 Merge branch 'master' into ide-1.5.x 2013-07-14 11:51:50 +02:00
Federico Fissore bd1e2ab332 File: implemented File.openNextFile() and File.rewindDirectory() 2013-07-11 18:14:49 +02:00
Federico Fissore 61ccf77a7a FileIO.h: removed wrong function declaration 2013-07-11 13:22:52 +02:00
Federico Fissore 40b2da7746 Added File.isDirectory() 2013-07-11 13:06:48 +02:00
Federico Fissore 3ee30f326f updated temboo examples 2013-07-11 11:24:53 +02:00
Cristian Maglie 67d03f1ea4 Updated YunSerialTerminal: added command to shutdown bridge 2013-07-10 20:37:31 +02:00
Cristian Maglie dec517181e Bridge: even more reliable startup 2013-07-10 20:24:16 +02:00
Federico Fissore 3c39763ced updated temboo examples 2013-07-10 09:47:18 +02:00
Federico Fissore f9d79203dc WifiStatus example:updated sketch description 2013-07-09 20:08:17 +02:00
Federico Fissore 95ae8c4a59 temboo examples updated 2013-07-09 20:07:54 +02:00