summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas Schodet2008-03-08 19:31:41 +0100
committerNicolas Schodet2008-03-08 19:31:41 +0100
commit93cb4b805159d9e4e993d897dfd3ec47e4f21cf1 (patch)
tree5b8c554a379270d7d7eca5d2c28abcd30e6a28e3
parentf19d487349a9746fbb44c85d08e5550cb66d6190 (diff)
* analog/motor-power-avr/src:
- right channel source files autogeneration.
-rw-r--r--analog/motor-power-avr/src/Makefile17
-rw-r--r--analog/motor-power-avr/src/mp_pwm_R_.c206
-rw-r--r--analog/motor-power-avr/src/mp_pwm_R_.h37
3 files changed, 12 insertions, 248 deletions
diff --git a/analog/motor-power-avr/src/Makefile b/analog/motor-power-avr/src/Makefile
index 37e67d18..cd76c623 100644
--- a/analog/motor-power-avr/src/Makefile
+++ b/analog/motor-power-avr/src/Makefile
@@ -1,6 +1,5 @@
BASE = ../../../digital/avr
-PROGS = mp
-HOST_PROGS = test_mp
+AVR_PROGS = mp
mp_SOURCES = main.c mp_pwm_L_.c mp_pwm_R_.c mp_pwm_LR_.c adc.c
MODULES = adc proto uart utils math/fixed
CONFIGFILE = avrconfig.h
@@ -13,6 +12,14 @@ HOST_LIBS = -lm
include $(BASE)/make/Makefile.gen
-src:
- sed -e 's/_L_/_R_/g' mp_pwm_L_.c > mp_pwm_R_.c
- sed -e 's/_L_/_R_/g' mp_pwm_L_.h > mp_pwm_R_.h
+SED_L_R = sed -e 's/_L_/_R_/g'
+EXTRA_CLEAN_FILES = mp_pwm_R_.c mp_pwm_R_.h
+
+mp_pwm_R_.c: mp_pwm_L_.c
+ ${SED_L_R} $< > $@
+
+mp_pwm_R_.h: mp_pwm_L_.h
+ ${SED_L_R} $< > $@
+
+# Extra dependencies for bootstrap.
+main.c mp_pwm_LR_.c mp_pwm_R_.c: mp_pwm_R_.h
diff --git a/analog/motor-power-avr/src/mp_pwm_R_.c b/analog/motor-power-avr/src/mp_pwm_R_.c
deleted file mode 100644
index a66645b1..00000000
--- a/analog/motor-power-avr/src/mp_pwm_R_.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/* "mp_pwm_R_.c"
- * this file contains routines for managing the _R_ channel of mp board
- * the command sed -e 's/_R_/_R_/g' can be used for generating the _R_ file
- */
-
-#include "mp_pwm_LR_.h"
-#include "mp_pwm_R_.h"
-#include "io.h"
-
-// static variables
-static uint8_t state_R_;
-static uint8_t state_R_cmd;
-static uint8_t pwm_R_;
-
-// Le PC, afin de faire le saut calculé
-//#define PC PC_REG
-
-// init
-void init_pwm_R_ (void) {
- state_R_cmd = CMD_STATE_HIGH_Z;
- pwm_R_ = 0x00;
-
- // Set outputs to 0 (ie HIGH_Z)
- _R_AL_0;
- _R_AH_0;
- _R_BL_0;
- _R_BH_0;
-
- // status LEDs
- _R_LED0_0;
- _R_LED1_0;
-
- // Set IOs as outputs
- _R_ACTIVATE_OUTPUTS;
-}
-
-// PWM rising edge on timer overflow IT
-ISR(OVF_R_vect) {
- // programs the state which is ordered by the core code
- state_R_ = state_R_cmd;
-
- // the falling of the other side may have delayed a few our IT
- OCR_R_ = pwm_R_;
-
- //PC = PC + state_R_; // j'aurais bien aimé faire un calculated jump
-
- switch (state_R_)
- {
- case CMD_STATE_DIR_0:
- // dir 0
- //rise_R_label0:
- _R_BH_0;
- _R_BL_1;
- _R_AL_0;
- _R_AH_1;
- sei(); // set back interrupts
-
- // Display CMD_STATE on LEDs
- _R_LED0_1;
- _R_LED1_0;
-
- break;
-
- case CMD_STATE_DIR_1:
- // dir 1
- //org rise_R_label0 + 0x10
- _R_AH_0;
- _R_AL_1;
- _R_BL_0;
- _R_BH_1;
- sei(); // set back interrupts
-
- // Display CMD_STATE on LEDs
- _R_LED0_0;
- _R_LED1_1;
-
- break;
-
- case CMD_STATE_BRAKE:
- // switch to forced low steady state
- //org rise_R_label0 + 0x20
- _R_AH_0;
- _R_AL_1;
- _R_BH_0;
- _R_BL_1;
- sei(); // set back interrupts
-
- // Display CMD_STATE on LEDs
- _R_LED0_0;
- _R_LED1_0;
-
- break;
-
- case CMD_STATE_HIGH_Z:
- default:
- // switch to high impedance steady state
- //org rise_R_label0 + 0x30
- _R_AL_0;
- _R_AH_0;
- _R_BL_0;
- _R_BH_0;
- sei(); // set back interrupts
-
- // Display CMD_STATE on LEDs
- _R_LED0_1;
- _R_LED1_1;
-
- break;
-
- }
-}
-
-// PWM falling edge on timer compare IT
-ISR(COMP_R_vect) {
- // PC = PC + state_R_; TODO :saut calculé ?
-
- switch (state_R_)
- {
- case CMD_STATE_DIR_0:
- // in the case we are in 0x00 direction
- //fall_R_label0:
- _R_AH_0;
- _R_AL_1;
- sei(); // set back interrupts
-
- // Display CMD_STATE on LEDs
- _R_LED0_0;
- _R_LED1_0;
-
- break;
-
- case CMD_STATE_DIR_1:
- // in the case we are in 0x10 direction
- //org fall_R_label0 + 0x10
- _R_BH_0;
- _R_BL_1;
- sei(); // set back interrupts
-
- // Display CMD_STATE on LEDs
- _R_LED0_0;
- _R_LED1_0;
-
- break;
-
- case CMD_STATE_BRAKE:
- // forced low
- //org fall_R_label0 + 0x20
- sei(); // set back interrupts
- break;
-
- case CMD_STATE_HIGH_Z:
- default:
- // left high Z
- //org fall_R_label0 + 0x30
- sei(); // set back interrupts
- break;
- }
-}
-
-// overcurrent detected by comparators
-ISR(ILIM_R_vect) {
- _R_AL_0;
- _R_AH_0;
- _R_BL_0;
- _R_BH_0;
- sei(); // set back interrupts
- // following line orders to keep high Z state when faling edge will arrive
- state_R_ = CMD_STATE_HIGH_Z;
- return;
-}
-
-// starts the motor
-void start_motor_R_ (uint8_t pwmspeed, uint8_t direction) {
- // checking direction
- if (direction)
- {
- state_R_cmd = CMD_STATE_DIR_1;
- }
- else
- {
- state_R_cmd = CMD_STATE_DIR_0;
- }
-
- // setting pwm value
- if (pwmspeed == 0)
- {// brake
- state_R_cmd = CMD_STATE_BRAKE;
- pwm_R_ = 0;
- }
- else
- {
- // adding offset
- pwmspeed = pwmspeed + PWM_OFFSET_LR_;
-
- // clamp the value
- UTILS_BOUND(pwmspeed, PWM_MIN_LR_, PWM_MAX_LR_);
-
- // Apply the value
- pwm_R_ = pwmspeed;
- }
-}
-
-// puts motor in high Z
-void stop_motor_R_ (void) {
- state_R_cmd = CMD_STATE_HIGH_Z;
-}
diff --git a/analog/motor-power-avr/src/mp_pwm_R_.h b/analog/motor-power-avr/src/mp_pwm_R_.h
deleted file mode 100644
index 6819e4ab..00000000
--- a/analog/motor-power-avr/src/mp_pwm_R_.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef mp_pwm_R__h
-#define mp_pwm_R__h
-/* mp_pwm_R_.h */
-/* {{{
- *
- * Copyright (C) 2008 Pierre Prot
- *
- * APBTeam:
- * Web: http://apbteam.org/
- * Email: team AT apbteam DOT org
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * }}} */
-
-
-void init_pwm_R_ (void);
-void rise_R_ (void);
-void fall_R_ (void);
-void ovc_R_ (void);
-void start_motor_R_ (uint8_t pwmspeed, uint8_t direction);
-void stop_motor_R_ (void);
-
-
-#endif /* mp_pwm_R__h */