#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