> > *BTW, I believe the BeaglePilot project is running those drivers on the > PRU, so this is the same as running on the Cortex-A8 bare-metal. * >
I'll take your word on that, as I have not really done much with that git project. Initially, I found it a waste of my time. Perhaps later I'll revisit it and see what I missed. But I also initially started learning how to use the ti-cgt PRU C compiler, but without CCS ( I prefer to stay as close to gcc as possible ), and found it rather difficult to proceed passed getting basic stuff working. So, I went back to attempting to "relearn" asm, and in the process learn PASM, and the PRU instruction set. Which of course initially I had a hard time with too, but I'm starting to understand more now. Now I remember why I gave up on assembly so many years ago . . . the syntax is enough to make anyone "choke" . . . On Mon, Nov 2, 2015 at 11:47 AM, 'Mark Lazarewicz' via BeagleBoard < [email protected]> wrote: > I'd use Starterware as intended with a real RTOS like TI RTOS > > Sent from Yahoo Mail on Android > <https://overview.mail.yahoo.com/mobile/?.src=Android> > ------------------------------ > *From*:"John Syne" <[email protected]> > *Date*:Mon, Nov 2, 2015 at 1:12 PM > *Subject*:Re: [beagleboard] I2C driver by PRU > > Yeah, I agree. Running Starterware as bare metal is a real pain because so > many subsystems have to be configured correctly before anything works. If > you can run this from within Linux, then you have the added benefits of > knowing that clocks, memory, etc have already been setup for you. Be > careful when running the drivers, because they do try to setup > clocks/memory/bus and that may interfere with the Linux kernel. I haven’t > tried this so I have no idea. One other complication is Linux uses an MMU > so the peripherals memory map will not match the TRM. For example, MCSPI0 > is located at 0xFA030000, not 0x48030000 and EDMA is located at 0xFB000000, > not 0x49000000 > > Regards, > John > > > > > On Nov 2, 2015, at 9:54 AM, William Hermans <[email protected]> wrote: > > Ah ! Since John is mentioning starterware + bare metal, I must mention > that it is not necessary to run bare metal in order to use the starterware > driver files. The github project above that I linked to is an example of > how to do that(also). > > This is not to say that you can not , or should not run bare metal. I'm > just putting it out there that it is not a requirement. > > On Mon, Nov 2, 2015 at 10:49 AM, John Syne <[email protected]> wrote: > >> A few pieces of advise on how to get these examples to work. Make sure to >> boot with the custom MLO provided with Starterware as this sets up memory >> and clocks required by Starterware. Also don’t forget to use the GEL file >> when launching CCSV6. I also had to add a watchdog disable to the GEL file >> or else BBB just keeps on rebooting. I have attached my custom GEL file. >> >> >> -- >> 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 [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> >> >> >> Regards, >> John >> >> >> >> >> On Nov 2, 2015, at 9:29 AM, William Hermans <[email protected]> wrote: >> >> Here is one such project, although I'm not sure this is the one I was >> thinking of >> >> https://github.com/BeaglePilot/PRUSS-C >> >> the starterware stuff is located in the PRUSS_LIB sub directory. >> >> On Mon, Nov 2, 2015 at 10:21 AM, William Hermans <[email protected]> >> wrote: >> >>> Yeah that link John gave out seems good. I've been meaning to follow it >>> myself for a couple weeks now. But I've been doing other things waiting for >>> remoteproc / rpmsg to settle down. >>> >>> I really like the idea of remoteproc / rpmsg, it seems very intuitive / >>> natural. >>> >>> Also Micka, there is *some* github project that uses starterware too . . >>> . demonstrating how to use starterware inside a ti_cgt C compiler project . >>> . . I do not remember which it is, so may not be able to find a link to it >>> . . . >>> >>> On Mon, Nov 2, 2015 at 8:37 AM, John Syne <[email protected]> wrote: >>> >>>> Hi Micka, >>>> >>>> Follow this tutorial: >>>> >>>> http://processors.wiki.ti.com/index.php/PRU_Training:_Hands-on_Labs >>>> >>>> Regards, >>>> John >>>> >>>> >>>> >>>> >>>> On Nov 2, 2015, at 1:26 AM, Micka <[email protected]> wrote: >>>> >>>> Ok, the problem is that in a PRU project you don't have access to the >>>> I2C function that you have in the starterware :'( . >>>> >>>> >>>> I guess that I need to code in ASM then ^^ . >>>> >>>> Le lun. 2 nov. 2015 à 10:01, Micka <[email protected]> a écrit : >>>> >>>>> I found that : >>>>> >>>>> >>>>> http://www.element14.com/community/community/designcenter/single-board-computers/next-gen_beaglebone//blog/2014/04/30/bbb--pru-c-compiler >>>>> >>>>> >>>>> Le lun. 2 nov. 2015 à 09:48, Micka <[email protected]> a écrit : >>>>> >>>>>> Ok, thx for the tips. >>>>>> >>>>>> I've CCS & starterware installed. I found the I2C driver. But how do >>>>>> you create a PRU project for the beaglebone black ? >>>>>> >>>>>> In the CCS App center, the PRU compiler is installed, but I can't >>>>>> find how to create a PRU project ? >>>>>> >>>>>> >>>>>> Micka, >>>>>> >>>>>> >>>>>> Le lun. 2 nov. 2015 à 01:30, John Syne <[email protected]> a écrit : >>>>>> >>>>>>> Hi Micka, >>>>>>> >>>>>>> With a few tweaks, you can use the drivers from Staterware[1] and >>>>>>> use the PRU C compiler. My advice is to use Starterware on the CortexA8 >>>>>>> to >>>>>>> get familiar with the examples, utilities and driver code. Next you >>>>>>> want to >>>>>>> pull out just the driver and utility code you need and put it into one >>>>>>> file, compile with the PRU C compiler and fix errors and warnings. Don’t >>>>>>> forget to add CT_CFG.SYSCFG_bit.STANDBY_INIT = 0;[2] to the start >>>>>>> of main(). >>>>>>> >>>>>>> I do this all with a JTAG emulator. Not sure how you will be able to >>>>>>> debug this code otherwise. >>>>>>> >>>>>>> [1] http://www.ti.com/tool/starterware-sitara >>>>>>> [2] https://git.ti.com/pru-software-support-package >>>>>>> >>>>>>> >>>>>>> Regards, >>>>>>> John >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Nov 1, 2015, at 4:06 PM, William Hermans <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>> By the way, I keep seeing stuff like "C2" in PASM assembly in regard >>>>>>> to the PRU's. Wish I could figure out what it is . . . Seems to be some >>>>>>> sort of constant "register" ? And there is more than just C2, but I have >>>>>>> not found any reference to those yet :/ >>>>>>> >>>>>>> On Sun, Nov 1, 2015 at 5:01 PM, William Hermans <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Hi Micka, >>>>>>>> >>>>>>>> I do not think he is using and driver. When speaking of the I2C >>>>>>>> module, I believe hes speaking of the physical on chip module. But >>>>>>>> this . . >>>>>>>> . >>>>>>>> >>>>>>>> #define I2C1_BASE C2 //base registri I2C1 >>>>>>>> nella tabella >>>>>>>> >>>>>>>> translated from Italian to English . . . *I2C1 base registers in >>>>>>>> the table *which seems to me he is setting up the I2C hardware >>>>>>>> module directly through it's registers in memory. But the other link, >>>>>>>> he >>>>>>>> pasted I do not know if you saw it or not >>>>>>>> http://beagleboard.org/Community/Forums/?place=msg%2Fbeagleboard%2FDAXyYJOrDIc%2FDZ8WKkRWaC0J >>>>>>>> he talks about the problem being solved and he was not bringing >>>>>>>> the hardware module out of reset, which is similar to how the ADC >>>>>>>> module >>>>>>>> works. >>>>>>>> >>>>>>>> Wish I could help you more, but I know nearly nothing about I2C. I >>>>>>>> know what it is, and vaguely how it's done, but have never used I2C . >>>>>>>> . . >>>>>>>> >>>>>>>> On Sun, Nov 1, 2015 at 2:45 PM, Micka <[email protected]> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I'm interested by what you have done. I want to use i2c to read >>>>>>>>> analog value from a component. >>>>>>>>> >>>>>>>>> The first solution that I found was to bitbang the i2c. But you, >>>>>>>>> you use the i2c driver which is nice. >>>>>>>>> >>>>>>>>> Could you give us the peace of asm code that you use to interface >>>>>>>>> with the MCP23017. And if you have the c code also it would be great. >>>>>>>>> >>>>>>>>> >>>>>>>>> ( if possible, also the part of you managed to activate the module >>>>>>>>> by writing MODULEMODE field into register CM_PER_I2C1_CLKCTRL >>>>>>>>> register and >>>>>>>>> also the code that wait for IDLEST field to confirm that module is >>>>>>>>> ready). >>>>>>>>> >>>>>>>>> Micka, >>>>>>>>> >>>>>>>>> Le dim. 19 juil. 2015 21:45, Gianfranco Rosso < >>>>>>>>> [email protected]> a écrit : >>>>>>>>> >>>>>>>>> I've also posted this in I2C topic, the solution is there: >>>>>>>>> >>>>>>>>> >>>>>>>>> http://beagleboard.org/Community/Forums/?place=msg%2Fbeagleboard%2FDAXyYJOrDIc%2FDZ8WKkRWaC0J >>>>>>>>> >>>>>>>>> >>>>>>>>> Il giorno lunedì 13 luglio 2015 09:49:20 UTC+2, Gianfranco Rosso >>>>>>>>> ha scritto: >>>>>>>>> >>>>>>>>> I want to manage the I2C1 module by the PRU, in order to interface >>>>>>>>> some I/O expanders (MCP23017 by Microchip). >>>>>>>>> I use may own "cape" without the plug-n' play eeprom (one of the >>>>>>>>> next steps will be adding management for DCAN0 and DCAN1 so i'll need >>>>>>>>> these >>>>>>>>> pins too...). >>>>>>>>> So, at present, there are just 2 MCP23017 connected to the P9.17 >>>>>>>>> and P9.18. >>>>>>>>> >>>>>>>>> I load the *cape-universal* into slots and then I use >>>>>>>>> *configure-pin* command to set P9.17 and P9.18 as *i2c* >>>>>>>>> >>>>>>>>> I've started from an example into the *am335x_pru_package-master* and >>>>>>>>> wrote my own C PRU loader. >>>>>>>>> Very simple, it just: >>>>>>>>> >>>>>>>>> loads the PRU codeinit the data exhanged with the PRUstart the >>>>>>>>> PRUwait for ESC key presssignal to the PRU to stopwait for the PRU >>>>>>>>> stopexit. >>>>>>>>> >>>>>>>>> >>>>>>>>> Also the assembly PRU code is simple: >>>>>>>>> >>>>>>>>> init I2C1 module (by writing registers PSC, SCLL, SCLH, CON)init >>>>>>>>> 1st I/O expander as 16 inputs (even if at power on it's already set as >>>>>>>>> input)init 2nd I/O expander as 16 outputscicle reading status of >>>>>>>>> inputs >>>>>>>>> from 1st expander and echoing to the outputs of 2nd expanderexit >>>>>>>>> cycle and >>>>>>>>> halt when receive stop flag from the loader >>>>>>>>> >>>>>>>>> for send and receive I2C messages I use register SA, CNT, DATA and >>>>>>>>> CON. >>>>>>>>> >>>>>>>>> That's very simple and linear... pity, it doesn't work. >>>>>>>>> >>>>>>>>> *I didn't see any activity at all in P9.17 and P9.18*. >>>>>>>>> >>>>>>>>> The PRU code is surely running, as I add a cycle counter and show >>>>>>>>> it in the loader while it's waiting for ESC keypress, and also the >>>>>>>>> PRU code >>>>>>>>> correctly stops at the loader command. >>>>>>>>> >>>>>>>>> I was expecting that the PRU code stalls if I2C bus doesn't work, >>>>>>>>> as there are waiting cycles both for STOP condition or for CNT >>>>>>>>> reaching >>>>>>>>> zero (depending on the write or read message sending). >>>>>>>>> >>>>>>>>> But it seems running, and running very fast also: the cycle >>>>>>>>> counter is incremented to a very fast rate (over 550 kcycles/s) >>>>>>>>> that's not >>>>>>>>> compatible with the correct executing of I2C sequences (I've setted >>>>>>>>> the >>>>>>>>> module for 400Kbps rate... so the PRU cycle it's even faster than a >>>>>>>>> single >>>>>>>>> I2C bit time!). >>>>>>>>> >>>>>>>>> I'm surely doing something wrong, but I cant fugure what. >>>>>>>>> >>>>>>>>> Any idea? >>>>>>>>> >>>>>>>>> Suggestions? >>>>>>>>> >>>>>>>>> Inserisci qui il codice... >>>>>>>>> >>>>>>>>> .origin 0 >>>>>>>>> .entrypoint START >>>>>>>>> >>>>>>>>> #include "iic_ioexp.hp" >>>>>>>>> >>>>>>>>> //costanti per l'accesso al modulo I2C1 >>>>>>>>> #define I2C1_BASE C2 //base registri >>>>>>>>> I2C1 nella tabella costanti >>>>>>>>> #define I2C_SYSC 0x10 //offset del registro >>>>>>>>> I2C_SYSC >>>>>>>>> #define I2C_STAT_RAW 0x24 //offset del registro >>>>>>>>> I2C_STATUS_RAW >>>>>>>>> #define I2C_SYSS 0x90 //offset del registro >>>>>>>>> I2C_SYSS >>>>>>>>> #define I2C_CNT 0x98 //offset del >>>>>>>>> registro I2C_CNT >>>>>>>>> #define I2C_DATA 0x9C //offset del registro >>>>>>>>> I2C_DATA >>>>>>>>> #define I2C_CON 0xA4 //offset del >>>>>>>>> registro I2C_CON >>>>>>>>> #define I2C_SA 0xAC //offset del >>>>>>>>> registro I2C_SA >>>>>>>>> #define I2C_PSC 0xB0 //offset del >>>>>>>>> registro I2C_PSC >>>>>>>>> #define I2C_SCLL 0xB4 //offset del registro >>>>>>>>> I2C_SCLL >>>>>>>>> #define I2C_SCLH 0xB8 //offset del registro >>>>>>>>> I2C_SCLH >>>>>>>>> >>>>>>>>> #define I2C_CMD_ENABLE 0x8400 //modulo I2C >>>>>>>>> abilitato come master >>>>>>>>> #define I2C_CMD_TX 0x0200 //modulo I2C in >>>>>>>>> trasmissione >>>>>>>>> #define I2C_CMD_RX 0x0000 //modulo I2C in >>>>>>>>> ricezione >>>>>>>>> #define I2C_CMD_START 0x0001 //modulo I2C >>>>>>>>> richiesta generazione sequenza START >>>>>>>>> #define I2C_CMD_STOP 0x0002 //modulo I2C >>>>>>>>> richiesta generazione sequenza STOP >>>>>>>>> >>>>>>>>> //costanti per l'accesso all'I/O expander MCP23017 >>>>>>>>> #define IO_EXP0 0x20 //7bit I2C address >>>>>>>>> dell'I/O expander 0 (ingressi) >>>>>>>>> #define IO_EXP1 0x21 //7bit I2C address >>>>>>>>> dell'I/O expander 1 (uscite) >>>>>>>>> >>>>>>>>> #define IO_EXP_IODIRA 0x00 //indirizzo registro >>>>>>>>> IODIRA dell'I/O expander >>>>>>>>> #define IO_EXP_GPIOA 0x12 //indirizzo registro >>>>>>>>> GPIOA dell'I/O expander >>>>>>>>> >>>>>>>>> >>>>>>>>> //====================================================================== >>>>>>>>> >>>>>>>>> //macro che attende fine sequenza verificando generazione seqeunza >>>>>>>>> di STOP >>>>>>>>> .macro I2C_WAIT_BY_STOP >>>>>>>>> _CHECK: >>>>>>>>> LBCO r1.w0, I2C1_BASE, I2C_CON, 2 >>>>>>>>> QBBS _CHECK, r1.t1 >>>>>>>>> .endm >>>>>>>>> >>>>>>>>> //macro che attende fine sequenza verificando generazione seqeunza >>>>>>>>> di STOP >>>>>>>>> .macro I2C_WAIT_BY_COUNT >>>>>>>>> _CHECK: >>>>>>>>> LBCO r1.w0, I2C1_BASE, I2C_CNT, 2 >>>>>>>>> QBNE _CHECK, r1.w0, 0 >>>>>>>>> .endm >>>>>>>>> >>>>>>>>> >>>>>>>>> //====================================================================== >>>>>>>>> >>>>>>>>> START: >>>>>>>>> // clear that bit >>>>>>>>> LBCO r0, >>>>>>>>> >>>>>>>>> on >>>>>>>>> >>>>>>>>> , 4, 4 >>>>>>>>> CLR r0, r0, 4 >>>>>>>>> SBCO r0, C4, 4, 4 >>>>>>>>> >>>>>>>>> >>>>>>>>> //------------------------------------------------------------------ >>>>>>>>> //configurazione modulo I2C1 >>>>>>>>> >>>>>>>>> //reset del modulo I2C1 >>>>>>>>> MOV r1.w0, 0x0002 >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_SYSC, 2 >>>>>>>>> >>>>>>>>> MOV r1.w0, 0x0000 >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_SYSC, 2 >>>>>>>>> >>>>>>>>> // //attesa fine reset modulo >>>>>>>>> //_WAIT_RDONE: >>>>>>>>> // LBCO r1, I2C1_BASE, I2C_SYSS, 4 >>>>>>>>> // QBBC _WAIT_RDONE, r1.t0 >>>>>>>>> >>>>>>>>> //configura prescaler e durata SCL H/L per avere 400kHz >>>>>>>>> MOV r1.b0, 4 //prescaler=4+1 --> >>>>>>>>> ICLK=SCLK/prescaler=100/5=20MHz (nel reference manual raccomandano >>>>>>>>> circa >>>>>>>>> 24Mhz) >>>>>>>>> SBCO r1.b0, I2C1_BASE, I2C_PSC, 1 >>>>>>>>> >>>>>>>>> MOV r1.b0, 18 //durata SCL L=18+7 --> >>>>>>>>> tLOW=1/ICLK*(SCLL+7)=1/20E6*(18+7)=1.25us >>>>>>>>> SBCO r1.b0, I2C1_BASE, I2C_SCLL, 1 >>>>>>>>> >>>>>>>>> MOV r1.b0, 20 //durata SCL H=20+5 --> >>>>>>>>> tHIGH=1/ICLK*(SCLH+5)=1/20E6*(20+5)=1.25us >>>>>>>>> SBCO r1.b0, I2C1_BASE, I2C_SCLH, 1 >>>>>>>>> >>>>>>>>> //abilita modulo >>>>>>>>> MOV r1.w0, I2C_CMD_ENABLE >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_CON, 2 >>>>>>>>> >>>>>>>>> >>>>>>>>> //------------------------------------------------------------------ >>>>>>>>> //inizializzazione IOEXP 0 >>>>>>>>> >>>>>>>>> //indirizzo slave >>>>>>>>> MOV r1.w0, IO_EXP0 >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_SA, 2 >>>>>>>>> >>>>>>>>> //n. byte da spedire >>>>>>>>> MOV r1.w0, 3 >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_CNT, 2 >>>>>>>>> >>>>>>>>> //riempie FIFO >>>>>>>>> MOV r1, IO_EXP_IODIRA | 0x00FFFF00 //tutti i pin come >>>>>>>>> ingressi (in realta' e' gia' cosi' dal POR) >>>>>>>>> SBCO r1.b0, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> SBCO r1.b1, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> SBCO r1.b2, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> >>>>>>>>> //attesa bus free >>>>>>>>> _WAIT_BB: >>>>>>>>> LBCO r1, I2C1_BASE, I2C_STAT_RAW, 4 >>>>>>>>> QBBS _WAIT_BB, r1.t12 >>>>>>>>> >>>>>>>>> //comando scrittura >>>>>>>>> MOV r1.w0, I2C_CMD_ENABLE | I2C_CMD_TX | I2C_CMD_START | >>>>>>>>> I2C_CMD_STOP >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_CON, 2 >>>>>>>>> >>>>>>>>> I2C_WAIT_BY_STOP >>>>>>>>> >>>>>>>>> >>>>>>>>> //------------------------------------------------------------------ >>>>>>>>> //inizializzazione IOEXP 1 >>>>>>>>> >>>>>>>>> //indirizzo slave >>>>>>>>> MOV r1.w0, IO_EXP1 >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_SA, 2 >>>>>>>>> >>>>>>>>> //n. byte da spedire gia' impostato >>>>>>>>> >>>>>>>>> //riempie FIFO >>>>>>>>> MOV r1, IO_EXP_IODIRA | 0x00000000 //tutti pin come >>>>>>>>> uscita >>>>>>>>> SBCO r1.b0, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> SBCO r1.b1, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> SBCO r1.b2, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> >>>>>>>>> //comando scrittura >>>>>>>>> MOV r1.w0, I2C_CMD_ENABLE | I2C_CMD_TX | I2C_CMD_START | >>>>>>>>> I2C_CMD_STOP >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_CON, 2 >>>>>>>>> >>>>>>>>> I2C_WAIT_BY_STOP >>>>>>>>> >>>>>>>>> >>>>>>>>> //------------------------------------------------------------------ >>>>>>>>> //ciclo rinfresco I/O >>>>>>>>> >>>>>>>>> _LOOP: >>>>>>>>> >>>>>>>>> >>>>>>>>> //------------------------------------------------------------------ >>>>>>>>> //legge ingressi >>>>>>>>> >>>>>>>>> //indirizzo slave >>>>>>>>> MOV r1.w0, IO_EXP0 >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_SA, 2 >>>>>>>>> >>>>>>>>> //n. byte da spedire >>>>>>>>> MOV r1.w0, 1 >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_CNT, 2 >>>>>>>>> >>>>>>>>> //riempie FIFO >>>>>>>>> MOV r1, IO_EXP_GPIOA >>>>>>>>> SBCO r1.b0, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> >>>>>>>>> //comando scrittura >>>>>>>>> MOV r1.w0, I2C_CMD_ENABLE | I2C_CMD_TX | I2C_CMD_START >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_CON, 2 >>>>>>>>> >>>>>>>>> I2C_WAIT_BY_COUNT >>>>>>>>> >>>>>>>>> //n. byte da ricevere >>>>>>>>> MOV r1.w0, 2 >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_CNT, 2 >>>>>>>>> >>>>>>>>> //comando lettura >>>>>>>>> MOV r1.w0, I2C_CMD_ENABLE | I2C_CMD_RX | I2C_CMD_START | >>>>>>>>> I2C_CMD_STOP >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_CON, 2 >>>>>>>>> >>>>>>>>> I2C_WAIT_BY_STOP >>>>>>>>> >>>>>>>>> //legge i byte ricevuti >>>>>>>>> LBCO r2.b1, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> LBCO r2.b2, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> >>>>>>>>> >>>>>>>>> //------------------------------------------------------------------ >>>>>>>>> //scrive uscite >>>>>>>>> >>>>>>>>> //indirizzo slave >>>>>>>>> MOV r1.w0, IO_EXP1 >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_SA, 2 >>>>>>>>> >>>>>>>>> //n. byte da spedire >>>>>>>>> MOV r1.w0, 3 >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_CNT, 2 >>>>>>>>> >>>>>>>>> //riempie FIFO >>>>>>>>> MOV r2.b0, IO_EXP_GPIOA >>>>>>>>> SBCO r2.b0, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> SBCO r2.b0, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> SBCO r2.b0, I2C1_BASE, I2C_DATA, 1 >>>>>>>>> >>>>>>>>> //comando scrittura >>>>>>>>> MOV r1.w0, I2C_CMD_ENABLE | I2C_CMD_TX | I2C_CMD_START | >>>>>>>>> I2C_CMD_STOP >>>>>>>>> SBCO r1.w0, I2C1_BASE, I2C_CON, 2 >>>>>>>>> >>>>>>>>> I2C_WAIT_BY_STOP >>>>>>>>> >>>>>>>>> >>>>>>>>> //------------------------------------------------------------------ >>>>>>>>> LBCO r2, CONST_PRUDRAM, 0, 4 >>>>>>>>> ADD r2, r2, 1 >>>>>>>>> SBCO r2, CONST_PRUDRAM, 0, 4 >>>>>>>>> >>>>>>>>> >>>>>>>>> //------------------------------------------------------------------ >>>>>>>>> //esce dal ciclo e se il flag di uscita nella ram condivisa >>>>>>>>> e' azzerato >>>>>>>>> LBCO r2, CONST_PRUDRAM, 4, 1 >>>>>>>>> QBNE _LOOP, r2.b0, 0 >>>>>>>>> >>>>>>>>> _EXIT: >>>>>>>>> //invia all'host la notifica di programma completato >>>>>>>>> MOV R31.b0, PRU0_ARM_INTERRUPT+16 >>>>>>>>> >>>>>>>>> HALT >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> 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 [email protected]. >>>>>>>>> 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 [email protected]. >>>>>>>>> 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 [email protected]. >>>>>>> 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 [email protected]. >>>>>>> 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 [email protected]. >>>> 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 [email protected]. >>>> 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 [email protected]. >> 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 [email protected]. >> 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 [email protected]. > 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 [email protected]. > 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
