From 6bd82931ea6484568661c977cea1bfd0adbdafeb Mon Sep 17 00:00:00 2001 From: James Date: Tue, 8 Jan 2019 22:10:06 -0800 Subject: [PATCH 01/14] add version and model changes, TODO: real model name in future --- CHANGELOG | 5 ++++- library/Makefile | 2 +- library/include/rc/model.h | 6 ++++-- library/include/rc/version.h | 6 +++--- library/src/model.c | 8 ++++++++ 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 2ee23a6c..58bbdefb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +1.1.0 + * add support for hamster + 1.0.4 * fix missing stddef.h include in i2c.h * add kmartin36's PRU encoder robustness improvement @@ -187,4 +190,4 @@ 0.1.0 * installs on Blue as well and Black -// indentation is with spaces to allow copy/paste into debian/changelog \ No newline at end of file +// indentation is with spaces to allow copy/paste into debian/changelog diff --git a/library/Makefile b/library/Makefile index df460f2d..81075290 100644 --- a/library/Makefile +++ b/library/Makefile @@ -5,7 +5,7 @@ BUILDDIR := build INCLUDEDIR := include SHORTNAME := librobotcontrol.so SONAME := librobotcontrol.so.1 -FULLNAME := librobotcontrol.so.1.0.4 +FULLNAME := librobotcontrol.so.1.1.0 TARGET := $(LIBDIR)/$(FULLNAME) RC_VAR_DIR := var/lib/robotcontrol diff --git a/library/include/rc/model.h b/library/include/rc/model.h index f64b1b07..dbf0b301 100644 --- a/library/include/rc/model.h +++ b/library/include/rc/model.h @@ -50,7 +50,9 @@ typedef enum rc_model_t{ MODEL_RPI0_W, MODEL_RPI_CM, MODEL_RPI_CM3, - MODEL_PC + MODEL_PC, + MODEL_BB_AM57, + MODEL_BB_AM57_RC, } rc_model_t; @@ -101,4 +103,4 @@ void rc_model_category_print(void); #endif // RC_MODEL_H -/** @} end group Model*/ \ No newline at end of file +/** @} end group Model*/ diff --git a/library/include/rc/version.h b/library/include/rc/version.h index 020a7981..5040af53 100644 --- a/library/include/rc/version.h +++ b/library/include/rc/version.h @@ -19,8 +19,8 @@ extern "C" { #define RC_LIB_VERSION_MAJOR 1 -#define RC_LIB_VERSION_MINOR 0 -#define RC_LIB_VERSION_PATCH 4 +#define RC_LIB_VERSION_MINOR 1 +#define RC_LIB_VERSION_PATCH 0 #define RC_LIB_VERSION_HEX ((RC_LIB_VERSION_MAJOR << 16) | \ (RC_LIB_VERSION_MINOR << 8) | \ (RC_LIB_VERSION_PATCH)) @@ -58,4 +58,4 @@ void rc_version_print(void); #endif //RC_VERSION_H -/** @} end group version*/ \ No newline at end of file +/** @} end group version*/ diff --git a/library/src/model.c b/library/src/model.c index 0ddcd55d..92c1efdd 100644 --- a/library/src/model.c +++ b/library/src/model.c @@ -91,6 +91,14 @@ static void __check_model(void) current_model = MODEL_BB_BLUE; return; } + if(strcmp(c, "TI AM57xx BeagleBone")==0){ + current_model = MODEL_BB_AM57; + return; + } + if(strcmp(c, "TI AM57xx BeagleBone RoboticsCape")==0){ + current_model = MODEL_BB_AM57_RC; + return; + } return; } From 83a7a3b2a8b907bc8dc956b50c7da9e6c4571778 Mon Sep 17 00:00:00 2001 From: Jason Kridner Date: Thu, 25 Jul 2019 23:40:56 +0000 Subject: [PATCH 02/14] Break before fixing --- library/src/pru/encoder_pru.c | 4 ++++ library/src/pru/pru.c | 2 ++ library/src/pru/servo.c | 8 ++++++++ pru_firmware/fw/am335x-pru0-rc-encoder-fw | Bin 36040 -> 34528 bytes pru_firmware/fw/am335x-pru1-rc-servo-fw | Bin 35164 -> 33380 bytes pru_firmware/src/main_pru0.c | 1 + pru_firmware/src/main_pru1.c | 1 + 7 files changed, 16 insertions(+) diff --git a/library/src/pru/encoder_pru.c b/library/src/pru/encoder_pru.c index f2e72032..aa00a249 100644 --- a/library/src/pru/encoder_pru.c +++ b/library/src/pru/encoder_pru.c @@ -22,6 +22,7 @@ static int init_flag=0; int rc_encoder_pru_init(void) { + return 0; // until we fix for AM5 int i; // map memory shared_mem_32bit_ptr = rc_pru_shared_mem_ptr(); @@ -58,6 +59,7 @@ int rc_encoder_pru_init(void) void rc_encoder_pru_cleanup(void) { + return; // until we fix for AM5 // zero out shared memory if(shared_mem_32bit_ptr != NULL){ shared_mem_32bit_ptr[ENCODER_MEM_OFFSET]=0; @@ -71,6 +73,7 @@ void rc_encoder_pru_cleanup(void) int rc_encoder_pru_read(void) { + return 0; // until we fix for AM5 if(shared_mem_32bit_ptr==NULL || init_flag==0){ fprintf(stderr, "ERROR in rc_encoder_pru_read, call rc_encoder_pru_init first\n"); return -1; @@ -81,6 +84,7 @@ int rc_encoder_pru_read(void) int rc_encoder_pru_write(int pos) { + return 0; // until we fix for AM5 if(shared_mem_32bit_ptr==NULL || init_flag==0){ fprintf(stderr, "ERROR in rc_encoder_pru_write, call rc_encoder_pru_init first\n"); return -1; diff --git a/library/src/pru/pru.c b/library/src/pru/pru.c index b7ec26f0..189ec2b1 100644 --- a/library/src/pru/pru.c +++ b/library/src/pru/pru.c @@ -36,6 +36,7 @@ static volatile unsigned int* shared_mem_32bit_ptr = NULL; int rc_pru_start(int ch, const char* fw_name) { + return 0; // until we fix for AM5 int fd, ret; char buf[64]; @@ -151,6 +152,7 @@ volatile uint32_t* rc_pru_shared_mem_ptr(void) int rc_pru_stop(int ch) { + return 0; // until we update for AM5 int fd, ret; char buf[64]; diff --git a/library/src/pru/servo.c b/library/src/pru/servo.c index e9b3c699..508e67ff 100644 --- a/library/src/pru/servo.c +++ b/library/src/pru/servo.c @@ -29,6 +29,7 @@ static int esc_min_us = RC_ESC_DEFAULT_MIN_US; int rc_servo_init(void) { + return 0; // until we update for AM5 int i; // start gpio power rail pin if(rc_gpio_init(GPIO_POWER_PIN, GPIOHANDLE_REQUEST_OUTPUT)==-1){ @@ -74,6 +75,7 @@ int rc_servo_init(void) void rc_servo_cleanup(void) { + return 0; // until we update for AM5 int i; // zero out shared memory if(shared_mem_32bit_ptr != NULL){ @@ -92,6 +94,7 @@ void rc_servo_cleanup(void) int rc_servo_power_rail_en(int en) { + return 0; // until we update for AM5 if(init_flag==0){ fprintf(stderr, "ERROR in rc_servo_power_rail_en, call rc_servo_init first\n"); return -1; @@ -105,6 +108,7 @@ int rc_servo_power_rail_en(int en) int rc_servo_set_esc_range(int min, int max) { + return 0; // until we update for AM5 if(min<1 || max<2){ fprintf(stderr, "ERROR in rc_servo_set_esc_range, in and max values must be positive\n"); return -1; @@ -121,6 +125,7 @@ int rc_servo_set_esc_range(int min, int max) int rc_servo_send_pulse_us(int ch, int us) { + return 0; // until we update for AM5 int i, ret; uint32_t num_loops; // Sanity Checks @@ -170,6 +175,7 @@ int rc_servo_send_pulse_us(int ch, int us) int rc_servo_send_pulse_normalized(int ch, double input) { + return 0; // until we update for AM5 int us; if(input<(-1.5-TOL) || input>(1.5+TOL)){ fprintf(stderr,"ERROR in rc_servo_send_pulse_normalized, normalized input must be between -1.5 & 1.5\n"); @@ -184,6 +190,7 @@ int rc_servo_send_pulse_normalized(int ch, double input) int rc_servo_send_esc_pulse_normalized(int ch, double input) { + return 0; // until we update for AM5 int us; if(input<(-0.1-TOL) || input>(1.0+TOL)){ fprintf(stderr,"ERROR in rc_servo_send_esc_pulse_normalized, normalized input must be between -0.1 & 1.0\n"); @@ -197,6 +204,7 @@ int rc_servo_send_esc_pulse_normalized(int ch, double input) int rc_servo_send_oneshot_pulse_normalized(int ch, double input) { + return 0; // until we update for AM5 int us; if(input<(-0.1-TOL) || input>(1.0+TOL)){ fprintf(stderr,"ERROR in rc_servo_send_oneshot_pulse_normalized, normalized input must be between -0.1 & 1.0\n"); diff --git a/pru_firmware/fw/am335x-pru0-rc-encoder-fw b/pru_firmware/fw/am335x-pru0-rc-encoder-fw index 7e3e5ed68954fc31bf8b258548658d9b4c163a41..791bc404da7461d0c36ad4e1350d3b7927eb8a8e 100644 GIT binary patch delta 8360 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 diff --git a/pru_firmware/fw/am335x-pru1-rc-servo-fw b/pru_firmware/fw/am335x-pru1-rc-servo-fw index d8f5b0fb4d4412178022859ecbba64eaab09a116..1154250e13610c7ae50d6d09f05937cc9626a67b 100644 GIT binary patch delta 7608 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 Z^LdF^{YZ6b4Swj4x33k>3JT}${{T6uhWG#g delta 8977 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 Date: Fri, 26 Jul 2019 03:33:08 +0000 Subject: [PATCH 03/14] Add BeagleBone AI model --- library/Makefile | 2 +- library/include/rc/model.h | 6 ++++-- library/include/rc/version.h | 4 ++-- library/src/model.c | 12 +++++++++++- pru_firmware/Makefile | 2 ++ 5 files changed, 20 insertions(+), 6 deletions(-) diff --git a/library/Makefile b/library/Makefile index df460f2d..0f11d611 100644 --- a/library/Makefile +++ b/library/Makefile @@ -5,7 +5,7 @@ BUILDDIR := build INCLUDEDIR := include SHORTNAME := librobotcontrol.so SONAME := librobotcontrol.so.1 -FULLNAME := librobotcontrol.so.1.0.4 +FULLNAME := librobotcontrol.so.1.0.5 TARGET := $(LIBDIR)/$(FULLNAME) RC_VAR_DIR := var/lib/robotcontrol diff --git a/library/include/rc/model.h b/library/include/rc/model.h index f64b1b07..f14b95bd 100644 --- a/library/include/rc/model.h +++ b/library/include/rc/model.h @@ -50,7 +50,9 @@ typedef enum rc_model_t{ MODEL_RPI0_W, MODEL_RPI_CM, MODEL_RPI_CM3, - MODEL_PC + MODEL_PC, + MODEL_BB_AI, + MODEL_BB_AI_RC } rc_model_t; @@ -101,4 +103,4 @@ void rc_model_category_print(void); #endif // RC_MODEL_H -/** @} end group Model*/ \ No newline at end of file +/** @} end group Model*/ diff --git a/library/include/rc/version.h b/library/include/rc/version.h index 020a7981..fc29a1b1 100644 --- a/library/include/rc/version.h +++ b/library/include/rc/version.h @@ -20,7 +20,7 @@ extern "C" { #define RC_LIB_VERSION_MAJOR 1 #define RC_LIB_VERSION_MINOR 0 -#define RC_LIB_VERSION_PATCH 4 +#define RC_LIB_VERSION_PATCH 5 #define RC_LIB_VERSION_HEX ((RC_LIB_VERSION_MAJOR << 16) | \ (RC_LIB_VERSION_MINOR << 8) | \ (RC_LIB_VERSION_PATCH)) @@ -58,4 +58,4 @@ void rc_version_print(void); #endif //RC_VERSION_H -/** @} end group version*/ \ No newline at end of file +/** @} end group version*/ diff --git a/library/src/model.c b/library/src/model.c index 0ddcd55d..fa5d7097 100644 --- a/library/src/model.c +++ b/library/src/model.c @@ -63,6 +63,14 @@ static void __check_model(void) current_category = CATEGORY_BEAGLEBONE; + if(strcmp(c, "BeagleBoard.org BeagleBone AI")==0){ + current_model = MODEL_BB_AI; + return; + } + if(strcmp(c, "BeagleBoard.org BeagleBone AI RoboticsCape")==0){ + current_model = MODEL_BB_AI_RC; + return; + } if(strcmp(c, "TI AM335x BeagleBone Black")==0){ current_model = MODEL_BB_BLACK; return; @@ -178,6 +186,8 @@ void rc_model_print(void) switch(model){ caseprint(MODEL_UNKNOWN) + caseprint(MODEL_BB_AI) + caseprint(MODEL_BB_AI_RC) caseprint(MODEL_BB_BLACK) caseprint(MODEL_BB_BLACK_RC) caseprint(MODEL_BB_BLACK_W) @@ -222,4 +232,4 @@ void rc_model_category_print(void) return; } -#undef caseprint \ No newline at end of file +#undef caseprint diff --git a/pru_firmware/Makefile b/pru_firmware/Makefile index 1ff75458..0b91716e 100644 --- a/pru_firmware/Makefile +++ b/pru_firmware/Makefile @@ -11,6 +11,8 @@ BUILD_DIR := build PRU0_FW := am335x-pru0-rc-encoder-fw PRU1_FW := am335x-pru1-rc-servo-fw +PRU1_0_FW := am57xx-pru1_0-rc-encoder-fw +PRU1_1_FW := am57xx-pru1_1-rc-servo-fw TARGET0 := $(BIN_DIR)/$(PRU0_FW) TARGET1 := $(BIN_DIR)/$(PRU1_FW) From 77b2b8defd317e5624d2a242a9c6d866132f8afd Mon Sep 17 00:00:00 2001 From: Jason Kridner Date: Fri, 26 Jul 2019 05:46:49 +0000 Subject: [PATCH 04/14] Note ADC updated needed --- library/include/rc/adc.h | 28 ++++++++++++++++++++++------ pru_firmware/Makefile | 4 ++-- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/library/include/rc/adc.h b/library/include/rc/adc.h index 33c56445..9a5eb0fa 100644 --- a/library/include/rc/adc.h +++ b/library/include/rc/adc.h @@ -13,17 +13,31 @@ * follows: * * - 1 - Ground - * - 2 - VDD_ADC (1.8V) - * - 3 - AIN0 - * - 4 - AIN1 - * - 5 - AIN2 - * - 6 - AIN3 + * - 2 - VDD_ADC (1.8V) (optional 3.3V on BeagleBone AI) + * - 3 - AIN0 (4 on BeagleBone AI) + * - 4 - AIN1 (6 on BeagleBone AI) + * - 5 - AIN2 (7 on BeagleBone AI) + * - 6 - AIN3 (5 on BeagleBone AI) * * All 8 ADC channels on the Sitara including the 4 listed above can be read * with rc_adc_read_raw(int ch) which returns the raw integer output of the * 12-bit ADC. rc_adc_read_volt(int ch) additionally converts this raw value to * a voltage. * + * On BeagleBone AI, the on-board ADC is replaced with an SMTPE811. The pin + * mapping was done in a way to support touch screens and the channels are + * all swiveled around. The ADC2AI() macro will swivel using this table: + * + * AM3358 - AI + * 0 - 4 + * 1 - 6 + * 2 - 7 + * 3 - 5 + * 4 - 3 + * 5 - 2 + * 6 - 0 + * 7 - -1 (not available on BeagleBone AI) + * * See the rc_test_adc example for sample use case. * * @addtogroup ADC @@ -34,6 +48,8 @@ #ifndef RC_ADC_H #define RC_ADC_H +#define ADC2AI(x) (x==0?4:(x==1?6:(x==2?7:(x==3?5:(x==4?3:(x==5?2:(x==6?0:-1))))))) + #ifdef __cplusplus extern "C" { #endif @@ -94,4 +110,4 @@ double rc_adc_dc_jack(void); #endif // RC_ADC_H -/** @} end group ADC*/ \ No newline at end of file +/** @} end group ADC*/ diff --git a/pru_firmware/Makefile b/pru_firmware/Makefile index 0b91716e..b371ff2b 100644 --- a/pru_firmware/Makefile +++ b/pru_firmware/Makefile @@ -11,8 +11,8 @@ BUILD_DIR := build PRU0_FW := am335x-pru0-rc-encoder-fw PRU1_FW := am335x-pru1-rc-servo-fw -PRU1_0_FW := am57xx-pru1_0-rc-encoder-fw -PRU1_1_FW := am57xx-pru1_1-rc-servo-fw +PRU1_1_FW := am57xx-pru1_1-rc-encoder-fw +PRU2_0_FW := am57xx-pru2_0-rc-servo-fw TARGET0 := $(BIN_DIR)/$(PRU0_FW) TARGET1 := $(BIN_DIR)/$(PRU1_FW) From c5609f21a14e239e859b8da1014f61e22f792128 Mon Sep 17 00:00:00 2001 From: Jason Kridner Date: Fri, 26 Jul 2019 06:04:59 +0000 Subject: [PATCH 05/14] Fix (simplify) LED path --- library/src/led.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/src/led.c b/library/src/led.c index e9cfad74..3df03132 100644 --- a/library/src/led.c +++ b/library/src/led.c @@ -16,7 +16,7 @@ #define unlikely(x) __builtin_expect (!!(x), 0) -#define SYSFS_LED_DIR "/sys/devices/platform/leds/leds/" +#define SYSFS_LED_DIR "/sys/class/leds/" #define BRIGHTNESS_FILE "/brightness" #define MAX_BUF 128 #define NUM_LEDS 11 From 97d99f33f2ebf6f554516169f434e0afb825a1aa Mon Sep 17 00:00:00 2001 From: Jason Kridner Date: Fri, 26 Jul 2019 14:51:33 +0000 Subject: [PATCH 06/14] BeagleBone AI: add PRU firmware --- pru_firmware/Makefile | 38 ++++- pru_firmware/fw/am335x-pru0-rc-encoder-fw | Bin 34528 -> 36072 bytes pru_firmware/fw/am335x-pru1-rc-servo-fw | Bin 33380 -> 33412 bytes pru_firmware/src/main_pru0.c | 1 - pru_firmware/src/main_pru1.c | 1 - pru_firmware/src/main_pru1_1.c | 58 ++++++++ pru_firmware/src/main_pru2_0.c | 50 +++++++ pru_firmware/src/pru1_1-encoder.asm | 123 ++++++++++++++++ pru_firmware/src/pru2_0-servo.asm | 168 ++++++++++++++++++++++ 9 files changed, 436 insertions(+), 3 deletions(-) create mode 100644 pru_firmware/src/main_pru1_1.c create mode 100644 pru_firmware/src/main_pru2_0.c create mode 100644 pru_firmware/src/pru1_1-encoder.asm create mode 100644 pru_firmware/src/pru2_0-servo.asm diff --git a/pru_firmware/Makefile b/pru_firmware/Makefile index b371ff2b..b9636ca1 100644 --- a/pru_firmware/Makefile +++ b/pru_firmware/Makefile @@ -16,9 +16,13 @@ PRU2_0_FW := am57xx-pru2_0-rc-servo-fw TARGET0 := $(BIN_DIR)/$(PRU0_FW) TARGET1 := $(BIN_DIR)/$(PRU1_FW) -TARGETS := $(TARGET0) $(TARGET1) +TARGET2 := $(BIN_DIR)/$(PRU1_1_FW) +TARGET3 := $(BIN_DIR)/$(PRU2_0_FW) +TARGETS := $(TARGET0) $(TARGET1) $(TARGET2) $(TARGET3) LINK_PRU1_FW := $(BUILD_DIR)/pru1-servo.object LINK_PRU0_FW := $(BUILD_DIR)/pru0-encoder.object +LINK_PRU2_0_FW := $(BUILD_DIR)/pru2_0-servo.object +LINK_PRU1_1_FW := $(BUILD_DIR)/pru1_1-encoder.object RM := rm -f -r INSTALL := install -m 755 @@ -69,6 +73,16 @@ $(TARGET1): $(BUILD_DIR)/main_pru1.object $(LINK_PRU1_FW) @mkdir -p $(BIN_DIR) @$(LNKPRU) -i$(PRU_CGT)/lib -i$(PRU_CGT)/include $(LFLAGS) -o $@ $^ $(LINKER_COMMAND_FILE) --library=libc.a $(LIBS) $^ +$(TARGET2): $(BUILD_DIR)/main_pru1_1.object $(LINK_PRU1_1_FW) + @echo 'LD $^' + @mkdir -p $(BIN_DIR) + @$(LNKPRU) -i$(PRU_CGT)/lib -i$(PRU_CGT)/include $(LFLAGS) -o $@ $^ $(LINKER_COMMAND_FILE) --library=libc.a $(LIBS) $^ + +$(TARGET3): $(BUILD_DIR)/main_pru2_0.object $(LINK_PRU2_0_FW) + @echo 'LD $^' + @mkdir -p $(BIN_DIR) + @$(LNKPRU) -i$(PRU_CGT)/lib -i$(PRU_CGT)/include $(LFLAGS) -o $@ $^ $(LINKER_COMMAND_FILE) --library=libc.a $(LIBS) $^ + $(BUILD_DIR)/main_pru0.object: $(SRC_DIR)/main_pru0.c @mkdir -p $(BUILD_DIR) @@ -82,6 +96,18 @@ $(BUILD_DIR)/main_pru1.object: $(SRC_DIR)/main_pru1.c @$(CLPRU) $(INCLUDE) $(CFLAGS) -fe $@ $< +$(BUILD_DIR)/main_pru2_0.object: $(SRC_DIR)/main_pru2_0.c + @mkdir -p $(BUILD_DIR) + @echo 'CC $<' + @$(CLPRU) $(INCLUDE) $(CFLAGS) -fe $@ $< + + +$(BUILD_DIR)/main_pru1_1.object: $(SRC_DIR)/main_pru1_1.c + @mkdir -p $(BUILD_DIR) + @echo 'CC $<' + @$(CLPRU) $(INCLUDE) $(CFLAGS) -fe $@ $< + + $(BUILD_DIR)/pru1-servo.object: $(SRC_DIR)/pru1-servo.asm @mkdir -p $(BUILD_DIR) @echo 'CC $<' @@ -92,6 +118,16 @@ $(BUILD_DIR)/pru0-encoder.object: $(SRC_DIR)/pru0-encoder.asm @echo 'CC $<' @$(CLPRU) $(INCLUDE) $(CFLAGS) -fe $@ $< +$(BUILD_DIR)/pru2_0-servo.object: $(SRC_DIR)/pru2_0-servo.asm + @mkdir -p $(BUILD_DIR) + @echo 'CC $<' + @$(CLPRU) $(INCLUDE) $(CFLAGS) -fe $@ $< + +$(BUILD_DIR)/pru1_1-encoder.object: $(SRC_DIR)/pru1_1-encoder.asm + @mkdir -p $(BUILD_DIR) + @echo 'CC $<' + @$(CLPRU) $(INCLUDE) $(CFLAGS) -fe $@ $< + install: diff --git a/pru_firmware/fw/am335x-pru0-rc-encoder-fw b/pru_firmware/fw/am335x-pru0-rc-encoder-fw index 791bc404da7461d0c36ad4e1350d3b7927eb8a8e..79bd879c06243740b9cece60a4527f8d44b3fe3e 100644 GIT binary patch delta 9465 zcmaKy3w%}8mB#nl=boDj2_Yc?LLek0A%Y-;hdf0RNq8v;N~Z$S7!g6`ozVKKClL|` zR9*+Hb{y17MLTw^-i|WbsiA-!%Sd?!Bz4xugADzSog`xN}F>!(S;Cw6}NUf7#LX?Jn)vuk~o}dKfWVj~^Fd z?4O)Jv%TwUdF|Pe&xbE){uIv6aHJ&gPzvUNj0Z`tz3aMj@EKw=+uRw_0&6XpcXmsv1**)XTO z!aRqxu~oS+!@9w|Lo+uIW-raee3&&fm-K@9VRx9_Jz%=_gsG=V()a~157X>GoD4t( zWBRT_rAj@>QIH8EJyB8vm1UJyvAYVB2W5sYd&6ECsal6^z5RYSXf@d+<4%o+3vy zdvjU+Ez7Mld?hg?7%SRqXsln|s6Ixp#J-?aYB>7OQy57q7K2oMVe};2tfb#x0$GzI z72dy6>N2HeAQ`3iYs+FAh)LLQC~cS}98JC`^FFSz6}Yjn1R?+F`(Qv@G5p zQ;O3256kkktX&;fiqbQ+)nx@*whhlvrt;ny8`nq6V`so9J<}dtR-)zE=Mzd%>c7~y z@=WP*W9XUf4s+){eoEUVOV=qTbSysKSSV9KsA=a(B%f%cylzOCNz6{xoYEmkn-5Sf2 z!NL$^jR(+0E-6P-42XYBe?ms+%W*?*cNxhXDRr%5zFhVU%coX8p9-=ZC9@#=YMbR~ zW=SCPV9>9opfRKbvKXefSUQ%JKpJ5R9UVtXAosukn;gcI8W6-EWWfok*6SE$>Ust1 zN~!O2%$KX5Lvl*xbF84MHS!>2RMlE$Ng%smid^xNNeScym;&DxKZTS)_6M+e4o@ZC zPy9MeHI1Xd@|s)WdXlbPXwiG{EFL`fXAI31IR9 zhrdHiB3ogiCwx08fjj{dJ>fe@3FKLr9GAnLqy*9i)789DRqNmzPxn=$tji3 za}J7sUG9O5ihqMy5=aY!ifut}k{S?iwB;Pt_b~|N1l{Ew7DTN#JLpTtF(ju{J`YML z=so!!WK_^GW=SAV!bI(SpOoN&cD9q+W}dOdpVUbPv6+FKV)4}aB?o=^^aM(#RQ>?| zkjRsd(9%((t!BAHcOlWUFz;)Pl1s7CC7YO!JloE%I82vC2y4jkY+Lm zSch>8#B65#VVE2@$L%SQ^lg}gqvjMyASYmyqvjN7K)eU$0NUB8|G*&gFxIf=DD`Q_ ze7QRZ3=-qt=Tt(iz9VPhj+Pj6^dh*RQs(HzT1o<&TU04?^dh*RQs(GoEA=B=sb-ze zAXBM(S*iR4%GbRe^kqF?H&7~{a~YLdCl!#dOl%H*Hgvx67z-kbgaZ+Q;9V|op7fg!Od&vYrwG6Js&1!tan*;x^aF?HuG4d`Ey0SpVo<;kO?652+Q^psf!IVlZGP!PK4fH9H zEzGn6``5Mjh_?jpf506E_;vCU5i-3wQ|9s&h|xc{FqSFv$c+4jWr<9g&(|1~?)8n@ z&yu8J^}?YmSFfqOWYO}4D{fk}dPsf4GW8i;`3U4oDEG#yvQu?K!=hz3E?u-bY#v=R zQFQrVOFC}M@NvV2k0?(iSLzfp@zg0(+Knq#G!9v)=6m6aqL;_{n9ulOiuYFwZ^J=u zgcPCLPO25CuBWYDJw;(Nm5C5ytIr4zDiO?ZXL^=xVQlal^<>_%U_p}D@kbacbq_v1R2 ze81!^S+dx~4l=RojxP8W$`zTHsK3^`*5_+Jn{TaOzj3|&tZ!{?-GF=Z6`75^;U}&o ze6Dn-Mk8mJU0TFe`EsWp%U%x;itL9X&*Ab^EJ$Wo^pc|9wjA^LYj9tkt!p;v%`*Mh zhpMxa2g?VE)FeOeKT_g+Q4o{lu!}0i=a0v;;mreD!e0!ywX>JVm5o(=gPR;M@Te5# zN;m19=%2W+3PVtDXconYZnC{9`T50n3Eu)IR}KEH?_LMDBo7Y%LPzh0!%3t1r|wUV zT9CRwFuLN3>0Ay>joHtvZ*=v+ji;udIo8i^+Z8$SZT(qAVV5y|7YA62Y#4_Q@=RSe zY*%sQXAh?P@g5n)Y{xNYFYb2Z6TSY$?NH<7Ue3jNx8mF0`M6Vf8I4q|{5jk`i;sD= zi*HqlkFEEcxTEX;pKAzEwi3mC!k5SN?wnPm%=~#@g?syyC%DRbD(D+#jV;l;io+pe z3-ydn;qLXL%d#?23_RwR;r#=j@SZ@|zn?qW3>w>2qUqNZP<`>BOiCkIWKo6*0B z>7rm=tlGF_xmn@qZ1pzup77zC;($HQ%hQ`xEhsxVU9)e~^$e`!>6&d%*GJfgxT5^n z>~y{1Lao)YaA57w;2|4@WLwm1RD*Btc}2Q!s`A#)-w)}2Zh7gNJ5Rdi=8~?tFGPAl zrV4*qJHfvdD_NSwDBk zbpOR>?_z6>zf^HsObYKPi}YRw8yO};DmPu!I_kJeg!1xlG&&j;%QxBh7s2b3pShQ$<5H} zEv5(ehtsAGDrH}CPcR;}O^ra-(G}CD&s~-kwoWMxin(~;;+W##n2$x$YMU9iMXR@& zet6VM#P3kE|4){wiGb#wK6hi9-@{VQIl!53^E2g@Vy}$A7KPEGc$~8VTTN@ah0~_> z4)_RuW*w&J*0ikIn$6HIp(*-tXfBhy*pWYGe40+C`O&fJ05q3PUev5A7hJ112L^D3 zb-?r$cXX@m#NlooX*PwMkJVdE)3^aenvaLa1FN^0rgH0#^ji3Duo4vtwkv|B6xePa z27kr#;=^DMbxZZ#4t1C z;~z$Ulg)ts>CkS4H2wwjx1aZ~fp$;8_&3mRNnpSa0HUJ@GyEw7N^BD9gV6Z1uDPh+ zqrd#T|G%K!m@@gryPD7{TE-VayVcI<5!OE$L(vAz1i)i97ZcPmphQn4pk4zVJ!a}w z`m4_SAAxpb(!@VQ|6}Ljc;G%yZ zG_p+jtDx~WZ*$Q0Pu%>b1{P|6HuA*e-j#i?oat| zp}*w3zX{rH>$XAkSDp7i4INDc=KnJNDj1e3;B^4EW0?#-U_jG(|Ci9w=EV#$ZEdG9 z8|o5hw`Cg5|EmDc^vFL2+O2cO|2Oob|C^$KTLE|+kMzo~={uRg4H6c(@dE9shrbrT z3z`RGUfr^SlP29}Zmq4iI%A6THC$xVSdtYEKY*=Y zB&?9e2ji&B>N1M1Aa}$Wg*{=J!CjP5cNG~FVLiCQ_!xn4j%Qb8|NpA$B+%#FukZi& zef9XNtE=nwJ+n=p+N3w} zZ%NIEsRFuakG+Kf5J#`2o7K2o~ z@zFnpS&WbP3&5^VN{ROeN?oM1^d_V94qFz}a?R^tl-|3RCA5sbLn}q;9knb&OVxdz zQbz;Ak1b4UnZGrr6s7m6WtmzYSRPl3(mP{Wj+Um1G^HrLuPw{fvi&?5rS~_>3bgFn zlTeCM|F31m>9UXGPU(rLfSHtPX`a~*NulRD4F;?%UEa#ZS4yv=W#wAlIgU6=FUzt4 zT8>|b$wR4gEgPIJpYak?dPSC1YB|%4I7$`&C2TAqy>-yXx>3FlFFd6#cg&Z*&mx*q z`5e|*S1A*Qr~+Pq4s!K4@5n3O=~!t@YJhmaCTEzA{;4kaa!dtrc04Z}zch(Csg(bdtq zUU2>C&XVic*Lr;P29^Z#<;H(OaZ2TLvY@NiOA}<&)iJD+K(@p5bj^$;-?$Ayv8uqs++MT8U~Xb)jRv%-MtDl*;EFgORySu7-?8=62Rd zAj4pyk(owHAd_Lt$OLG9Ix&gNfQg1?1}T9ogo#FGCMkiego#FG7Ab)|027VOKadj0 z7MN&cs!0jt8JHj%n%Tr8EknbRsUfu^bBK8+WWL_TATu%xI5Lzv<(Mz`zlK4fR6f@Y zjLaf=12W%Tf;(9wfgFL!3mjfdOd=;?q5)e%N+4grKVwv)gdDD^nUeEHP@l%`bv`M_rIsN4u0W$+lQB#@afQ3j8b639ZBD1#?R3FK~= zD1mLH1o8k(l)x`Z30f22{r@Df&7c^MOJuNJZ)B9o;MdH6Qa|FDFFUzOpj18|u(-*d zl_wyh1fFA!1o8q*l)yie63FW?Hi4jn>>wtQw_u_SenUziAHzf$JWoo{ngJ4cfz&2& z+9t3|f6gG2z-}f$slRm0m*2gGzEcLu=aU~9?2&JwqYP54l0f2qYX-k1C6I0~(It45 zlt4;hq6GGm637r3+%o7)2YHRufcQVM-5?>&x{^_*uLsyyNyNbMcAuvkkS7g$Q~JMTKr72b5^J-!YM#>oIq+2FN zu}T7&$S6lENezfM+J?sJn;2vo8pnnx^$f>+ne-h>Q!1Y`1no?ag_H$0&57puXGr`L zTjf-}(iP8=n^+~KUgMZAxBh_Ql*;D>LzTD4dP-Mi6+3A_yc}}~qcL4?cBQjq25Y3$ zj~RyjuP@aakXreiig=>WlI@hPO0$tPAimC4IbXkMiu0F)*#%PSJ&yUZj6d5bmCuQc zPA-!DkkQR-c7X(e{0D5(-Q#8#NFeXPBpfxnKmz#)MmcJBfd<60aStHRI{hhw%*9yA zJSp{A$9%aj1B_DnypzzWdnEW9bkr-e^&+^WQ)cUBI;HS%i#lbtUIdqP%51%Cr*_&- zt<@O}GM!q-PEqQvj`@LXIExNZE1&l=di9{>K}J(?J+CK$^ktBniVu+*5buKJ4cRy9 zkqj~oZDK=|dW>VfG<61}RQ`CD=qiuM)C7M2MGb9cl~Wl%n^CTzEu;pd)dFLIebg+l z^$79QQPdfeHL$B$(0h*|NBLFjk9dmf&v{DdZ*hvn^$$2{Uwe3v>NMS@9omoiI-Aec zG+o4#uS=~Oh*QGXl{}^CTL@!%8dXfsHYf9H#Z%v!PAma>65sSzeA$nW=qx;X@J_%i zQtBqt;qJU;bUqxPF?L9RZ*%YwuL}Ox@hvkUgXL`^3}ucC$-hD=Bj2+unJ&Y!QI=Av zd8XD|Os#(g;cr5njpx@We8gJ-_v84634XimAVQ_-GL5f5j2yYs!dSXYCp7Y9%M$4_ zgRe0tF>y^xo7j@fS+=aM?_9M`hueF;-MiS_10vU-3(AWN5CtzE zIG&o>wvIj!cn61IwvoIN5jAs`Ew78nozxPY2Cc#OKTP@ zyelgYA1u5-oL@Ae<8TvJ0vi*xIy_NWl;P`QNW4mkYY8tFE=b*6yhOr2B~NNJ`)0|t zk{SL`(j&E{cb=G$V>Irp)QzQAi407w={-Q=cba5Vul6Yy|JUqv_?N5Jhw1$Wh3}NL zPkml?RKl@ky;JG^#tB~f)u)b@-|Cw$y9R!*`6cW(^h$F+HguLb|9)6W;m@&lpd}ox zP4k_G1M8{VdW5}(=S@5eWy6SZN3F})LTgacVG+u4O z!S?w|@eM5nr=?{z^D3biCRle=A3_(09VX-lOw`gx)EH3a*H&{yYO8nPO>kTN zJzn;<)%6?;9Gyut-0PA5rgRm)F`-vYtwkuaS%I0ivNpzQ?kwACE{1J2*QBrPu;7*3uzDSUonW^l+l&{C6Hg_hpOGHoM6wFsKKS*xvoRZI5P&&9Z{e=!z8tF52w zq}8^3o>{>-8pdC!xHz^AICg1(x+R=7sh?aEJ~e4gAv?sI*TkzPbpbj$V*1?0@6*Hf zlM91ImyRfwEE~kpWEEV`crfQC=4d7KqpCCh35X6`Wy>_dB75#)VH>}PEevPKZ9QxW zUSV9V!j@H!4bDQqz?MPSVmh!l+<(JW!Pqucv8fxOU7%^I2AcOK53RLY0`2CO(JR{c zJ^0r{^WNn_&93pTx7toV-h58~%*-q^j#htGAd`xNb$7W69Or>L!!g z%<#zM9>D|f%(f16WvdzGXIk{5MjvRSx1j6M!J&BaGW`N{+o5T`%zxxke{k_MKr~iK z&Wtt%sJr989(Nxq>i*EGz;=Op3UoB~)br_gU7%iXbZh)JqwQEFb#U(D9ss-C;z5i8 ze`LVyDB#@16VPs9G5&M(*SGrHcf|WdTfg!5gjT0o{ntXfp*Q{s^gEIa(BK>ZH!n>< z9Rmt%5q78n8h=`ugZe4@i(CD_g*KZmVEPZyuT&)s^$F9q3x(z|10!2=eGFYgf@M4<&T;2J;$?sQ{mSD_{Y*5 zY{2%WyrqI}=$(6dnfTu9Z9%KQ5;|H@OhWWmw)z)BbKdfxe+~Vr|9G}7gv(CJ8H;c!~DZw9De}faW%fM;ENI3tc=%sWY|_4^gXr_TKNTJ+;XILKYD9B6PH{ zu!0nHW_Weg`0$3RcKodv9g=#w>Oy+zz1d+rb=UmsGfLCUx)K z&+2gh>K-yEd}Z}d!r7}c!hNfAWiC}}_v&ww@rTjU&iru4#=>|-0e+5n;h#1Z`i~c3 zPZxf>u_(S2U2FEjyoN%*Z<$iBg<~3u{LcpA%7;rDisJJID|JGJk2MtP>xP7{H;sHY9<#M(yM4J@wZMNcg<2?>QvPWJn1mt~ zx#3S*(IQ=;itP*zP^^Eny+XC^NLovkq9TZ+P^Bo)fhkC(9Y@7+eBa%3A~ZAi-Sa;C z?RUQKoV|B9=Qrw&oAlTFxzm>@b#hzPBAK!6@hYcfS$j}5eBAnk|a*Q&$C*%O7z67!aBG(m0x=*Q64qSmKm5iLISfBh>nc~Wo z;7q)0;vko(m8RgiM3sCH98J{Pf*jHR2v#MVb1RTg+{H*Vp;!hxzogaGN=q#nt@E3R z#kADF3`Xmmj9603*!da_lbw!Ok(TLeP#vvvHe$tE7JVb86s_}a#7ebnXwAiyqIWJw zuw2WNbqS?toof;6r)AeQFk0uI5gVXo|BFebX!U<1Hn31$<;u`HE-FPML$q|x#>&&` z!iWtml%rP=Lz{DYM$pr8>@)&tojwsuX*oR(n?PD;+J_oDfRjj z81QVFq?nRcHyP&2s2|{JTIF(6kg-ud1>0Xo8Pm*2AhRG?R$ZOLL>XcdSp?}TQE--& zK-wV{hJKusK-NNl!%|0*h9JI!6DMV?-pHV^)Nw48R&O!Pm8mb_YSApnJ=j23 z9z2N4X_d>b3|8i|;=|gNxsNFc-dG(+sl+)qj%Ejg%Nn%TrH z#H%4aOkZl1XOi3WeA^i<~n3O=yLF{_9ke<`H|Kuug zKNGx+m_P*EWxor{NeQF`V!sP3NC~78(#K@@JSlA2?DJ71NJ4-5XARzyOOd&pJNctmdQqL@Hy6~FB<5| z*E(@It#bJkh?UBh|sg*`60w^!Cq1V`5DAE@GL2T9D~>f z_K_0E*%;=x9ekJgEOA({*@EXtqYlnT9qiZdF(~Zdd2Ru%e%~-xesT=8(<+xwel+l+ z{0r7LkY`2$>E`13V>|dUF^H1B5Zl24QUVzYu^k*FC6Lh&d}UBfcX^341o0<0aZ)<< z1O|nrzQ$5%_1%WK@{5z`U(qXQKD-tUhbsskTKO~E`dDTAKkg^rJ(INb;ltw-_@*Asb2>KQo1;(87a+ST)TNa*kZ z=IY!dJeklNcyRS&k=ubo($%|oNa#FaO#hTFraQxf8WI-K5*G1mpazWehZt1hXGipE zsO~2t*n*lC#%^P*-hdN)>Cn$$@Kyr*FV1wF{}{eprAf(13Iq0EF4>)UnGS6>V#S3r zk}uA*N-e<0QAfk9V?kbJ*0mUXpV7`@p2j_0oRs^dCk9MfC^Pwn9@<`HmAX1sD6PE=4RW;#CmUp9P z)*JmQZaDsI{PmCc8uW1E`8C0*kyqu9!I4pw@~hwybbU}Tx>CmEYeye)(vsjm9mVos(0yHv x+z~WD4+L|d=Yvh_rn(w zh1MG$ifyG8R{C}dQfjeNV@aV-Wh_`kD}yi=96>aqs4%6agRfDij{pDe*$kMO```2b z?RUO&zH@f(?#u$0^C9w2g_a&rqLc+^i&F8xiHeZga^DOmx5ztM9j-vTyDOZS1eQndQt0lT$84s*q5Ex}At$Y?D`=3$>`bu3_a6vzoK9Btkj7(hqM zsq+Y=wT1*Nt>t_(ww6|x2h1&yKXJ=wt*U_CrRDMw#L=qg^Uz3KYV?@kEV_^3w$f_H zFk9;OBG}2pE1Sz2DV95gF=`YyV1U#f!sX$E=vAJNOG@8~2G0(`=A%ign+&sM+^gtK zt88uxGG^pn*pWKO*vO0oaz6yis;lxC$R#F`7D$-{!C6uQSq&Ls=$)hlvH=3@PjxJ* z528!?{jmN&?vp`IH&{v!n!a z08(lP!%re5kRy;{LqA7KAisdzVlqr7C6M!w!Fhu}PfQ}0A%!NzJ){Kk4@k_=dr1i- zf?}g4!xT~iDS-g{D>Ice0N-Poaha*h804?aESvjJuRm>|EsGAIJFT*L%V1@`AhodJ z%FJd;0vQVlS7r_=flPsfEAs#;fy{-3D>IjrK-%)qaB1cdw-K*{3^sMmCnbqrTt z9a3WGL!<<<5mIdEdQt+}4hc8-OQZzy62#wN-v191lgMk3B9meRDS;e@3^H^hDS@1X z3^eo+QUduk1lYg!A0_oc^kr^W99K{;gZvHN$_?(#!|O{1+OqvHy3;C~Pk~5@d{sV# zEsq2#w=pGw{1;Mc=+{UIWDqW-5fAf=IfFwir^B+>>6 zD|nWaKpujG6+A~uAX^}Xrhw;332rLj1=65^Tk*6+0lW3%4Dt)uV+*c-di|7vwtV+E zCQqwuK45W^?UiR?!wOzzN&?vr3AbP$DS^BV2@80Ilt4~E!UDcSN+1^^7(cAwRpJZ8 z{)EjI>?aK>xD-^-t^dLxzk=^`3uyIK!)*D%3Cx{V*?jV&fCKV(*sy>eW+afPjpt8T z!JEV&N`^tg3J#JI$Y@Ad!68xt$wF|;U@`;bEm9vupX9)CIil}kkU!OIv1+lbBEy2f9C;Y4p zAcvW?1C19LZMEX`U(qUx%WToOxS6y-=I{;Ow^6bRT@@*i2MB%NKM0H$$Xvc<_xDRi&XYT*inUpY?C(h=V(;7^;LZMWA(+3?)j z+x+9j+W9!XBF)~Fx(Ye&^{cPI@1Yv#0&jACMZZ~CHrBP*TT?$K+l+;|2KO31{5^#O zRuvyhox?O4cnY7~+RlY7%hAAFJU*5>?wzSmA#dENMBXt@*+{NR5*HjVI{YY`uymOp z&J31X?zK2q@q_HX#7HUg+7s2Xy62gM^k2x?@Xyjusfp;x`P}H4^+vy(Ta3Rj{@VZf zGEDl$^Q*mojlCvkyes1>w=!i z&DRI#(~Ze=HsdO6LXvIAO^5AFwjtTqPP&e1ryTr+Jex{}eN(CI4eew@CWvtpDf9^2 z$xO=RbQ5ki>Ey!`ZZd5Wxyhu{*EyL;xqUpH?MswQC&R(qWMgAk0NPGA9606RgvpGR-8;_oV2%L*1qv+H=udwZA({9ha`!ChVaIdMWO7?h5x~gTjw;j6P zJJ?lici)CrLGNN$mHp#7d|!EQJXq|NZz{qKP`jyGD!f_HUEZV6W8S_^)9f>ol&bOe cAgXY4k^M=ZOK-;i1iXoxtEI|Yxp~ + * Based on the examples distributed by TI + * + * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include "resource_table_pru1.h" + +// The function is defined in pru1_asm_blinky.asm in same dir +// We just need to add a declaration here, the defination can be +// seperately linked +extern void start(void); + +void main(void) +{ + /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ + CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; + + // Access PRU Shared RAM using Constant Table */ + // C28 defaults to 0x00000000, we need to set bits 23:8 to 0x0100 in order to have it point to 0x00010000 */ + PRU0_CTRL.CTPPR0_bit.C28_BLK_POINTER = 0x0100; + + start(); +} + diff --git a/pru_firmware/src/main_pru2_0.c b/pru_firmware/src/main_pru2_0.c new file mode 100644 index 00000000..2ed92184 --- /dev/null +++ b/pru_firmware/src/main_pru2_0.c @@ -0,0 +1,50 @@ +/* + * Source Modified by Zubeen Tolani < ZeekHuge - zeekhuge@gmail.com > + * Based on the examples distributed by TI + * + * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ + * + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * * Neither the name of Texas Instruments Incorporated nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include "resource_table_pru1.h" + +// The function is defined in pru1_asm_blinky.asm in same dir +// We just need to add a declaration here, the defination can be +// seperately linked +extern void start(void); + +void main(void) +{ + start(); +} + diff --git a/pru_firmware/src/pru1_1-encoder.asm b/pru_firmware/src/pru1_1-encoder.asm new file mode 100644 index 00000000..6851a9db --- /dev/null +++ b/pru_firmware/src/pru1_1-encoder.asm @@ -0,0 +1,123 @@ +; Converted to clpru by Mark A. Yoder +; 26-July-2016 + +; pru_0_encoder.p +; assembly code for counting quadrature encoder signal on inputs R31_14 & 15 + +; Copyright (c) 2015, James Strawson +; All rights reserved. + +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are met: + +; 1. Redistributions of source code must retain the above copyright notice, this +; list of conditions and the following disclaimer. +; 2. Redistributions in binary form must reproduce the above copyright notice, +; this list of conditions and the following disclaimer in the documentation +; and/or other materials provided with the distribution. + +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +; ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +; The views and conclusions contained in the software and documentation are those +; of the authors and should not be interpreted as representing official policies, +; either expressed or implied, of the FreeBSD Project. + +; .cdecls "robotics_cape_defs.h" + +; PRU setup definitions + ; .asg C4, CONST_SYSCFG + .asg C28, CONST_PRUSHAREDRAM + + .asg 0x22000, PRU0_CTRL + .asg 0x24000, PRU1_CTRL ; page 19 + ; .asg 0x28, CTPPR0 ; page 75 + + .asg 0x000, OWN_RAM + .asg 0x020, OTHER_RAM + .asg 0x100, SHARED_RAM ; This is so prudebug can find it. + .asg 64, CNT_OFFSET + +; Encoder counting definitions +; these pin definitions are specific to SD-101D Robotics Cape + .asg r0, OLD ; keep last known values of chA and B in memory + .asg r1, EXOR ; place to store the XOR of old with new AB vals + .asg 18, A + .asg 16, B + +increment .macro + LBCO &r2, CONST_PRUSHAREDRAM, CNT_OFFSET, 4 ; load existing counter from shared memory + ADD r2, r2, 1 ; increment + SBCO &r2, CONST_PRUSHAREDRAM, CNT_OFFSET, 4 ; write to shared memory + QBA CHECKPINS ; jump back to main CHECKPINS + .endm + +decrement .macro + LBCO &r2, CONST_PRUSHAREDRAM, CNT_OFFSET, 4 ; load existing counter from shared memory + SUB r2, r2, 1 ; subtract 1 + SBCO &r2, CONST_PRUSHAREDRAM, CNT_OFFSET, 4 ; write to shared memory + QBA CHECKPINS ;/ jump back to main CHECKPINS + .endm + + .clink + .global start +start: +; LBCO &r0, CONST_SYSCFG, 4, 4 ; Enable OCP master port +; CLR r0, r0, 4 ; Clear SYSCFG[STANDBY_INIT] to enable OCP master port +; SBCO &r0, CONST_SYSCFG, 4, 4 +; Configure the programmable pointer register for PRU0 by setting c28_pointer[15:0] + ; LDI r0, SHARED_RAM ; Set C28 to point to shared RAM + ; LDI32 r1, PRU0_CTRL + CTPPR0 ; Note we use beginning of shared ram unlike example which + ; SBBO &r0, r1, 0, 4 ; has arbitrary 2048 offset + +; initialize by setting current state of two channels + MOV OLD, r31 + zero &r2, 4 + SBCO &r2, CONST_PRUSHAREDRAM, CNT_OFFSET, 4 ; write 0 to shared memory + +; CHECKPINS here forever looking for pin changes +CHECKPINS: + XOR EXOR, OLD, r31 + QBBS A_CHANGED, EXOR, A ; Branch if CHA has toggled + QBBS B_CHANGED, EXOR, B ; Branch if CHB has toggled + QBA CHECKPINS + + +A_CHANGED: + XOR OLD, OLD, EXOR ; update old value now that something changed + QBBS CHECKPINS, EXOR, B ; Branch if CHA and CHB have both toggled + QBBC A_FELL, OLD, A ; Branch if CHA has fallen + QBBS DECREMENT, OLD, B ; A has risen, if B is HIGH, decrement + increment ; otherwise increment + +B_CHANGED: + XOR OLD, OLD, EXOR ; update old value now that something changed + QBBC B_FELL, OLD, B ; Branch if CHB has fallen + QBBS INCREMENT, OLD, A ; ch B has risen, if A is HIGH, increment + decrement ; otherwise decrement + +A_FELL: ; CHA has fallen, check CHB + QBBC DECREMENT, OLD, B ; if CHB is clear (low) decrement + increment ; CHB must be high, so decrement counter + +B_FELL: ; CHB has fallen, check CHA + QBBC INCREMENT, OLD, A ; if CHA is clear (low) decrement + decrement + + +DECREMENT: + decrement + +INCREMENT: + increment + + + HALT ; we should never actually get here diff --git a/pru_firmware/src/pru2_0-servo.asm b/pru_firmware/src/pru2_0-servo.asm new file mode 100644 index 00000000..f5d3ef0d --- /dev/null +++ b/pru_firmware/src/pru2_0-servo.asm @@ -0,0 +1,168 @@ +;* +;* Copyright (C) 2016 Zubeen Tolani +;* +;* This file is as an example to show how to develope +;* and compile inline assembly code for PRUs +;* +;* From Jason: note, this is not "inline" assembly. This is just calling +;* assembly from a C function. Also, does it make any sense to hold a +;* copyright over a program by simply providing an example that is really +;* very much known to those practiced in the art? How about a thanks in +;* the comments rather than a copyright? +;* +;* This program is free software; you can redistribute it and/or modify +;* it under the terms of the GNU General Public License version 2 as +;* published by the Free Software Foundation. + + + .cdecls "main_pru2_0.c" + +DELAY .macro time, reg + LDI32 reg, time + QBEQ $E?, reg, 0 +$M?: SUB reg, reg, 1 + QBNE $M?, reg, 0 +$E?: + .endm + + + .clink + .global start +start: + LDI R30, 0xFFFF + DELAY 10000000, r11 + LDI R30, 0x0000 + DELAY 10000000, r11 +; JMP start + +; HALT + + +; these pin definitions are specific to SD-101C Robotics Cape + .asg r30.t16, CH1BIT ; P8_27 + .asg r30.t17, CH2BIT ; P8_28 + .asg r30.t18, CH3BIT ; P8_29 + .asg r30.t19, CH4BIT ; P8_30 + .asg r30.t3, CH5BIT ; P8_39 + .asg r30.t4, CH6BIT ; P8_40 + .asg r30.t1, CH7BIT ; P8_41 + .asg r30.t2, CH8BIT ; P8_42 + + .asg C4, CONST_SYSCFG + .asg C28, CONST_PRUSHAREDRAM + + .asg 0x22000, PRU0_CTRL + .asg 0x24000, PRU1_CTRL ; page 19 + .asg 0x28, CTPPR0 ; page 75 + + .asg 0x000, OWN_RAM + .asg 0x020, OTHER_RAM + .asg 0x100, SHARED_RAM ; This is so prudebug can find it. + + LBCO &r0, CONST_SYSCFG, 4, 4 ; Enable OCP master port + CLR r0, r0, 4 ; Clear SYSCFG[STANDBY_INIT] to enable OCP master port + SBCO &r0, CONST_SYSCFG, 4, 4 + +; Configure the programmable pointer register for PRU0 by setting c28_pointer[15:0] + LDI r0, SHARED_RAM ; Set C28 to point to shared RAM + LDI32 r1, PRU1_CTRL + CTPPR0 ; Note we use beginning of shared ram unlike example which + SBBO &r0, r1, 0, 4 ; page 25 + + LDI r9, 0x0 ; erase r9 to use to use later + + LDI r0, 0x0 ; clear internal counters + LDI r1, 0x0 + LDI r2, 0x0 + LDI r3, 0x0 + LDI r4, 0x0 + LDI r5, 0x0 + LDI r6, 0x0 + LDI32 r7, 0x0 + LDI r30, 0x0 ; turn off GPIO outputs + + +; Beginning of loop, should always take 48 instructions to complete +CH1: + QBEQ CLR1, r0, 0 ; If timer is 0, jump to clear channel + SET r30, CH1BIT ; If non-zero turn on the corresponding channel + SUB r0, r0, 1 ; Subtract one from timer + CLR r9, r9.t1 ; waste a cycle for timing + SBCO &r9, CONST_PRUSHAREDRAM, 0, 4 ; write 0 to shared memory +CH2: + QBEQ CLR2, r1, 0 + SET r30, CH2BIT + SUB r1, r1, 1 + CLR r9, r9.t1 + SBCO &r9, CONST_PRUSHAREDRAM, 4, 4 +CH3: + QBEQ CLR3, r2, 0 + SET r30, CH3BIT + SUB r2, r2, 1 + CLR r9, r9.t1 + SBCO &r9, CONST_PRUSHAREDRAM, 8, 4 +CH4: + QBEQ CLR4, r3, 0 + SET r30, CH4BIT + SUB r3, r3, 1 + CLR r9, r9.t1 + SBCO &r9, CONST_PRUSHAREDRAM, 12, 4 +CH5: + QBEQ CLR5, r4, 0 + SET r30, CH5BIT + SUB r4, r4, 1 + CLR r9, r9.t1 + SBCO &r9, CONST_PRUSHAREDRAM, 16, 4 +CH6: + QBEQ CLR6, r5, 0 + SET r30, CH6BIT + SUB r5, r5, 1 + CLR r9, r9.t1 + SBCO &r9, CONST_PRUSHAREDRAM, 20, 4 +CH7: + QBEQ CLR7, r6, 0 + SET r30, CH7BIT + SUB r6, r6, 1 + CLR r9, r9.t1 + SBCO &r9, CONST_PRUSHAREDRAM, 24, 4 +CH8: + QBEQ CLR8, r7, 0 + SET r30, CH8BIT + SUB r7, r7, 1 + SBCO &r9, CONST_PRUSHAREDRAM, 28, 4 + + QBA CH1 ; return to beginning of loop + ; no need to waste a cycle for timing here because of the QBA above + + +CLR1: + CLR r30, CH1BIT ; turn off the corresponding channel + LBCO &r0, CONST_PRUSHAREDRAM, 0, 4 ; Load new timer register + QBA CH2 +CLR2: + CLR r30, CH2BIT + LBCO &r1, CONST_PRUSHAREDRAM, 4, 4 + QBA CH3 +CLR3: + CLR r30, CH3BIT + LBCO &r2, CONST_PRUSHAREDRAM, 8, 4 + QBA CH4 +CLR4: + CLR r30, CH4BIT + LBCO &r3, CONST_PRUSHAREDRAM, 12, 4 + QBA CH5 +CLR5: + CLR r30, CH5BIT + LBCO &r4, CONST_PRUSHAREDRAM, 16, 4 + QBA CH6 +CLR6: + CLR r30, CH6BIT + LBCO &r5, CONST_PRUSHAREDRAM, 20, 4 + QBA CH7 +CLR7: + CLR r30, CH7BIT + LBCO &r6, CONST_PRUSHAREDRAM, 24, 4 + QBA CH8 +CLR8: + CLR r30, CH8BIT + LBCO &r7, CONST_PRUSHAREDRAM, 28, 4 + QBA CH1 ; return to beginning of loop From 1357752d10de9cd81d0b17311117b682b07b16b2 Mon Sep 17 00:00:00 2001 From: Jason Kridner Date: Fri, 26 Jul 2019 14:52:29 +0000 Subject: [PATCH 07/14] Do not track firmware in git --- pru_firmware/fw/am335x-pru0-rc-encoder-fw | Bin 36072 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 pru_firmware/fw/am335x-pru0-rc-encoder-fw diff --git a/pru_firmware/fw/am335x-pru0-rc-encoder-fw b/pru_firmware/fw/am335x-pru0-rc-encoder-fw deleted file mode 100644 index 79bd879c06243740b9cece60a4527f8d44b3fe3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36072 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 From a33843f35e4f6fadfc128f90477e045a38ea0242 Mon Sep 17 00:00:00 2001 From: Jason Kridner Date: Fri, 26 Jul 2019 14:57:17 +0000 Subject: [PATCH 08/14] Remove redundant C files These separate main files were just copies of each other and just do the same setup before calling _start. Note that C28 probably does need setup to access the share memory. Note that the OCP is not likely ever accessed, nor should it be enabled. It opens us up to bugs and these modules should be using their own pins and local memories (which the ARM can see without enabling us to reach out). --- pru_firmware/Makefile | 28 ++------- pru_firmware/fw/am335x-pru1-rc-servo-fw | Bin 33412 -> 38388 bytes pru_firmware/src/{main_pru0.c => main_pru.c} | 0 pru_firmware/src/main_pru1.c | 53 ----------------- pru_firmware/src/main_pru1_1.c | 58 ------------------- pru_firmware/src/main_pru2_0.c | 50 ---------------- pru_firmware/src/pru1-servo.asm | 2 +- pru_firmware/src/pru2_0-servo.asm | 2 +- 8 files changed, 7 insertions(+), 186 deletions(-) rename pru_firmware/src/{main_pru0.c => main_pru.c} (100%) delete mode 100644 pru_firmware/src/main_pru1.c delete mode 100644 pru_firmware/src/main_pru1_1.c delete mode 100644 pru_firmware/src/main_pru2_0.c diff --git a/pru_firmware/Makefile b/pru_firmware/Makefile index b9636ca1..322fea1b 100644 --- a/pru_firmware/Makefile +++ b/pru_firmware/Makefile @@ -63,46 +63,28 @@ all: $(TARGETS) @echo "Generated: $^" -$(TARGET0): $(BUILD_DIR)/main_pru0.object $(LINK_PRU0_FW) +$(TARGET0): $(BUILD_DIR)/main_pru.object $(LINK_PRU0_FW) @echo 'LD $^' @mkdir -p $(BIN_DIR) @$(LNKPRU) -i$(PRU_CGT)/lib -i$(PRU_CGT)/include $(LFLAGS) -o $@ $^ $(LINKER_COMMAND_FILE) --library=libc.a $(LIBS) $^ -$(TARGET1): $(BUILD_DIR)/main_pru1.object $(LINK_PRU1_FW) +$(TARGET1): $(BUILD_DIR)/main_pru.object $(LINK_PRU1_FW) @echo 'LD $^' @mkdir -p $(BIN_DIR) @$(LNKPRU) -i$(PRU_CGT)/lib -i$(PRU_CGT)/include $(LFLAGS) -o $@ $^ $(LINKER_COMMAND_FILE) --library=libc.a $(LIBS) $^ -$(TARGET2): $(BUILD_DIR)/main_pru1_1.object $(LINK_PRU1_1_FW) +$(TARGET2): $(BUILD_DIR)/main_pru.object $(LINK_PRU1_1_FW) @echo 'LD $^' @mkdir -p $(BIN_DIR) @$(LNKPRU) -i$(PRU_CGT)/lib -i$(PRU_CGT)/include $(LFLAGS) -o $@ $^ $(LINKER_COMMAND_FILE) --library=libc.a $(LIBS) $^ -$(TARGET3): $(BUILD_DIR)/main_pru2_0.object $(LINK_PRU2_0_FW) +$(TARGET3): $(BUILD_DIR)/main_pru.object $(LINK_PRU2_0_FW) @echo 'LD $^' @mkdir -p $(BIN_DIR) @$(LNKPRU) -i$(PRU_CGT)/lib -i$(PRU_CGT)/include $(LFLAGS) -o $@ $^ $(LINKER_COMMAND_FILE) --library=libc.a $(LIBS) $^ -$(BUILD_DIR)/main_pru0.object: $(SRC_DIR)/main_pru0.c - @mkdir -p $(BUILD_DIR) - @echo 'CC $<' - @$(CLPRU) $(INCLUDE) $(CFLAGS) -fe $@ $< - - -$(BUILD_DIR)/main_pru1.object: $(SRC_DIR)/main_pru1.c - @mkdir -p $(BUILD_DIR) - @echo 'CC $<' - @$(CLPRU) $(INCLUDE) $(CFLAGS) -fe $@ $< - - -$(BUILD_DIR)/main_pru2_0.object: $(SRC_DIR)/main_pru2_0.c - @mkdir -p $(BUILD_DIR) - @echo 'CC $<' - @$(CLPRU) $(INCLUDE) $(CFLAGS) -fe $@ $< - - -$(BUILD_DIR)/main_pru1_1.object: $(SRC_DIR)/main_pru1_1.c +$(BUILD_DIR)/main_pru.object: $(SRC_DIR)/main_pru.c @mkdir -p $(BUILD_DIR) @echo 'CC $<' @$(CLPRU) $(INCLUDE) $(CFLAGS) -fe $@ $< diff --git a/pru_firmware/fw/am335x-pru1-rc-servo-fw b/pru_firmware/fw/am335x-pru1-rc-servo-fw index 788c5446c6e332da9b8d9702c71b37eb9eae21cc..7d037d2d3523634411e7e01adbe72a4e5e69262a 100644 GIT binary patch delta 11303 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 delta 7250 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 LyqWrNXU=~CuaJlx diff --git a/pru_firmware/src/main_pru0.c b/pru_firmware/src/main_pru.c similarity index 100% rename from pru_firmware/src/main_pru0.c rename to pru_firmware/src/main_pru.c diff --git a/pru_firmware/src/main_pru1.c b/pru_firmware/src/main_pru1.c deleted file mode 100644 index 75e63e35..00000000 --- a/pru_firmware/src/main_pru1.c +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Source Modified by Zubeen Tolani < ZeekHuge - zeekhuge@gmail.com > - * Based on the examples distributed by TI - * - * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include "resource_table_pru1.h" - -// The function is defined in pru1_asm_blinky.asm in same dir -// We just need to add a declaration here, the defination can be -// seperately linked -extern void start(void); - -void main(void) -{ - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - start(); -} - diff --git a/pru_firmware/src/main_pru1_1.c b/pru_firmware/src/main_pru1_1.c deleted file mode 100644 index e069aec2..00000000 --- a/pru_firmware/src/main_pru1_1.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Source Modified by Zubeen Tolani < ZeekHuge - zeekhuge@gmail.com > - * Based on the examples distributed by TI - * - * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include -#include "resource_table_pru1.h" - -// The function is defined in pru1_asm_blinky.asm in same dir -// We just need to add a declaration here, the defination can be -// seperately linked -extern void start(void); - -void main(void) -{ - /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ - CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - - // Access PRU Shared RAM using Constant Table */ - // C28 defaults to 0x00000000, we need to set bits 23:8 to 0x0100 in order to have it point to 0x00010000 */ - PRU0_CTRL.CTPPR0_bit.C28_BLK_POINTER = 0x0100; - - start(); -} - diff --git a/pru_firmware/src/main_pru2_0.c b/pru_firmware/src/main_pru2_0.c deleted file mode 100644 index 2ed92184..00000000 --- a/pru_firmware/src/main_pru2_0.c +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Source Modified by Zubeen Tolani < ZeekHuge - zeekhuge@gmail.com > - * Based on the examples distributed by TI - * - * Copyright (C) 2015 Texas Instruments Incorporated - http://www.ti.com/ - * - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the - * distribution. - * - * * Neither the name of Texas Instruments Incorporated nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include -#include "resource_table_pru1.h" - -// The function is defined in pru1_asm_blinky.asm in same dir -// We just need to add a declaration here, the defination can be -// seperately linked -extern void start(void); - -void main(void) -{ - start(); -} - diff --git a/pru_firmware/src/pru1-servo.asm b/pru_firmware/src/pru1-servo.asm index 757e196f..528b4fda 100644 --- a/pru_firmware/src/pru1-servo.asm +++ b/pru_firmware/src/pru1-servo.asm @@ -9,7 +9,7 @@ ;* published by the Free Software Foundation. - .cdecls "main_pru1.c" + .cdecls "main_pru.c" DELAY .macro time, reg LDI32 reg, time diff --git a/pru_firmware/src/pru2_0-servo.asm b/pru_firmware/src/pru2_0-servo.asm index f5d3ef0d..ed01d005 100644 --- a/pru_firmware/src/pru2_0-servo.asm +++ b/pru_firmware/src/pru2_0-servo.asm @@ -15,7 +15,7 @@ ;* published by the Free Software Foundation. - .cdecls "main_pru2_0.c" + .cdecls "main_pru.c" DELAY .macro time, reg LDI32 reg, time From d3df93ecdbd905094762fbd97c3e6d5eb425a94c Mon Sep 17 00:00:00 2001 From: Jason Kridner Date: Fri, 26 Jul 2019 15:00:20 +0000 Subject: [PATCH 09/14] Do not track firmware in git --- pru_firmware/fw/am335x-pru1-rc-servo-fw | Bin 38388 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 pru_firmware/fw/am335x-pru1-rc-servo-fw diff --git a/pru_firmware/fw/am335x-pru1-rc-servo-fw b/pru_firmware/fw/am335x-pru1-rc-servo-fw deleted file mode 100644 index 7d037d2d3523634411e7e01adbe72a4e5e69262a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38388 zcmeHw33wdUneDyRYE=i>jyJ%7jb#wTY?8VqYXJk2CD|58w%n4zW^2omYztcpQp?zc z#bya45U?STOkP6B3okG0gqLKJyu3_80+}Q)lZ31jGFfbv1cnR)d71fUA>p0#-@3JR zJ5-jLk9;5Xsc+wN{&WAjTUXtxx^;C!SI=s#wX&O|4k(Kry;iBt>x`vQRjUfMT-~qU ztsYjYW}nhEPaLX9KQg3Fex#^Q{_V>z*L?jQs^<26_tm7HQyZRpPN!dfPEGt4+H(B9 znu>#m4pl6{_x?lh^+iY3>|fqivu~L?{4CNO!sjqPPvG+;K2PEEG(JDa=PUT!iVuA+ zKcqJN_P3d(hYsoVv(M@!Z(gbPpL&?wQA-aWwp_)2I0E;&rB6Izxy=5Po+MYb^vNeJ zH*0_OQ{*a_KJ}F4=I%f7X>#t;r=Pam!u^YXPOf6<℘YMf;Ec1-bOnU;IL+-@J11 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 From a0e3c383cf96234057375e989cb9bec5d5fcfd93 Mon Sep 17 00:00:00 2001 From: Jason Kridner Date: Sat, 27 Jul 2019 12:47:41 +0000 Subject: [PATCH 10/14] First pass at AM57XX PRU support --- library/include/rc/pru.h | 10 ++- library/src/pru/encoder_pru.c | 47 ++++++++---- library/src/pru/pru.c | 134 +++++++++++++++++++++++++++++----- library/src/pru/servo.c | 84 +++++++++++++++------ 4 files changed, 219 insertions(+), 56 deletions(-) diff --git a/library/include/rc/pru.h b/library/include/rc/pru.h index f974b16b..ff250fd3 100644 --- a/library/include/rc/pru.h +++ b/library/include/rc/pru.h @@ -28,7 +28,7 @@ extern "C" { * and "am335x-pru1-fw", please don't overwrite these if they exist. Name your * firmware image something like "am335x-pru0-mycustom-fw". * - * @param[in] ch pru core to start (0 or 1) + * @param[in] ch pru core to start (0 or 1 on AM3, 2-5 on AM5) * @param[in] fw_name The firmware image name, e.g. "am335x-pru0-fw", do not * include '/lib/firmware' in the path, only the file name. * @@ -42,15 +42,17 @@ int rc_pru_start(int ch, const char* fw_name); * This is done by mapping to /dev/mem and therefore requires root privileges * but provides extremely low-latency memory access to communicate with the PRU. * + * @param[in] ch pru core to reference (0 or 1 on AM3, 2-5 on AM5) + * * @return memory pointer on success, NULL on failure */ -volatile uint32_t* rc_pru_shared_mem_ptr(void); +volatile uint32_t* rc_pru_shared_mem_ptr(int ch); /** * Unloads pru binaries * - * @param[in] ch pru core to stop (0 or 1) + * @param[in] ch pru core to stop (0 or 1 on AM3, 2-5 on AM5) * * @return 0 on success, -1 on failure. */ @@ -63,4 +65,4 @@ int rc_pru_stop(int ch); #endif // RC_PRU_H -/** @} end group PRU */ \ No newline at end of file +/** @} end group PRU */ diff --git a/library/src/pru/encoder_pru.c b/library/src/pru/encoder_pru.c index aa00a249..aa1882fb 100644 --- a/library/src/pru/encoder_pru.c +++ b/library/src/pru/encoder_pru.c @@ -11,10 +11,13 @@ #include #include #include +#include -#define ENCODER_PRU_CH 0 // PRU0 -#define ENCODER_PRU_FW "am335x-pru0-rc-encoder-fw" -#define ENCODER_MEM_OFFSET 16 +#define AM335X_ENCODER_PRU_CH 0 // PRU0 +#define AM335X_ENCODER_PRU_FW "am335x-pru0-rc-encoder-fw" +#define AM57XX_ENCODER_PRU_CH 3 // PRU1_1 +#define AM57XX_ENCODER_PRU_FW "am57xx-pru1_1-rc-encoder-fw" +#define ENCODER_MEM_OFFSET 16 // pru shared memory pointer static volatile unsigned int* shared_mem_32bit_ptr = NULL; @@ -25,7 +28,10 @@ int rc_encoder_pru_init(void) return 0; // until we fix for AM5 int i; // map memory - shared_mem_32bit_ptr = rc_pru_shared_mem_ptr(); + if(rc_model()==MODEL_BB_AI || rc_model()==MODEL_BB_AI_RC) + shared_mem_32bit_ptr = rc_pru_shared_mem_ptr(AM57XX_ENCODER_PRU_CH); + else + shared_mem_32bit_ptr = rc_pru_shared_mem_ptr(AM335X_ENCODER_PRU_CH); if(shared_mem_32bit_ptr==NULL){ fprintf(stderr, "ERROR in rc_encoder_pru_init, failed to map shared memory pointer\n"); init_flag=0; @@ -35,9 +41,16 @@ int rc_encoder_pru_init(void) shared_mem_32bit_ptr[ENCODER_MEM_OFFSET]=42; // start pru - if(rc_pru_start(ENCODER_PRU_CH, ENCODER_PRU_FW)){ - fprintf(stderr,"ERROR in rc_encoder_pru_init, failed to start PRU%d\n", ENCODER_PRU_CH); - return -1; + if(rc_model()==MODEL_BB_AI || rc_model()==MODEL_BB_AI_RC){ + if(rc_pru_start(AM57XX_ENCODER_PRU_CH, AM57XX_ENCODER_PRU_FW)){ + fprintf(stderr,"ERROR in rc_encoder_pru_init, failed to start PRU%d\n", AM57XX_ENCODER_PRU_CH); + return -1; + } + } else { + if(rc_pru_start(AM335X_ENCODER_PRU_CH, AM335X_ENCODER_PRU_FW)){ + fprintf(stderr,"ERROR in rc_encoder_pru_init, failed to start PRU%d\n", AM335X_ENCODER_PRU_CH); + return -1; + } } // make sure memory actually got zero'd out @@ -49,9 +62,15 @@ int rc_encoder_pru_init(void) rc_usleep(100000); } - fprintf(stderr, "ERROR in rc_encoder_pru_init, %s failed to load\n", ENCODER_PRU_FW); - fprintf(stderr, "attempting to stop PRU%d\n", ENCODER_PRU_CH); - rc_pru_stop(ENCODER_PRU_CH); + if(rc_model()==MODEL_BB_AI || rc_model()==MODEL_BB_AI_RC){ + fprintf(stderr, "ERROR in rc_encoder_pru_init, %s failed to load\n", AM57XX_ENCODER_PRU_FW); + fprintf(stderr, "attempting to stop PRU%d\n", AM57XX_ENCODER_PRU_CH); + rc_pru_stop(AM57XX_ENCODER_PRU_CH); + } else { + fprintf(stderr, "ERROR in rc_encoder_pru_init, %s failed to load\n", AM335X_ENCODER_PRU_FW); + fprintf(stderr, "attempting to stop PRU%d\n", AM335X_ENCODER_PRU_CH); + rc_pru_stop(AM335X_ENCODER_PRU_CH); + } init_flag=0; return -1; } @@ -59,12 +78,14 @@ int rc_encoder_pru_init(void) void rc_encoder_pru_cleanup(void) { - return; // until we fix for AM5 // zero out shared memory if(shared_mem_32bit_ptr != NULL){ shared_mem_32bit_ptr[ENCODER_MEM_OFFSET]=0; } - rc_pru_stop(ENCODER_PRU_CH); + if(rc_model()==MODEL_BB_AI || rc_model()==MODEL_BB_AI_RC) + rc_pru_stop(AM57XX_ENCODER_PRU_CH); + else + rc_pru_stop(AM335X_ENCODER_PRU_CH); shared_mem_32bit_ptr = NULL; init_flag=0; return; @@ -73,7 +94,6 @@ void rc_encoder_pru_cleanup(void) int rc_encoder_pru_read(void) { - return 0; // until we fix for AM5 if(shared_mem_32bit_ptr==NULL || init_flag==0){ fprintf(stderr, "ERROR in rc_encoder_pru_read, call rc_encoder_pru_init first\n"); return -1; @@ -84,7 +104,6 @@ int rc_encoder_pru_read(void) int rc_encoder_pru_write(int pos) { - return 0; // until we fix for AM5 if(shared_mem_32bit_ptr==NULL || init_flag==0){ fprintf(stderr, "ERROR in rc_encoder_pru_write, call rc_encoder_pru_init first\n"); return -1; diff --git a/library/src/pru/pru.c b/library/src/pru/pru.c index 189ec2b1..4b9c6744 100644 --- a/library/src/pru/pru.c +++ b/library/src/pru/pru.c @@ -22,14 +22,30 @@ #include // remoteproc driver +#warning These need to be against aliases as different numbers of remoteprocX can potentially be loaded #define PRU0_STATE "/sys/class/remoteproc/remoteproc1/state" #define PRU1_STATE "/sys/class/remoteproc/remoteproc2/state" +#define PRU1_0_STATE "/sys/class/remoteproc/remoteproc0/state" +#define PRU1_1_STATE "/sys/class/remoteproc/remoteproc1/state" +#define PRU2_0_STATE "/sys/class/remoteproc/remoteproc2/state" +#define PRU2_1_STATE "/sys/class/remoteproc/remoteproc3/state" #define PRU0_FW "/sys/class/remoteproc/remoteproc1/firmware" #define PRU1_FW "/sys/class/remoteproc/remoteproc2/firmware" +#define PRU1_0_FW "/sys/class/remoteproc/remoteproc0/firmware" +#define PRU1_1_FW "/sys/class/remoteproc/remoteproc1/firmware" +#define PRU2_0_FW "/sys/class/remoteproc/remoteproc2/firmware" +#define PRU2_1_FW "/sys/class/remoteproc/remoteproc3/firmware" // share memory pointer location -#define PRU_ADDR 0x4A300000 // Start of PRU memory Page 184 am335x TRM -#define PRU_LEN 0x80000 // Length of PRU memory +#define AM335X_PRU_ADDR 0x4A300000 // Start of PRU memory Page 184 am335x TRM +#define AM57XX_PRUSS1_ADDR 0x4B200000 // Start of PRUSS1 memory for AM57xx - See spruhz6 +#define AM57XX_PRUSS2_ADDR 0x4B280000 // Start of PRUSS2 memory for AM57xx +/* + * Use /dev/bone/pru/X aliases in the future in case other uio drivers are loaded + * + * Use /dev/uioX to isolate permissions as well as abstract the offset + */ +#define PRU_LEN 0x20000 // Length of PRU memory (don't reach into registers) #define PRU_SHAREDMEM 0x10000 // Offset to shared memory static volatile unsigned int* shared_mem_32bit_ptr = NULL; @@ -41,10 +57,10 @@ int rc_pru_start(int ch, const char* fw_name) char buf[64]; // sanity checks - if(ch!=0 && ch!=1){ - fprintf(stderr, "ERROR in rc_pru_start, PRU channel must be 0 or 1\n"); - return -1; - } + //if(ch!=0 && ch!=1){ + //fprintf(stderr, "ERROR in rc_pru_start, PRU channel must be 0 or 1\n"); + //return -1; + //} if(fw_name==NULL){ fprintf(stderr, "ERROR in rc_pru_start, received NULL pointer\n"); return -1; @@ -60,8 +76,29 @@ int rc_pru_start(int ch, const char* fw_name) if(rc_pru_stop(ch)) return -1; // write firmware title - if(ch==0) fd=open(PRU0_FW, O_WRONLY); - else fd=open(PRU1_FW, O_WRONLY); + switch(ch) { + case 0: + fd=open(PRU0_FW, O_WRONLY); + break; + case 1: + fd=open(PRU1_FW, O_WRONLY); + break; + case 2: + fd=open(PRU1_0_FW, O_WRONLY); + break; + case 3: + fd=open(PRU1_1_FW, O_WRONLY); + break; + case 4: + fd=open(PRU2_0_FW, O_WRONLY); + break; + case 5: + fd=open(PRU2_1_FW, O_WRONLY); + break; + default: + fd = -1; + break; + } if(fd==-1){ perror("ERROR in rc_pru_start opening remoteproc driver"); fprintf(stderr,"need to be root to use the pru\n"); @@ -76,8 +113,29 @@ int rc_pru_start(int ch, const char* fw_name) // open state fd to start pru - if(ch==0) fd=open(PRU0_STATE, O_WRONLY); - else fd=open(PRU1_STATE, O_WRONLY); + switch(ch) { + case 0: + fd=open(PRU0_STATE, O_WRONLY); + break; + case 1: + fd=open(PRU1_STATE, O_WRONLY); + break; + case 2: + fd=open(PRU1_0_STATE, O_WRONLY); + break; + case 3: + fd=open(PRU1_1_STATE, O_WRONLY); + break; + case 4: + fd=open(PRU2_0_STATE, O_WRONLY); + break; + case 5: + fd=open(PRU2_1_STATE, O_WRONLY); + break; + default: + fd=-1; + break; + } if(fd==-1){ perror("ERROR in rc_pru_start opening remoteproc driver"); fprintf(stderr,"PRU probably not enabled in device tree\n"); @@ -92,8 +150,29 @@ int rc_pru_start(int ch, const char* fw_name) // wait for it to start and make sure it's running rc_usleep(250000); - if(ch==0) fd=open(PRU0_STATE, O_RDONLY); - else fd=open(PRU1_STATE, O_RDONLY); + switch(ch) { + case 0: + fd=open(PRU0_STATE, O_WRONLY); + break; + case 1: + fd=open(PRU1_STATE, O_WRONLY); + break; + case 2: + fd=open(PRU1_0_STATE, O_WRONLY); + break; + case 3: + fd=open(PRU1_1_STATE, O_WRONLY); + break; + case 4: + fd=open(PRU2_0_STATE, O_WRONLY); + break; + case 5: + fd=open(PRU2_1_STATE, O_WRONLY); + break; + default: + fd=-1; + break; + } if(fd==-1){ perror("ERROR in rc_pru_start opening remoteproc driver"); fprintf(stderr,"PRU probably not enabled in device tree\n"); @@ -116,10 +195,11 @@ int rc_pru_start(int ch, const char* fw_name) } -volatile uint32_t* rc_pru_shared_mem_ptr(void) +volatile uint32_t* rc_pru_shared_mem_ptr(int ch) { int fd; volatile unsigned int* map; + off_t offset = 0; // if already set, just return the pointer if(shared_mem_32bit_ptr!=NULL){ @@ -127,14 +207,34 @@ volatile uint32_t* rc_pru_shared_mem_ptr(void) } // map shared memory - fd=open("/dev/mem", O_RDWR | O_SYNC); + // TODO: Will use /dev/uioX in the future + switch(ch) { + case 0: + case 1: + offset=AM335X_PRU_ADDR; + fd=open("/dev/mem", O_RDWR | O_SYNC); + break; + case 2: + case 3: + offset=AM57XX_PRUSS1_ADDR; + fd=open("/dev/mem", O_RDWR | O_SYNC); + break; + case 4: + case 5: + offset=AM57XX_PRUSS2_ADDR; + fd=open("/dev/mem", O_RDWR | O_SYNC); + break; + default: + fd=-1; + break; + } if(fd==-1){ - perror("ERROR: in rc_pru_shared_mem_ptr could not open /dev/mem"); - fprintf(stderr, "Need to be root to access PRU shared memory\n"); + perror("ERROR: in rc_pru_shared_mem_ptr could not open /dev/XXX"); // TODO: name interface + fprintf(stderr, "Need to be root to access PRU shared memory\n"); // TODO: don't need to be root for /dev/uioX, but need permissions return NULL; } - map = mmap(0, PRU_LEN, PROT_READ | PROT_WRITE, MAP_SHARED, fd, PRU_ADDR); + map = mmap(0, PRU_LEN, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset); if(map==MAP_FAILED){ perror("ERROR in rc_pru_shared_mem_ptr failed to map memory"); close(fd); diff --git a/library/src/pru/servo.c b/library/src/pru/servo.c index 508e67ff..e8ed11e2 100644 --- a/library/src/pru/servo.c +++ b/library/src/pru/servo.c @@ -13,11 +13,15 @@ #include #include #include +#include #define TOL 0.01 // acceptable tolerance on doubleing point bounds -#define GPIO_POWER_PIN 2,16 //gpio2.16 P8.36 -#define SERVO_PRU_CH 1 // PRU1 -#define SERVO_PRU_FW "am335x-pru1-rc-servo-fw" +#define AM335X_GPIO_POWER_PIN 2,16 //gpio2.16 P8.36 +#define AM335X_SERVO_PRU_CH 1 // PRU1 +#define AM335X_SERVO_PRU_FW "am335x-pru1-rc-servo-fw" +#define AM57XX_GPIO_POWER_PIN 8,10 //gpio8.10 P8.36 +#define AM57XX_SERVO_PRU_CH 4 // PRU2_0 +#define AM57XX_SERVO_PRU_FW "am57xx-pru2_0-rc-servo-fw" #define PRU_SERVO_LOOP_INSTRUCTIONS 48 // instructions per PRU servo timer loop // pru shared memory pointer @@ -32,13 +36,24 @@ int rc_servo_init(void) return 0; // until we update for AM5 int i; // start gpio power rail pin - if(rc_gpio_init(GPIO_POWER_PIN, GPIOHANDLE_REQUEST_OUTPUT)==-1){ - fprintf(stderr, "ERROR in rc_servo_init, failed to set up power rail GPIO pin\n"); - init_flag=0; - return -1; + if(rc_model()==MODEL_BB_AI || rc_model()==MODEL_BB_AI_RC){ + if(rc_gpio_init(AM57XX_GPIO_POWER_PIN, GPIOHANDLE_REQUEST_OUTPUT)==-1){ + fprintf(stderr, "ERROR in rc_servo_init, failed to set up power rail GPIO pin\n"); + init_flag=0; + return -1; + } + } else { + if(rc_gpio_init(AM335X_GPIO_POWER_PIN, GPIOHANDLE_REQUEST_OUTPUT)==-1){ + fprintf(stderr, "ERROR in rc_servo_init, failed to set up power rail GPIO pin\n"); + init_flag=0; + return -1; + } } // map memory - shared_mem_32bit_ptr = rc_pru_shared_mem_ptr(); + if(rc_gpio_init(AM57XX_GPIO_POWER_PIN, GPIOHANDLE_REQUEST_OUTPUT)==-1) + shared_mem_32bit_ptr = rc_pru_shared_mem_ptr(AM57XX_SERVO_PRU_CH); + else + shared_mem_32bit_ptr = rc_pru_shared_mem_ptr(AM335X_SERVO_PRU_CH); if(shared_mem_32bit_ptr == NULL){ fprintf(stderr, "ERROR in rc_servo_init, failed to map shared memory pointer\n"); init_flag=0; @@ -51,9 +66,16 @@ int rc_servo_init(void) } // start pru - if(rc_pru_start(SERVO_PRU_CH, SERVO_PRU_FW)){ - fprintf(stderr,"ERROR in rc_servo_init, failed to start PRU%d\n", SERVO_PRU_CH); - return -1; + if(rc_model()==MODEL_BB_AI || rc_model()==MODEL_BB_AI_RC){ + if(rc_pru_start(AM57XX_SERVO_PRU_CH, AM57XX_SERVO_PRU_FW)){ + fprintf(stderr,"ERROR in rc_servo_init, failed to start PRU%d\n", AM57XX_SERVO_PRU_CH); + return -1; + } + } else { + if(rc_pru_start(AM335X_SERVO_PRU_CH, AM335X_SERVO_PRU_FW)){ + fprintf(stderr,"ERROR in rc_servo_init, failed to start PRU%d\n", AM335X_SERVO_PRU_CH); + return -1; + } } // make sure memory actually got zero'd out @@ -65,9 +87,15 @@ int rc_servo_init(void) rc_usleep(100000); } - fprintf(stderr, "ERROR in rc_servo_init, %s failed to load\n", SERVO_PRU_FW); - fprintf(stderr, "attempting to stop PRU1\n"); - rc_pru_stop(SERVO_PRU_CH); + if(rc_model()==MODEL_BB_AI || rc_model()==MODEL_BB_AI_RC){ + fprintf(stderr, "ERROR in rc_servo_init, %s failed to load\n", AM57XX_SERVO_PRU_FW); + fprintf(stderr, "attempting to stop PRU2_0\n"); + rc_pru_stop(AM57XX_SERVO_PRU_CH); + } else { + fprintf(stderr, "ERROR in rc_servo_init, %s failed to load\n", AM335X_SERVO_PRU_FW); + fprintf(stderr, "attempting to stop PRU1\n"); + rc_pru_stop(AM335X_SERVO_PRU_CH); + } init_flag=0; return -1; } @@ -75,17 +103,24 @@ int rc_servo_init(void) void rc_servo_cleanup(void) { - return 0; // until we update for AM5 int i; // zero out shared memory if(shared_mem_32bit_ptr != NULL){ for(i=0;i Date: Wed, 31 Jul 2019 02:24:16 +0000 Subject: [PATCH 11/14] WIP: adc working --- library/include/rc/adc.h | 18 ++++++++---------- library/src/io/adc.c | 12 ++++++++++-- library/src/io/gpio.c | 2 +- library/src/pru/pru.c | 1 - library/src/pru/servo.c | 3 +-- pru_firmware/Makefile | 2 ++ 6 files changed, 22 insertions(+), 16 deletions(-) diff --git a/library/include/rc/adc.h b/library/include/rc/adc.h index 9a5eb0fa..90302437 100644 --- a/library/include/rc/adc.h +++ b/library/include/rc/adc.h @@ -29,14 +29,14 @@ * all swiveled around. The ADC2AI() macro will swivel using this table: * * AM3358 - AI - * 0 - 4 - * 1 - 6 - * 2 - 7 - * 3 - 5 - * 4 - 3 - * 5 - 2 - * 6 - 0 - * 7 - -1 (not available on BeagleBone AI) + * 0 - 0 (X+) + * 1 - 1 (X-) + * 2 - 3 (Y-) + * 3 - 2 (Y+) + * 4 - 7 (IN3) + * 5 - 6 (IN2) + * 6 - 4 (IN0) + * 7 - 5 (IN1 - grounded on BeagleBone AI) * * See the rc_test_adc example for sample use case. * @@ -48,8 +48,6 @@ #ifndef RC_ADC_H #define RC_ADC_H -#define ADC2AI(x) (x==0?4:(x==1?6:(x==2?7:(x==3?5:(x==4?3:(x==5?2:(x==6?0:-1))))))) - #ifdef __cplusplus extern "C" { #endif diff --git a/library/src/io/adc.c b/library/src/io/adc.c index 67e2006e..1a2cbce8 100644 --- a/library/src/io/adc.c +++ b/library/src/io/adc.c @@ -13,6 +13,7 @@ #include // for open #include // for close #include +#include // preposessor macros #define unlikely(x) __builtin_expect (!!(x), 0) @@ -24,6 +25,7 @@ #define V_DIV_RATIO 11.0 #define BATT_DEADZONE 1.0 +#define ADC2AI(x) (x==0?0:(x==1?1:(x==2?3:(x==3?2:(x==4?7:(x==5?6:(x==6?4:(x==7?5:-1)))))))) #define CHANNELS 8 #define IIO_DIR "/sys/bus/iio/devices/iio:device0" @@ -42,7 +44,10 @@ int rc_adc_init(void) if(init_flag) return 0; for(i=0;i Date: Wed, 31 Jul 2019 02:48:52 +0000 Subject: [PATCH 12/14] servos: bus error --- library/src/pru/pru.c | 117 ++++++++++++++---------------------------- 1 file changed, 39 insertions(+), 78 deletions(-) diff --git a/library/src/pru/pru.c b/library/src/pru/pru.c index 8f39d833..cd0aacff 100644 --- a/library/src/pru/pru.c +++ b/library/src/pru/pru.c @@ -50,6 +50,36 @@ static volatile unsigned int* shared_mem_32bit_ptr = NULL; +static int __open_pru_ch(int ch, int state, int flags) +{ + int fd; + + switch(ch) { + case 0: + fd=open(state?PRU0_STATE:PRU0_FW, flags); + break; + case 1: + fd=open(state?PRU1_STATE:PRU1_FW, flags); + break; + case 2: + fd=open(state?PRU1_0_STATE:PRU1_0_FW, flags); + break; + case 3: + fd=open(state?PRU1_1_STATE:PRU1_1_FW, flags); + break; + case 4: + fd=open(state?PRU2_0_STATE:PRU2_0_FW, flags); + break; + case 5: + fd=open(state?PRU2_1_STATE:PRU2_1_FW, flags); + break; + default: + fd = -1; + break; + } + return fd; +} + int rc_pru_start(int ch, const char* fw_name) { int fd, ret; @@ -75,29 +105,7 @@ int rc_pru_start(int ch, const char* fw_name) if(rc_pru_stop(ch)) return -1; // write firmware title - switch(ch) { - case 0: - fd=open(PRU0_FW, O_WRONLY); - break; - case 1: - fd=open(PRU1_FW, O_WRONLY); - break; - case 2: - fd=open(PRU1_0_FW, O_WRONLY); - break; - case 3: - fd=open(PRU1_1_FW, O_WRONLY); - break; - case 4: - fd=open(PRU2_0_FW, O_WRONLY); - break; - case 5: - fd=open(PRU2_1_FW, O_WRONLY); - break; - default: - fd = -1; - break; - } + fd=__open_pru_ch(ch, 0, O_WRONLY); if(fd==-1){ perror("ERROR in rc_pru_start opening remoteproc driver"); fprintf(stderr,"need to be root to use the pru\n"); @@ -112,29 +120,7 @@ int rc_pru_start(int ch, const char* fw_name) // open state fd to start pru - switch(ch) { - case 0: - fd=open(PRU0_STATE, O_WRONLY); - break; - case 1: - fd=open(PRU1_STATE, O_WRONLY); - break; - case 2: - fd=open(PRU1_0_STATE, O_WRONLY); - break; - case 3: - fd=open(PRU1_1_STATE, O_WRONLY); - break; - case 4: - fd=open(PRU2_0_STATE, O_WRONLY); - break; - case 5: - fd=open(PRU2_1_STATE, O_WRONLY); - break; - default: - fd=-1; - break; - } + fd=__open_pru_ch(ch, 1, O_WRONLY); if(fd==-1){ perror("ERROR in rc_pru_start opening remoteproc driver"); fprintf(stderr,"PRU probably not enabled in device tree\n"); @@ -149,29 +135,7 @@ int rc_pru_start(int ch, const char* fw_name) // wait for it to start and make sure it's running rc_usleep(250000); - switch(ch) { - case 0: - fd=open(PRU0_STATE, O_WRONLY); - break; - case 1: - fd=open(PRU1_STATE, O_WRONLY); - break; - case 2: - fd=open(PRU1_0_STATE, O_WRONLY); - break; - case 3: - fd=open(PRU1_1_STATE, O_WRONLY); - break; - case 4: - fd=open(PRU2_0_STATE, O_WRONLY); - break; - case 5: - fd=open(PRU2_1_STATE, O_WRONLY); - break; - default: - fd=-1; - break; - } + fd=__open_pru_ch(ch, 1, O_RDONLY); if(fd==-1){ perror("ERROR in rc_pru_start opening remoteproc driver"); fprintf(stderr,"PRU probably not enabled in device tree\n"); @@ -251,19 +215,17 @@ volatile uint32_t* rc_pru_shared_mem_ptr(int ch) int rc_pru_stop(int ch) { - return 0; // until we update for AM5 int fd, ret; char buf[64]; // sanity checks - if(ch!=0 && ch!=1){ - fprintf(stderr, "ERROR in rc_pru_stop, PRU channel must be 0 or 1\n"); - return -1; - } + //if(ch!=0 && ch!=1){ + //fprintf(stderr, "ERROR in rc_pru_stop, PRU channel must be 0 or 1\n"); + //return -1; + //} // check state - if(ch==0) fd=open(PRU0_STATE, O_RDONLY); - else fd=open(PRU1_STATE, O_RDONLY); + fd=__open_pru_ch(ch, 1, O_RDONLY); if(fd==-1){ perror("ERROR in rc_pru_stop opening remoteproc driver"); fprintf(stderr,"PRU probably not enabled in device tree\n"); @@ -301,8 +263,7 @@ int rc_pru_stop(int ch) // wait for PRU to stop and check it stopped //rc_usleep(1000000); - if(ch==0) fd=open(PRU0_STATE, O_RDONLY); - else fd=open(PRU1_STATE, O_RDONLY); + fd=__open_pru_ch(ch, 1, O_RDONLY); memset(buf,0,sizeof(buf)); ret=read(fd, buf, sizeof(buf)); close(fd); From 8ac3520c7bb04a280a879c735e650390fee3c78c Mon Sep 17 00:00:00 2001 From: Jason Kridner Date: Wed, 31 Jul 2019 03:09:01 +0000 Subject: [PATCH 13/14] servos almost working debian@bbai-donkey1:/opt/source/librobotcontrol/library$ rc_test_servos -s 1 Turning On 6V Servo Power Rail Sending on all channels. Sweeping servos back/forth between +-1.000000 Pulse Frequency: 50 ... bug no movement. Need to get a scope to debug ... --- library/src/pru/pru.c | 13 ++++++------- library/src/pru/servo.c | 2 +- pru_firmware/src/main_pru.c | 4 ++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/library/src/pru/pru.c b/library/src/pru/pru.c index cd0aacff..8bf29243 100644 --- a/library/src/pru/pru.c +++ b/library/src/pru/pru.c @@ -170,22 +170,22 @@ volatile uint32_t* rc_pru_shared_mem_ptr(int ch) } // map shared memory - // TODO: Will use /dev/uioX in the future + // TODO: use symlinks for repeatability switch(ch) { case 0: case 1: offset=AM335X_PRU_ADDR; - fd=open("/dev/mem", O_RDWR | O_SYNC); + fd=open("/dev/uio0", O_RDWR | O_SYNC); break; case 2: case 3: offset=AM57XX_PRUSS1_ADDR; - fd=open("/dev/mem", O_RDWR | O_SYNC); + fd=open("/dev/uio0", O_RDWR | O_SYNC); break; case 4: case 5: offset=AM57XX_PRUSS2_ADDR; - fd=open("/dev/mem", O_RDWR | O_SYNC); + fd=open("/dev/uio1", O_RDWR | O_SYNC); break; default: fd=-1; @@ -197,7 +197,7 @@ volatile uint32_t* rc_pru_shared_mem_ptr(int ch) return NULL; } - map = mmap(0, PRU_LEN, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset); + map = mmap(0, PRU_LEN, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if(map==MAP_FAILED){ perror("ERROR in rc_pru_shared_mem_ptr failed to map memory"); close(fd); @@ -246,8 +246,7 @@ int rc_pru_stop(int ch) } // if running, stop it else if(strcmp(buf,"running\n")==0){ - if(ch==0) fd=open(PRU0_STATE, O_WRONLY); - else fd=open(PRU1_STATE, O_WRONLY); + fd=__open_pru_ch(ch, 1, O_WRONLY); ret=write(fd,"stop",4); close(fd); if(ret==-1){ diff --git a/library/src/pru/servo.c b/library/src/pru/servo.c index 79e8e6aa..09577ae4 100644 --- a/library/src/pru/servo.c +++ b/library/src/pru/servo.c @@ -49,7 +49,7 @@ int rc_servo_init(void) } } // map memory - if(rc_gpio_init(AM57XX_GPIO_POWER_PIN, GPIOHANDLE_REQUEST_OUTPUT)==-1) + if(rc_model()==MODEL_BB_AI || rc_model()==MODEL_BB_AI_RC) shared_mem_32bit_ptr = rc_pru_shared_mem_ptr(AM57XX_SERVO_PRU_CH); else shared_mem_32bit_ptr = rc_pru_shared_mem_ptr(AM335X_SERVO_PRU_CH); diff --git a/pru_firmware/src/main_pru.c b/pru_firmware/src/main_pru.c index e069aec2..10057f1c 100644 --- a/pru_firmware/src/main_pru.c +++ b/pru_firmware/src/main_pru.c @@ -49,8 +49,8 @@ void main(void) /* Clear SYSCFG[STANDBY_INIT] to enable OCP master port */ CT_CFG.SYSCFG_bit.STANDBY_INIT = 0; - // Access PRU Shared RAM using Constant Table */ - // C28 defaults to 0x00000000, we need to set bits 23:8 to 0x0100 in order to have it point to 0x00010000 */ + // Access PRU Shared RAM using Constant Table + // C28 defaults to 0x00000000, we need to set bits 23:8 to 0x0100 in order to have it point to 0x00010000 PRU0_CTRL.CTPPR0_bit.C28_BLK_POINTER = 0x0100; start(); From 89d227cff70f6b287edaaea0d484771f313df650 Mon Sep 17 00:00:00 2001 From: Jason Kridner Date: Thu, 1 Aug 2019 05:07:23 +0000 Subject: [PATCH 14/14] Got servos working --- examples/src/rc_test_servos.c | 2 ++ library/src/pru/pru.c | 24 ++++++++++--------- library/src/pru/servo.c | 7 ------ library/src/time.c | 2 ++ .../src/rc_battery_monitor.c | 10 ++++---- 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/examples/src/rc_test_servos.c b/examples/src/rc_test_servos.c index 190514a7..93203c17 100644 --- a/examples/src/rc_test_servos.c +++ b/examples/src/rc_test_servos.c @@ -258,10 +258,12 @@ int main(int argc, char *argv[]) switch(mode){ case NORM: + //printf("calling pulse_normalized %d -> %f\n", ch, servo_pos); if(rc_servo_send_pulse_normalized(ch,servo_pos)==-1) return -1; break; case MICROSECONDS: + //printf("calling pulse_us %d -> %d\n", ch, width_us); if(rc_servo_send_pulse_us(ch, width_us)==-1) return -1; break; diff --git a/library/src/pru/pru.c b/library/src/pru/pru.c index 8bf29243..107913cf 100644 --- a/library/src/pru/pru.c +++ b/library/src/pru/pru.c @@ -41,14 +41,14 @@ #define AM57XX_PRUSS1_ADDR 0x4B200000 // Start of PRUSS1 memory for AM57xx - See spruhz6 #define AM57XX_PRUSS2_ADDR 0x4B280000 // Start of PRUSS2 memory for AM57xx /* - * Use /dev/bone/pru/X aliases in the future in case other uio drivers are loaded + * TODO: Use /dev/bone/pru/X aliases in the future in case other uio drivers are loaded * - * Use /dev/uioX to isolate permissions as well as abstract the offset + * TODO: Use /dev/uioX to isolate permissions as well as abstract the offset */ #define PRU_LEN 0x20000 // Length of PRU memory (don't reach into registers) #define PRU_SHAREDMEM 0x10000 // Offset to shared memory -static volatile unsigned int* shared_mem_32bit_ptr = NULL; +static volatile unsigned int* shared_mem_32bit_ptr[6]; static int __open_pru_ch(int ch, int state, int flags) { @@ -165,8 +165,8 @@ volatile uint32_t* rc_pru_shared_mem_ptr(int ch) off_t offset = 0; // if already set, just return the pointer - if(shared_mem_32bit_ptr!=NULL){ - return shared_mem_32bit_ptr; + if(shared_mem_32bit_ptr[ch]!=NULL){ + return shared_mem_32bit_ptr[ch]; } // map shared memory @@ -174,18 +174,19 @@ volatile uint32_t* rc_pru_shared_mem_ptr(int ch) switch(ch) { case 0: case 1: - offset=AM335X_PRU_ADDR; + //offset=AM335X_PRU_ADDR; fd=open("/dev/uio0", O_RDWR | O_SYNC); break; case 2: case 3: - offset=AM57XX_PRUSS1_ADDR; + //offset=AM57XX_PRUSS1_ADDR; fd=open("/dev/uio0", O_RDWR | O_SYNC); break; case 4: case 5: - offset=AM57XX_PRUSS2_ADDR; + //offset=AM57XX_PRUSS2_ADDR; fd=open("/dev/uio1", O_RDWR | O_SYNC); + //fd=open("/dev/mem", O_RDWR | O_SYNC); break; default: fd=-1; @@ -197,7 +198,7 @@ volatile uint32_t* rc_pru_shared_mem_ptr(int ch) return NULL; } - map = mmap(0, PRU_LEN, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); + map = mmap(0, PRU_LEN, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset); if(map==MAP_FAILED){ perror("ERROR in rc_pru_shared_mem_ptr failed to map memory"); close(fd); @@ -207,9 +208,10 @@ volatile uint32_t* rc_pru_shared_mem_ptr(int ch) // set global shared memory pointer // Points to start of shared memory - shared_mem_32bit_ptr = map + PRU_SHAREDMEM/4; + shared_mem_32bit_ptr[ch] = map + PRU_SHAREDMEM/4; + printf("%p %p\n", map, shared_mem_32bit_ptr[ch]); - return shared_mem_32bit_ptr; + return shared_mem_32bit_ptr[ch]; } diff --git a/library/src/pru/servo.c b/library/src/pru/servo.c index 09577ae4..edef65d4 100644 --- a/library/src/pru/servo.c +++ b/library/src/pru/servo.c @@ -128,7 +128,6 @@ void rc_servo_cleanup(void) int rc_servo_power_rail_en(int en) { - return 0; // until we update for AM5 if(init_flag==0){ fprintf(stderr, "ERROR in rc_servo_power_rail_en, call rc_servo_init first\n"); return -1; @@ -149,7 +148,6 @@ int rc_servo_power_rail_en(int en) int rc_servo_set_esc_range(int min, int max) { - return 0; // until we update for AM5 if(min<1 || max<2){ fprintf(stderr, "ERROR in rc_servo_set_esc_range, in and max values must be positive\n"); return -1; @@ -166,7 +164,6 @@ int rc_servo_set_esc_range(int min, int max) int rc_servo_send_pulse_us(int ch, int us) { - return 0; // until we update for AM5 int i, ret; uint32_t num_loops; // Sanity Checks @@ -179,7 +176,6 @@ int rc_servo_send_pulse_us(int ch, int us) return -1; } - // calculate what to write to pru shared memory to set pulse width num_loops = ((us*200.0)/PRU_SERVO_LOOP_INSTRUCTIONS); @@ -216,7 +212,6 @@ int rc_servo_send_pulse_us(int ch, int us) int rc_servo_send_pulse_normalized(int ch, double input) { - return 0; // until we update for AM5 int us; if(input<(-1.5-TOL) || input>(1.5+TOL)){ fprintf(stderr,"ERROR in rc_servo_send_pulse_normalized, normalized input must be between -1.5 & 1.5\n"); @@ -231,7 +226,6 @@ int rc_servo_send_pulse_normalized(int ch, double input) int rc_servo_send_esc_pulse_normalized(int ch, double input) { - return 0; // until we update for AM5 int us; if(input<(-0.1-TOL) || input>(1.0+TOL)){ fprintf(stderr,"ERROR in rc_servo_send_esc_pulse_normalized, normalized input must be between -0.1 & 1.0\n"); @@ -245,7 +239,6 @@ int rc_servo_send_esc_pulse_normalized(int ch, double input) int rc_servo_send_oneshot_pulse_normalized(int ch, double input) { - return 0; // until we update for AM5 int us; if(input<(-0.1-TOL) || input>(1.0+TOL)){ fprintf(stderr,"ERROR in rc_servo_send_oneshot_pulse_normalized, normalized input must be between -0.1 & 1.0\n"); diff --git a/library/src/time.c b/library/src/time.c index 26647144..33803b0b 100644 --- a/library/src/time.c +++ b/library/src/time.c @@ -17,8 +17,10 @@ #include +#include void rc_nanosleep(uint64_t ns){ + //printf("sleeping %llx\n", ns); struct timespec req,rem; req.tv_sec = ns/1000000000; req.tv_nsec = ns%1000000000; diff --git a/services/rc_battery_monitor/src/rc_battery_monitor.c b/services/rc_battery_monitor/src/rc_battery_monitor.c index 7f5f2172..183c865f 100644 --- a/services/rc_battery_monitor/src/rc_battery_monitor.c +++ b/services/rc_battery_monitor/src/rc_battery_monitor.c @@ -18,7 +18,7 @@ #include #include -#define BATTPIDFILE "/run/rc_battery_monitor.pid" +#define BATTPIDFILE "/run/librobotcontrol/rc_battery_monitor.pid" #define START_BLINK_US 100000 // 0.1 second // Critical Max voltages of packs used to detect number of cells in pack @@ -69,10 +69,10 @@ int main(int argc, char *argv[]) rc_filter_t filterJ = rc_filter_empty(); // battery and jack filters // ensure root privaleges until we sort out udev rules - if(geteuid()!=0){ - fprintf(stderr,"ERROR: rc_battery_monitor must be run as root\n"); - return -1; - } + //if(geteuid()!=0){ + //fprintf(stderr,"ERROR: rc_battery_monitor must be run as root\n"); + //return -1; + //} // parse arguments to check for kill mode opterr = 0;