Цитата(esaulenka @ Oct 22 2015, 09:22)

Если мне придётся снова работать с LPC'хами, буду делать библиотеку по образу и подобию.
Когда-то у меня был набор макросов (в принципе, то же самое - задавался порт, пин, режим пина), но эти хитрые шаблоны удобнее.
Года 3 назад делал библиотеку шаблонов для LPC 2119/2368/2468. Кому-то такие объявления могут показаться избыточными, но мне самому пользоваться очень нравилось.
Код
CPU::WATCHDOGTIMER<> wdt( CPU::PLL::PeriodToTicks(10), CPU::WATCHDOGTIMER<>::DEBUG );
CPU::TIMER<0> ustimer( CPU::PLL::FreqToTicks(1000000) );
CPU::CALLBACKTIMER<1, MEASURETIMERCB, IRQP_MEASURETIMER> measuretimer( CPU::PLL::FreqToTicks(FADC) );
CPU::GPIO0::PINGROUP<0,2> _uartusb_rx_tx(1);
USBQUEYECLASS usbq(115200);
CPU::GPIO0::PINGROUP<8,2> _uartrs485_rx_tx(1);
CPU::GPIO0::PIN<10> uartrs485_txen(0, CPU::GPIO0::OUTPUT);
RS485QUEYECLASS rs485q(19200, 8, RS485QUEYECLASS::EVEN, 1);
CPU::GPIO1::PIN<23> disp_d7_busy(0, CPU::GPIO1::OUTPUT);
CPU::GPIO0::PIN<13> disp_rs(0, CPU::GPIO0::OUTPUT);
CPU::GPIO0::PIN<BUTTON1PIN, CPU::GPIO0::PININVERTED> button1_pressed(0, CPU::GPIO0::INPUT);
CPU::GPIO0::PIN<17> spi_sck(2);
CPU::GPIO0::PIN<18> spi_miso(2);
CPU::GPIO0::PIN<19> spi_mosi(2);
CPU::SPI<1> spi(2000000, CPU::SPI<1>::MASTER, CPU::SPI<1>::MSB, 16);
AD7656< CPU::SPI<1>, spi, CPU::GPIO0::PIN<5>, adc_st, CPU::GPIO0::PIN<20>, adc_cs1, CPU::GPIO0::PIN<3>, adc_busy1> adc_gen_out;
AD7656< CPU::SPI<1>, spi, CPU::GPIO0::PIN<5>, adc_st, CPU::GPIO0::PIN<4>, adc_cs2, CPU::GPIO0::PIN<7>, adc_busy2> adc_gen_excitation;
Естественно, пины можно и в рантайме перенастроить.
Сейчас выкладывать библиотеку стыдновато, я уже тогда хотел всё переделать =)
Для тех камней, на которых сейчас сижу, такого не делал - у иаровского оптимизатора глюки наблюдались, а без оптимизации результат очень печальный. Но может и сделаю когда-нибудь.