Потихоньку разбираюсь с AT91SAM7X256 на Olimex'совской плате используя RowleyCrossWorks. При реализации поставленой передо мной задачей возникли два вопроса. Может кто-то сможет что и посоветовать, за что буду очень благодарен.
1. Собственно вопрос - может ли ядро процесора работать на частотах 96 или 192 МГц при условии использования USB? По даташиту вроде бы можна. То-есть PLL ставиться на частоту 96 или 192, с него через прескалер с коэфициентом 1 эта же частота идёт на процесор и на MCK, а USB через собственный делитель (на 2 или 4 соответсвенно) делит частоту PLL к 48. И должно работать, так как по даташиту блок USB нуждается в двух частотах 48 для работы 12-ти мегагерцовой части и MCK (любой частоты) для работы остальной части. Но это в теории. На практике я этого добиться не смог. А именно: Мучаю пример LwIP для кросворкса из пакета FreeRTOS. В примере реализован виртуальный ком порт через юсб. В начальных установках проца выбраны для PLL коэфициенты 5 для делителя и 25 для умножителя, что приводит к частоте 96 МГц (плюс-минус заданный процент точности), в прескалере установлен делитель 2, в юсб - тоже 2. В результате частота ядра равна 48. Винда видит виртуальный порт и нормально с ним работает. Но когда я ставлю делитель прескалера в 1, то-есть частоту ядра и MCK повышаю до 96 (оставляя при этом частоту USB 48), винда перестаёт видеть виртуальный порт. Выходит что при использовании USB частота ядра должна быть равна частоте USB - 48, или может я какую-то ещё настройку пропустил?
2. Второй вопрос касается работы с прерываниями: В моей задаче запускается таймер, по прерыванию от которого в SPI сбрасывается несколько байт. Мне важно, чтобы прерывания от таймера не прерывались другими прерываниями, в том числе и прерываниями FreeRTOS. Какие могут быть последствия, если я прерыванию тиков FreeRTOS дам приоритет ниже, нежели моему прерыванию?
|