Enter code here...#include <stdio.h>
#include <stdio.h>
#include <prussdrv.h>
#include <pruss_intc_mapping.h>
#include <unistd.h>
#define PRU_SHARED_MEM_ADDR 0x00012000
#define SHM_OFFSET 2048
static int pru_cleanup(void) {
int rtn = 0;
/* clear the event (if asserted) */
if(prussdrv_pru_clear_event(PRU_EVTOUT_0, PRU0_ARM_INTERRUPT)) {
fprintf(stderr, "prussdrv_pru_clear_event() failed\n");
rtn = -1;
}
/* halt and disable the PRU (if running) */
if((rtn = prussdrv_pru_disable(0)) != 0) {
fprintf(stderr, "prussdrv_pru_disable() failed\n");
rtn = -1;
}
/* release the PRU clocks and disable prussdrv module */
if((rtn = prussdrv_exit()) != 0) {
fprintf(stderr, "prussdrv_exit() failed\n");
rtn = -1;
}
return rtn;
}
static int pru_setup(const char * const path) {
int rtn;
tpruss_intc_initdata intc = PRUSS_INTC_INITDATA;
if(!path) {
fprintf(stderr, "pru_setup(): path is NULL\n");
return -1;
}
/* initialize PRU */
if((rtn = prussdrv_init()) != 0) {
fprintf(stderr, "prussdrv_init() failed\n");
return rtn;
}
/* open the interrupt */
if((rtn = prussdrv_open(PRU_EVTOUT_0)) != 0) {
fprintf(stderr, "prussdrv_open() failed\n");
return rtn;
}
/* initialize interrupt */
if((rtn = prussdrv_pruintc_init(&intc)) != 0) {
fprintf(stderr, "prussdrv_pruintc_init() failed\n");
return rtn;
}
/* load and run the PRU program */
if((rtn = prussdrv_exec_program(0, path)) < 0) {
fprintf(stderr, "prussdrv_exec_program() failed\n");
return rtn;
}
return rtn;
}
volatile int32_t* init_prumem()
{
volatile int32_t* p;
prussdrv_map_prumem(PRUSS0_SHARED_DATARAM, (void**)&p);
return p+SHM_OFFSET;
}
int main()
{
printf("Init PRU......\n");
int ret = pru_setup("PRUTest.bin");
if(ret == -1) return -1;
volatile int* shared_mem = init_prumem();
//usleep(1000000);
printf("Waiting for message...\n");
shared_mem[0] = 5;
shared_mem[1] = 10;
prussdrv_pru_send_event(ARM_PRU0_INTERRUPT);
int n = prussdrv_pru_wait_event(PRU_EVTOUT_0);
printf("Pru ended. Event: %i\n", n);
printf("Got number %d\n", shared_mem[2]);
pru_cleanup();
return 0;
}
In this example, the c code should never exit because the PRU code should be waiting for a second signal, but it does exit. How do I reset the signal so that I can reuse the interrupt?