We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello, I've configured SPI bus on P0.2 (SCLK), P0.3(MISO), P0.4 (MOSI) and P0.5 (NSS) but on these ports: no signal. Normaly, I should have SPI clock at least but I have nothing.
I've configured :
1) Pins:
sbit SPI_SCLK=P0^2; // SPI clock on P0.2 sbit SPI_MISO=P0^3; // Master In/Slave Out on P0.3 sbit SPI_MOSI=P0^4; // Master Out/Slave In on P0.4 sbit SPI_NSS=P0^5; // Slave Select on P0.5
2) Ports:
void port_init (void) { char sfrpage_save = SFRPAGE; // Save current page of SFR SFRPAGE = CONFIG_PAGE; // Load config_page WDTCN = 0xde; WDTCN = 0xad; // Disable watchdog timer XBR0 = 0x02; // Enable SPI bus XBR1 = 0x00; // Enable /INT0 and /INT1 XBR2 = 0x40; // Enable Crossbar and weak pull-up P0MDOUT |= 0x3C; // P0.5, P0.4, P0.3 and P0.2 are outputs (for SPI datas) P0 = 0x3C; SFRPAGE = sfrpage_save; // Restore SFR page }
3) SPI bus:
void config_SPI (void) { char sfrpage_save = SFRPAGE; // Save current SFR page SFRPAGE = SPI0_PAGE; // Load SPI page SPI0CFG |= 0x40; // Master Mode Enable SPI0CN |= 0x8D; // Slave select and enable SPI SPI0CKR = 0x01; // SYSCLK/2 SFRPAGE = sfrpage_save; // Restore SFR page }
I have tried many times to resolve the problem but without satisfaction for the moment.
If you can help me, make it please. Thanks.
Manu
use the CodeArchitect for LPC9xx free from http://www.esacademy.com, it takes 15 minutes or less to convert the code to a SILabs derivative. You get working code that you then can modify for your particular style and purpose. For those poor sode that work with the SILabs deviates (f3x -up) you are on your own.
Erik
Thanks Erik but the link doesn't function. Could you give me this link again please?
http://www.esacademy.com/ I do not see any difference, but this one (I googled) works
The previous one had "caught" the comma in your prose, and made it part of the URL.
This forum tends to do that - so never put punctuation at the end of a URL!
I have downloaded CodeArchitect. I must configure a micro controller and the code is furnished, after I modify the code for my application. Is it exact?
what I did 1) select lpc935 2) enter whatever parametres CodeArchitect requires 3) save the code 4) totally redo the clock section (that is different) 5) globally rename SFRs as required 6) add the necessary SFRPAGE = 7) verify it ran (it did)
I tried with "Code Architecht" but my problem persists again. The SPI clock exit is strange but I looked many times the registers configuration.. I looked with an oscilloscope the SPI clock (when I send datas) and this one does not correspond to the reality.
Just to make sure, we're talking the C8051F120 here:
SPI0CN |= 0x8D;
Looks just plain wrong. 8D would be 1000 1101 So you're setting the SPI0 interrupt flag high? You should let the hardware set that.
XBR1 = 0x00; // Enable /INT0 and /INT1
Nothing is enabled from this set. You want XBR1 to be 0x14 for /INT0 and /INT1 to be enabled and available at external port pins.
So you're current set just has the SPI0 peripheral enabled (and NOT /INT0 or /INT1)
Ahhhh, but here's your port mappings:
SCK -> P0.0 MISO -> P0.1 MOSI -> P0.2 NSS -> P0.3
If you consider the Port pins in order, P0.0 to P3.7, the crossbar takes them in a priority order, and assigns the pins P0.0 to P3.7. Hard for me to actually list the order here, but UART0 comes in at the highest priority, and SPI0 at 2. Without UART0 in there, SPI0 will get assigned to P0.0 through P0.3. See figure 18.2 in the datasheet (as of Rev 1.3 of the datasheet) for priority order.
If you really want SPI0 on P0.2, you'll have to enable UART0 on the crossbar (which means you will loose P0.0 and P0.1 for general purpose I/O)
UART0 and SPI0 on the crossbar is
XBR0 = 0x06;
This you may already know, but SCK will be low when the SPI0 peripheral is idle. So you won't "see" it high with an oscilloscope if you aren't actively using the bus.
Thanks!
For the interrupts, it's due to the fact that I put off this to test my program only with SPI bus. For the rest, thank you very much. I'll test my program with your explanations and I keep you informed.
Ormond,
I tried it but I have again the same problem : I have nothing on the pins of the c8051f120. For me, all is configured.. Ormon, erik or someone can help me? Please!
I have nothing on the pins of the c8051f120 the f12x/f13x datasheet chapter 18 and the comments in the code generated by config2.
Yeah I've already configured the ports, activate the digital crossbar, initialized SPI bus and Clock. I don't find the solution... I don't use the SPI interrupt, is it important? For what is used it? Manu
I put off this to test my program only with SPI bus excellent, however for the SILabs f12x do not change the crossbar when you 'reduce' the code for test
I don't use the SPI interrupt, is it important? For what is used it? Do you need to?, no, is it important? yes. If you do not use the interrupt your program will either be totally tied up during SPI action or you may lose SPI info.
The worst affliction any uC programmer can have is interruptifobia.
I've tested the port 0 pins, I've made a program : TEST = P0.2; and in this program I made : while(1){TEST = ~TEST}; Does that mean that this port 0 is not damaged?
Even worse than largememorymodeleuforia?