toweroff 1 10 декабря, 2012 Опубликовано 10 декабря, 2012 · Жалоба Столкнулся с таким непонятным для меня моментом Использую system_LPC17xx.c. Задал множители (мне нужно 100МГц при 12МГц кварце. Получаю M=25, N=2, PLLclk=300 (в диапазоне), CCLKSEL=2) Отсюда: CCLK = ((2*12*25)/2)/3 = 100МГц По даташиту CCLKSEL может принимать нечетные значения. Однако system_LPC17xx.c ругается: Startup\system_LPC17xx.c(352): error: #35: #error directive: "CCLKCFG: CCLKSEL field does not contain only odd values or 0!" проверка там такая: #if ((CCLKCFG_Val != 0) && (((CCLKCFG_Val - 1) % 2))) #error "CCLKCFG: CCLKSEL field does not contain only odd values or 0!" #endif Версии: UM10360 Rev. 2 — 19 August 2010 system_LPC17xx.c - V1.1 18th May 2009 Я понимаю, конечно, что верить нужно даташиту, но неспроста же эта проверка была введена? UPD Я могу изменить множители (M=50, N=3), попасть в диапазон PLL (<550MHz) и получить свой стольник, деля на 4. Интересна природа момента Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 10 декабря, 2012 Опубликовано 10 декабря, 2012 · Жалоба Предлагаю пользоваться более свежей версией библиотек. Заголовок lpc17xx.h 1.1 (или что-то похожее) содержал вообще немеряное количество опечаток. В более новых system_lpc17xx.c эту проверку убрали. Да, ноги растут отсюда: 7:0 CCLKSEL Selects the divide value for creating the CPU clock (CCLK) from the PLL output. Only 0 and odd values (1, 3, 5, ..., 255) are supported and can be used when programming the CCLKSEL bits. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 10 декабря, 2012 Опубликовано 10 декабря, 2012 · Жалоба Да, так и есть В версии 1.13 от 18. April 2012 уже совсем другая песня: #if (CHECK_RANGE((CCLKCFG_Val), 0, 255)) #error "CCLKCFG: Value out of range!" #endif Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться