Перейти к содержанию
    

дефайны для побитного доступа к портам lpc23xx/24xx

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

примитивно, но может кому и пригодится, в дальнейшем может быть дополню другими вариантами доступа к портам и примитивной нас-

тройкой кое - какой периферии .

p.s. ругайте !

24xx_def.zip

Изменено пользователем sherr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ругаться тут можно на

а) 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))

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо! По первому примеру вашего кода - ясно, сам собираюсь добавить нечто аналогичное, да ещё в 2-3

разных вариантах, с разной степенью параметризации. За второй пример спасибо отдельное -- такие же про-

блемы, только пинов пока поменьше -- для клавы 5*6 + тачскрин + по мелочам кое - что. Буду рихтовать.

 

 

p.s. библиотечку бы низкоуровневую под АТ45DB321D буфер записать-прочитать -- скинуть в сектор --

забрать из сектора итд, без ФС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тот код что во вложении - не работает из-за точек в дефайнах. Вот рабочий.

24xx_def.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

А что за трудности с датафлешем?

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

Если писать сколько хочешь куда хочешь, получится чуть сложнее. Читать - без разницы.

 

Сам делал модуль для AT45DB011, но он получился сильно заточненым под мои данные.

Какие-то конкретные вопросы можно и обсудить :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...