Сейчас всё заработало (когда убрал ненужный spi).
Дело в том, что у меня древний осциллограф и посмотрев на нём генерируемый меандр сделал вывод что частота импульсов 250 000 Гц. А нужно 100 000.
Если я правильно понял то за частоту отвечает эта часть кода:
...
at91_tc_write(AT91_TC_CMR,
AT91_TC_WAVE | AT91_TC_WAVESEL_UP_AUTO
| AT91_TC_ACPA_SET | AT91_TC_ACPC_CLEAR
| AT91_TC_TIMER_CLOCK2); // делитель для MCK/8
at91_tc_write(AT91_TC_RC, 125); // частота на выходе 100 000 000 / 8 / 125 = 100 000
at91_tc_write(AT91_TC_RA, 62); // половина AT91_TC_RC если им пульс/пауза 50/50
верить вообще никому нельзя..
а что, если поверить осцилл банально подключив к звуковой карте и софтине-звукогенератору..
или состряпать примитивный генератор на кварце и 2-3 делителях.. кварц на 6-8МГц..
Завёлся таймер и вроде бы всё хорошо.... но я не посмотрел, что появилась другая проблема. Оказывается теперь ядро не грузится полностью(((
вижу в консоли:
...
at91_mci at91_mci: Timeout waiting end of packet
всё(
оказывается время от времени "слетает" файловая система. Тип файловой ext3. как быть если случается так что часто устройство выключается некорректно, а нужно иметь целую файловую систему?
1. во время отладки ядра для nuc950 мне показалось удобным использовать рутовую на NFS прямо в виртуалке.. при малейших зависаниях из-за рутовой, она просто быстренько сносилась и копировалось резервное "дерево"
2. попробовать монтирование рутовой в ReadOnly и вынос RW каталога /var в оперативку
это для отладки..
пропишите принудильно запуск e2fsck с автолечением при загрузке платы..
дак а рутовая тут каким боком?
имхо, это проблема физики интерфейса.. для проверки можно:
- временно отключить "те" таймера и все что с ними связано
- накатать заведомо исправную рутовую и подсунуть киту
- сделать аварийное восстановление: ядро+рутовая от Павла и подмотировав, проверить работу карточки
Вывод: генерация меандра через таймер не даёт рутовой нормально подняться. ((
ЧТД собственно..
осталось разобраться с механизмом возникновения таймаутов и попробовать их пофиксить..
я бы для старта поискал место в драйвере, где происходит вылет и прикинул времянки. вполне может быть, что надо чуть подкрутить настройки..
Вывод: генерация меандра через таймер не даёт рутовой нормально подняться. ((
ЧТД собственно..
осталось разобраться с механизмом возникновения таймаутов и попробовать их пофиксить..
я бы для старта поискал место в драйвере, где происходит вылет и прикинул времянки. вполне может быть, что надо чуть подкрутить настройки..
то я бы просто посмотрел, что и как там организовано с т.з. ожидания готовности..
отсюда можно принять решение - пилить драйвер или смотреть, что неправильно при организации ваших таймерных девайсов..