Hi, I am not sire about the 2131, but the 2138 has a SPI and SSP. The SPI only does 8 bit and the SSP allows from 4 (?) to 16 which is programmable. Charles --- In lpc2000@yahoogroups.com, "drb5599" <dbutler@c...> wrote: > Thanks for the good info guys. I am looking at the assembly code > for changing the SPI registers. It's just a couple simple lines: > > 165: S0SPCR = 0x0C24; // Changed to 12-bits per transfer for LCD > format. > 0x0000215E 2124 MOV R1,#0x24 > 0x00002160 4829 LDR R0,[PC,#0x00A4] > 0x00002162 7001 STRB R1,[R0,#0x00] > > you can see that the assembly code just puts the 0x24 in R1, the > upper byte is gone? Why would it do this? I am using the memory > and register watch windows as I step thru this code. It is very > clear to see that the upper byte is just ignored. It's like the > compiler thinks the S0SPCR register is 8-bits instead of 16. > Ah.............. > That just made me look in the LPC21xx.h file where: > #define S0SPCR (*((volatile unsigned char *) 0xE0020000)) > yes, it is defined as a char so it will only look at the first byte. > So I changed the char to short. > NO......it still does not work.???? > > Yes, I am using a GPIO for SEL. That seems to work fine, I just > can't change the size of the SPI buffer? > > -Dave > > > > > > --- In lpc2000@yahoogroups.com, Rob Jansen <rob@m...> wrote: > > Dave, > > > > > So I configured the SPI control register to operate in this > > > mode. > > > > > > S0SPCR = 0x0C24; > > > ... > > > However, when I step thru my code, and look at the S0SPCR > register, > > > it > > > is written with a 0x0424!!!!!!!!!!!!! > > > > Strange, I tried this on my 2138 and there it all works (to say, > writing > > to the register works). > > Should work on the 2131 also. > > I wrote a small program > > (http://www.myvoice.nl/electronics/files/io-test.zip) to read and > write > > registers and memory - served me well a few times. typing "w > e0020000 > > c24" will write to the memory location and read it back > afterwards. > > Typing "r e0020000" will read the memory. I used this program > myself > > already a few times - as soon as I don't trust the hardware I > start > > poking around in the chip ... > > > > If writing to the register works, can you singlestep through the > > assembly code (that's an istep in ARM AXD) or at least see the > assembly > > code and the CPU registers? > > > > > Also I am new to LCD's never programmed one before, the format > of the > > > data looks really strange. If anybody knows some good tricks for > > > interfacing an LCD with a serial interface, I would be grateful. > > > > I checked out the controller spec > > (http://mxhaard.free.fr/spca50x/Doc/LCD/1621.PDF ?) and the > interface > > indeed is a bit strange compared to the I2C displays I am used to. > Only > > the command mode uses 12 bits, it you write data to the LCD you > should > > switch to 14 bits mode. > > > > It should however be fairly easy, CS to a GPIO pin, WR to SCK and > the > > data pin of the LCD to MOSI. Configure CPOL=1 and CPHA=1 (see 213x > user > > manual), LSBF=0. This gives SOSPCR = 0x0C6E to send the commands > and > > after initialization switch over to 0xE6E for 14 bits to send the > first > > 4 databits to a given address. Sequential datawrites should then > be done > > in 8 bits mode. > > This is why you should use a GPIO pin for the CS line. Sending > commands > > is now like: > > > > CS = Low, S0SPCR = 0x0C6E, S0SPDR = cmd, wait for SPI transfer > > complete, CS = high. > > > > Data: > > > > CS = Low, S0SPCR = 0xE6E, SOSPDR = addr/data, wait for SPI tr. > > compl, S0SPCR=0x86E, S0SPDR = data/data, wait, (more data), CS = > High > > > > You cannot use SSEL for the CS line, the SSEL line will go > inactive > > between datatransfers. > > > > Think I still prefer an I2C display, SPI only makes sense if you > have a > > larger (graphical) display. > > > > Good luck, > > > > Rob
Message
Re: LPC2131 SPI problem
2005-10-03 by charlesgrenz
Attachments
- No local attachments were found for this message.