Я пытаюсь установить связь SPI с PIC18F452 от Microchip, чтобы отправить 8-байтовый массив на шину (= передача всех байтов одновременно). Вот пример того, что мой массив выглядит следующим образом:Отправка 8-байтового массива в SPI
array 0x0080 byte[8]
array[0] 0x0080 0x01
array[1] 0x0081 0x01
array[2] 0x0082 '\0'
array[3] 0x0083 0x01
array[4] 0x0084 0x01
array[5] 0x0085 0x01
array[6] 0x0086 0x01
array[7] 0x0087 '\0'
значения поступают из входного сигнала (звукового файла, часов и т.д.) и получили на PORTDbits.RD0 выполнить массив. Значения всегда 1 или 0 и ничего больше.
Во-первых, я начал с отправки одного байта в то время с putcSPI(). Когда я выполняю массив, я посылаю один байт в SPI, и результаты соответствуют.
Затем я попытался отправить все байты сразу, используя putsSPI() как следующие:
/// SEND DATA TO SPI
SPI_INT = 0; // Enable SS
putsSPI(array);
SPI_INT = 1; // Disable SS
delay_ms(); // Delay
Но передача кадра прекращается, когда я сталкиваюсь с 0 (рассматривается как конец массив, так что это нормально). И мой кадр делится на куски.
например, для массива отображается выше, у меня есть на шине SPI «1 1», а затем, следующие значения из кадров, которые следуют
Это, как говорится, я думал о преобразовании данных от двоичного до шестнадцатеричного (или целого), а затем отправить его в SPI. Я пробовал несколько методов конверсии, найденных здесь, но до сих пор ни один из них не был успешным.
Есть ли решение отправить непосредственно полный массив на шину, или у кого-нибудь есть идея о том, как выполнить преобразование в данном конкретном случае?
Большое спасибо заранее!
Зачем вам отправлять 8 байтов, которые могут содержать только одно из двух значений? Вы можете тривиально упаковать значения в один байт. – EOF
Проблема решена с использованием совершенно другого метода. Опубликует решение, которое я использовал позже – Daymov
Если 'putsSPI' ожидает строку с нулевым завершением, она, очевидно, будет отправлять только символы до первого нулевого символа. Почему бы вам просто не отправить один байт за раз? Как @EOF уже написал, 8 бит - это один байт, вы уверены, что вам не нужно отправлять только одному байту получателю? – Groo