lpc1788 ssp (SPI) - связь между процессами

Я хотел бы отправить строку символов из одного процесса (главного) в другой (ведомый), а затем прочитать строку из ведомого.

В настоящее время я смешиваю arduino и LPC1788, используя lpc в качестве ведущего и arduino в качестве ведомого. LPC правильно отправил строку, которая была получена Arduino в ISR. В функции цикла я проверяю, получены ли все символы, а затем пытаюсь отправить строку обратно. На стороне LPC ISR почему-то не работает. Я установил SR как

SR = (1<<TNF) | (1<<RNE);

Поэтому я поставил задержку после отправки строки из LPC, а затем инициировал чтение из arduino.

Что я вижу в Лос-Анджелесе для отправки строки:

введите здесь описание изображения

но чтение строки из Arduino выглядит странно (строка должна быть «Pong\n», это не всегда P, который я получил... это варьируется) введите здесь описание изображения

я предполагаю, что большая часть проблемы заключается в синхронизации отправки и чтения буфера SPI. Как мне добиться этого без функционального ISR на LPC?


person Gossamer    schedule 24.08.2013    source источник


Ответы (1)


В спецификации SPI указано, что линия CS (SSEL) должна быть активной во время кадра и становиться неактивной между ними. NXP интерпретировала это как слово, являющееся одним кадром. Это означает, что CS, сгенерированный блоком SSP (то же самое относится и к устаревшему SPI), активен только во время одной транзакции длиной до 16 бит.

Также обратите внимание, что между отправляемыми словами/кадрами всегда есть промежутки. Таким образом, даже когда вы заполняете FIFO или используете DMA, вы увидите 16 тактовых импульсов, короткую задержку, а затем еще 16 импульсов.

Обратите внимание, что при использовании контакта GPIO в качестве SSEL необходимо дождаться подтверждения или отмены подтверждения SSEL до тех пор, пока периферийное устройство не будет бездействовать.

person madD7    schedule 16.10.2013