Skip to content

Commit 8934cfe

Browse files
committed
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 710e9fb commit 8934cfe

File tree

3 files changed

+12
-11
lines changed

3 files changed

+12
-11
lines changed

lib/pbio/drv/rproc/rproc_ev3.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,22 @@
1616
#include <tiam1808/timer.h>
1717

1818
#include "rproc_ev3.h"
19+
#include "../uart/uart_ev3_pru.h"
1920

2021
volatile pbdrv_ev3_pru1_shared_ram_t pbdrv_ev3_pru1_shared_ram __attribute__((section(".shared1")));
2122

22-
extern char _pru1_start;
23-
extern char _pru1_end;
24-
2523
void pbdrv_rproc_init(void) {
2624
// Enable PRU subsystem
2725
PSCModuleControl(SOC_PSC_0_REGS, HW_PSC_PRU, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE);
2826

27+
// PRU0 initialization
28+
29+
extern uint8_t _pru0_start;
30+
extern uint8_t _pru0_end;
31+
uint32_t fw_size = &_pru0_end - &_pru0_start;
32+
uint8_t *fw_data = &_pru0_start;
33+
pbdrv_uart_ev3_pru_load_firmware(fw_data, fw_size);
34+
2935
// PRU1 initialization
3036

3137
// Enable Timer0 "34" half to count up to 256 * 256
@@ -38,6 +44,8 @@ void pbdrv_rproc_init(void) {
3844
memset((void *)&pbdrv_ev3_pru1_shared_ram, 0, sizeof(pbdrv_ev3_pru1_shared_ram));
3945

4046
// Enable PRU1 and load its firmware
47+
extern uint8_t _pru1_start;
48+
extern uint8_t _pru1_end;
4149
PRUSSDRVPruDisable(1);
4250
PRUSSDRVPruReset(1);
4351
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)