Я пытаюсь настроить связь SPI с PIC18F452 от Microchip, чтобы отправить 8-байтовый массив на шину (= передача всех байтов сразу). Вот пример того, как выглядит мой массив:
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. Я пробовал несколько методов преобразования, найденных здесь, но до сих пор ни один из них не увенчался успехом.
Есть ли решение отправить весь массив напрямую в шину или у кого-нибудь есть идеи, как выполнить преобразование в этом конкретном случае?
Спасибо заранее !
putsSPI
ожидает строку с завершающим нулем, очевидно, что он будет отправлять только символы до первого нулевого символа. Почему бы вам просто не отправлять по одному байту за раз? Как уже писал @EOF, 8 бит - это один байт, вы уверены, что вам не нужно отправлять получателю только один байт? - person Groo   schedule 03.08.2016putsSPI
останавливается на\0
, аWriteSPI
просто отправляет байт вперед, все остальные объявления и манипуляции с битами не имеют значения. - person Groo   schedule 03.08.2016