Argon (06.09.2007 09:45, просмотров: 4767)
Может, кто подскажет правильную идеологию работы с SSP в LPC21xx? У меня получаются слишком большие накладные временнЫе расходы. Процессор работает на частоте 33.178 МГц.
Инициализировал SSP на 16.589 МГц, без прерываний.
Запись произвожу след. образом:
<c>
void SSP_Write(byte data)
{
while(!SSPSR&BIT1); //ожидать пока TxFIFO полный
while(SSPSR&BIT4); //ожидать пока идет передача
SSPDR = data;
}
</c>
В бесконечном цикле произвожу запись байта в порт. При этом по осциллографу смотрю линию SCK. В результате непосредственно передача: 460 нс, промежуток между передачами 1100 нсек! Т.е. более чем в 2 раза больше самой передачи. Неужели на опрос битов в SSPSR тратится такое время? Вообще также есть затраты на вызов функции и организацию бесконечного цикла.
Есть мысли как-то задействовать TxFIFO, группируя посылки. Тогда "накладные временнЫе расходы" будут размазаны по длине всего FIFO, т.е. на 8 элементов.
Может, еще какой-то вариант есть? Использовать прерывание, видимо, не получится, т.к. по SSP прерывания специфические:
1. RxFIFO хотя бы наполовину полон
2. TxFIFO хотя бы наполовину пуст
а не получится их использовать потому, что бывает необходимо посылать/принимать меньше, чем 4 байта.