Отображение SPI PIC PPS

#pic #spi

#рис #spi

Вопрос:

Здравствуйте, мне нужно связаться с двойным ЦАП с помощью SPI. ЦАП: ЦАП

Я использую PIC 18F26K83. Я буду передавать данные только на ЦАП, я ничего не получу. Вот как я установил связь между моим рисунком и ЦАП (см. Прилагаемое изображение). Итак, мой вопрос связан с отображением PPS и конфигурациями контактов: RC7 подключен к DIN-контакту ЦАП, RC6 подключен к

Нужно ли мне также отображать мои контакты в качестве входных данных? Вот как я сделал отображение PPS, но я не совсем уверен:

Я использовал регистр RxyPPS (страница: 267), чтобы установить свои контакты в качестве источников вывода, используя таблицу 17-2 (Страница: 268)

 RC7PPS= 0b00011111 ; //DIN, RC7 = SDIPPS
RC6PPS= 0b00100000; //CS, RC6= SSPPS
RC5PPS= 0b00011110; //SCLK, RC5=SCKPPS
 

Поэтому я считаю, что этого достаточно для установки их в качестве выходных данных. Нужно ли мне также устанавливать их в качестве входных данных?

Я знаю, что это не имеет смысла, но я смущен использованием регистра RxxxPPS.

Ответ №1:

Если вы передаете данные на ЦАП, я бы предположил, что PIC должен быть установлен в качестве основного режима SPI — т. Е. Вывод SS не будет использоваться на PIC, поэтому вам не следует устанавливать PPS для RC6, поскольку это вывод CS для ЦАП, он должен быть установлен как простой вывод GPIO

 LATCbits.LATC6 = 1; // initialise high
TRISCbits.TRISC6 = 0;  // output
 

Вам также следует добавить последовательность блокировки / разблокировки PPS и, возможно, потребуется установить SCLK в качестве входных данных, даже если это односторонняя связь.

 // disable interrupts (if req)
INTCON0bits.GIE = 0;
// PPS unlock sequence
PPSLOCK = 0x55;
PPSLOCK = 0xAA;
PPSLOCKbits.PPSLOCKED = 0; // PPS is not locked

RC7PPS = 0b00011111; // SDO (DAC DIN) RC7
RC5PPS = 0b00011110; //SCLK OUTPUT RC5=SCKPPS
SPI1SCKPPS = 0b00010101; // SCLK INPUT RC5

// PPS lock sequence
PPSLOCK = 0x55;
PPSLOCK = 0xAA;
PPSLOCKbits.PPSLOCKED = 1; // PPS is locked
// enable interrupts (if req)
INTCON0bits.GIE = 1;
 

В сторону — убедитесь, что SPI установлен в режим master и режим «Только передача».

 SPI1CON0bits.MST = 1; // bus master
SPI1CON2bits.RXR = 0; // transmit only
SPI1CON2bits.TXR = 1; // transmit only