Commit Graph

220 Commits

Author SHA1 Message Date
Atis Elsts
5acf3fb770 Fix time accounting on msp430 Series 5 MCU based platforms (wismote)
See https://github.com/contiki-os/contiki/pull/727 for explanation
2014-08-21 18:09:54 +02:00
Atis Elsts
705587cdb7 Fix time accounting on msp430 Series 1 and Series 2 MCU based platforms.
The problem with the current version of the code was that the condition at the end of the do...while loop at Timer A1 interrupt:
 while((TACCR1 - TAR) > INTERVAL);
evaluates to false whenever TACCR1 == TAR.
Not incrementing TACCR1 in this case leads to Timer A1 interrupt not being called for 2 seconds, until TAR counter reaches TACCR1 again after an overflow.

The patch avoids this problem by changing the condition of the loop, and using CLOCK_LT macro to compare between time values.

The patch also attempts to fix another problem: a read of TAR register while it is being updated may return a lower value than the actual contents. To avoid that, the "read twice and compare results" idiom should be used. As the TAR register is updated by the actual hardware, it is of no importance whether it is read with interrupts disabled or enabled; the problem can occur in both contexts.
2014-07-02 11:07:02 +02:00
Antonio Lignan
3d64b80e40 Added flags to enable 20-bit support from msp430-gcc 4.7.x 2014-06-17 12:55:08 +02:00
Adam Dunkels
9ceb059c21 Merge pull request #611 from nfi/cc2x20-sfd-config
Corrected CC2x20 sfd config and startup message.
2014-06-11 23:17:05 +02:00
Adam Dunkels
def57199b9 Merge pull request #511 from ADVANSEE/leds
leds: Fixes and enhancements
2014-06-11 22:37:34 +02:00
Niclas Finne
2c953c3346 Support verbosity control when building MSP430-based platforms with
the IAR compiler.
2014-04-11 17:36:42 +02:00
Nicolas Tsiftes
1b49b68c3b Merge pull request #606 from atiselsts/master
Fix MCU clock calibration in msp430f2xxx based platforms (e.g. Zolertia Z1)
2014-04-09 21:52:08 +02:00
Niclas Finne
767a9aeef1 Use platform configuration for CC2420/CC2520 SFD on MSP430 based platforms 2014-03-28 11:54:10 +01:00
Niclas Finne
279b7fd040 Added rule to autocompile mspsim if needed and show warning if submodule MSPSim has not been initialized 2014-03-28 11:11:51 +01:00
Atis Elsts
68b65e6c47 Fix CPU clock calibration in msp430f2xxx based platforms (e.g. Zolertia Z1).
The following problems were present in the existing DCO calibration algorithm:

Problem #1. In function msp430_quick_synch_dco(), the "for(i=0; i < 1000; i++) { .. }" loop is optimized away by the compiler, as i is not volatile. Making i volatile would improve the results, but would not be sufficient: see the next point.

Problem #2. According to MSP430F2617 Device Erratasheet, bug BCL12 precludes a naive implementations of "fast" calibration altogether. The bug is present on all MCU revisions up to date.

The description of the bug:
"After switching RSELx bits (located in register BCSCTL1) from a value of >13 to a value of <12 OR from a value of <12 to a value of >13, the resulting clock delivered by the DCO can stop before the new clock frequency is applied. This dead time is approximately 20 us. In some instances, the DCO may completely stop, requiring a power cycle.

Furthermore, if all of the RSELx bits in the BSCTL1 register are set, modifying the DCOCTL register to change the DCOx or the MODx bits could also result in DCO dead time or DCO hang up."

In Contiki code for msp430f2xxx @ 8MHz, the RSEL search currently typically goes from 15 down to 11, thus violating the rules.

Step-by-step RSEL change is proposed as the best possible workaround:
"[..] more reliable method can be implemented by changing the RSEL bits step by step in order to guarantee safe function without any dead time of the DCO."

Problem #3. The old Contiki code started from the highest possible calibration values: RSEL=15, DCOx=7. According to MSP430F2617
datasheet, this means that the DCO frequency is set to 26 MHz. For one, Vcc under 3V is not supported for this frequency, so this means that battery-powered nodes have a big problem. The minimal operating voltages are:
- 1.8V for RSEL <= 13
- 2.2V for RSEL = 14
- 3.0V for RSEL = 15
So the correct way is to always start calibration from RSEL <= 13, unless explicityly pre-calibred values are present.

Problem #4. Timer B should be turned off after the calibration, following the "Principles for Low-Power Applications" in MSP430 user's Guide.

The patch fixes these issues by performing step-by-step calibration and turning off Timer B afterwards. As opposed to MSP430F1xxx calibration, this algorithm does not change the ACLK divider beforehand; attempts to make calibration more precise would lead to looping in some cases, as the calibration step granularity at larger frequencies is quite big.

Additionally, the patch improves DCOSYNCH_CONF_ENABLED behavior, allowing the resynchronization to correct for more than one step.
2014-03-25 11:47:13 +01:00
Adam Dunkels
c9efe3c3c4 Moved the cc2520 driver into its own dev/cc2520 module 2014-01-26 23:20:31 +01:00
Adam Dunkels
0b805e4763 Moved the cc2420 driver into a separate dev/cc2420 module 2014-01-26 23:20:27 +01:00
Adam Dunkels
5f3fe7f7c7 Updated include paths for the moved files under net/ 2014-01-26 23:20:23 +01:00
Benoît Thébaudeau
7f48057b9e leds: Fix the API
The leds API did not work in some cases. E.g. with the following sequence:
  leds_off(LEDS_ALL);
  leds_toggle(LEDS_GREEN);
  leds_off(LEDS_ALL);
the green LED was remaining on after the last call.

This was caused by the toggle feature made synonymous with the invert feature,
although it is unrelated. leds_toggle() is indeed supposed to toggle an LED,
while leds_invert() is supposed to change the active level of an LED. However,
all users of leds_invert() actually meant leds_toggle(), and the invert feature
does not make sense in this module because it is not handy due to successive
calls to leds_invert() changing the intended behavior, and hardware active
levels should be managed in leds_arch_set() (e.g. by XORing the passed value
with a hardware-specific constant before setting the output levels of the pins).

Consequently, this change:
 - removes the leds_invert() function,
 - makes leds_toggle() behave as expected relatively to leds_off() / leds_on(),
 - sanitizes the code in the leds module.

Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
2014-01-07 13:02:41 +01:00
Adam Dunkels
bb2dcaa057 A massive all-tree automated update of all double inclusion guard #defines that changes from using two underscores as a prefix, which are reserved, to not using two underscores as a prefix 2013-11-24 20:20:11 +01:00
Peter A. Bigot
5fc0575e99 Makefile.include: support make clean all
Historically $(OBJECTDIR) was created when Makefile.include is read.  A
consequence is that combining "clean" with "all" (or any other build
target) results in an error because the clean removes the object
directory that is required to exist when building dependencies.
Creating $(OBJECTDIR) on-demand ensures it is present when needed.

Removed creation of $(OBJECTDIR) on initial read, and added an order-only
dependency forcing its creation all Makefile* rules where the target is
explicitly or implicitly in $(OBJECTDIR).
2013-06-20 17:45:41 -05:00
Antonio Lignan
2cf4e30b11 Baudrate now is configured taking into account the MCU frequency, instead of using fixed values for 8MHz freq 2013-01-29 12:23:23 +01:00
Mariano Alvira
4087c0785f remove -g
see http://comments.gmane.org/gmane.os.contiki.devel/13869
2012-10-29 10:34:28 -04:00
Adam Dunkels
944537fccf Removed all old RCS tags in the Contiki source tree. Those RCS tags are not used any more, as we are now using git to manage the Contiki source tree 2012-10-26 15:54:49 +02:00
Niclas Finne
f5c8cff5b2 Made MT stack size configurable 2012-10-23 00:52:52 +02:00
Niclas Finne
767e8bb551 Default value for _DATA20_HEAP_SIZE when using the IAR compiler on MSP430 platforms 2012-09-20 14:01:56 +02:00
Niclas Finne
4630945475 Made the stack and heap size configurable when using the IAR compiler on the MSP430 platforms 2012-09-19 22:49:19 +02:00
Niclas Finne
418a5772e6 Removed leds debug output 2012-06-07 10:35:22 +02:00
Niclas Finne
1b13b69814 Added support for mspgcc 4.6+ that no longer supports generic MCU identifiers such as msp430x1611 2012-04-10 16:05:10 +02:00
Niclas Finne
57a166c3db Corrected compiler flags for the IAR compiler 2012-04-10 15:27:44 +02:00
David Kopf
cac4e9a222 Add clock_delay_us and clock_set_seconds to clock.h. Modify clock_wait to use clock_time_t.
Remove the troublesome avr/dev/delay.* files.
Add PLATFORM_NAME and combine the confusing *_REVISION defines into a single PLATFORM_TYPE
2012-04-09 15:49:53 -04:00
simonduq
95ae5c5d51 avoid unnecessary symbols.c/h copying 2012-03-26 23:00:43 +02:00
Niclas Finne
ff7a977dc7 Improved support for the IAR compiler for the MSP430 platforms 2012-03-07 23:09:05 +01:00
Niclas Finne
684c3edfa6 Cross compiler interrupt service routine compatibility definitions for MSP430 based platforms based on isr_compat.h by Steve Underwood. 2012-03-07 23:04:52 +01:00
Niclas Finne
2eee14a1d8 Allow compiler flag SMALL to be set to disable SMALL-build. Patch by Andre Frimberger. 2012-03-06 15:35:20 +01:00
David Kopf
2b7ecefce7 Remove unused SPI initializer flag from AVR. Comment out in the msp-430 template. 2012-02-27 17:05:22 -05:00
Nicholas J Humfrey
1cda3da17e Converted u8_t to uint8_t and u16_t to uint16_t in the cpu directory. 2012-02-21 08:33:24 -05:00
Niclas Finne
f26920ae9b Define the BV macro if not already defined 2012-01-11 08:46:16 +01:00
Niclas Finne
f3db12c19d MSP430 setup for f2xxx based on Z1 2012-01-09 14:56:03 +01:00
Niclas Finne
9ffcd53868 Fixed compiler warning (with IAR compiler) 2012-01-09 14:56:00 +01:00
Niclas Finne
3daa822f89 Moved configuration of memcpy workaround to cpu (only needed for an older version of mspgcc) 2012-01-09 14:55:57 +01:00
Niclas Finne
fd81a0d393 Minor cleanup (avoid setting some compiler flags twice) 2012-01-09 14:55:54 +01:00
Niclas Finne
8e1e12dfd3 Ignore SMALL when using IAR compiler 2012-01-09 14:55:48 +01:00
Nicolas Tsiftes
eba64bdc5e Be more explicit with the relationship between inheritance between MSP430 families. 2012-01-09 14:55:45 +01:00
Niclas Finne
cdfa8708e3 * Added f2xxx for two series (for example z1)
* f1xxx is baseline and always included
* Cleaned up the names of uart and spi (no x in names)
* Updated SPI configuration for WiSMote
2012-01-09 14:54:57 +01:00
Niclas Finne
f4f84ffca4 Updated SPI config for faster SPI, split msp430/clock/spi into separate versions for MSP430/MSP430X 2012-01-09 14:54:01 +01:00
Niclas Finne
09082f02fe Changed clock_delay to use the nop instruction 2012-01-09 14:49:39 +01:00
Niclas Finne
cd4be4927a Fixed quick dco sync to also work with mspgcc 2012-01-09 14:41:42 +01:00
Niclas Finne
708f9d77d2 Corrected timing for higher CPU speed 2012-01-09 14:41:36 +01:00
Niclas Finne
05b10eb9ce Initial WiSMote port based on code from Arago Systems. 2012-01-09 12:25:06 +01:00
Niclas Finne
367c82a5ab added compiler flags and macros for IAR and mspgcc 4.4.5 compilers 2012-01-09 12:24:33 +01:00
Fredrik Osterlind
2644057fb2 using dma by default 2011-12-21 10:53:18 +01:00
Niclas Finne
bf299b1a07 Fixed splhigh/splx for the IAR compiler 2011-09-27 22:51:28 +02:00
Joakim Eriksson
5b1d9617c4 moved io and signal and IAR-GCC checks from driver files into contiki include file 2011-09-26 10:38:41 +02:00
Joakim Eriksson
95dde73618 fixed Sky platform for IAR compiler 2011-09-11 17:18:02 +02:00