Skip to content

Commit 8fa9022

Browse files
ArcaneNibbledlech
authored andcommitted
pbio/drv/rproc/rproc_ev3.c: Move PRU0 initialization into rproc driver
As a future goal, there are plans to clearly document PRU interrupt controller config (as it is shared between the two PRU cores). This will be easier if initialization is centralized.
1 parent b40f675 commit 8fa9022

3 files changed

Lines changed: 12 additions & 11 deletions

File tree

lib/pbio/drv/rproc/rproc_ev3.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,24 @@
1717
#include <tiam1808/timer.h>
1818

1919
#include "rproc_ev3.h"
20+
#include "../uart/uart_ev3_pru.h"
2021

2122
volatile pbdrv_rproc_ev3_pru1_shared_ram_t pbdrv_rproc_ev3_pru1_shared_ram __attribute__((section(".shared1")));
2223

2324
static bool pbdrv_ev3_rproc_is_ready;
2425

25-
extern char _pru1_start;
26-
extern char _pru1_end;
27-
2826
void pbdrv_rproc_init(void) {
2927
// Enable PRU subsystem
3028
PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_PRU, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
3129

30+
// PRU0 initialization
31+
32+
extern uint8_t _pru0_start;
33+
extern uint8_t _pru0_end;
34+
uint32_t fw_size = &_pru0_end - &_pru0_start;
35+
uint8_t *fw_data = &_pru0_start;
36+
pbdrv_uart_ev3_pru_load_firmware(fw_data, fw_size);
37+
3238
// PRU1 initialization
3339

3440
// Enable Timer0 "34" half to count up to 256 * 256
@@ -41,6 +47,8 @@ void pbdrv_rproc_init(void) {
4147
memset((void *)&pbdrv_rproc_ev3_pru1_shared_ram, 0, sizeof(pbdrv_rproc_ev3_pru1_shared_ram));
4248

4349
// Enable PRU1 and load its firmware
50+
extern uint8_t _pru1_start;
51+
extern uint8_t _pru1_end;
4452
PRUSSDRVPruDisable(1);
4553
PRUSSDRVPruReset(1);
4654
unsigned int *fw_start = (unsigned int *)&_pru1_start;

lib/pbio/drv/uart/uart_ev3.c

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -385,17 +385,9 @@ void pbdrv_uart_init_pru(pbdrv_uart_dev_t *uart) {
385385
}
386386

387387
void pbdrv_uart_init(void) {
388-
389388
// Enabling the PSC for all UARTs
390389
PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_UART0, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
391390
PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_UART1, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
392-
PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_PRU, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
393-
394-
extern uint8_t _pru0_start;
395-
extern uint8_t _pru0_end;
396-
uint32_t fw_size = &_pru0_end - &_pru0_start;
397-
uint8_t *fw_data = &_pru0_start;
398-
pbdrv_uart_ev3_pru_load_firmware(fw_data, fw_size);
399391

400392
for (int i = 0; i < PBDRV_CONFIG_UART_EV3_NUM_UART; i++) {
401393
const pbdrv_uart_ev3_platform_data_t *pdata = &pbdrv_uart_ev3_platform_data[i];

lib/pbio/drv/uart/uart_ev3_pru.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef _INTERNAL_PBDRV_UART_EV3_PRU_H_
22
#define _INTERNAL_PBDRV_UART_EV3_PRU_H_
33

4+
#include <stdbool.h>
45
#include <stdint.h>
56

67
int pbdrv_uart_ev3_pru_load_firmware(uint8_t *firmware_data, uint32_t firmware_size);

0 commit comments

Comments
 (0)