changeset 253:33e0e4831763 prerelease

Started prerelease branch; updated PRU code to be able to run on either PRU.
author andrewm
date Mon, 16 May 2016 12:13:58 +0100
parents 381f352c44eb
children abd3657016ea
files core/PRU.cpp include/pru_rtaudio_bin.h pru_rtaudio.p
diffstat 3 files changed, 39 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/core/PRU.cpp	Wed May 11 10:29:23 2016 +0100
+++ b/core/PRU.cpp	Mon May 16 12:13:58 2016 +0100
@@ -38,7 +38,7 @@
 using namespace std;
 
 #define PRU_MEM_MCASP_OFFSET 0x2000  // Offset within PRU-SHARED RAM
-#define PRU_MEM_MCASP_LENGTH 0x2000  // Length of McASP memory, in bytes
+#define PRU_MEM_MCASP_LENGTH 0x1000  // Length of McASP memory, in bytes
 #define PRU_MEM_DAC_OFFSET 0x0     // Offset within PRU0 RAM
 #define PRU_MEM_DAC_LENGTH 0x2000  // Length of ADC+DAC memory, in bytes
 #define PRU_MEM_COMM_OFFSET 0x0    // Offset within PRU-SHARED RAM
@@ -51,12 +51,13 @@
 #define PRU_SHOULD_SYNC     3
 #define PRU_SYNC_ADDRESS    4
 #define PRU_SYNC_PIN_MASK   5
-#define PRU_LED_ADDRESS		6
-#define PRU_LED_PIN_MASK	7
-#define PRU_FRAME_COUNT		8
-#define PRU_USE_SPI			9
+#define PRU_LED_ADDRESS	     6
+#define PRU_LED_PIN_MASK     7
+#define PRU_FRAME_COUNT      8
+#define PRU_USE_SPI          9
 #define PRU_SPI_NUM_CHANNELS 10
-#define PRU_USE_DIGITAL    11
+#define PRU_USE_DIGITAL      11
+#define PRU_PRU_NUMBER       12
 
 short int digitalPins[NUM_DIGITALS]={
 		GPIO_NO_BIT_0,
@@ -332,6 +333,7 @@
     pru_buffer_comm[PRU_SHOULD_SYNC] = 0;
     pru_buffer_comm[PRU_SYNC_ADDRESS] = 0;
     pru_buffer_comm[PRU_SYNC_PIN_MASK] = 0;
+    pru_buffer_comm[PRU_PRU_NUMBER] = pru_number;
     if(led_enabled) {
     	pru_buffer_comm[PRU_LED_ADDRESS] = USERLED3_GPIO_BASE;
     	pru_buffer_comm[PRU_LED_PIN_MASK] = USERLED3_PIN_MASK;
--- a/include/pru_rtaudio_bin.h	Wed May 11 10:29:23 2016 +0100
+++ b/include/pru_rtaudio_bin.h	Mon May 16 12:13:58 2016 +0100
@@ -275,20 +275,24 @@
      0xe1006287,
      0xe1006384,
      0x209c0000,
-     0x240002c3,
-     0x24202083,
-     0x240000e2,
-     0xe1002382,
-     0x240002c3,
-     0x24202883,
-     0x240120e2,
-     0xe1002382,
      0x240001d9,
      0x24000099,
      0x244803da,
      0x2401009a,
      0x244803dd,
      0x2480009d,
+     0x240002c0,
+     0x24400080,
+     0xf1303982,
+     0x5101e203,
+     0x240002c0,
+     0x24200080,
+     0x1320e0e3,
+     0x240000e2,
+     0xe1002382,
+     0x1328e0e3,
+     0x240120e2,
+     0xe1002382,
      0x91042480,
      0x1d04e0e0,
      0x81042480,
@@ -630,7 +634,7 @@
      0x79000002,
      0x0b10eee7,
      0xf1c03d82,
-     0xd500e29d,
+     0xd500e299,
      0xcf05e2fe,
      0x10e7e7fb,
      0x240208fc,
@@ -693,7 +697,7 @@
      0x4902e904,
      0x1101eafb,
      0x6900fb08,
-     0x2102b300,
+     0x2102b700,
      0x1103e1fb,
      0x6900fb05,
      0xf100269b,
--- a/pru_rtaudio.p	Wed May 11 10:29:23 2016 +0100
+++ b/pru_rtaudio.p	Mon May 16 12:13:58 2016 +0100
@@ -82,7 +82,8 @@
 #define COMM_FRAME_COUNT      32	  // How many frames have elapse since beginning
 #define COMM_USE_SPI          36          // Whether or not to use SPI ADC and DAC
 #define COMM_NUM_CHANNELS     40	  // Low 2 bits indicate 8 [0x3], 4 [0x1] or 2 [0x0] channels
-#define COMM_USE_DIGITAL  44	  // Whether or not to use DIGITAL
+#define COMM_USE_DIGITAL      44	  // Whether or not to use DIGITAL
+#define COMM_PRU_NUMBER       48          // Which PRU this code is running on
 
 #define MCASP0_BASE 0x48038000
 #define MCASP1_BASE 0x4803C000
@@ -549,22 +550,30 @@
 .endm
    
 START:
+     // Load useful registers for addressing SPI
+     MOV reg_comm_addr, SHARED_COMM_MEM_BASE
+     MOV reg_spi_addr, SPI_BASE
+     MOV reg_mcasp_addr, MCASP_BASE
+
+     // Find out which PRU we are running on
+     // This affects the following offsets
+     MOV  r0, 0x24000      // PRU1 control register offset
+     LBBO r2, reg_comm_addr, COMM_PRU_NUMBER, 4
+     QBEQ PRU_NUMBER_CHECK_DONE, r2, 1
+     MOV  r0, 0x22000      // PRU0 control register offset
+PRU_NUMBER_CHECK_DONE:	
+	
      // Set up c24 and c25 offsets with CTBIR register
      // Thus C24 points to start of PRU0 RAM
-     MOV r3, 0x22020       // CTBIR0
+     OR  r3, r0, 0x20      // CTBIR0
      MOV r2, 0
      SBBO r2, r3, 0, 4
 
      // Set up c28 pointer offset for shared PRU RAM
-     MOV r3, 0x22028       // CTPPR0
+     OR r3, r0, 0x28       // CTPPR0
      MOV r2, 0x00000120    // To get address 0x00012000
      SBBO r2, r3, 0, 4
 	
-     // Load useful registers for addressing SPI
-     MOV reg_comm_addr, SHARED_COMM_MEM_BASE
-     MOV reg_spi_addr, SPI_BASE
-     MOV reg_mcasp_addr, MCASP_BASE
-	
      // Set ARM such that PRU can write to registers
      LBCO r0, C4, 4, 4
      CLR r0, r0, 4