Skip to content

Commit 6507a6a

Browse files
committed
Added pruss halt function to pruss_stepper code API.
Cleanup, removal of duplicate code. Dump now shows whether the PRUSS was already halted at entry.
1 parent 8181b1e commit 6507a6a

File tree

3 files changed

+22
-10
lines changed

3 files changed

+22
-10
lines changed

pruss.c

+15-10
Original file line numberDiff line numberDiff line change
@@ -539,18 +539,23 @@ int pruss_init( const char* ucodename, struct ucode_signature* signature)
539539
return 0;
540540
}
541541

542+
int pruss_is_halted( void)
543+
{
544+
return ((pruss_rd32( PRUSS_PRU_CTRL_CONTROL) & PRUSS_PRU_CTRL_CONTROL_RUNSTATE) == 0);
545+
}
546+
542547
void pruss_wait_for_halt( void)
543548
{
544549
do {
545550
// The microcode is running, wait for HALT
546-
} while (pruss_rd32( PRUSS_PRU_CTRL_CONTROL) & PRUSS_PRU_CTRL_CONTROL_RUNSTATE);
551+
} while (!pruss_is_halted());
547552
}
548553

549554
// return old 'enable' state
550555
int pruss_stop_pruss( void)
551556
{
552-
uint32_t pruss_ctrl = pruss_rd32( PRUSS_PRU_CTRL_CONTROL);
553-
if (pruss_ctrl & PRUSS_PRU_CTRL_CONTROL_RUNSTATE) {
557+
if (!pruss_is_halted()) {
558+
uint32_t pruss_ctrl = pruss_rd32( PRUSS_PRU_CTRL_CONTROL);
554559
pruss_ctrl &= ~ PRUSS_PRU_CTRL_CONTROL_ENABLE; // clear enable bit
555560
pruss_wr32( PRUSS_PRU_CTRL_CONTROL, pruss_ctrl);
556561
pruss_wait_for_halt();
@@ -588,9 +593,13 @@ void pruss_start_pruss( void)
588593
int pruss_dump_state( void)
589594
{
590595
int i;
591-
int pruss_ena = pruss_stop_pruss();
596+
int pruss_ena = 0;
592597

593-
printf( "PRUSS was halted, extracting debug info...\n");
598+
if (!pruss_is_halted()) {
599+
pruss_stop_pruss();
600+
pruss_ena = 1;
601+
}
602+
printf( "PRUSS %shalted, extracting debug info...\n", (pruss_ena) ? "is temporarily " : "was found ");
594603
for (i = 0 ; i < 32 ; ++i) {
595604
uint32_t reg = pruss_rd32( PRUSS_DBG_OFFSET + 4 * i);
596605
printf( " R%-2d = 0x%08x (%10u)", i, reg, reg);
@@ -610,11 +619,7 @@ int pruss_dump_state( void)
610619

611620
if (pruss_ena) {
612621
pruss_start_pruss();
622+
printf( "PRUSS is enabled again\n");
613623
}
614624
return 0;
615625
}
616-
617-
int pruss_is_halted( void)
618-
{
619-
return ((pruss_rd32( PRUSS_PRU_CTRL_CONTROL) & PRUSS_PRU_CTRL_CONTROL_RUNSTATE) == 0);
620-
}

pruss_stepper.c

+6
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,12 @@ int pruss_queue_empty( void)
357357
return (pruss_get_nr_of_free_buffers() == PRUSS_FIFO_LENGTH - 1);
358358
}
359359

360+
// Simple wrapper prevents need for pruss.h inclusion
361+
int pruss_stepper_halted( void)
362+
{
363+
return pruss_is_halted();
364+
}
365+
360366
int pruss_wait_for_queue_space( void)
361367
{
362368
while (pruss_queue_full()) {

pruss_stepper.h

+1
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@ extern int pruss_queue_config_axis( int axis, uint32_t ssi, uint16_t sst, uint16
2323
extern int pruss_queue_set_enable( int on);
2424
extern int pruss_dump_position( int axis);
2525
extern int pruss_stepper_busy( void);
26+
extern int pruss_stepper_halted( void);
2627

2728
#endif

0 commit comments

Comments
 (0)