sherr 0 13 августа, 2009 Опубликовано 13 августа, 2009 (изменено) · Жалоба Вот сделал набор дефайнов для битового доступа к портам lpc 2478 (годится и для других старших lpc 23-24xx, только FIO). Всё крайне тупо и примитивно, но может кому и пригодится, в дальнейшем может быть дополню другими вариантами доступа к портам и примитивной нас- тройкой кое - какой периферии . p.s. ругайте ! 24xx_def.zip Изменено 13 августа, 2009 пользователем sherr Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 13 августа, 2009 Опубликовано 13 августа, 2009 · Жалоба ругаться тут можно на а) FIOxSET, FIOxCLR перед записью читать не нужно!! б) нестандартные имена в) некрасивый, на мой взгляд, вызов макроса предпочёл бы P0.0_IN(); вместо P0.0_IN; г) супер-мега-монстр типа дефайн-внутри-дефайна у меня не удался :) но такой объем copy-paste... некрасиво... я делал вот такую штуку // регистры Fast GPIO для LPC23xx #define PORT0 0x3FFFC000 #define PORT1 0x3FFFC020 #define PORT2 0x3FFFC040 #define PORT3 0x3FFFC060 #define PORT4 0x3FFFC080 #define FIODIR(port) (*(volatile unsigned long *)(port + 0x00)) #define FIOMASK(port) (*(volatile unsigned long *)(port + 0x10)) #define FIOPIN(port) (*(volatile unsigned long *)(port + 0x14)) #define FIOSET(port) (*(volatile unsigned long *)(port + 0x18)) #define FIOCLR(port) (*(volatile unsigned long *)(port + 0x1C)) а потом определял кучу однотипных функций (надо было обращаться "поштучно" к 40 пинам, хаотично разбросанным по всем портам) #define DefPin(PinName,Port,BitNo) \ void Set##PinName (int val) \ { \ FIODIR(Port) |= BIT(BitNo); \ if (val) FIOSET(Port) = BIT(BitNo); \ else FIOCLR(Port) = BIT(BitNo); \ } \ int Get##PinName (void) \ { \ FIODIR(Port) &= ~BIT(BitNo); \ return (FIOPIN(Port) & BIT(BitNo)); \ } DefPin (RST2, PORT1, 29); можно расширить, скажем, так: #define PORT_IN(port,pin) FIODIR(port) &= ~(1UL<<(pin)) #define PORT_SET(port,pin) FIOSET(port) = (1UL<<(pin)) впрочем, эти макросы тоже заслуживают эпитетов "нестандартно" и "некрасиво" ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sherr 0 13 августа, 2009 Опубликовано 13 августа, 2009 · Жалоба Спасибо! По первому примеру вашего кода - ясно, сам собираюсь добавить нечто аналогичное, да ещё в 2-3 разных вариантах, с разной степенью параметризации. За второй пример спасибо отдельное -- такие же про- блемы, только пинов пока поменьше -- для клавы 5*6 + тачскрин + по мелочам кое - что. Буду рихтовать. p.s. библиотечку бы низкоуровневую под АТ45DB321D буфер записать-прочитать -- скинуть в сектор -- забрать из сектора итд, без ФС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sherr 0 14 августа, 2009 Опубликовано 14 августа, 2009 · Жалоба Тот код что во вложении - не работает из-за точек в дефайнах. Вот рабочий. 24xx_def.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 14 августа, 2009 Опубликовано 14 августа, 2009 · Жалоба Хех, слона с точками я не приметил :) Точнее, поленился разбираться. А что за трудности с датафлешем? Если писать блоками, не вылезающими за пределы одной страницы - 264 (или сколько там, 528?) байт, то никаких проблем я не вижу. Если писать сколько хочешь куда хочешь, получится чуть сложнее. Читать - без разницы. Сам делал модуль для AT45DB011, но он получился сильно заточненым под мои данные. Какие-то конкретные вопросы можно и обсудить :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться