ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
16 июня
59336
Vit2005 (24.05.2006 11:52, просмотров: 4131)
LPC2138 и реализация 1-wire MicroLan Вчера сделал простые функции для реализации 1-wire pin интерфейса для подключения DS18B20 температурного датчика к LPC2138. Все функции задержки реализованы программно. Компилер GNUARM C. Все прерывания запрещены. void SoftDelay(unsigned long nDelay) { for (;nDelay;nDelay--); } void delayUs (unsigned long us) { unsigned long ndx; for ( ndx = 0; ndx < us; ndx++) SoftDelay(6); } Все работает. Но я заметил некоторые странности. Например, при выполении следующего псевдокода (см.ниже) все работает нормально. Код генерирует нормальный 480uS импульс. printf "message" послать сообщение через послед. порт CLEAR 1-wire pin delayUs(480) SET 1-wire pin Удаляю printf и имею следующий псевдокод CLEAR 1-wire pin delayUs(480) SET 1-wire pin Код не генерирует 480uS импульс. Подучается что-то около !!!280uS!!! Как это можно объяснить? Как работа последовательного порта может влиять на задержки и "дрыгания ногами" ? Я слышал о проблемах IO контроллера на АРМах, но такого встретить не ожидал. Есть ли у кого-то более-менее приемлемые объяснения этой проблемы? Сейчас попытаюсь реализовать все задержки с использованиям прерываний таймера.