Advertisement
Guest User

PRU loading example

a guest
Feb 26th, 2012
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.79 KB | None | 0 0
  1.  
  2. struct dmem_t {
  3.         u_int32_t addr; /* r8 */
  4.         u_int32_t size; /* r9 */
  5.         u_int32_t fill; /* r10 */
  6.         u_int32_t count; /* r11 */
  7. };
  8.  
  9.  
  10.  
  11. int
  12. main()
  13. {
  14.         unsigned int ret;
  15.         void *extvirt;
  16.         struct dmem_t dmem;
  17.         tpruss_intc_initdata pruss_intc_initdata = PRUSS_INTC_INITDATA;
  18.  
  19.         prussdrv_init();
  20.  
  21.  
  22.         /* Open PRU Interrupt */
  23.         printf("Opening PRU\n");
  24.         ret = prussdrv_open(PRU_EVTOUT_0);
  25.         if (ret)
  26.         {
  27.                 printf("prussdrv_open open failed\n");
  28.                 return (ret);
  29.         }
  30.  
  31.         prussdrv_map_extmem(&extvirt);
  32.         dmem.addr = prussdrv_get_phys_addr(extvirt);
  33.         dmem.size = prussdrv_map_extmem_size();
  34.         dmem.fill = 0xDEADBEEF;
  35.         dmem.count= 4;
  36.  
  37.  
  38. printf("physical=0x%08x, virtual=%p\n", dmem.addr, extvirt);
  39.  
  40.         printf("Disabling PRU0\n");
  41.         prussdrv_pru_disable(PRU_NUM);
  42.  
  43.         ret = prussdrv_pru_write_memory(PRUSS0_PRU0_DATARAM, 0, (unsigned int *) &dmem, sizeof(dmem));
  44.  
  45.         prussdrv_pruintc_init(&pruss_intc_initdata);
  46.  
  47.         long len = sizeof(PDSPcode);
  48.         printf("Loading %ld bytes of instructions into PRU\n", len);
  49.  
  50.         prussdrv_pru_write_memory(PRUSS0_PRU0_IRAM, 0, (unsigned int *) PDSPcode, len);
  51.  
  52.  
  53.         printf("\nStarting PRU\n");
  54.         prussdrv_pru_enable(PRU_NUM);
  55.  
  56.  
  57.         printf("Press enter to generate an interrupt.\n");
  58.         getchar();
  59.  
  60.         printf ("\tGenerate interrupt \n");
  61.         prussdrv_pru_send_event (ARM_PRU0_INTERRUPT);
  62.  
  63.         printf("Done.\n");
  64.  
  65.  
  66.         u_int32_t *ptr = (u_int32_t *) extvirt;
  67.         int i;
  68.         for(i=0; i<dmem.count; ++i) {
  69.                 printf("%08x ", *ptr++);
  70.         }
  71.         printf("\n");
  72.  
  73.         return 0;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement