реклама на сайте
подробности

 
 
> дефайны для побитного доступа к портам lpc23xx/24xx
sherr
сообщение Aug 13 2009, 05:54
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 10-06-06
Из: Ставрополь
Пользователь №: 17 955



Вот сделал набор дефайнов для битового доступа к портам lpc 2478 (годится и для других старших lpc 23-24xx, только FIO). Всё крайне тупо и
примитивно, но может кому и пригодится, в дальнейшем может быть дополню другими вариантами доступа к портам и примитивной нас-
тройкой кое - какой периферии .
p.s. ругайте !

Сообщение отредактировал sherr - Aug 13 2009, 05:58
Прикрепленные файлы
Прикрепленный файл  24xx_def.zip ( 4.89 килобайт ) Кол-во скачиваний: 60
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
esaulenka
сообщение Aug 13 2009, 17:12
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



ругаться тут можно на
а) FIOxSET, FIOxCLR перед записью читать не нужно!!
б) нестандартные имена
в) некрасивый, на мой взгляд, вызов макроса
предпочёл бы P0.0_IN(); вместо P0.0_IN;
г) супер-мега-монстр типа дефайн-внутри-дефайна у меня не удался smile.gif
но такой объем 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))

впрочем, эти макросы тоже заслуживают эпитетов "нестандартно" и "некрасиво" wink.gif


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
sherr
сообщение Aug 13 2009, 17:42
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 10-06-06
Из: Ставрополь
Пользователь №: 17 955



Спасибо! По первому примеру вашего кода - ясно, сам собираюсь добавить нечто аналогичное, да ещё в 2-3
разных вариантах, с разной степенью параметризации. За второй пример спасибо отдельное -- такие же про-
блемы, только пинов пока поменьше -- для клавы 5*6 + тачскрин + по мелочам кое - что. Буду рихтовать.


p.s. библиотечку бы низкоуровневую под АТ45DB321D буфер записать-прочитать -- скинуть в сектор --
забрать из сектора итд, без ФС.
Go to the top of the page
 
+Quote Post
sherr
сообщение Aug 14 2009, 02:43
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 257
Регистрация: 10-06-06
Из: Ставрополь
Пользователь №: 17 955



Тот код что во вложении - не работает из-за точек в дефайнах. Вот рабочий.
Прикрепленные файлы
Прикрепленный файл  24xx_def.zip ( 5.69 килобайт ) Кол-во скачиваний: 106
 
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Aug 14 2009, 07:26
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Хех, слона с точками я не приметил smile.gif Точнее, поленился разбираться.


А что за трудности с датафлешем?
Если писать блоками, не вылезающими за пределы одной страницы - 264 (или сколько там, 528?) байт, то никаких проблем я не вижу.
Если писать сколько хочешь куда хочешь, получится чуть сложнее. Читать - без разницы.

Сам делал модуль для AT45DB011, но он получился сильно заточненым под мои данные.
Какие-то конкретные вопросы можно и обсудить smile.gif


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016