The PRU cookbook is nearing completion (more accurately, I'm running out of 
summer).

Here's a link https://markayoder.github.io/PRUCookbook/

I'm happy for any feedback you can give me.

--Mark

On Thursday, June 28, 2018 at 8:45:00 PM UTC-4, Neilh wrote:
>
> Ok thanks. I see I was think SHARED_RAM between the ARM-A8 and PRU0 and 
> its actually shared between ARM PRU0 and PRU1. Ahhhh-lightbulb---hhhhh
> Many thanks for the evolving cookbook and detailed explanation- I have got 
> a little lost at times digging through the manual - gosh I want to read all 
> the PRU sections - I'd have paid gold  4weeks ago when I started using the 
> PRUst!. 
> If it becomes a book I'll be first in line to buy it :).
> The PRUs are a cool part of the BBB - and now I've got it working appears 
> pretty simple.
>
>
> On Thu, Jun 28, 2018 at 12:59 PM Mark A. Yoder <mark.a...@gmail.com 
> <javascript:>> wrote:
>
>> Neilh:
>>   I've worked up some examples[1] for a PRU Cookbook that might help. I'm 
>> taking a similar approach to what you did, but I'm using DRAM0.  It 
>> shouldn't be hard
>> to switch to shared RAM.
>>
>> --Mark
>>
>> [1] 
>> https://markayoder.github.io/PRUCookbook/05blocks/blocks.html#_controlling_the_pwm_frequency
>>  
>>
>> On Wednesday, June 27, 2018 at 5:36:13 PM UTC-4, Neilh wrote:
>>>
>>> Oops I got it - it was sizing a pointer and not the struct.
>>>
>>> I'd be interested in anybody's comments on the use of the SHAREDRAM 
>>> approach as it makes for a very simple one way api. I'm partly publishing 
>>> this as a tutorial for anybody else - but its my first try at the PRU.
>>>
>>> Here is the logic anlayzer output from the Saleae 8 Channels mapping of 
>>> PRU0 to GPIO P9_25 ...P8_12
>>> There is an increasing pulse count chn0, and then fixed 1hz, 2hz... on 
>>> subsequent channels
>>>
>>>
>>>
>>> On Wed, Jun 27, 2018 at 2:13 PM Neil Hancock <neilh...@gmail.com> wrote:
>>>
>>>> Oops  - you are right, I'll update my comments
>>>>
>>>> Here is the code that is allocating the SHAREDRAM - though I'm still 
>>>> hazy as to how mmap() works in BBB mapping the SHAREDRAM
>>>>  
>>>> #define AM33XX_DATARAM0_PHYS_BASE 0x4a300000
>>>> #define AM33XX_DATARAM1_PHYS_BASE 0x4a302000
>>>> #define AM33XX_PRUSS_SHAREDRAM_BASE 0x4a310000
>>>> #define SHARED_RAM_SZ 16  /* grab 8*4 bytes or 8 words */
>>>>
>>>> volatile uint16_t *shared_dataram;
>>>>
>>>> /* Define an API to be calleable from JS -still needs work */
>>>>
>>>> void bbbio_ppm_api(struct channels_s *channels){
>>>>    memcpy((void *)shared_dataram,(void *)channels,sizeof(channels));
>>>> }
>>>>
>>>> void bbbio_ppm_init() {
>>>>    /* Allocate shared memory pointer to PRU0 DATARAM */
>>>> int mem_dev = open("/dev/mem", O_RDWR | O_SYNC);
>>>> volatile void *shared_dataram_init = mmap(NULL,
>>>>    SHARED_RAM_SZ, 
>>>> PROT_READ | PROT_WRITE,
>>>> MAP_SHARED,
>>>> mem_dev,
>>>> AM33XX_PRUSS_SHAREDRAM_BASE
>>>> );
>>>> shared_dataram = (uint16_t *) shared_dataram_init;
>>>> }
>>>>
>>>> void bbbio_ppm_cleanup() {
>>>> munmap((void *)shared_dataram,SHARED_RAM_SZ); //njh guess at releasing 
>>>> it.
>>>> }
>>>>
>>>> #ifdef MAIN_LOCAL
>>>> void main() {
>>>> unsigned int sec_i, chnl_j;
>>>> unsigned int offset;
>>>>    struct channels_s  channels;
>>>>    volatile uint16_t *shared_dataram2;
>>>>
>>>>    bbbio_ppm_init();
>>>>    uint16_t ppm =60;//actually 
>>>>     
>>>> offset = 0;
>>>> channels.chn[offset].sr =ppm;
>>>> printf("shared_datara2 = %p, offset=%d At init Read:", 
>>>> shared_dataram,offset);
>>>>    shared_dataram2 = (uint16_t *) shared_dataram;
>>>> for(chnl_j=0; chnl_j<8; chnl_j++) {
>>>> printf(" %04d",  *shared_dataram2);
>>>>    shared_dataram2++;
>>>>    if (0x3 ==(chnl_j & 0x3)){printf("   ");}
>>>>    }
>>>>    printf("\n");
>>>>     
>>>>    ppm =0;
>>>> for(chnl_j=0; chnl_j<8; chnl_j++) {
>>>>       channels.chn[chnl_j].sr=ppm;
>>>>       ppm += 60;
>>>>     }
>>>>     //Fut - wait for ack from PRU and then init shared ram
>>>>
>>>>     //while (1) 
>>>>     {
>>>>     ppm=60;
>>>>     for(sec_i=0; sec_i<8; sec_i++) {
>>>>        channels.chn[offset].sr +=ppm;
>>>>     //memcpy((void *)shared_dataram,(void *)&channels,sizeof(channels));
>>>> bbbio_ppm_api(&channels);
>>>>     printf("Writing %04d Read:", ppm);
>>>>     shared_dataram2 = (uint16_t *) shared_dataram;
>>>>     for(chnl_j=0; chnl_j<8; chnl_j++) {
>>>>        printf(" %04d",  *shared_dataram2);
>>>>        shared_dataram2++;
>>>>        if (0x3 ==(chnl_j & 0x3)){printf("   ");}
>>>>          }
>>>>          printf("\n");
>>>>          sleep(1);
>>>>     }
>>>> }
>>>> bbbio_ppm_cleanup();
>>>> }
>>>>
>>>> #endif //MAIN_LOCAL
>>>>
>>>> On Wed, Jun 27, 2018 at 1:33 PM Dennis Lee Bieber <wlf...@ix.netcom.com> 
>>>> wrote:
>>>>
>>>>> On Wed, 27 Jun 2018 12:18:27 -0700, Neil Hancock
>>>>> <neilh...@gmail.com> declaimed the
>>>>> following:
>>>>>
>>>>> > with 8*int16 (or 32bytes).
>>>>> >
>>>>>         Pardon?
>>>>>
>>>>>         int16 is 2-bytes, 8*2 => 16 bytes
>>>>>
>>>>> >Initially I tried 8*int32 (64bytes) but could only sucessfully use the
>>>>> >first 5*int32(40bytes
>>>>> >
>>>>>         Similarly, int32 is 4-bytes, 8*4 => 32; 5*4 => 20
>>>>>
>>>>>
>>>>>
>>>>> -- 
>>>>>         Wulfraed                 Dennis Lee Bieber         AF6VN
>>>>>         wlf...@ix.netcom.com    HTTP://wlfraed.home.netcom.com/ 
>>>>>
>>>>> -- 
>>>>> For more options, visit http://beagleboard.org/discuss
>>>>> --- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "BeagleBoard" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to beagleboard...@googlegroups.com.
>>>>> To view this discussion on the web visit 
>>>>> https://groups.google.com/d/msgid/beagleboard/pvs7jdpvq34jft17pkpeljrk5p0scj487r%404ax.com
>>>>> .
>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>
>>>> -- 
>> For more options, visit http://beagleboard.org/discuss
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "BeagleBoard" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to beagleboard...@googlegroups.com <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/beagleboard/a90eb811-c902-4a20-96fa-31e1b03abb5a%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/beagleboard/a90eb811-c902-4a20-96fa-31e1b03abb5a%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to beagleboard+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/5ef1cbae-0e43-47dc-83b1-dead26d1645d%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to