konoval1 0 5 февраля, 2005 Опубликовано 5 февраля, 2005 · Жалоба Передается большой массив информации через SPI. SPI работает по прерыванию. Если в передаваемом байте есть хотя бы одна 1 все работает нормально. Если все 0, то заходит в прерывание раньше чем кончилась передача предыдущего байта, без установленного бита SPIF, приходится ждать пока он установится. Время передачи массива 0 получается на 15-20% короче. Кто-нибудь сталкивался? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_man_show 0 5 февраля, 2005 Опубликовано 5 февраля, 2005 · Жалоба В чудеса что-то не верится, поэтому посмотрите согласование параметров SPI мастера и ведомого, а именно настройки SPI Control Register (SPCR): полярность клока, по какому фронту цеплять и т.п. Была похожая беда с приемеом потока символов, глотались огромные куски, согласовали настройки мастера и ведомого, все встало на свои места. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
konoval1 0 5 февраля, 2005 Опубликовано 5 февраля, 2005 · Жалоба В чудеса что-то не верится, поэтому посмотрите согласование параметров SPI мастера и ведомого, а именно настройки SPI Control Register (SPCR): полярность клока, по какому фронту цеплять и т.п. Была похожая беда с приемеом потока символов, глотались огромные куски, согласовали настройки мастера и ведомого, все встало на свои места. <{POST_SNAPBACK}> О приеме речь не идет (он нормальный) смотрю только длительность передачи от содержимого буфера у мастера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_man_show 0 5 февраля, 2005 Опубликовано 5 февраля, 2005 · Жалоба Фрагмент кода прицепите, пожалуйста. Только, если он большой, лучше в виде вложения файла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
konoval1 0 5 февраля, 2005 Опубликовано 5 февраля, 2005 · Жалоба Фрагмент кода прицепите, пожалуйста. Только, если он большой, лучше в виде вложения файла. <{POST_SNAPBACK}> S1SPCR=0xB0; void SPI1Interrupt() { while ( ~S1SPSR & 0x80 ) ; S1SPDR = Peredacha[Adres_PRD++]; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_man_show 0 5 февраля, 2005 Опубликовано 5 февраля, 2005 · Жалоба Здесь действительно криминала нет. Может весь код целиком нужно оценить? Может кто и заметит проблемку или опечатку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
konoval1 0 6 февраля, 2005 Опубликовано 6 февраля, 2005 · Жалоба Здесь действительно криминала нет. Может весь код целиком нужно оценить? Может кто и заметит проблемку или опечатку. <{POST_SNAPBACK}> Я посмотрел повнимательнее. Эта зараза при передаче 0 заходит в прерывание сразу, не ждет совсем. Проверил на 2 железках 2124 и 2129 на обоих портах, от скорости и PLL не зависит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
konoval1 0 11 февраля, 2005 Опубликовано 11 февраля, 2005 · Жалоба Написал телегу на Филипс. Проблема решена. Оказалось что у меня процессор ревизии А, у которого ошибка в SPI. Надо для очиски флага прерывания записывать в SPINT 1, а у меня он очищался сам из-за ошибки в процессоре при записи информации. Правильный код. void SPI1Interrupt() { int tt; S1SPINT = 0x1 ; tt=S1SPSR ; // SPI1 redy? S1SPDR = Peredacha[Adres_PRD++]; // } 2114.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 11 февраля, 2005 Опубликовано 11 февраля, 2005 · Жалоба Хотел сказать раньше, но и сейчас, я думаю, не поздно будет. Ещё со времён работы с ранними (надо сказать весьма "эрратными") AVRами у меня выработалась стойкая привычка сразу закачивать все эрраты, да и в процессе работы время от времени туда (на сайт за свежими эрратами) заглядывать. Вот и сейчасвижу, что подобная привычка только на пользу. ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться