Commit Graph

139 Commits

Author SHA1 Message Date
David Sidrane bc81339a68 Update stm32 to uses NuttX IRQ API changes 2017-09-29 10:13:51 -04:00
Daniel Agar 0da2dca8c1 drivers remove device _debug_enabled 2017-09-25 10:30:22 -04:00
Daniel Agar 58268c832c drivers remove extra semicolons 2017-09-16 21:29:52 +01:00
Daniel Agar 79869c848f drivers fix missing field initializers 2017-09-16 21:29:52 +01:00
Karl Schwabe 6d1aa4cad2 Bugfix: corrects the ARR calculation for the LED PWM timer
The calculation of the ARR on the LED PWM timer did not subtract 1
from the timer period calculation to get the ARR value.
2017-09-14 04:10:41 -10:00
Karl Schwabe 38a4c1e90b Bugfix: corrects the ARR calculation for the PWM timer
The calculation of the ARR on the PWM timer did not subtract 1
from the timer period calculation to get the ARR value.
2017-09-13 08:25:06 -10:00
David Sidrane 2ef472d796 drv_led_pwm:Use hardware to support active hight or active low LED
Use the timer's polarity control bits to enable active low
   drive as apposed to inverting the counts.
2017-08-26 03:44:59 -10:00
David Sidrane f13682223a Added FMUv5 System Power related system_power.msg fields
voltage3V3_v - the sensor 3.3V voltage rail
   v3v3_valid   - the value of voltage3V3_v  may be 0. This
                  field is a 1 when the HW provides voltage3V3_v

   brick_valid - is now a bit mask. A 1 in the postion inticate the
                 Power controler HW has a valid supply voltage
                 present (in V window) on that priority
                 (channel V1..Vn).
                 The mapping is formed by 1<<battery_status.msg.priority
                 or using the manifest constanst BRICKn_VALID_MASK

   usb_vaild - is now indicated from the Power controler HW or
               the usb_connected if Power controler is
               not present.

   brick_valid == 0 and usb_vaild = 1 implies the FMU is powered
   from USB only

   brick_valid != 0  and usb_vaild = 1 implies the FMU is powered
   from the higest priority brick, providing a 1 bit in brick_valid
   and from USB
2017-07-17 21:02:50 -10:00
Simone Guscetti ada48571d7 fmu-v5: fix timer config 2017-07-17 21:02:50 -10:00
David Sidrane 4349f49610 PX4 System:Expunge the nuttx adc structure from the system
This PR is preliminary ground work for FMUv5.

   PX4 does not use the NuttX adc driver. But used the same format
   for the data returned by the nuttx ADC driver.

   There was a fixme:in src/platforms/px4_adc.h "this needs to be
   a px4_adc_msg_s type" With this PR the need for
   src/platforms/px4_adc.h goes away as the driver drv_adc.h now
   describes the px4_adc_msg_t.
2017-07-17 22:28:29 +02:00
Beat Küng 16740dd5cd io timers: fix some typos 2017-07-14 11:57:11 +02:00
David Sidrane 3c62f7a3eb stm32:drv_input_capture bug fixes.
Filter for channel 4 was modifying channel 1
   capture and overflow reads were using wrong paramaters
   in macros and addressing junk in memory.
   up_input_capture_get_filter was shifing results the wrong way.
2017-05-17 08:34:57 +02:00
David Sidrane a15b8565ef Removed wrong comment 2017-05-17 08:34:57 +02:00
David Sidrane f7835a8677 io_timer driver:Only support capture if DIRECT_INPUT_TIMER_CHANNELS > 0
This removes the unused input capture capabilities from the px4io
   and saves 128 bytes of ram.
2017-05-02 07:40:50 +02:00
David Sidrane b885fd97f6 oneshot:trigger exit early in no chan in oneshot 2017-04-21 08:32:33 +02:00
Mohammed Kabir 0a5ada9e02 stm32 : formatting 2017-04-13 20:21:40 +02:00
Mohammed Kabir 3dee42b5ca stm32 : deconflict pwm_get_rate_group from all other timer modes 2017-04-13 20:21:40 +02:00
Mohammed Kabir 6d3c16a35b camera_trigger : cleanup pwm interface 2017-04-13 20:21:40 +02:00
Mohammed Kabir 704de4f88f stm32 : deinit trigger pins properly 2017-04-13 20:21:40 +02:00
Mohammed Kabir 82a1bd83bc stm32 : add new interface for PWM-based camera_trigger 2017-04-13 20:21:40 +02:00
David Sidrane 8e217b0287 bugfix:drv_io_timer properly initialize non-contiguous timer channels
This fixes the issue with initializing channels 5,6 without
  channels 1-4.

  The code assumed all timers actions were in order to be
  initialized. This is not the case. This commit fixes that
  bad assumption by not stopping the configuration on the
  first action entry with a base == 0, but processing all
  entries with non-zero base.
2017-04-06 12:20:45 +02:00
David Sidrane 5abdb8fbe9 Fixed spelling - onshot->oneshot 2017-03-23 08:28:15 +01:00
David Sidrane 75376b7793 Bugfix:Allow mode switch on a free timer 2017-03-23 08:28:15 +01:00
David Sidrane 11191e54e0 use io_timer_set_PWM_mode not direct reg 2017-03-23 08:28:15 +01:00
David Sidrane d21c44704d Propgate any errors in setting the rate up.
Since the Onshot<->PWM mode is changed based on rate. The
 this signale the higher layers that the operation is invalid

 test case:
   fmu task mode_pwm2cap2
   pwm oneshot -m 0xf -g 0 -d /dev/pwm_output0

   should fail, because all the channels in the group are
   not in the same mode.
2017-03-23 08:28:15 +01:00
David Sidrane f5bc3dbc4e drv_io_timer Support OneShot
1) Updated copyright
  2) Defined BOARD overrideable BOARD_PWM_FREQ and BOARD_ONSHOT_FREQ
     Not recogmended but allow experimentation
  3) Solved the support for BOARD_PWM_DRIVE_ACTIVE_LOW using
     the Polarity control bits as apposed to the negation of
     the ARR.
  4) Added a cache for getting a timers channels. This is static
     and benifits from the qucik response.
  5) Added a function to realocate all channes in a given timer
     from one mode to another.
  6) Removed the frequecy table in favor of the intended use of the
     channel mode set. At it is the way to determine the mode of a
     channel. Or in onshot's case a timers's complete set channels.
  7) Added 2 lowlevel mode changing functions:
     io_timer_set_oneshot_mode and io_timer_set_PWM_mode
     that encapsalate the changes in mode to one place
     in the code.
  8) Added io_timer_trigger (the up_pwm_update) with low
     latancy timer to time in updating.
  9) io_timer_set_rate - use sets to enforce all or none
     rules for switching  PWM<->OneShot.
     Onshot is entered using the very approriate rate of 0.
     Only deltas will change the HW state.
2017-03-23 08:28:15 +01:00
David Sidrane 96db91c468 drv_io_timer Add simplified Oneshot API
1) Define IOTimerChanMode_OneShot
   2) Added detailed commnent on .clock_freq and how it is used
   3) Added single additional API point in support of Onshot mode
      io_timer_trigger - That trigger all timer's channels in Oneshot
      mode to fire the oneshots with updated values.
2017-03-23 08:28:15 +01:00
David Sidrane 30c8e6efac drv_pwm_servo provide the simplified interface for OneShot
1) Validate timer paramater before using it.
  2) Allow rate of 0 to enter Oneshot mode
     At first blush this seamed like a hack, but at Mark
     pointed out to me, Onshot PWM does not have a rate
     So this is a realy a clever and beautiful simplification
     on his part!
  3) Exposes up_pwm_update that runs io_timer_trigger
     Which trigger all timer's channels in Oneshot mode to
     fire the oneshots with updated values.
2017-03-23 08:28:15 +01:00
Mark Whitehorn f7f12759cd Revert "add timer validation call"
This reverts commit 30fe2aa4fb8c099028fd5ca4f50940e88eddbb08.
2017-03-23 08:28:15 +01:00
Mark Whitehorn bbebf980d8 add timer validation call 2017-03-23 08:28:15 +01:00
Mark Whitehorn dd25366b86 clean up timer_set_rate and add advice on hacking counter frequency 2017-03-23 08:28:15 +01:00
Mark Whitehorn 2d5588ae02 simplify oneshot mode selection; use zero PWM rate as indicator
cleanup and remove unused (new) params
2017-03-23 08:28:15 +01:00
Mark Whitehorn aa9fbbedd5 add oneshot mode capability
change fmu to task

increase fmu_servo task priority to max and enable true oneshot

use lowest FMU priority which minimizes jitter

constrain oneshot updates to control group 0 events
2017-03-23 08:28:15 +01:00
Daniel Agar adbe38e86b astyle src/drivers/stm32 2017-01-29 01:18:32 +01:00
David Sidrane 26b1e1fe0c Use HW independant overrideable defines to condition ADC V5 sensing & publishing
Use ADC_SCALED_V5_SENSE as apposed to legasy ADC_5V_RAIL_SENSE to populate
    voltage5V_v
    Then Scale the DN based on an overridable ADC_V5_V_FULL_SCALE value
2017-01-21 11:45:36 +01:00
David Sidrane d42f8f4745 BugFix:Prevent drv_led_pwm passing a value of 0 to px4_arch_configgpio
This prevents the meta value of 0 => not used from being passed to
  px4_arch_configgpio. As this would map to PORTA|PIN0 and is not
  the intended configuration.
2017-01-19 22:18:04 +01:00
Vlad Radulescu ec104bb7ac Corrected a tiny spelling mistake and modifed the PPM_MIN_CHANNELS check so it accepts a minimum of 5 channels. It seems that was the initial intention. 2017-01-17 23:40:31 -08:00
David Sidrane 0baab8263b Fix the LED PWM support for non shared timers
This is the fixes https://github.com/PX4/Firmware/issues/5710
  by adding 2 concepts.

  1) Allowing a board to define BOARD_HAS_SHARED_PWM_TIMERS
     in this case the io_timeris will be initalized as the
     led_pwm_timers  - there is an assumptionm that the
     number of io_timers == the number of led_pwm timers

  2) Allowing a board to define BOARD_LED_PWM_RATE
     To set an alternate frequency

  Future expansion will require:
  1) The ability to have a config with both the I2C RGB LED and
     PWM RGB LED drivers loaded.
  2) The higher level driver to create  multiple instances of the
     /dev/rgbld, to support internal and  external User facing
     RGB LED as supported in FMUv5
2016-12-21 08:34:22 +01:00
David Sidrane 3f64bf81f3 RGB LED cleanup
Removed dead code and magic numbers
  Defined the RGB LED to support 2 timers
2016-12-21 08:34:22 +01:00
David Sidrane d8580d39b9 Honor Micro hal and new Nuttx Loging API 2016-12-21 08:34:20 +01:00
David Sidrane ddb9bc3242 Honor micro hal 2016-12-21 08:34:20 +01:00
David Sidrane 4d17467590 Interim fix avoid using params before initialized
This is a Interim fix to avoid using params before initialized.

The Long term fix will be:
1) Not play the startup tone on start but allow tones to be generated from other invocations (i.e error conditions)
2) Add a command to tone alam to have it read a parameter, after parameter initialization, in the init script. If that parameter is on then sound the startup tone and further tones will be enabled. If it is off all further tones will be disabled.

The new parameter will not be of the class circuit breaker (not named ) as is is not an absolute control of the tone alarm.
2016-12-20 14:16:04 +01:00
Dennis Shtatnov bf9a1c5a18 Removing alternative io timer rate for CF2 2016-11-05 11:06:43 +01:00
David Sidrane 2d451991af PX4 System change to Remove #ifdefs from the IO timers
Update the comment, to explain how to achive a different perescale
   value.

   Added PX4_IO_TIMER_ALTERNATE_RATE one board agnostic ifdef
   PX4_IO_TIMER_ALTERNATE_RATE that is non board specific.

   N.B.  I would like to eliminate PX4_IO_TIMER_ALTERNATE_RATE
   as well, but I need crazyflie HW to validate that the startup
   script can just set the rate on the PWM to 3921 fast enough to
   not effect the motors.
2016-11-05 11:06:43 +01:00
Henry Zhang 53b4996379 MindPX: Use TIM14 CH1 for tone alarm output. 2016-10-29 10:56:32 +02:00
Julian Oes 78b0d1a01f tap: add landing gear capability
This configures the PWM output for the landing gear.
2016-10-20 23:17:05 +02:00
Julian Oes 8ff237c69f Remove size optimization for individual modules
It makes more sense to set the optimization flags on a platform basis
instead of individually for each module. This allows for different
optimization options for SITL, NuttX, Snapdragon, etc.
2016-09-30 08:11:51 +02:00
Dennis Shtatnov 83105fca95 CF2: Buzzer 2016-09-19 11:54:53 +02:00
Tim Dyer b65ff53b00 Initial build for Crazyflie 2.0
Working crazyflie firmware build

* Console on USART3
* Could not disable building PX4IO firmware, currently commented out

Don't build PX4IO firmware if the board doesn't ask for it

Added crazyflie motor driver

Fixed wrong register

CLK_SEL is in PWR_MGMT_1

Initial I2C/SPI MPU9250 device

* Tested with I2C
* Need to add error checking
* Intermittent crash on stop call

Working ak8963 mag driver

Functional lps25h driver. Work in progress.

Works well enough to probe and allow sensors task to start.

Added serial port test module

HACK! Get sensors module working

Set crazyflie PWM range

Extend baudrate for Crazyflie's NRF radio

Added dummy tone alarm to allow for init

Added autostart script for Crazyflie
2016-09-04 19:12:08 +02:00
David Sidrane a36f392b58 Rework PWM LED Driver 2016-07-10 11:46:47 +02:00