|
|
View previous topic :: View next topic |
Author |
Message |
Shishido
Joined: 09 Mar 2014 Posts: 10
|
SPI pin assign |
Posted: Fri Apr 24, 2015 3:04 am |
|
|
Currently, I am using PIC18F27J53 for SPI memory module according with data sheet
http://ww1.microchip.com/downloads/en/DeviceDoc/39964B.pdf
Code: |
#define EEPROM_SELECT PIN_A2 // CS
#define EEPROM_CLK PIN_B4 // SCL
#define EEPROM_DI PIN_B5 // SDI
#define EEPROM_DO PIN_C7 //SDO
#define EEPROM_ADDRESS unsigned int32
|
So, I want to upgrade CPU PIC24FJ64GB002 or PIC32MX..
However, I can't find out specified PIN of SPI from the datasheet.
http://ww1.microchip.com/downloads/en/DeviceDoc/39940d.pdf
Then, how should assign CLK, SDI, SDO? Otherwise, can I assign SPI pin used by such as
Code: | #use spi(DO = PIN_B0, DI = PIN_B1, CLK = PIN_B2) |
as my choices ? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19568
|
|
Posted: Fri Apr 24, 2015 4:31 am |
|
|
You don't.....
You need to learn about PPS.
On these later PIC's the peripherals are not 'hardware mapped' to specific pins. Instead there are PPS registers, which specify where each peripheral is mapped.
The sequence is:
Code: |
#PIN_SELECT SDI1=PIN_xx //where xx, is one of the RP pins
#PIN_SELECT SDO1=PIN_yy //again an RP pin
#PIN_SELECT SCK1OUT=PIN_zz //again chose a suitable RP pin
#use spi(SPI1, baud=nnnn, mode=v, STREAM=SPI_STREAM)
//suitable baud rate, and mode numbers for your device
|
Critically, you _must not specify the pin numbers in the SPI setup_. Just the physical SPI peripheral to use. The select statements setup the PPS registers to connect the pins to the peripheral.
Then use spi_xfer (rather than spi_read and spi_write), with the stream name to perform the transfers. |
|
|
Shishido
Joined: 09 Mar 2014 Posts: 10
|
Thank you very much |
Posted: Sun Apr 26, 2015 7:21 am |
|
|
Thank you very much, I will try it.
BTW, have you experienced Dual SPI or Quad SPI mode used by PIC?
– Dual SPI: CLK, /CS, IO0, IO1
– Quad SPI: CLK, /CS, IO0, IO1, IO2, IO3
Ttelmah wrote: | You don't.....
You need to learn about PPS.
On these later PIC's the peripherals are not 'hardware mapped' to specific pins. Instead there are PPS registers, which specify where each peripheral is mapped.
The sequence is:
Code: |
#PIN_SELECT SDI1=PIN_xx //where xx, is one of the RP pins
#PIN_SELECT SDO1=PIN_yy //again an RP pin
#PIN_SELECT SCK1OUT=PIN_zz //again chose a suitable RP pin
#use spi(SPI1, baud=nnnn, mode=v, STREAM=SPI_STREAM)
//suitable baud rate, and mode numbers for your device
|
Critically, you _must not specify the pin numbers in the SPI setup_. Just the physical SPI peripheral to use. The select statements setup the PPS registers to connect the pins to the peripheral.
Then use spi_xfer (rather than spi_read and spi_write), with the stream name to perform the transfers. |
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19568
|
|
Posted: Sun Apr 26, 2015 10:27 am |
|
|
Problem is that the CCS supported PIC's don't have hardware for this (unless there is a new one with this?). Hence you end up having to use software SPI.
Given that faster PIC's allow the SPI to be clocked off Fosc/2, a 60MIPS chip, can transfer 7.5MB/sec. Using the quad mode, uses extra pins, and gains nothing. Using the hardware, you can use DMA, with software you lose this.
Some of the 32bit PIC's do have hardware for this, but you are then not talking CCS.
PIC32MZ1024ECM124 for example. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|